Все об 1С8 - просто и доступно

Добавить в Избранное  Сделать Стартовой  Написать письмо

Главная Статьи Вопрос-ответ Экспресс-справочник Гостевая книга
Статьи по 1С

Программное создание и открытие документа 1С без записи (на управляемых формах)

Когда-нибудь, неважно зачем, требуется изготовить какой-нибудь механизм, который будет программно создавать документ, заполнять его какими-то данными и открывать форму (управляемую форму) этого созданного и заполненного документа. Причем созданный документ не должен быть записан. В этой небольшой статье без особых комментариев будет приведен пример программного создания и заполнения документа, затем форма этого документа будет открыта. Естественно, нужно понимать, что при таком создании документа не отрабатывают события формы, следовательно внешний вид формы программно созданного документа может отличаться от формы созданного документа в интерактивном режиме.

Приведенный пример использован для 1С: Бухгалтерия предприятия, данные по организациям взяты из демо-конфигураций и к реальным юридическим лицам касательства не имеют.

Программное создание, заполнение документа и открытие его управляемой формы минимально можно реализовать в двух процедурах:
  • На клиенте создается (получается) форма документа, передается в серверную процедуру для заполнения данными, полученный результат переносится в форму документа, и эта форма открывается
  • На сервере заполняются данные формы передаваемого документа


  • То, что происходит в первой процедуре, описывают комментарии. Нет нужны что-то добавлять.
    &НаКлиенте
    Процедура СоздатьДокументПП(Команда)
    	
    	ФормаДокументПП 	= ПолучитьФорму("Документ.ПлатежноеПоручение.ФормаОбъекта"); //Получение пустой формы объекта (документа ПлатежноеПоручение)
    	ДанныеФормы 		= ФормаДокументПП.Объект; 				// Получение объекта формы в переменную для передачи на сервер.
    	ЗаполнитьДокументППНаСервере(ДанныеФормы); 					// Заполняем документ на сервере.
    	КопироватьДанныеФормы(ДанныеФормы, ФормаДокументПП.Объект); 	// Копирование заполненного объекта в объект формы, после следует ее открытие.
    	ФормаДокументПП.Открыть();
    	
    КонецПроцедуры
    
    А вот вторая процедура заполняет данные формы.
    &НаСервере
    Процедура ЗаполнитьДокументППНаСервере(ДанныеФормы);
    
    	ДокПлатежноеПоручение = Документы.ПлатежноеПоручение.СоздатьДокумент();
    
    	// Заполняем реквизиты документа
    	ДокПлатежноеПоручение.Дата 					= НачалоДня(ТекущаяДата());
    	ДокПлатежноеПоручение.Организация 			= Справочники.Организации.НайтиПоНаименованию("Торговый дом ""Комплексный"" ООО", Истина);
    	ДокПлатежноеПоручение.ИННПлательщика		= ДокПлатежноеПоручение.Организация.ИНН;
    	ДокПлатежноеПоручение.КПППлательщика		= ДокПлатежноеПоручение.Организация.КПП;
    	ДокПлатежноеПоручение.ВалютаДокумента		= Справочники.Валюты.НайтиПоКоду(643);
    	УчетДенежныхСредствБП.УстановитьБанковскийСчет(
    		ДокПлатежноеПоручение.СчетОрганизации, ДокПлатежноеПоручение.Организация, ДокПлатежноеПоручение.ВалютаДокумента);
    	ДокПлатежноеПоручение.ВидОперации			= Перечисления.ВидыОперацийСписаниеДенежныхСредств.ОплатаПоставщику;	
    
    	ДокПлатежноеПоручение.Контрагент				= Справочники.Контрагенты.НайтиПоНаименованию("Агроферма ""Коровино""", Истина);
    	ДокПлатежноеПоручение.ДоговорКонтрагента 		= Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("89894 от 24.12.2014", Истина, ,
    	 ДокПлатежноеПоручение.Контрагент);
    	ДокПлатежноеПоручение.СчетКонтрагента 			= ДокПлатежноеПоручение.СчетОрганизации;
    	УчетДенежныхСредствБП.УстановитьБанковскийСчет(
    				ДокПлатежноеПоручение.СчетКонтрагента,
    				ДокПлатежноеПоручение.Контрагент,
    				ДокПлатежноеПоручение.ВалютаДокумента);
    
    	ДокПлатежноеПоручение.ИННПолучателя				= ДокПлатежноеПоручение.Контрагент.ИНН;
    	ДокПлатежноеПоручение.КПППолучателя				= ДокПлатежноеПоручение.Контрагент.КПП;
    	
    	ДокПлатежноеПоручение.СуммаДокумента				= 10000;
    	ДокПлатежноеПоручение.СтавкаНДС					= Перечисления.СтавкиНДС.НДС18;
    	
    	ПроцентНДС 							= УчетНДСВызовСервераПовтИсп.ПолучитьСтавкуНДС(ДокПлатежноеПоручение.СтавкаНДС);
    	ДокПлатежноеПоручение.СуммаНДС   				= Окр(ДокПлатежноеПоручение.СуммаДокумента * ПроцентНДС / (100 + ПроцентНДС), 2);
    	
    	АвтоЗначенияРеквизитов = УчетДенежныхСредствБП.СформироватьАвтоЗначенияРеквизитовПлательщикаПолучателя(
    		ДокПлатежноеПоручение.Организация,
    		ДокПлатежноеПоручение.СчетОрганизации,
    		ДокПлатежноеПоручение.Контрагент,
    		ДокПлатежноеПоручение.СчетКонтрагента,
    		Ложь,
    		ДокПлатежноеПоручение.Дата);
    		
    	Документы.ПлатежноеПоручение.СформироватьНазначениеПлатежа(
    		ДокПлатежноеПоручение,
    		АвтоЗначенияРеквизитов,
    		Ложь,
    		Ложь);
    		
    	ДокПлатежноеПоручение.ВидПлатежа  			= "Электронно";	
    	ДокПлатежноеПоручение.СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоНаименованию("Оплата товаров, работ, услуг, 
    	сырья и иных оборотных активов");	
    	ДокПлатежноеПоручение.Комментарий 			= "Документ создан программно из примера";
    
    	ЗначениеВДанныеФормы(ДокПлатежноеПоручение, ДанныеФормы); // Водворяем обратно в объект формы уже созданный документ
    
    КонецПроцедуры