Это очередная публикация, можно судить строго.
Как-то раз, юзая наши сетевые информационные пространства, взбрела в голову мысль создавать и заполнять на основании одного документа другой, причем программно, командой в командной панели на форме.
Надеюсь этой статьей помочь таким же, как и я в свое время (Таковых много, я смотрел на различных форумах аналогичные безответные запросы);
В моем случае необходимо было создать документ "Расходная накладная" на основании документа "Заказ покупателя" с проверкой на проведенность и с изменением реквизита в основном документе после проведения и самое главное баз открытия создаваемого документа.
Использовались самые стандартные и на мой взгляд самые рабочие методы исполнения из формы документа. Если есть круче с удовольствием прочту в комментариях.
Практика.
1. Методом несложных манипуляций создаем кнопку на командной панели списка документов "Заказы покупателей" с именем "СоздатьРасходнуюНакладную".
2. В модуле формы основного документа прописываем Функцию на Сервере и процедуру на Клиенте.
&НаСервере
Функция СоздатьРасходнуюНакладнуюНаСервере()
ЭтотДокумент = РеквизитФормыВЗначение("Объект");
ЭтотДокумент.Записать(РежимЗаписиДокумента.Проведение);
ЗначениеВРеквизитФормы(ЭтотДокумент, "Объект");
ДокРН=Документы.РасходнаяНакладная.СоздатьДокумент();
ДокРН.Заполнить(Объект.ссылка);
ДокРН.Дата=ТекущаяДата();
ДокРН.Ответственный=Объект.Ответственный;
ДокРН.Подразделение=Объект.СтруктурнаяЕдиницаПродажи;
ДокРН.Автор=Объект.Автор;
ДокРН.Комментарий=Объект.Комментарий;
//При повторном создании документа количество запасов в ТЧ запасы = 0 Заведомо запрещаем дальнейшие действия(ТАКОВ ПОДХОД)
Если ДокРН.Запасы.Количество()=0 тогда
Сообщить("Вы уже создали ВАШ_ДОКУМЕНТ!");
Возврат Ложь;
КонецЕсли;
//Проверяем документ на заполненность, если созданный на основании документ заполнен, то проводим и оповещаем пользователя
Если ДокРН.Запасы.Количество()>0 Тогда
ДокРН.Записать(Режимзаписидокумента.Проведение);
Сообщить("Создан документ "+ДокРН);
//Проверяем если документ проведен, то устанавливаем реквизит документа основания в определенное состояние
Если ДокРН.Проведен тогда
Объект.СостояниеЗаказа=Справочники.СостоянияЗаказовПокупателей.НайтиПоКоду("ВАШ_КОД");
Возврат Истина;
КонецЕсли;
Иначе
//Если эта операция была проделана ранее то выдаем сообщение пользователю
Сообщить("Вы уже создали ВАШ_ДОКУМЕНТ!");
Возврат Ложь;
КонецЕсли;
КонецФункции
//Команду с кнопкой мы поместили на командной панели нашего документа основания и указываем нашу процедуру
//
&НаКлиенте
Процедура СоздатьРасходнуюНакладную(Команда)
//Определяем наш ДокРН и выполняем команду и закрываем форму оновного документа;
ДокРН=СоздатьРасходнуюНакладнуюНаСервере();
Если ДокРН тогда
Записать();
Конецесли;
//Закрывем форму
Закрыть();
КонецПроцедуры
Вот таким путем мы создали на основании документ с заполнением всех необходимых нам данных, с проведением документов и без открытия формы созданного документа!
End;
28.11.24 - готовимся к новому году, кукушка отъезжает, вспомнил как после клюшек - 8.3 изучать начал