Каталог решений - Создание и заполнение документа основания программно из модуля формы

Создание и заполнение документа основания программно из модуля формы

Создание и заполнение документа основания программно из модуля формы

В наличии

Работа с модулями форм документов УФ

Категория:

Описание

Это очередная публикация, можно судить строго.

Как-то раз, юзая наши сетевые информационные пространства, взбрела в голову мысль создавать и заполнять на основании одного документа другой, причем программно, командой в командной панели на форме. 

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

В моем случае необходимо было создать документ "Расходная накладная" на основании документа "Заказ покупателя" с проверкой на проведенность и с изменением реквизита в основном документе после проведения и самое главное баз открытия создаваемого документа.

Использовались самые стандартные и на мой взгляд самые рабочие методы исполнения из формы документа. Если есть круче с удовольствием прочту в комментариях.

Практика.

1. Методом несложных манипуляций создаем кнопку на командной панели списка документов "Заказы покупателей" с именем "СоздатьРасходнуюНакладную".

2. В модуле формы основного документа прописываем Функцию на Сервере и процедуру на Клиенте.

&НаСервере
Функция СоздатьРасходнуюНакладнуюНаСервере()
	
	ЭтотДокумент = РеквизитФормыВЗначение("Объект");
	ЭтотДокумент.Записать(РежимЗаписиДокумента.Проведение);
	ЗначениеВРеквизитФормы(ЭтотДокумент, "Объект");
	Док1=Документы.РасходнаяНакладная.СоздатьДокумент();
	Док1.Заполнить(Объект.ссылка);
	Док1.Дата=ТекущаяДата();
	Док1.Ответственный=Объект.Ответственный;
	Док1.Подразделение=Объект.СтруктурнаяЕдиницаПродажи;
	Док1.Автор=Объект.Автор;
	Док1.Комментарий=Объект.Комментарий;

//При повторном создании документа количество запасов в ТЧ запасы = 0 Заведомо запрещаем дальнейшие действия(ТАКОВ ПОДХОД)	
	Если Док1.Запасы.Количество()=0 тогда
				Сообщить("Вы уже создали ВАШ_ДОКУМЕНТ!");
		Возврат Ложь;
	КонецЕсли;	

//Проверяем документ на заполненность, если созданный на основании документ заполнен, то проводим и оповещаем пользователя 	
	    Если Док1.Запасы.Количество()>0 Тогда
		Док1.Записать(Режимзаписидокумента.Проведение);
		Сообщить("Создан документ "+Док1);

//Проверяем если документ проведен, то устанавливаем реквизит документа основания в определенное состояние		
		Если Док1.Проведен тогда
		Объект.СостояниеЗаказа=Справочники.СостоянияЗаказовПокупателей.НайтиПоКоду("ВАШ_КОД");
			Возврат Истина;
		КонецЕсли;
	Иначе
//Если эта операция была проделана ранее то выдаем сообщение пользователю 		
		Сообщить("Вы уже создали ВАШ_ДОКУМЕНТ!");
		Возврат Ложь;

	    КонецЕсли;
КонецФункции

//Команду с кнопкой мы поместили на командной панели нашего документа основания и указываем нашу процедуру
//
&НаКлиенте
Процедура СоздатьРасходнуюНакладную(Команда)	
//Определяем наш Док1 и выполняем команду и закрываем форму оновного документа;
Док1=СоздатьРасходнуюНакладнуюНаСервере();
Если Док1 тогда
	Записать();
Конецесли;
//Закрывем форму
Закрыть();
КонецПроцедуры

Вот таким путем мы создали на основании документ с заполнением всех необходимых нам  данных, с проведением документов и без открытия формы созданного документа!

End;

has been added to your cart:
Оформление заказа