gifts2017

Дополнительные отчеты и обработки для конфигураций, основанных на БСП. Часть 1. Заполнение объектов.

Опубликовал Иванов Алексей (acrk) в раздел Программирование - Практика программирования

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

 

1. Теория

 

БСП — библиотека стандартных подсистем, на которой основаны типовые конфигурации 1С на управляемых формах.

В состав БСП входит и подсистема «Дополнительные отчеты и обработки»», которая определяет правила создания и подключения к конфигурациям дополнительных ВНЕШНИХ отчетов и обработок различного назначения.

С обычными дополнительными отчетами и обработками более-менее все ясно, Они работают так же, как и при их вызове через главное меню «Файл/Открыть», поэтому с их разработкой и отладкой особых проблем нет.

А вот обработки других типов (внешние печатные формы и заполнение объектов и др.) дело сложнее.

 

В БСП для дополнительных внешних отчетов и обработок (далее ДВОО) предусмотрен справочник "ДополнительныеОтчетыИОбработки". Кроме того, для каждой ДВОО предусмотрено три способа вызова:

- вызов серверного метода;

- вызов клиентского метода;

- открытие формы.

Вызов обработок из справочника сильно затрудняет отладку в управляемом приложении, да еще разные способы вызова.

 

Наверное, эти три способа сложились у разработчиков БСП исторически. Можно предположить, что сначала появился вызов серверного метода, чтобы не связываться самим и не связывать разработчиков ДВОО требованиями к формам их отчетов и обработок. Вызвал серверный метод из модуля обработки и все, никаких тебе форм: с сервера нельзя открыть никакую форму.

Потом все-таки формы понадобились, и появился вызов клиентского метода, чтобы из обработки можно было открывать другие формы.

Ну а потом видимо решили вызов упростить, и появился метод просто открытия формы обработки.

 

Но если над всем этим подумать, то при открытии формы сначала на сервере вызывается обработчик события "ПриСозданииНаСервере. В нем можно вызвать любую серверную процедуру, и если форма не нужна, то "Отказ=Истина;" и все. Получаем тот же вызов серверного метода.

Затем при создании формы вызывается обработчик "ПриОткрытии", уже на клиенте. В нем можно вызвать клиентский метод формы, и если сама форма не нудна, то "Отказ=Истина;" и все. Получаем вызов клиентского метода.

Ну и наконец, если мы не отказываемся создать и открыть форму, то форма и откроется. Получаем вызов ДВОО способом "Открытие формы".

 

То есть я хочу сказать, что все ДВОО надо делать со способом вызова "Открытие формы". Это первый вывод.

 

Рассуждаем дальше. Открытие формы есть открытие формы. То есть, делается это в конфигурации БСП или просто через главное меню "Файл / Открыть", управление попадает в метод формы "ПриСозданииНаСервере". То есть такую обработку очень легко отлаживать. Запускаем через "Файл / Открыть" и отлаживаем. А потом подключаем в конфигурацию и она должна работать так же.

 

Рассуждаем дальше. БСП при вызове разных типов обработок (печатные формы, обработки заполнения объекта и т.д.) передает им дополнительные параметры. Эти параметры можно отобразить на открываемой форме, чтобы задавать их в режиме отладки. Тем более, что не трудно определить, открывается форма через "Файл / Открыть" или штатным для БСП способом через справочник "ДополнительныеОтчетыИОбработки" и скрывать эти реквизиты при штатной работе и показывать при отладке.

 

2. Практика

 

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

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

 

Файл обработки - АЦРК_ДополнительнаяВнешняяОбработкаЗаполненияОбъекта_ЗаполнениеКомментария.epf

 

2.1 Модуль обработки

Согласно БСП в модуле должна быть экспортная функция СведенияОВнешнейОбработке(), которая должна возвращать структуру с параметрами регистрации.

Как заполняется эта структура понятно из текста функции. Отметим следующие моменты:

- в качестве массива назначений указаны все ссылочные типы конфигурации;

