Создание нескольких документов на основании одного с открытием созданных документов

19.03.21

Задачи пользователя - Адаптация типовых решений

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

Как известно, открытие форм происходит на клиенте, а их заполнение на сервере. Т.е. сначала получаем форму на клиенте, потом заполняем ее на сервере, затем открываем на клиенте. Естественно, при таком подходе необходимо учитывать объем создаваемых документов. Слишком большое количество во-первых не влезет в окно 1с, во-вторых повесит систему количеством клиент-серверных вызовов. Для больших объемов данных рекомендуется создаваемые документы записывать без открытия и все операции выполнять на сервере в рамках единого вызова. В моем же примере создаваемых документа в среднем 3 штуки, поэтому пользуемся инструментами типового механизма.

Для начала в модуль менеджера документа, который будем использовать в качестве основания, в типовую процедуру добавим вызов своей процедуры создания команды на основании. Команда будет добавлена в подменю типовой кнопки "Создать на основании":

Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
	
     ПланированиеДеятельности.ДобавитьКомандуСоздатьНаОснованииЗаказНаВнутреннееПотребление (КомандыСозданияНаОсновании);
	
КонецПроцедуры

В серверном модуле ПланированиеДеятельности зададим свой обработчик команды, который будет располагаться на клиенте (ПланированиеДеятельностиКлиент ):

Функция ДобавитьКомандуСоздатьНаОснованииЗаказНаВнутреннееПотребление (КомандыСозданияНаОсновании) Экспорт

     Если ПравоДоступа("Добавление", Метаданные.Документы.ЗаказНаВнутреннееПотребление) Тогда

          КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();

          КомандаСоздатьНаОсновании.Обработчик = "ПланированиеДеятельностиКлиент.СозданиеЗаказаНаВнутреннееПотребление";

          КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.ЗаказНаВнутреннееПотребление);

          КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";

          КомандаСоздатьНаОсновании.ФункциональныеОпции = "ИспользоватьЗаказыНаВнутреннееПотребление";
     
          Возврат КомандаСоздатьНаОсновании;

     КонецЕсли;

     Возврат Неопределено;

КонецФункции

Далее в клиентском модуле ПланированиеДеятельностиКлиент получаем форму создаваемого документа. В этот момент происходит обращение к типовой процедуре ОбработкаЗаполнения в модуле объекта. Здесь важно при получении формы в параметры формы передать структуру с ключом ЗначенияЗаполнения, значение которого в контексте обработки заполнения будет интерпретировано как параметр ДанныеЗаполнения.

Процедура СозданиеЗаказаНаВнутреннееПотребление(ДокументОснование, СтандартнаяОбработка) Экспорт

     МассивПодразделений = ПланированиеДеятельностиВызовСервера.ПолучитьПодразделения (ДокументОснование); //Обращение к серверному модулю

          Для каждого Подразделение Из МассивПодразделений Цикл

               ПараметрыЗаполнения = Новый Структура("ДокументОснование, Подразделение", ДокументОснование, Подразделение);

               Форма = ПолучитьФорму("Документ.ЗаказНаВнутреннееПотребление. ФормаОбъекта", Новый Структура("ЗначенияЗаполнения", ПараметрыЗаполнения),,Истина); //здесь проваливаемся в ОбработкаЗаполнения в модуле объекта

               Форма.Открыть(); //возвращаемся на клиента и открываем форму

          КонецЦикла;

КонецПроцедуры

Далее в модуле объекта пишем свои обработчики по заполнению документов. После их выполнения управление вернется на клиента, где будет открыта заполненная форма.

Так, используя минимум доработок, можно использовать типовой механизм "создания на основании" для создания нескольких документов.

Создать на основании создание нескольких документов из одного

См. также

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    5697    14    5    

24

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    3947    12    0    

30

Адаптация типовых решений Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    5125    dimanich70    15    

21

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    5662    dimanich70    9    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. МимохожийОднако 142 06.09.21 10:13 Сейчас в теме
Далее в модуле объекта пишем свои обработчики по заполнению документов

Пример можно?
3. rule_2 51 28.09.21 09:40 Сейчас в теме
(1)

// В этом коде в качестве данных заполнения может быть передана только структура, иначе
// обработка завершается. Вообще здесь может быть любой произвольный алгоритм заполнения
// Данный код лишь в качестве примера, более сложные алгоритмы смотреть нужно в типовых конфигурациях
//
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	
	Если ТипЗнч(ДанныеЗаполнения)<> Тип("Структура") Тогда
		Возврат;
	КонецЕсли;
	
	// Заполняем реквизиты документа из данных заполнения
	//
	Организация = ДанныеЗаполнения.Организация;
	Контрагент = ДанныеЗаполнения.Контрагент;
	Партнер = ДанныеЗаполнения.Клиент;
	Договор = ДанныеЗаполнения.ДоговорКонтрагента;

КонецПроцедуры
Показать
2. rule_2 51 28.09.21 09:35 Сейчас в теме
В управляемом приложении лучше использовать вместо "ПолучитьФорму" - "ОткрытьФорму", тем более, в коде ведь с формой работы никакой нет, кроме как ее открытия

https://infostart.ru/1c/articles/236382/
Оставьте свое сообщение