Имя: Пароль:
1C
1С v8
Как изменить значение в табличной части документа
0 vivago
 
08.07.21
12:43
Добрый день!

Помогите пожалуйста новичку.

Есть два документа с табличной частью. Надо при вводе КолВып из второго документа внести данные с таким же полем в первый документ и поменять статус из перечисления, со сравнением по номенклатуре. Процедуру выполняется при записи второго документа из его модуля объекта.  
Данные реквизитам табличной части первого документа присваиваются, но не записываются. Пробовал записать в 1 документ комментарий - все записывается. Если ставлю в код .Добавить(); - то новая строка добавляется с нужными мне значениями. А мне надо изменить текущие. Отладчиком проверял - КолВып первого документа показывал старое значение в табло и при обработке кода менял на требуемое. Но по факту значение не поменялось.
Ранее была тема v8: Как изменить значение в табличной части документа - но я не увидел там решения.

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


Где ошибка?
1 fisher
 
08.07.21
12:53
Ты меняешь данные в таблице значений, в которую выгрузил данные из табличной части документа (т.е. это фактически отдельная копия этих данных в памяти). А надо менять непосредственно в табличной части документа. Либо загрузить данные из модифицированной таблицы значений в табличную часть документа.
2 fisher
 
08.07.21
12:56
В общем, достаточно заменить строку

Для каждого СтрокаТоварыТекЗаказ  Из ТекЗаказЛистогибТовары Цикл

на

Для каждого СтрокаТоварыТекЗаказ  Из ТекЗаказЛистогиб.Товары Цикл

а

ТекЗаказЛистогибТовары = ТекЗаказЛистогиб.Товары.Выгрузить();

удалить за ненадобностью
3 Мультук
 
гуру
08.07.21
13:28
(0)  ТекЗаказЛистогиб.Записать(РежимЗаписиДокумента.Запись);

Спустя некоторое время другие специально обученные люди будут удивляться,
что в документе одна информация, а в его движениях другая.
4 vivago
 
08.07.21
13:59
(2) fisher Спасибо большое!!! Все получилось и ЗАРАБОТАЛО!!!
(3) Мультук Что-то не так с этой строчкой?
5 Мультук
 
гуру
08.07.21
14:22
(4) Я бы заменил эту строку на конструкцию


Если ТекЗаказЛистогиб.Проведен Тогда
  ТекЗаказЛистогиб.Записать(РежимЗаписиДокумента.Проведение);
Иначе
  ТекЗаказЛистогиб.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
6 vivago
 
08.07.21
14:49
(5) Мультук

Спасибо за подсказку

Я немного уже реализовал эту часть с небольшим дополнением:

         НадоСохранить=Истина;
      КонецЕсли;
  КонецЦикла ;
      Если НадоСохранить тогда ..... То что вы предложили.