Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как изменить значение в табличной части документа

Как изменить значение в табличной части документа
Я
   vivago
 
08.07.21 - 12:43
Добрый день!

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

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

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


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

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

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

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

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

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

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

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

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.