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

1. iott 13.12.17 09:37 Сейчас в теме
1С 8.3.10.2639
БСП 2.3.5.48

Пишу обработку заполнения табличной части нового документа.
Описание: пользователь открывает форму нового документа, вводит дату, организацию и склад и по кнопке "Заполнение" (подключаемая команда БСП) заполняется табличная часть документа.

Отладчиком нашел в каком месте запускается внешняя обработка.

ВнешнийОбъект.ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыКоманды);


ИдентификаторКоманды - содержит название команды (текст)
ОбъектыНазначения - Неопределено
ПараметрыКоманды - структура, в которой содержится "ЭтаФорма" тип "УправляемаяФорма"

Далее вызывается экспортная процедура "ВыполнитьКоманду" в модуле объекта моей обработки.

А что дальше? Значит мы на сервере получили структуру в которой находится форма нового документа в которой нужно заполнить табличную часть "Товары".

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

	ТЗ=Запрос.Выполнить().Выгрузить();
	ОбъектФормы.Товары.Загрузить(ТЗ);
КонецПроцедуры
Показать


После заполнения в табличной части нового документе создаются новые строки с номерами строк, но графы "Товар" и "Количество" пустые.

Подскажите, плиз, что я делаю не так?
+
По теме из базы знаний
Найденные решения
5. azali 13.12.17 10:24 Сейчас в теме
Пример. "товары" - это табличная часть заполняемого документа
....
Если ИмяКоманды = "ЗаполнитьТЧ" Тогда
			ЗаполнитьТЧ(ПараметрыКоманды.ЭтаФорма);
		КонецЕсли;
....

сама процедура
Процедура ЗаполнитьТЧ(форма) Экспорт

	форма.объект.товары.загрузить(запрос.Выполнить().Выгрузить());
	
	Форма.Модифицированность = Истина;
конецпроцедуры
Показать
iott; +1
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. гаврюша 2 13.12.17 09:51 Сейчас в теме
Нужно загружать не объект формы, а Данные. Документ...Товары.Загрузить(ТЗ);
+
3. iott 13.12.17 10:14 Сейчас в теме
(2) Марина, спасибо за ответ. А где взять Данные?
У меня есть переменная "ФормаЗаполнения" с типом "УправляемаяФорма". Я отладчиком раскрыл её и не нашел "Данные".

Читал документацию БСП на ИТС. Там есть пример заполнения...
Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации =ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    ПараметрыРегистрации.Вид =ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
    ПараметрыРегистрации.Версия = "1.2";
    ПараметрыРегистрации.Назначение.Добавить("Справочник._ДемоКонтрагенты");
     НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = НСтр("ru = 'Заполнить реквизит ""ИНН"" не записывая объект (заполнение формы)'");
    НоваяКоманда.Идентификатор = "ЗаполнитьИНН";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыЗаполнениеФормы();
    Возврат ПараметрыРегистрации;
 КонецФункции
Процедура ВыполнитьКоманду(ИмяКоманды, ОбъектыНазначения, ПараметрыВыполнения) Экспорт
   Если ИмяКоманды = "ЗаполнитьИНН" Тогда
        Генератор = Новый ГенераторСлучайныхЧисел;
        ЭтаФорма = ПараметрыВыполнения.ЭтаФорма;
        ЭтаФорма.Объект.ИНН = Формат(Генератор.СлучайноеЧисло(1, 999999999), "ЧЦ=12; ЧДЦ=0; ЧВН=; ЧГ=");
       ЭтаФорма.Модифицированность = Истина;
         Сообщение = Новый СообщениеПользователю();
        Сообщение.Поле = "Объект.ИНН";
        Сообщение.Текст = НСтр("ru = 'Поле ""ИНН"" успешно заполнено'");
        Сообщение.Сообщить();
    ...
 КонецПроцедуры
Показать


Из кода видно, как разработчик обращается
        ЭтаФорма.Объект.ИНН = Формат(Генератор.СлучайноеЧисло(1, 999999999), "ЧЦ=12; ЧДЦ=0; ЧВН=; ЧГ=");


В моём случае будет так
        ЭтаФорма.Объект.Товары = ......;


Только в моём случае "Товары" эта таблица формы.
Так вот и вопрос, как её корректно заполнить?
+
4. sssss_aaaaa_2011 13.12.17 10:24 Сейчас в теме
(3)
Только в моём случае "Товары" эта таблица формы.
Не таблица формы, а табличная часть объекта.
(3)
В моём случае будет так
ЭтаФорма.Объект.Товары = ......;
С какого перепуга? С какого перепуга заполнение табличной части объекта будет таким же, как и заполнение простого реквизита объекта? Вы не знаете как работать с табличной частью?
+
6. iott 13.12.17 10:28 Сейчас в теме
(4) Сергей, спасибо что уделили мне внимание.
Да, я не знаю как работать табличной частью объекта.
mexedov; +1
5. azali 13.12.17 10:24 Сейчас в теме
Пример. "товары" - это табличная часть заполняемого документа
....
Если ИмяКоманды = "ЗаполнитьТЧ" Тогда
			ЗаполнитьТЧ(ПараметрыКоманды.ЭтаФорма);
		КонецЕсли;
....

сама процедура
Процедура ЗаполнитьТЧ(форма) Экспорт

	форма.объект.товары.загрузить(запрос.Выполнить().Выгрузить());
	
	Форма.Модифицированность = Истина;
конецпроцедуры
Показать
iott; +1
7. iott 13.12.17 10:30 Сейчас в теме
(5) Татьяна, спасибо за ответ!
Я так и делал, но после выполнения обработки заполнения в документе появились пустые строчки.
+
8. iott 13.12.17 10:36 Сейчас в теме
(7) В общем заполняется графа "Количество", а графа "Номенклатура" - нет.
Проверю еще раз результат запроса.....
+
9. iott 13.12.17 10:47 Сейчас в теме
(8) Ай...мой косяк.
Формировал запрос конструктором запроса....а имена полям не присвоил, думал имя поля возьмет из названия поля регистра.
А он взял
"АналитикаУчетаНоменклатурыНоменклатура"
"АналитикаУчетаНоменклатурыХарактеристика"
"АналитикаУчетаНоменклатурыНазначение"

Все получилось! Всем спасибо!
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот