Казалось бы, простая задача... но все равно вызывает вопросы у пользователей. Публикация для неопытных и начинающих программистов 1С8. Целью публикации можно считать попытку объяснения решения задачи обычным пользователям (не программистам), но и программистам тоже может быть полезна.
Управляемая форма
Для примера, используем конфигурацию "Управление нашей фирмой, редакция 1.6 (1.6.24.201)".
Как должно работать?
В документе "Заказ покупателя" будет команда, которая открывает форму обработки. Подойдёт любой способ - например, кнопка в шапке документа:
Выполнение команды должно приводить к автоматической подстановке документа в реквизит обработки:
Далее обработка решает свою задачу запрограммированным в неё способом.
Команда запуска обработки
Если обработка отсутствует в метаданных конфигурации, то сперва интегрируем её:
Есть много способов добавить команду вызова формы обработки. Рассмотрим пример:
Двойной клик по команде открывает модуль команды, в который добавим алгоритм запуска обработки:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
СтруктураРезультат = Новый Структура;
СтруктураРезультат.Вставить("СсылкаНаДокумент", ПараметрыВыполненияКоманды.Источник.Объект.Ссылка);
АдресВХранилище = ПоместитьВоВременноеХранилище(СтруктураРезультат);
СтруктураПараметры = Новый Структура("АдресВХранилище", АдресВХранилище);
ОткрытьФорму("Обработка.ВыставлениеСчетаСсылкой.Форма.Форма", СтруктураПараметры, , Новый УникальныйИдентификатор);
КонецПроцедуры
Реализация команды основана на механизме типовых конфигураций платформы 1С8.
Помещение во временное хранилище структуры и элемента с ключом СсылкаНаДокумент будут нужны для открываемой формы обработки, в которой объявлен ключевой параметр АдресВХранилище:
В модуле формы обработки должна быть серверная процедура ПриСозданииНаСервере, в которой обрабатывается параметр АдресВХранилище:
Свойство СсылкаНаДокумент представлено типом данных ДокументСсылка, поэтому реквизит ДокументОснование объекта обработки должен быть того же типа.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СтруктураДанных = Новый Структура;
Если ЗначениеЗаполнено(Параметры.АдресВХранилище) Тогда
СтруктураДанных = ПолучитьИзВременногоХранилища(Параметры.АдресВХранилище);
Если СтруктураДанных.Свойство("СсылкаНаДокумент") Тогда
Если ЗначениеЗаполнено(СтруктураДанных.СсылкаНаДокумент) Тогда
Объект.ДокументОснование = СтруктураДанных.СсылкаНаДокумент;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
В клиентской процедуре формы ПриОкрытии можно предусмотреть любые дополнительные операции для автоматической обработки реквизита ДокументОснование, например:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ЗначениеЗаполнено(Объект.ДокументОснование) Тогда
ДокументОснование = Объект.ДокументОснование;
СформироватьПлатеж();
СсылкаПлатежныйШлюз(0);
КонецЕсли;
КонецПроцедуры
Далее можно перейти к тестированию.
Обычная форма
Для примера, используем конфигурацию "Управление производственным предприятием, редакция 1.3 (1.3.143.1)".
Как должно работать?
В документе "Заказ покупателя" будет команда, которая открывает форму обработки. Пункт меню в командной панели документа:
Выполнение команды должно приводить к автоматической подстановке документа в реквизит обработки ДокументОснование:
Далее обработка решает свою задачу запрограммированным в неё способом.
Команда запуска обработки
Если обработка отсутствует в метаданных конфигурации, то сперва интегрируем её в конфигурацию подобно примеру выше для управляемой формы.
Далее нужно добавить команду вызова формы обработки. Есть много разных способов. Например, добавим собственный пункт меню в командной панели формы документа ЗаказПокупателя:
В модуле формы документа будет добавлен метод ДействияФормыСбер, в котором нужно выполнить вызов формы обработки с отправкой ссылки документа через реквизит ДокументОбъект:
Процедура ДействияФормыСбер(Кнопка)
//Получение объекта формы обработки
ВыставлениеСчетаСсылкой = Обработки.ВыставлениеСчетаСсылкой.Создать();
ФормаВыставлениеСчетаСсылкой = ВыставлениеСчетаСсылкой.ПолучитьФорму("ФормаОбычныйРежим",ЭтаФорма);
//Отправка ссылки на текущий документ
ФормаВыставлениеСчетаСсылкой.ДокументОбъект = ЭтотОбъект.Ссылка;
//Открытие формы обработки
ФормаВыставлениеСчетаСсылкой.Открыть();
КонецПроцедуры
Для получения ссылки на документ со стороны обработки в модуле открываемой формы необходимо добавить экспортную переменную и алгоритм заполнения реквизита ДокументОснование в процедуре ПриОткрытии:
// ПЕРЕМЕННЫЕ МОДУЛЯ
Перем ДокументОбъект Экспорт;
Процедура ПриОткрытии(Отказ)
Если Не ДокументОбъект = Неопределено Тогда
ЭтотОбъект.ДокументОснование = ДокументОбъект;
КонецЕсли;
СформироватьПлатеж();
СсылкаПлатежныйШлюз(0);
КонецПроцедуры
Далее можно перейти к тестированию.
Сообщите о любых недочётах публикации в комментариях. Спасибо!