Использование подключаемых команд в обработках на примере дополнительных печатных форм

05.02.24

Разработка - БСП (Библиотека стандартных подсистем)

Функционал полезен в обработках типа Рабочий стол или Пакетное формирование со сложным подбором документов. Реализованы настройки подключаемых команд подсистемы Печать (БСП 3.1.7.526, ERP 2.5.12.121).

Пример задачи: в форме пакетного формирования документов необходимо предусмотреть печать всех видов форм, подключаемых через механизм доп.печатных форм (доступны из формы документа и из формы списка).

Задача реализуется через использование штатных настроек для обработчиков подключаемых команд и небольших правок в модулях БСП. Использование доработок актуально для версии БСП 3.1.7.526, ERP 2.5.12.121.

Этапы доработки:

1.Обработчики формы обработки

ПриСозданииНаСервере

// СтандартныеПодсистемы.ПодключаемыеКоманды
//++ добавляем описание параметров размещения (это требование описано в документации)
ПараметрыРазмещения = ПодключаемыеКоманды.ПараметрыРазмещения();
ПараметрыРазмещения.Источники = Новый ОписаниеТипов("ОбработкаОбъект.ПакетнаяПечатьДокументов_v1");
ПараметрыРазмещения.КоманднаяПанель = ЭтаФорма.КоманднаяПанель;
//---
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект,ПараметрыРазмещения);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

ПриОткрытии

// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды


Добавляемые обработчики подсистемы подключаемых команд:

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
     //+++
     //для обработок нужно переопределить параметры, чтобы не было лишних проверок по метаданным документов
     ДанныеСтруктура = ЗаполнитьПараметрыКоманды(); //нужно обезличить ДанныеФормыСтруктура
     ДополнительныеПараметры = Новый Структура;
     ДополнительныеПараметры.Вставить("ЭтоФормаОбъекта", Ложь);
     ДополнительныеПараметры.Вставить("ТребуетсяЗапись", Ложь);
     ДополнительныеПараметры.Вставить("ТребуетсяПроведение", Ложь);
     ДополнительныеПараметры.Вставить("ТребуетсяРаботаСФайлами", Ложь);
     ДополнительныеПараметры.Вставить("ВызовСервераЧерезОбработкуОповещения", Истина);
     ДополнительныеПараметры.Вставить("МассивСсылок", ПолучитьМассивСсылокНаДокументы());
     //---
     ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, ДанныеСтруктура,
     //+++
     ДополнительныеПараметры); //добавлен параметр с настройками переопределения
     //---
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения,ДополнительныеПараметры) Экспорт
     ПараметрыВыполнения.ТребуетсяЗапись = Ложь;
     ПараметрыВыполнения.МассивСсылок = ПолучитьМассивСсылокНаДокументы ();
     ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры

&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
     ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
     ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

&НаСервере
Функция ПолучитьМассивСсылокНаДокументы ()
     //сформировать массив ссылок на документы
     МассивСсылокНаДокументы = Новый Массив;
     МассивСсылокНаДокументы.Добавить(...); //из таблицы на форме или запросом в БД
     Возврат МассивСсылокНаДокументы;
КонецФункции

&НаСервере
Функция ЗаполнитьПараметрыКоманды()
     ДанныеСтруктура = Новый Структура;
     ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
     Для каждого Ревизит из ОбработкаОбъект.Метаданные().Реквизиты Цикл
          ДанныеСтруктура.Вставить(Ревизит.Имя, ОбработкаОбъект[Ревизит.Имя]);
     КонецЦикла;
     Возврат ДанныеСтруктура;
КонецФункции

 

2. Добавить возможность переопределения параметров исполнения команды
В модуле ПодключаемыеКомандыКлиент для метода НачатьВыполнениеКоманды добавить возможность переопределения:

 

// ДополнительныеПараметры - Структура с ключами переопределяемых параметров
Процедура НачатьВыполнениеКоманды(Форма, Команда, Источник, ДополнительныеПараметры = Неопределено) Экспорт
     ...
     Если ДополнительныеПараметры <> Неопределено Тогда
          Для каждого ПереопределяемыйПараметр из ДополнительныеПараметры Цикл
               ПараметрыВыполнения[ПереопределяемыйПараметр.Ключ] = ПереопределяемыйПараметр.Значение;
          КонецЦикла;
     КонецЕсли;
     ПродолжитьВыполнениеКоманды(ПараметрыВыполнения);
КонецПроцедуры


3. Доработки модулей БСП для исполнения кода из формы обработки:

В модуле ЗаполнениеОбъектов в методе ПриОпределенииКомандПодключенныхКОбъекту проверку прав на изменение документа поменять с учетом метаданных обработки

Если Источник.Вид = "ОБРАБОТКА"
     И НЕ ПравоДоступа("Использование", Источник.Метаданные) Тогда
     Продолжить;
ИначеЕсли Источник.Вид = "ДОКУМЕНТ"
     И Не Источник.ЭтоЖурналДокументов
     И Не ПравоДоступа("Изменение", Источник.Метаданные) Тогда
     Продолжить;
ИначеЕсли Не ПравоДоступа("Изменение", Источник.Метаданные) Тогда //любая другая проверка
     Продолжить;
КонецЕсли;


В модуле ПодключаемыеКоманды в методе ЗарегистрироватьИсточник добавить обработку метаданных обработки

ИначеЕсли Не Метаданные.Обработки.Содержит(ОбъектМетаданных) И Не Метаданные.Отчеты.Содержит(ОбъектМетаданных) Тогда
     Источник.ТипСсылкиДанных = Тип(Источник.Вид + "Ссылка." + ОбъектМетаданных.Имя);
//+++
ИначеЕсли Метаданные.Обработки.Содержит(ОбъектМетаданных) Тогда
     Источник.ТипСсылкиДанных = Тип(Источник.Вид + "Объект." + ОбъектМетаданных.Имя);
//---
КонецЕсли;


В методе КэшФормы для обработок сэмулировать поведение по аналогии с формой списка для документов

Если ЭтоФормаОбъекта = Неопределено Тогда
     Если ТипыИсточников.Количество() > 1 Тогда
          ЭтоФормаОбъекта = Ложь;
     //+++
     ИначеЕсли ТипыИсточников.Количество() = 1
          И Лев(ИсточникиЧерезЗапятую, 10) = "Обработка." Тогда
          ЭтоФормаОбъекта = Ложь;
     //---
     ...
     КонецЕсли;
КонецЕсли;


В модуле УправлениеПечатью в методе ЗаполнитьКомандыПечатиДляСпискаОбъектов исправить формирование представления типа для обработок

Если ДобавляемаяКомандаПечати.ТипыОбъектовПечати.Количество() = 0 Тогда
     //+++
     Если Метаданные.Обработки.Содержит(ОбъектМетаданных) Тогда
          ТипПредставление = СтрЗаменить(ОбъектМетаданных.ПолноеИмя(), ".", "Объект.");
     Иначе
          ТипПредставление = СтрЗаменить(ОбъектМетаданных.ПолноеИмя(), ".", "Ссылка.");
     КонецЕсли;
     ДобавляемаяКомандаПечати.ТипыОбъектовПечати.Добавить(Тип(ТипПредставление));
     //---
КонецЕсли;


4. В модуле УправлениеПечатьюУТСервер в методе ОпределитьОбъектыСКомандамиПечати в СписокОбъектов добавить обработку для выбора в форме редактирования внешних дополнительных обработок для размещения.

5. В форме обработки, по аналогии с документами, в командной панели нужно разместить Подменю с наименованием ПодменюПечать.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

БСП (Библиотека стандартных подсистем) Программист Платные (руб)

Синтакс-помощник БСП - cправочник по библиотекам стандартных подсистем и электронных документов. В состав справочника входит описание экспортных процедур и функций, размещенных в областях кода ПрограммныйИнтерфейс БСП и БЭД.

1800 руб.

21.11.2024    8755    41    24    

45

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

