Имя: Пароль:
1C
1С v8
1С 8.3 удаление движений документа
0 Nesh
 
27.06.13
17:47
Например есть документ Расход денег. В документе свойство "Удаление движений" установлено в "Автоматически".

Должен ли такой код удалить движения?

РасходДенегОбъект.ОбменДанными.Загрузка = Истина;
РасходДенегОбъект.Проведен = Ложь;
РасходДенегОбъект.Записать();
1 Bober
 
27.06.13
17:48
(0) нет, не должен
2 Nesh
 
27.06.13
17:49
странно, почему же в типовой тогда ожидают, что он удалит
3 Maxus43
 
27.06.13
17:49
ОбменДанными.Загрузка убери
и Записать(режимЗаписиДокумента.ОтменаПроведения)
4 Bober
 
27.06.13
17:49
(2) в какой типовой?
5 Maxus43
 
27.06.13
17:50
(2) в УПП не ожидают. везде "НЕ Удалять автоматически"
6 Nesh
 
27.06.13
17:52
(3) я это все понимаю, не пойму почему в типовой так сделали, может есть нюансы, о которых я не знал.

типова УНФ Мобильное приложение.

вот кусок кода:

       Если Не Объект.Проведен Тогда
               Объект.Записать();
           Иначе
               // отменяем проведение документа
               Объект.Проведен = Ложь;
               Объект.Записать();
           КонецЕсли;
7 Nesh
 
27.06.13
17:53
(5) так не только есть УПП типовая )
8 hhhh
 
27.06.13
17:59
(6) вроде нигде не написано в комментариях, что он удалит движения. С чего вы взяли?
9 EugeniaK
 
27.06.13
17:59
(6) И где там загрузка = истина?
10 Nesh
 
27.06.13
18:00
вот вся простыня:

// Процедура записывает документ в информацилнную базу.
//
Процедура ЗаписатьДокумент(УзелОбмена, Объект, ОбъектXDTO, НужноЗаписыватьОбъект, НомерИзменен, КоличествоЗаписанных, ДокументыДляОтложенногоПроведения)
   
   Если НужноЗаписыватьОбъект ИЛИ НомерИзменен Тогда
       
       Объект.ПометкаУдаления = ОбъектXDTO.DeletionMark;
       
       РежимЗаписи = РежимЗаписиДокумента.Проведение;
       Если Не ОбъектXDTO.Posted Тогда
           РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения;
       КонецЕсли;
       
       Если Объект.ПометкаУдаления
           И (РежимЗаписи = РежимЗаписиДокумента.Проведение) Тогда
           
           Объект.ПометкаУдаления = Ложь;
           
       КонецЕсли;
       
       Если НЕ ЗначениеЗаполнено(Объект.Номер) Тогда
           
           Объект.УстановитьНовыйНомер();
           
       КонецЕсли;
       
       Объект.ОбменДанными.Загрузка = Истина;
       
       Если НужноЗаписыватьОбъект Тогда
           Объект.ИзЦентральнойБазы = Истина;
       КонецЕсли;
       
       Объект.ДополнительныеСвойства.Вставить("УзелОбмена", УзелОбмена);
       
       Попытка
           
           Объект.Записать();
                       
       Исключение
           
           ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
           
       КонецПопытки;
       
       Если РежимЗаписи = РежимЗаписиДокумента.Проведение ИЛИ
           РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда
           
           Если ДокументыДляОтложенногоПроведения.Найти(Объект.Ссылка, "ДокументСсылка") = Неопределено Тогда
               СтрокаТаблицы = ДокументыДляОтложенногоПроведения.Добавить();
               СтрокаТаблицы.ДокументСсылка = Объект.Ссылка;
               СтрокаТаблицы.РежимЗаписи = РежимЗаписи;
           КонецЕсли;
           
       КонецЕсли;
       
       КоличествоЗаписанных = КоличествоЗаписанных + 1;
   КонецЕсли;
   
   ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, Объект);
   
КонецПроцедуры // ЗаписатьДокумент()
11 Nesh
 
27.06.13
18:04
(8) в данном случае смысла отменять проведение документа без отмены его движений нету. Так что я уверен, что рассчитывали на отмену движений.
12 hhhh
 
27.06.13
18:05
(10) так это же обмен. Что вы нам лапшу на уши вешаете? В обмене движения отдельно переносятся от документа. Надо бы уже знать элементарные вещи. Стаж 3г 7мес.
13 Nesh
 
27.06.13
18:05
(12) это измененная уже.
в оригинале все по другому
14 Nesh
 
27.06.13
18:07
(12) вот оригинал

