Как заполнить табличную часть формы программно? Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их.
Форма имеет вид:
Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды:
Код 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.2 УП &НаКлиенте
Процедура КомандаОткрытьФорму(Команда)
Форма = ПолучитьФорму("Справочник.Пользователи.ФормаОбъекта");
ДанныеФормы = Форма.Объект;
ЗаполнитьНаСервере(ДанныеФормы);
КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
Форма.Открыть();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ЗаполнитьНаСервере(НовыйОбъект);
НовыйОбъект.Наименование = "Новый элемент";
Для К=1 По 100 Цикл
НоваяСтрока = НовыйОбъект.ТЧ.Добавить();
НоваяСтрока.РеквизитТЧ = К;
КонецЦикла;
КонецПроцедуры
Код 1C v 8.2 УП &НаКлиенте
Процедура СоздатьДокумент(Команда)
Форма = ПолучитьФорму("Документ.Реализация.ФормаОбъекта");
ДанныеФормы = Форма.Объект;
ЗаполнитьДокументНаСервере(ДанныеФормы);
КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
Форма.Открыть();
КонецПроцедуры
&НаСервере
Функция ЗаполнитьДокументНаСервере(ДанныеФормы);
Док = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.Реализация"));
Для каждого Стр Из ТЗ Цикл
СтрДок = Док.Товары.Добавить();
СтрДок.Количество = Стр.Количество;
СтрДок.Номенклатура = Стр.Номенклатура;
КонецЦикла;
ЗначениеВДанныеФормы(Док,ДанныеФормы);
КонецФункции
Категория:
Документы Как открыть форму документа созданного программно на сервере? Код 1C v 8.2 УП &НаКлиенте
Процедура Команда1(Команда)
Форма = ПолучитьФорму("Документ.ЗаявкаПокупателя.ФормаОбъекта");
ДанныеФормы = Форма.Объект;
ЗаполнитьДокументНаСервере(ДанныеФормы);
КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
Форма.Открыть();
КонецПроцедуры
&НаСервере
Функция ЗаполнитьДокументНаСервере(ДанныеФормы);
Док = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.ЗаявкаПокупателя"));
// Заполняем реквизиты какие нужно
// Док.Реквизит = " тру ля ля";
// ......
ЗначениеВДанныеФормы(Док,ДанныеФормы);
КонецФункции
Категория:
Документы Как перенести часть реквизитов на вспомогательную форму? В документе создаем дополнительную форму,
вызываем эту форму из имеющейся формы нажатием кнопки команды формы.
Документ должен быть записан!
Примерно так:
Код 1C v 8.2 УП &НаКлиенте
Процедура ДоверенностьВвести(Команда)
Форма = ПолучитьФорму("Документ.ВозвратТоваровОтКлиента.Форма.ФормаПодготовкиДоверенности");
ДанныеФормы = ЭтаФорма.Объект;
ЗаполнитьДокументНаСервере(ДанныеФормы);
КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
Форма.Открыть();
КонецПроцедуры
&НаСервере
Функция ЗаполнитьДокументНаСервере(ДанныеФормы);
Док = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.ВозвратТоваровОтКлиента"));
Для К = 1 По Док.Товары.Количество() = 0 Цикл
СтрДок = Док.Товары.Добавить();
КонецЦикла;
ЗначениеВДанныеФормы(Док,ДанныеФормы);
КонецФункции
В итоге получаем заполненную форму и с теми же реквизитами
Категория:
Управляемое приложение, Тонкий клиент Открытие формы не записанного документа Нередко необходимо программно создать новый документ или элемент справочника и заполнить его данными. А затем, НЕ ЗАПИСЫВАЯ его в базу данных, открыть форму для того чтобы пользователь получил возможность его отредактировать и потом сам принял решение о его записи в БД(или отказался от записи). На платформах 8.0, 8.1 (и даже 7.7) это не представляло никакой сложности, а вот в тонком клиенте управляемого приложения 8.2 эта задача уже ни кажется столь тривиальной.
Первый способ заключается в том, что необходимо заранее подготовить некую структуру, которая будет содержать данные для заполнения документа, передать эту структуру в открываемую форму, а уже в самой форме в событии
ПриСозданииНаСервере() заполнять вновь открываемую форму переданными в неё данными. Этот способ не нов, но у него есть один серьезный недостаток – необходимо изменить модуль формы самого объекта, чтобы добавить/изменить событие формы
ПриСозданииНаСервере() , это очень не понравится тем кто работает с типовыми конфигурациями находящимися на поддержке. Кроме того этот подход не применим во внешних обработках, что сильно сокращает потенциал его применения.
Второй способ решения этой задачи лишен вышеупомянутых недостатков:
Код 1C v 8.2 УП &НаКлиенте
Процедура КомандаОткрытьФорму(Команда)
Форма = ПолучитьФорму("Справочник.Пользователи.ФормаОбъекта");
ДанныеФормы = Форма.Объект;
ЗаполнитьНаСервере(ДанныеФормы);
КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
Форма.Открыть();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ЗаполнитьНаСервере(НовыйОбъект);
НовыйОбъект.Наименование = "Новый элемент";
Для К=1 По 100 Цикл
НоваяСтрока = НовыйОбъект.ТЧ.Добавить();
НоваяСтрока.РеквизитТЧ = К;
КонецЦикла;
КонецПроцедуры
Источник: [url=obrabotki.com]http://www.obrabotki.com/1s-openform-managedforms/[/url]
еще вариант:
Код 1C v 8.2 УП &НаКлиенте
Процедура СоздатьДокумент(Команда)
Форма = ПолучитьФорму(“Документ.Реализация.ФормаОбъекта”);
ДанныеФормы = Форма.Объект;
ЗаполнитьДокументНаСервере(ДанныеФормы);
КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
Форма.Открыть();
КонецПроцедуры
&НаСервере
Функция ЗаполнитьДокументНаСервере(ДанныеФормы);
Док = ДанныеФормыВЗначение(ДанныеФормы, Тип(“ДокументОбъект.Реализация));
Для каждого Стр Из ТЗ Цикл
СтрДок = Док.Товары.Добавить();
СтрДок.Количество = Стр.Количество;
СтрДок.Номенклатура = Стр.Номенклатура;
КонецЦикла;
ЗначениеВДанныеФормы(Док,ДанныеФормы);
КонецФункции
Категория:
Документы