Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 мар 2026, 00:04

Как перенести значения реквизитов справочника в fналогичные реквизиты табличной части документа

Автор Anilad, Вчера в 09:24

0 Пользователей и 1 гость просматривают эту тему.

Anilad

Пытаюсь перенести из справочника "Продукты" значения реквизитов белки, жиры, углеводы в реквизиты табличной части "Продукты" документа "ПриемыПищи". Написал в модуле объекта документа следующий код:
Процедура ПриЗаписи(Отказ)
    Выборка = Документы.ПриемПищи.Выбрать();
    Пока Выборка.Следующий() Цикл
        ДокументОбъект = Выборка.ПолучитьОбъект();
    КонецЦикла;
    Отборка = Справочники.Продукты.Выбрать();
   
    Пока Отборка.Следующий() Цикл
        СправочникОбъект = Отборка.ПолучитьОбъект();
    КонецЦикла;
   
    ПродуктыОбъект = ДокументОбъект.Продукты;
   
    Для каждого Элемента Из ПродуктыОбъект Цикл
        Элемента.Белки = СправочникОбъект.Ссылка.Белки*Элемента.Вес/100;
        Элемента.Жиры = СправочникОбъект.Ссылка.Жиры*Элемента.Вес/100;
        Элемента.Углеводы = СправочникОбъект.Ссылка.Углеводы*Элемента.Вес/100;
       
    КонецЦикла;
КонецПроцедуры

Значения так и не перенеслись(( Помогите написать процедуру. Есть нюанс: мне нужно переносить в БЖУ в соответствии с продуктом. Например. я вписал в ТЧ помидор, и БЖУ помидора должно перенестись из справочника в ТЧ документа/

antoneus

Вообще, что тут происходит? Выбираете ВСЕ элементы справочника, цикл по выборке проходит, и значения из последнего элемента в выборке (чем бы он ни оказался) вы пишете во все документы. С документами та же фигня - проходит цикл, пихаем значения из какого-то последнего продукта в какой-то последний документ. И потом его не записываем, хехе. А нам нужен-то текущий, тот, который записываем, так?

ПриЗаписи не подходит, потому что в этой процедуре документ уже записан в базу данных. Нам нужна процедура ПередЗаписью.

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Для каждого ТекСтрока Из Продукты Цикл
        ТекСтрока.Белки = ТекСтрока.Продукт.Белки * ТекСтрока.Вес / 100;//ну или как там называется реквизит ТЧ
        ТекСтрока.Жиры = ТекСтрока.Продукт.Жиры * ТекСтрока.Вес / 100;
        ТекСтрока.Углеводы = ТекСтрока.Продукт.Углеводы * ТекСтрока.Вес / 100;       
    КонецЦикла;

КонецПроцедуры

Всё.


Anilad

antoneus, слушай, а можешь объяснить этот код? просто хочется не просто его с копипастить, но и понять, что написано

antoneus

Ну даже не знаю, что объяснять, код прозрачнее некуда.
Цикл по табличной части Продукты того документа, который пишем (в модуле объекта реквизиты и табличные части доступны просто по имени).
В каждой строке сидит Продукт - ссылка на справочник. На сервере (а контекст модуля объекта - сервер) реквизиты доступны, если обратиться к ним через точку в ссылке. На тонком клиенте такое не прокатит.
Ну, собственно, ТекСтрока.Продукт - это ссылка, а ТекСтрока.Продукт.Белки - это значение реквизита.

Anilad

antoneus, типо мы через ссылку на справочник обращаемся к реквизитам справочника? меня вот это вопрос больше интересует

antoneus

Да. Это не всегда правильно (иногда запрос оптимальнее), но в данном случае пойдет.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск