Имя: Пароль:
1C
1С v8
Установить Пометку Удаления
0 streloklukum
 
21.08.19
14:21
Добрый день, уважаемые знатоки! С этой 1с я скоро лишусь рассудка!
Предисловие.
Документ_1 приходует товар. Если есть бракованный товар то на основании него создается Документ_2.
Если в Документе_1 убрать бракованный товар (например при приёмке заменили на другой), то уже созданный Документ_2 ставится на удаление.
Суть проблемы в следующем.
Если по каким то причинам товар всё же считают бракованным. То программно Документ_2 снимается с пометки на удаление и заново проводится. И это работает до тех пор пока количество бракованного товара равно в обоих документах. Но если количество больше или меньше то Документ_2 не снимается с пометки на удаление. Колдунство какое-то!

Это весь код!
Что тут могло сломаться?!
Откуда он знает что количество в Документа_1 не совпадает с количеством в Документа_2?!
Как это может влиять на Пометку удаления?!

мТовары    = Данные.Скопировать(Отбор);        Данные строки с браком из Документа_1
Документ_2 = ДокументСсылка.Получитьобъект();  Найденный Документ_2
    
Если мТовары.Количество() = 0 Тогда
      Документ_2.УстановитьПометкуУдаления(Истина);
Иначе
      Если ПеремещениеОбъект.ПометкаУдаления Тогда        
           Документ_2.УстановитьПометкуУдаления(Ложь);    Вот здесь косяк!
      КонецЕсли;
        
      Документ_2 .Товары.Очистить();
      Документ_2 .Товары.Загрузить(мТовары);
      Документ_2 .Записать(РежимЗаписиДокумента.Проведение);
                
      Сообщить(Строка(Документ_2) + " синхронизировано");
КонецЕсли;
1 Ёпрст
 
гуру
21.08.19
14:37
(0) нет никакого колдунства в коде.

>>>Но если количество больше или меньше то Документ_2 не снимается с пометки на удаление
в вашем коде этого и нет. У вас снимаетсяпометка удаления, только если ПеремещениеОбъект - помечен на удаление. Что это за документ у вас - хз.
2 Ёпрст
 
гуру
21.08.19
14:39
и.. хз, что вам надо, возможно так :

      //Если ПеремещениеОбъект.ПометкаУдаления Тогда        
      Если Документ_2.ПометкаУдаления Тогда        
           Документ_2.УстановитьПометкуУдаления(Ложь);   // закусывать надо
      КонецЕсли;
3 Ёпрст
 
гуру
21.08.19
14:40
и вот так еще:


  // Документ_2 .Товары.Очистить();  
     Документ_2 .Товары.Загрузить(мТовары); //очищать не надо, при загрузить и так вся тч перезаписывается целиком.
4 streloklukum
 
21.08.19
14:46
(2) Прошу прощения просто не поменял!
Если Документ_2.ПометкаУдаления Тогда        
     Документ_2.УстановитьПометкуУдаления(Ложь);  // так тоже не хочет снимать с пометки на удаление
КонецЕсли;
5 Ёпрст
 
гуру
21.08.19
14:49
(4) как выяснил, что не снимает ?
В это условие хоть  отладчик попадает ?
6 Ёпрст
 
гуру
21.08.19
14:49
мТовары.Количество() чему хоть равна ?
7 streloklukum
 
21.08.19
15:18
(5) Спасибо, вы правы! Пора в отпуск!
8 Мимохожий Однако
 
21.08.19
15:40
(7) Счастливого пути. Научись пользоваться отладчиком.