Как заполнить табличную часть формы программно? Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их.
Форма имеет вид:
Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды:
Код 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 УП &НаКлиенте
Процедура СоздатьДокумент(Команда)
Форма = ПолучитьФорму( “Документ. Реализация. ФормаОбъекта”) ;
ДанныеФормы = Форма. Объект;
ЗаполнитьДокументНаСервере( ДанныеФормы) ;
КопироватьДанныеФормы( ДанныеФормы, Форма. Объект) ;
Форма. Открыть( ) ;
КонецПроцедуры
&НаСервере
Функция ЗаполнитьДокументНаСервере(ДанныеФормы) ;
Док = ДанныеФормыВЗначение( ДанныеФормы, Тип( “ДокументОбъект. Реализация) ) ;
Для каждого Стр Из ТЗ Цикл
СтрДок = Док. Товары. Добавить( ) ;
СтрДок. Количество = Стр. Количество;
СтрДок. Номенклатура = Стр. Номенклатура;
КонецЦикла ;
ЗначениеВДанныеФормы( Док, ДанныеФормы) ;
КонецФункции
Категория:
Документы