Открытие формы подключаемой внешней обработки без записи документа

15.12.21

Разработка - Инструментарий разработчика

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Открытие формы подключаемой внешней обработки без записи документа (расширение + обработка)
.zip 10,67Kb
10
10 Скачать (1 SM) Купить за 1 850 руб.

"Для выполнения команды данные будут записаны. Продолжить?"

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

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

1. Добавляем в ТЧ "Команды" справочника "ДополнительныеОтчетыИОбработки" новый реквизит "доп_РежимЗаписи" с типом Строка(50)

2. В общем модуле "ДополнительныеОтчетыИОбработки" вносим следующие доработки

2.1. Функция "СведенияОВнешнейОбработке".

Необходимо для таблицы команд добавить еще одну колонку "доп_РежимЗаписи"

ТаблицаКоманд.Колонки.Добавить("доп_РежимЗаписи", Новый ОписаниеТипов("Строка"));

Это позволит в дальнейшем указывать нам нужный режим записи, при вызове данной функции из обработки ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке()

2.2. Функция "ТаблицаОтчетовИОбработок"

Необходимо доработать запрос, а именно добавить новый реквизит в выборку из таблицы команд

	|		ПоказыватьОповещение,
	//+++
	|		доп_РежимЗаписи,
	//---
	|		Скрыть

2.3. Процедура "ПриОпределенииКомандЗаполненияПодключенныхКОбъекту"

Добавим дополнительное условие для отмены записи документа

Если СтрокаТаблицы.ВариантЗапуска = ЗаполнениеФормы Тогда
	Команда.Обработчик  = "ДополнительныеОтчетыИОбработки.ОбработчикКомандыЗаполнения";
	Команда.РежимЗаписи = "НеЗаписывать";
//+++
ИначеЕсли СтрокаТаблицы.доп_РежимЗаписи = "НеЗаписывать" Тогда
	Команда.Обработчик  = "ДополнительныеОтчетыИОбработкиКлиент.ОбработчикКомандыЗаполнения";
	Команда.РежимЗаписи = "НеЗаписывать";
//---
Иначе
	Команда.Обработчик  = "ДополнительныеОтчетыИОбработкиКлиент.ОбработчикКомандыЗаполнения";
	Команда.РежимЗаписи = "Записывать";
КонецЕсли;

Обратите внимание как работает типовой функционал.

Если у нас вид обработки "Заполнение формы", то идет вызов команды на сервер (модуль обработки) и запись отключена.

Во всех остальных случаях режим записи - "Записывать".

Мы же добавили новое условие, что если у обработки реквизит "доп_РежимЗаписи" равен "НеЗаписывать" тогда мы устанавливаем режим записи "НеЗаписывать".

 

Пример вызова из самой обработки:

Функция СведенияОВнешнейОбработке() Экспорт

	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("");
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();

...

	Команда = ПараметрыРегистрации.Команды.Добавить();
	Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
	//Добавляем при необходимости режим записи. Условие добавлено для обратной совместимости.
	Если ПараметрыРегистрации.Команды.Колонки.Найти("доп_РежимЗаписи") <> Неопределено Тогда
		Команда.доп_РежимЗаписи = "НеЗаписывать";
	КонецЕсли;

...

	Возврат ПараметрыРегистрации;

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

Часть типового кода я пропустил, думаю тут нет необходимости что либо показывать. Полное описание в документации БСП или в приложенной обработке - примере.

Как происходит заполнение:

Открывается обработка. В событии "ПриОткрытии" на клиенте, нам доступен реквизит "ВладелецФормы"  - владелец этой формы.

Мы выполняем какие либо промежуточные действия. Данные берем с реквизитов или объекта формы владельца.

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

 

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

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

ИначеЕсли СтрокаТаблицы.Модификатор = "НеЗаписывать" Тогда
	Команда.Обработчик  = "ДополнительныеОтчетыИОбработкиКлиент.ОбработчикКомандыЗаполнения";
	Команда.РежимЗаписи = "НеЗаписывать";

Такой вариант проще, но только если вы не используете типовой модификатор, например для печатной формы "ПечатьMXL".

В приложенных файлах пример подключаемой обработки и расширения с данной доработкой.

Тестировалось в конфигурации 1C:ERP 2.5.7.201 (БСП 3.1.5.192).

В обработке примере прописано назначение "Документ.ЗаказКлиента".

БСП

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    183116    1017    403    

965

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    23731    156    84    

155

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    20139    51    19    

86

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 руб.

10.11.2023    13557    55    33    

76

Инструментарий разработчика Программист Платформа 1С v8.3 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    30319    103    48    

147

Инструментарий разработчика Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    2263    4    0    

7

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    19048    7    32    

43
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ixijixi 2001 15.12.21 14:36 Сейчас в теме
А можно как-то без доработок отключить запись документа перед вызовом команды? В более ранних версиях БСП вроде система не просила записывать документ, если он не модифицирован, а теперь даже немодифицированный документ просит записать. Бред, конечно, но такова данность.
4. maraty 472 15.12.21 16:41 Сейчас в теме
(1)
А можно как-то без доработок отключить запись документа перед вызовом команды? В более ранних версиях БСП вроде система не просила записывать документ, если он не модифицирован, а теперь даже немодифицированный документ просит записать. Бред, конечно, но такова данность.

Если это будет возможно сделать типовыми средствами, то я удалю эту статью как не имеющую практического применения. Да и самому интересен был бы способ решения.
2. gzharkoj 531 15.12.21 15:31 Сейчас в теме
В БСП это есть, даже есть пример на инфостарте https://infostart.ru/public/1280626/
На ИТС https://its.1c.ru/db/bsp314doc/content/4766/hdoc
3. maraty 472 15.12.21 16:37 Сейчас в теме
(2) давайте я процитирую из предоставленных вами ссылок:
"Возвращает имя типа команд по заполнению формы без записи объекта. Данные команды доступны только в обработках заполнения (Вид = "ЗаполнениеОбъекта").
Для выполнения команд такого типа в модуле объекта следует определить экспортную процедуру по шаблону:"

Т.е. наш метод будет вызван через ВыполнитьКоманду в модуле обработки.
Вы уверены что на сервере сможете что-либо вызвать из клиентских методов, например "ПоказатьВопрос"?
5. gzharkoj 531 15.12.21 17:02 Сейчас в теме
(3) А что если Объект - это Форма, Форма ведь объект, а значит модуль объект = модуль формы. Возможно, на ИТС выразились не корректно.
Возможно такой подход не решит вопрос именно запись перед вызовом, но вы попробуйте и дополните статью, будет полезно.
6. maraty 472 15.12.21 17:20 Сейчас в теме
(5) Перед предыдущим ответом смоделировал еще раз ситуацию.
Т.е. при следующих условиях:

ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
...
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыЗаполнениеФормы();

Обработчик идет в ВыполнитьКоманду в модуль обработки.

Да и в типовой логике обработчик выполнения у нас идет из серверного модуля ДополнительныеОтчетыИОбработки.ОбработчикКомандыЗаполнения
7. gzharkoj 531 15.12.21 18:01 Сейчас в теме
(6) Действительно обращается в модуль объекта. Реквизиты объекта формы дает изменить, но интерактивности не будет.
9. TMV 11 18.12.21 17:24 Сейчас в теме
Зачем использовать ТипКомандыОткрытиеФормы, когда для заполнения форм предусмотрен ТипКомандыЗаполнениеФормы, в котором нет принудительной записи объекта?
10. maraty 472 20.12.21 09:13 Сейчас в теме
(9)
Зачем использовать ТипКомандыОткрытиеФормы, когда для заполнения форм предусмотрен ТипКомандыЗаполнениеФормы, в котором нет принудительной записи объекта?

Отвечал уже выше. ТипКомандыЗаполнениеФормы не подразумевает какое либо интерактивное взаимодействие с пользователем перед заполнением. Все действия происходят на сервере.
11. AlexeyIsip 26 22.12.21 15:20 Сейчас в теме
Я себе в конфу просто прописал в расширение безусловный режим записи "НеЗаписывать", тк все обработки заполнения мои и мне точно не нужно ничего записывать...

&После("ПриОпределенииКомандЗаполненияПодключенныхКОбъекту")
Процедура wtsr_ПриОпределенииКомандЗаполненияПодключенныхКОбъекту(Команды, ИдентификаторыОбъектов, ИсточникиКоманд)
Для Каждого Команда из Команды Цикл
Если Команда.Обработчик = "ДополнительныеОтчетыИОбработкиКлиент.ОбработчикКомандыЗаполнения" Тогда
Команда.РежимЗаписи = "НеЗаписывать";
КонецЕсли;
КонецЦикла;
КонецПроцедуры
user717534; +1 Ответить
12. user717534 11 27.06.23 10:01 Сейчас в теме
(11)лучший вариант, спасибо!
user2113727; +1 Ответить
Оставьте свое сообщение