Как заполнить табличную часть формы программно? Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их.
Форма имеет вид:
Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды:
Код 1C v 8.2 УП // Код заполнения ТЧ
&НаСервере
Процедура ЗаполнитьДокументНаСервере()
ДокОбъект = РеквизитФормыВЗначение("Объект");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЗаказНаПроизводствоПродукция.Ссылка КАК ЗаказНаПроизводство,
| СпецификацииОперации.Операция,
| СпецификацииОперации.W1C_КоличествоОпераций,
| СпецификацииОперации.W1C_СтоимостьОднойОперации
|ПОМЕСТИТЬ втЗаказОперацияСумма
|ИЗ
| Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Спецификации.Операции КАК СпецификацииОперации
| ПО ЗаказНаПроизводствоПродукция.Спецификация = СпецификацииОперации.Ссылка
|ГДЕ
| ЗаказНаПроизводствоПродукция.Ссылка В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| W1C_ОтчетПоВыработкеНачисления.ЗаказПроизводство
| ИЗ
| Документ.W1C_ОтчетПоВыработке.Начисления КАК W1C_ОтчетПоВыработкеНачисления
| ГДЕ
| W1C_ОтчетПоВыработкеНачисления.Ссылка.Дата МЕЖДУ &ДатаН И &ДатаК)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| W1C_ОтчетПоВыработкеНачисления.Ссылка.Организация,
| W1C_ОтчетПоВыработкеНачисления.Ссылка.Сотрудник,
| W1C_ОтчетПоВыработкеНачисления.ЗаказПроизводство,
| W1C_ОтчетПоВыработкеНачисления.Операция,
| W1C_ОтчетПоВыработкеНачисления.КоличествоПродукции КАК Количество,
| втЗаказОперацияСумма.W1C_СтоимостьОднойОперации КАК Цена,
| W1C_ОтчетПоВыработкеНачисления.Ссылка КАК ОтчетПоВыработке,
| втЗаказОперацияСумма.W1C_СтоимостьОднойОперации * W1C_ОтчетПоВыработкеНачисления.КоличествоПродукции КАК Сумма
|ИЗ
| Документ.W1C_ОтчетПоВыработке.Начисления КАК W1C_ОтчетПоВыработкеНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ втЗаказОперацияСумма КАК втЗаказОперацияСумма
| ПО W1C_ОтчетПоВыработкеНачисления.ЗаказПроизводство = втЗаказОперацияСумма.ЗаказНаПроизводство
| И W1C_ОтчетПоВыработкеНачисления.Операция = втЗаказОперацияСумма.Операция
|ГДЕ
| W1C_ОтчетПоВыработкеНачисления.Ссылка.Дата МЕЖДУ &ДатаН И &ДатаК
| И W1C_ОтчетПоВыработкеНачисления.Ссылка.Организация = &Организация";
Запрос.УстановитьПараметр("ДатаК", КонецМесяца(ДокОбъект.ПериодРегистрации));
Запрос.УстановитьПараметр("ДатаН", НачалоМесяца(ДокОбъект.ПериодРегистрации));
Запрос.УстановитьПараметр("Организация", ДокОбъект.Организация);
РезультатЗапроса = Запрос.Выполнить();
ДокОбъект.Рассчет.Загрузить(Запрос.Выполнить().Выгрузить());
ОбновитьВыплату(ДокОбъект); //заполним данными вторую ТЧ
ЗначениеВРеквизитФормы(ДокОбъект, "Объект");
КонецПроцедуры
&НаСервере
Процедура ОбновитьВыплату(ДокОбъект)
врТЗ = ДокОбъект.Рассчет.Выгрузить();
врТЗ.свернуть("Сотрудник","Сумма");
ДокОбъект.Начисления.Загрузить(врТЗ);
КонецПроцедуры
Второй вариант заполнения: Имеем ТЧ на форме, которую необходимо программно заполнить
и код в модуле документа:
Код 1C v 8.2 УП &НаСервере
Процедура НайтиТопливоф()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СУММА(ПродажаТоплива.Номер) КАК Номер,
| ПродажаТоплива.ТипТоплива,
| СУММА(ПродажаТоплива.Количество) КАК Количество,
| СУММА(ПродажаТоплива.СуммаСНДС) КАК СуммаСНДС
|ИЗ
| Документ.ПродажаТоплива КАК ПродажаТоплива
|ГДЕ
| ПродажаТоплива.Цена <= &Цена
|
|СГРУППИРОВАТЬ ПО
| ПродажаТоплива.ТипТоплива";
Запрос.УстановитьПараметр("Цена", Объект.Цена);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Объект.ТЧ.Очистить();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
НовСтр = Объект.ТЧ.Добавить();
ЗаполнитьЗначенияСвойств(НовСтр, ВыборкаДетальныеЗаписи); //при условии что имена полей ТЧ и выборки совпадают
КонецЦикла;
КонецПроцедуры
Категория:
Управляемое приложение, Тонкий клиент Табличное поле ~ Дополнительные колонки в динамическом списке В процессе написания кода для отображения дополнительных вычисляемых полей в динамическом списке документов получились вот такие приемы (просто код, без комментариев).
Код 1C v 8.х Процедура ДокументСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ТекДокумент = ДанныеСтроки.Ссылка;
СуммаДокумента = ТекДокумент.Товары.Итог("СуммаСНДС");
СуммаБезнал = ТекДокумент.Оплата.Итог("СуммаОплаты");
СуммаНал = ?(СуммаДокумента > СуммаБезнал, СуммаДокумента - СуммаБезнал, 0);
ОформлениеСтроки.Ячейки.СуммаДокумента.ОтображатьТекст = Истина;
ОформлениеСтроки.Ячейки.НаличнаяОплата.ОтображатьТекст = Истина;
ОформлениеСтроки.Ячейки.БезналичнаяОплата.ОтображатьТекст = Истина;
ОформлениеСтроки.Ячейки.СуммаДокумента.Текст = Формат(СуммаДокумента, "ЧДЦ=2; ЧН=");
ОформлениеСтроки.Ячейки.НаличнаяОплата.Текст = Формат(СуммаНал, "ЧДЦ=2; ЧН=");
ОформлениеСтроки.Ячейки.БезналичнаяОплата.Текст = Формат(СуммаБезнал, "ЧДЦ=2; ЧН=");
//Определяем наличие ПКО
Если ТекДокумент.ПолучитьОбъект().ПолучитьСвязанныйПКО() <> Неопределено Тогда
ОформлениеСтроки.Ячейки.ЕстьПКО.ОтображатьКартинку = Истина;
ОформлениеСтроки.Ячейки.ЕстьПКО.Картинка = БиблиотекаКартинок.ВыполненоУспешно32;
КонецЕсли;
КонецПроцедуры
Процедура ДокументСписокПриПолученииДанных(Элемент, ОформленияСтрок)
//Определяем наличие ПКО
МассивДокументов = Новый Массив;
Для каждого ТекСтрока Из ОформленияСтрок Цикл
МассивДокументов.Добавить(ТекСтрока.ДанныеСтроки.Ссылка);
КонецЦикла;
Запрос = Новый Запрос("ВЫБРАТЬ Основание ИЗ РегистрСведений.АА_СвязанныеДокументы КАК СД ГДЕ СД.Основание В (&Документы)");
Запрос.УстановитьПараметр("Документы", МассивДокументов);
Результат = Запрос.Выполнить().Выгрузить();
Для Каждого ТекСтрока Из ОформленияСтрок Цикл
Ссылка = ТекСтрока.ДанныеСтроки.Ссылка;
ТекСтрока.Ячейки.ЕстьПКО.ЗначениеКартинки = Результат.Найти(Ссылка,"Основание") <> Неопределено;
КонецЦикла;
КонецПроцедуры
Категория:
Работа с Формой (Диалог) и её элементами