Шаблон обработки внешнего заполнения (БСП, управляемые формы).
Сделан на примере заполнения документа «Перемещение материалов в кладовую»(ДвижениеПродукцииИМатериалов). При старте открывает дополнительную внешнюю форму обработки где запрашивается ресурсная спецификация и количество комплектов.
Особенности: - открытие дополнительной формы для ввода параметров, форма для отладки, позволяющая запускать внешнюю обработку непосредственно через меню файл.
Также рекомендую обратить внимание на алгоритм обработки ТЧ после заполнения основных данных из запроса. Предлагаю следующий быстрый способ написания кода на примере импорта кода процедуры ТоварыНоменклатураПриИзменении(Элемент) документа ДвижениеПродукцииИМатериалов.
-
Импортируем сам модуль в наш алгоритм (он выполняется на сервере):
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьЗаполнитьУпаковкуПоВладельцу");
ДобавитьДействиеПересчитатьКоличествоЕдиниц(Форма, СтруктураДействий);
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
ПараметрыПроверкиСерий = Новый Структура("Склад, ПараметрыУказанияСерий");
ПараметрыПроверкиСерий.Склад = Новый Структура("Отправитель, Получатель", Форма.Объект.Отправитель, Форма.Объект.Получатель);
ПараметрыПроверкиСерий.ПараметрыУказанияСерий = Форма.ПараметрыУказанияСерий;
СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус", ПараметрыПроверкиСерий);
СтруктураДействий.Вставить("НоменклатураПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
Форма.ИмяФормы, "Товары"));
НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(Форма, СтруктураДействий);
ОбеспечениеКлиентСервер.СтруктураДействийВставитьПриИзмененииНазначения(СтруктураДействий);
ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
-
Заменим ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения) на аналогичную
ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения)
3. В алгоритме часто используется передача формы и ее параметров. На сервер мы форму передать не можем , но это и не нужно , достаточно посмотреть какие параметры нам будут нужны, заранее их получить на клиенте и передать через структуру:
Парам=Новый Структура("ОтправительЦеховаяКладовая,ПолучательЦеховаяКладовая,ПараметрыУказанияСерий,ИмяФормы,НаправленияДеятельностиКэшированныеЗначения");
ЗаполнитьЗначенияСвойств(Парам,Форма);
-
Поменять все значения где передается форма на нашу структуру Парам.
Код готов. Написание всего кода занимает 5 минут, при этом он получается гарантированно рабочим, так как взят из оригинальной конфигурации.
КэшированныеЗначения = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения(); Пока Выб.Следующий() Цикл ТекущаяСтрока=НовыйОбъект.Товары.Добавить(); ЗаполнитьЗначенияСвойств(ТекущаяСтрока,Выб); СтруктураДействий = Новый Структура; СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекущаяСтрока.Характеристика); СтруктураДействий.Вставить("ПроверитьЗаполнитьУпаковкуПоВладельцу", ТекущаяСтрока.Упаковка); СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц", Новый Структура("НужноОкруглять", Не Парам.ОтправительЦеховаяКладовая И Не Парам.ПолучательЦеховаяКладовая)); СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул")); СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры")); ПараметрыПроверкиСерий = Новый Структура("Склад, ПараметрыУказанияСерий"); ПараметрыПроверкиСерий.Склад = Новый Структура("Отправитель, Получатель", НовыйОбъект.Отправитель, НовыйОбъект.Получатель); ПараметрыПроверкиСерий.ПараметрыУказанияСерий = Парам.ПараметрыУказанияСерий; СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус", ПараметрыПроверкиСерий); СтруктураДействий.Вставить("НоменклатураПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти", Парам.ИмяФормы, "Товары")); Кэш = Парам.НаправленияДеятельностиКэшированныеЗначения; СтруктураДействий.Вставить("ПроверитьЗаполнитьНазначение", Кэш.НазначениеПоУмолчанию); ОбеспечениеКлиентСервер.СтруктураДействийВставитьПриИзмененииНазначения(СтруктураДействий); ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); КонецЦикла;
Обработка гарантированно работает на платформе 8.3 (тестировано на релизе 8.3.18.1334) 1С:Комплексная автоматизация 2 (2.4.13.281)
Подключается через стандартный механизм использования внешних обработок, но может быть запущена через меню Файл.
Использование обработки: Из открытого документа запустить обработку заполнения, в отрывшейся форме выбрать ресурсную спецификацию и необходимое количество комплектов для перемещения в кладовую. После чего нажать кнопку "Заполнить по спецификации" . В открытом документе будет заполнена ТЧ "материалы", но сам документ не будет записан.
Режим совместимости Версия 8.3.14 и выше.
Акция! Вы можете скачать архив всех моих разработок, которые я предлагаю за StartMone, по Специальной цене: //infostart.ru/public/960899/#archive