Telegram-бот для разработчиков 1С, работающих с БСП. Если не знаете нужный под задачу метод или не помните название, то опишите боту задачу и получите список подходящих экспортных методов из общих модулей БСП.

02.09.2025    2684    krasnov322    19    

30

Анализ учета БСП (Библиотека стандартных подсистем) 1С v8.3 1С:Библиотека стандартных подсистем Бесплатно (free)

Расширение для конфигураций на базе БСП 3.х. Позволяет создавать новые отчеты путем соединения или объединения других отчетов.

22.05.2025    3026    112    seperblunt    8    

22

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

В этой статье я расскажу, как в конфигурации 1С:ERP 2.5 при начале работы системы настроить открытие своих нетиповых форм (в том числе и из внешних обработок). Данную методику можно использовать как на тонком клиенте, так и на мобильном или веб-клиенте, а также в мобильном приложении.

12.05.2025    3264    PROSTO-1C    2    

17

БСП (Библиотека стандартных подсистем) Роли и права Программист 1С v8.3 1С:Библиотека стандартных подсистем Бесплатно (free)

Наткнулся на костыль по работе с ролями. Хочу поделиться, как не попасть на это странное поведение БСП.

07.05.2025    6800    dsdred    32    

88

БСП (Библиотека стандартных подсистем) Обновление 1С Программист 1C:ERP Бесплатно (free)

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

29.04.2025    3336    krasnoshchekovpavel    7    

19

БСП (Библиотека стандартных подсистем) Механизмы платформы 1С Программист 1С v8.3 Бесплатно (free)

Описание способа создания глобального обработчика оповещений (событие формы), не привязанного к какой-то конкретной форме.

01.04.2025    2359    krasnoshchekovpavel    0    

10

БСП (Библиотека стандартных подсистем) Программист 1С v8.3 1С:Библиотека стандартных подсистем Россия Бесплатно (free)

Как создать внешнюю печатную форму для конфигураций на базе БСП с желанной всеми разработчиками фишкой - автоматическим открытием обработки в конфигураторе с остановкой отладчика внутри процедуры Печать() при выполнении интерактивной команды печати.

24.03.2025    3053    GeraltSnow    6    

34
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 14.01.24 18:52
Сообщение было скрыто модератором.
...
2. Sergeevich 38 25.01.24 10:38 Сейчас в теме
Отличная статья, очень помогла. Часть из представленного в релизах уже поправили, вернее сделали так же как описано в данной статье. Однозначно +
3. DimaBr 04.02.24 15:36 Сейчас в теме
Рекомендую в последнем коде заменить
Если Метаданные.Обработки.Найти(ОбъектМетаданных.Имя) <> Неопределено Тогда

на
Если Метаданные.Обработки.Содержит(ОбъектМетаданных) Тогда

так как в случае Документа и Обработки с одинаковым наименованием получите неверный результат
user2090743; +1 Ответить
4. Andronav 05.03.24 09:48 Сейчас в теме
Только начинаю копать этого зверя (Подключаемые команды). Подскажите пожалуйста. Можно ли штатными средствами БСП программно из формы переопределить макет печатной формы? Т.е. в менеджере объекта имеем код

КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.МенеджерПечати = "УправлениеПечатью";
КомандаПечати.Идентификатор = "Документ.НашДокумент.ПФ_DOC_НашМакет_1";
КомандаПечати.Представление = НСтр("ru = 'Печать'");


На форме хочу видеть только одну подключаемую команду печати. Но при нажатии на кнопку "Печать", в зависимости от условий, должен подхватываться не ПФ_DOC_НашМакет_1, а скажем ПФ_DOC_НашМакет_5 или ПФ_DOC_НашМакет_6 и т.п.....
5. a.s.aksenov 22 07.03.24 10:26 Сейчас в теме
Это можно разрулить во внешней печатной форме. Там любой нужный алгоритм выбора макета.
Так же можно вывести предварительную форму настроек печати, где пользователь определит нужные параметры.
Для отправки сообщения требуется регистрация/авторизация