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

Заполнение значений табличной части документа на форме

Автор Константин Р., 10 фев 2016, 12:24

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

Константин Р.

Добрый день!

Вопрос в следующем:
Есть документ "РасходнаяНакладная" с Табличной частью "Товары" с реквизитами "Номенклатура", "Количество", "ЦенаЕдиницы", "Сумма".
Есть форма документа "РасходнаяНакладная" в которой "Сумма" в "Товары" рассчитывается автоматически (Сумма = Количество * ЦенаЕдиницы).
Есть регистр сведений "ЦеныПродажи", в которые заполняется данными из документов "ПрайсЛист" (дата, номенклатура, цена единицы).

Задача: Сделать на форме документа "РасходнаяНакладная" кнопку "Заполнить цены", при нажатии которой в реквизиты "ЦенаЕдиницы" табличной части "Товары" помещаются последние цены (на дату документа) из регистра сведений "ЦеныПродажи"

При следующей реализации в модуле формы команды кнопки:
       ...

   Запрос = Новый Запрос;
   Запрос.Текст =
      "ВЫБРАТЬ
      |   ЦеныПродажиСрезПоследних.Период,
      |   ЦеныПродажиСрезПоследних.Регистратор,
      |   ЦеныПродажиСрезПоследних.Номенклатура,
      |   ЦеныПродажиСрезПоследних.ЕдиницаИзмерения,
      |   ЦеныПродажиСрезПоследних.ЦенаПродажи
      |ИЗ
      |   Документ.РасходнаяНакладная КАК РасходнаяНакладная
      |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныПродажи.СрезПоследних(&Момент, ) КАК ЦеныПродажиСрезПоследних
      |      ПО РасходнаяНакладная.Товары.Номенклатура = ЦеныПродажиСрезПоследних.Номенклатура
      |ГДЕ
      |   РасходнаяНакладная.Ссылка = &Реализация";
   
   Запрос.УстановитьПараметр("Момент", Объект.Дата);
   Запрос.УстановитьПараметр("Реализация", Объект.Ссылка);
   
   РезультатЗапроса = Запрос.Выполнить();
   
   ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
   
   Для каждого ТекСтрока из ОбъектРН.Товары Цикл
      
      Если ВыборкаДетальныеЗаписи.НайтиСледующий(ТекСтрока.Номенклатура, "Номенклатура") Тогда
         ТекСтрока.ЦенаЕдиницы = ВыборкаДетальныеЗаписи.ЦенаПродажи;
         ТекСтрока.Сумма = ТекСтрока.ЦенаЕдиницы * ТекСтрока.Количество;

      Иначе
         ТекСтрока.ЦенаЕдиницы = 0;
         ТекСтрока.Сумма = 0;
      КонецЕсли;
      
      ВыборкаДетальныеЗаписи.Сбросить();
      
   КонецЦикла;


возникает следующая проблема:

Реквизит "ЦенаЕдиницы" заполняется для всех строк "Товары", которые уже были записаны! в документе. Если добавить новую строку и не записывая документ нажать кнопку "Заполнить цены", то в этой новой строке реквизит "ЦенаЕдиницы" не заполняется.

Всякие мои танцы с бубнами здесь не помогли.

Поэтому подскажите, пожалуйста, как правильно организовать такой ввод данных, или как решить эту проблему.

KatiaP

Видимо нужно анализировать изменения в табличной части

pavl_vs

Константин Р., то, что нет записи в новую строку, естественно - обращение идет к ТЧ записанного документа.
Заполнение новой строки следует проводить через какое-нибудь Событие, типа "ПриИзменении", "НачалоВыбора"...

А заполнение по кнопке можно оставить на случай изменения цен по списку.

Константин Р.

Спасибо. Но это всё же другая логика работы формы. Хотелось бы знать именно как заполнять все значения (и старые, и новые) по нажатию кнопки.
Интересно, существует ли вообще какой-либо способ так сделать.

vitasw

Существует. Выгружайте таблицу документа в ТЗ и подсовывайте ее в запрос.

Константин Р.

Можете поподробнее:
1. Как выгрузить ТЧ  в ТЗ?
2. Как подсунуть ТЗ в запрос?

я ещё только учусь :))

vitasw

Цитата: Константин Р. от 10 фев 2016, 17:10Можете поподробнее:

можно Crtl+F1 и ищем соответствующий метод выгрузить()

Теги:

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

Рейтинг@Mail.ru

Поиск