- режим небезопасный, потому что меняет содержимое базы данных. Вообще можно дать такую рекомендацию: сначала ставим небезопасный режим, отлаживаем, потом ставим безопасный режим. Если будет работать, значит, оставляем безопасный режим, если нет - возвращаем небезопасный;

- обработка имеет две команды: по одной добавляется фиксированный комментарий, по другой команде открывается дополнительная форма для добавления произвольного комментария. Для формирования таблицы команд используются еще вспомогательные функция и процедура, знакомые всем, кто делал дополнительные отчеты и обработки по стандартам БСП;

- вариант использования для всех команд - "ОткрытиеФормы"

 

Замечение: в справочнике "ДополнительныеОтчетыИОбработки" есть еще два флажка "ИспользоватьДляФормыОбъекта" и "ИспользоватьДляФормыСписка". Почему их нет в структуре параметров регистрации - загадка. Уж разработчик внешней обработки знает, как она будет использоваться и сможет ли работать со списком объектов, и мог бы так же установить это в параметрах регистрации. По умолчанию они оба устанавливаются, поэтому их надо проверять и устанавливать вручную.

 

2.2 Форма обработки.

Раз уж мы стоим за вариант использования "ОткрытиеФормы" и ТОЛЬКО за него, то у обработки обязательно должна быть хотя бы одна форма. Рассмотрим ее.

При вызове формы БСП передает ей 4 параметра:

- "ДополнительнаяОбработкаСсылка" типа "СправочникСсылка.ДополнительныеОтчетыИОбработки";

- "ИдентификаторКоманды" типа "Строка";

- "ИмяФормы типа" типа "Строка";

- "ОбъектыНазначения" типа "Массив".

Поэтому добавляем в параметры формы соответствующие параметры. Параметр "ОбъектыНазначения" имеет тип "Произвольный", потому что типа "Массив" на клиенте нет.

Создаем реквизиты формы, соответствующие параметрам формы, и помещаем их на форму, объединив в группу "ГруппаРеквизитовДляОтладки".

 

В процедуре ПриСозданииНаСервере перенесем параметры формы в соответствующие реквизиты, и в дальнейшем будем работать с этими реквизитами (сами-то параметры будут уже недоступны).

 

Добавим реквизит формы рф_РежимОтладки типа булево. Он будет установлен в процедуре ПрисозданииНаСервере. Признак отладки - пустое значение параметра "ДополнительнаяОбработкаСсылка", потому что пи штатном запуске БСП всегда передает в этом параметре ссылка на элемент справочника "ДополнительныеОтчетыИОбработки", в котором хранится наша обработка.

 

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

А при открытии заполним этими командами список выбора для реквизита "ИдентификаторКоманды".

Сама таблица при открытии скрыта, потому что список команд можно посмотреть в списке выбора идентификатора команды, но, закомментировав соответствующую строку, таблицу команд можно увидеть.

 

Теперь добавляем реквизит для ввода нашего комментария и помещаем его на формы.

И еще добавляем команду формы "ДобавитьВКомментарий" и выносим ее на форму в соответствующую кнопку.

 

Еще добавляем в форму реквизит рф_ИмяЭтойОбработки, которую можно использовать для открытия других форм этой обработки с помощью команды:
ОткрытьФорму("ВнешняяОбработка."+рф_ИмяЭтойОбработки+".Форма.ИмяФормы",л_СтруктураПараметров,ЭтаФорма.ВладелецФормы);

 

Вот собственно и все.

Можно отлаживать обработку через "Файл / открыть", и потом подключить ее в Дополнительные отчеты и обработки.

 

Конечно, не все так просто, есть нюансы.

Один нюанс связан с отсутствием формы-владельца при отладке через Файл / Открыть. Заключаем такие строки в Попытку.

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

 

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

 

В следующей части будет пример внешней печатной формы.

 

Скачать файлы