Процедура ЗаписатьДокумент(УзелОбмена, Объект, ОбъектXDTO, НужноЗаписыватьОбъект, НомерИзменен, КоличествоЗаписанных, ДокументыДляОтложенногоПроведения)
   
   Если НужноЗаписыватьОбъект ИЛИ НомерИзменен Тогда
       
       Объект.ПометкаУдаления = ОбъектXDTO.DeletionMark;
       
       РежимЗаписи = РежимЗаписиДокумента.Проведение;
       Если Не ОбъектXDTO.Posted Тогда
           РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения;
       КонецЕсли;
       
       Если Объект.ПометкаУдаления
           И (РежимЗаписи = РежимЗаписиДокумента.Проведение) Тогда
           
           Объект.ПометкаУдаления = Ложь;
           
       КонецЕсли;
       
       Если НЕ ЗначениеЗаполнено(Объект.Номер) Тогда
           
           Объект.УстановитьНовыйНомер();
           
       КонецЕсли;
       
       Объект.ОбменДанными.Загрузка = Истина;
       
       Если НужноЗаписыватьОбъект Тогда
           Объект.ИзЦентральнойБазы = Истина;
       КонецЕсли;
       
       Объект.ДополнительныеСвойства.Вставить("УзелОбмена", УзелОбмена);
       
       Попытка
           
         Если Не Объект.Проведен Тогда
               Объект.Записать();
           Иначе
               // отменяем проведение документа

               Объект.Проведен = Ложь;
               Объект.Записать();
           КонецЕсли;
                       
       Исключение
           
           ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
           
       КонецПопытки;
       
       Если РежимЗаписи = РежимЗаписиДокумента.Проведение ИЛИ
           РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда
           
           Если ДокументыДляОтложенногоПроведения.Найти(Объект.Ссылка, "ДокументСсылка") = Неопределено Тогда
               СтрокаТаблицы = ДокументыДляОтложенногоПроведения.Добавить();
               СтрокаТаблицы.ДокументСсылка = Объект.Ссылка;
           
       КонецЕсли;
       
       КоличествоЗаписанных = КоличествоЗаписанных + 1;
   КонецЕсли;
   
   ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, Объект);
   
КонецПроцедуры // ЗаписатьДокумент()

и где тут отмена проведения?
15 Nesh
 
27.06.13
18:09
(12) а вот сама процедура записи движений? и где тут отмена движений?
Процедура ВыполнитьОтложенноеПроведениеДокументов(УзелОбмена, ДокументыДляОтложенногоПроведения)
   
   Для каждого СтрокаТаблицы Из ДокументыДляОтложенногоПроведения Цикл
       
       Если СтрокаТаблицы.ДокументСсылка.Пустая() Тогда
           Продолжить;
       КонецЕсли;
       
       Объект = СтрокаТаблицы.ДокументСсылка.ПолучитьОбъект();
       
       Если Объект = Неопределено Тогда
           Продолжить;
       КонецЕсли;
       
       Объект.ОбменДанными.Загрузка = Ложь;
       
       Попытка
           
           Объект.ПроверитьЗаполнение();
           Объект.Записать(РежимЗаписиДокумента.Проведение);
           
           ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, Объект);
           
       Исключение
       КонецПопытки;
       
   КонецЦикла;

КонецПроцедуры // ВыполнитьОтложенноеПроведениеДокументов()
16 hhhh
 
27.06.13
18:09
(14) ну какая разница? Ну

Процедура ЗаписатьДокумент(УзелОбмена


только для узла обмена используется процедура. В обмене не нужно чистить движения.
17 hhhh
 
27.06.13
18:10
(15) вот здесь отмена

         Объект.Записать(РежимЗаписиДокумента.Проведение);
18 Nesh
 
27.06.13
18:13
(17) если Вы по коду посмотрите выше, то если документ не был проведен в центральной базе, то сюда ( Объект.Записать(РежимЗаписиДокумента.Проведение) даже не дойдет.

когда менял на оригинал забыл еще забрать условие перед добавлением в таблицу отл. движений:
это не нужено РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда
19 Nesh
 
27.06.13
18:19
только что скачал релиз, вот оригинал без правок:

Процедура ЗаписатьДокумент(УзелОбмена, Объект, ОбъектXDTO, НужноЗаписыватьОбъект, НомерИзменен, КоличествоЗаписанных, ДокументыДляОтложенногоПроведения)
   
   Если НужноЗаписыватьОбъект ИЛИ НомерИзменен Тогда
       
       Объект.ПометкаУдаления = ОбъектXDTO.DeletionMark;
       
       РежимЗаписи = РежимЗаписиДокумента.Проведение;
       Если Не ОбъектXDTO.Posted Тогда
           РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения;
       КонецЕсли;
       
       Если Объект.ПометкаУдаления
           И (РежимЗаписи = РежимЗаписиДокумента.Проведение) Тогда
           
           Объект.ПометкаУдаления = Ложь;
           
       КонецЕсли;
       
       Если НЕ ЗначениеЗаполнено(Объект.Номер) Тогда
           
           Объект.УстановитьНовыйНомер();
           
       КонецЕсли;
       
       Объект.ОбменДанными.Загрузка = Истина;
       
       Если НужноЗаписыватьОбъект Тогда
           Объект.ИзЦентральнойБазы = Истина;
       КонецЕсли;
       
       Объект.ДополнительныеСвойства.Вставить("УзелОбмена", УзелОбмена);
       
       Попытка
           
           Если Не Объект.Проведен Тогда
               Объект.Записать();
           Иначе
               // отменяем проведение документа
               Объект.Проведен = Ложь;
               Объект.Записать();
           КонецЕсли;
           
       Исключение
           
           ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
           
       КонецПопытки;
       
       Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
           
           Если ДокументыДляОтложенногоПроведения.Найти(Объект.Ссылка, "ДокументСсылка") = Неопределено Тогда
               СтрокаТаблицы = ДокументыДляОтложенногоПроведения.Добавить();
               СтрокаТаблицы.ДокументСсылка = Объект.Ссылка;
           КонецЕсли;
           
       КонецЕсли;
       
       КоличествоЗаписанных = КоличествоЗаписанных + 1;
   КонецЕсли;
   
   ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, Объект);
   
КонецПроцедуры // ЗаписатьДокумент()
20 hhhh
 
27.06.13
20:13
(19) вы нам всё-таки обмен дваижениями скачайте. Как он происходит.

ОтложенноеПроведениеДокументов - это мягко говоря совсем из другой оперы. Даже рядом не валялось.
Ошибка? Это не ошибка, это системная функция.