Наименование Файл Версия Размер
АЦРК_ДополнительнаяВнешняяОбработкаЗаполненияОбъекта_ЗаполнениеКомментария 106
.epf 11,52Kb
26.02.15
106
.epf 1.0.003 11,52Kb Скачать
Текст статьия в формате RTF 10
.rtf 57,11Kb
26.02.15
10
.rtf 57,11Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Константин Юрин (kostyaomsk) 08.01.15 18:38
БСП вещь "хорошая" потому что теперь везде. В УТ 11.1, БП 3.0...Трудоемкость печатных форм возросла в 1,5 раза! При необходимости вернусь к материалу.
2. Александр Черкасов (CherAl) 13.01.15 00:39
Весьма полезная статья. Огромное спасибо автору!
SemenovaMarinaV; +1 Ответить
3. Dmitry Afanasyev (afanasko) 14.01.15 20:13
Плюс за режим "открытие формы". Даже не задумывался над тем как это удобно для тестирования и отладки внешних форм.
4. Дмитрий Семенов (Sam13) 15.01.15 11:54
Тема важная и нужная. Автору респект, продолжать в том же духе
5. Михаил Курилов (MishaHD) 18.01.15 11:11
Спасибо за статью, тема по работе с БСП очень актуальна. Ждем продолжения!
6. Роман Антонов (ronhard) 19.01.15 00:05
А разве типа "Массив" на клиенте нет? Насколько известно тип "Массив" есть и на клиенте и на сервере. Или я что-то не правильно понял?
7. Иванов Алексей (acrk) 19.01.15 10:03
(6) ronhard, наверное неточно выразился. Массив-то на клиенте есть, но на форме его отобразить нельзя - надо в список значений перегнать.
8. Роман Антонов (ronhard) 19.01.15 10:32
9. Дмитрий Семенов (Sam13) 25.01.15 13:19
Автору респект, сам долго мучился над этой темой. Статью читал несколько раз, пока не погрузился в тему не очень было понятно, когда уже сам наткнулся на проблемы, то повторное прочтение расставило точки над i.
SemenovaMarinaV; +1 Ответить
10. Марина Семёнова (SemenovaMarinaV) 26.01.15 10:47
11. Сергей Болбачан (sergbsv) 30.01.15 07:16
Да желательно продолжение по печатные формам
12. Иванов Алексей (acrk) 30.01.15 14:03
(11) sergbsv,
клиенты покоя не дают - конец года. Может в феврале поспокойнее будет.
13. Константин Юрин (kostyaomsk) 28.02.15 08:43
(12) acrk, радоваться надо клиентам. Сейчас время такое, кризисное.
14. Андрей Микаилов (Andle) 17.06.15 14:51
Добрый день! После использования обработки заполнения в обычной форме (если не записывать заполненный объект принудительно) пользователь имеет возможность отказаться от наделанного. Как добиться такого же поведения в управляемой форме? Вернее, примерно, понятно как это сделать с внесением изменений в конфигурацию - при помощи добавления в форму заполняемого объекта процедуры обработки оповещения. А вот как быть, если конфигурацию менять нельзя или не хочется?
15. Иванов Алексей (acrk) 18.06.15 11:49
(14) Andle, Этот вопрос к разработчикам БСП и типовых конфигураций.
Существующий механизм "заполнения объекта" не предусматривает такую возможность. Он же заполняет объект, а не форму, и объект записывается в базу.
Полтора года назад я этот вопрос поднимал в конференции 1С.
В новых релизах БСП (.1.6.ххх и выше) вроде создан новый тип дополнительной обработки - "заполнение формы".
По идее надо его использовать. Надо будет заняться.
16. Александр Крынецкий (echo77) 30.09.15 15:45
Раскрасьте пожалуйста публикацию
17. Иванов Алексей (acrk) 12.10.15 21:25
(16) echo77, что значит "раскрасить"? Научите.
18. Дмитрий Сидоренко (dsdred) 10.05.16 07:36
(14) Andle,
А вот как быть, если конфигурацию менять нельзя или не хочется?

Очень просто быть. "Расширение конфигурации"