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

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. В форме обработки, по аналогии с документами, в командной панели нужно разместить Подменю с наименованием ПодменюПечать.

См. также

БСП. Добавляем отчет в меню Отчеты

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

Добавим новый отчет в меню нового документа средствами БСП.

02.04.2024    3310    John_d    10    

90

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1830    dimanich70    8    

14

Заполнение поля адреса в своей обработке [БСП]

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

Небольшая шпаргалка по функциям БСП касательно адреса. Так скажем, еще один способ помимо https://infostart.ru/1c/articles/1060970/

12.02.2024    821    FilippovRI    0    

15

Расширяем возможности дополнительных обработок и настраиваем их отладку

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

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

07.02.2024    2704    YA_418728146    11    

45

1С:БСП Дополнительные реквизиты и сведения

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

В этой статье расскажем об архитектуре, использовании и особенностях реализации подсистемы «Свойства» из инструментария разработчика «1С:Библиотека стандартных подсистем» (1С: БСП).

19.01.2024    6804    PROSTO-1C    5    

46

Бесплатный митап 9 февраля «Библиотеки и фреймворки на 1С и всё, что с этим связано»

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

Митап посвящен вопросам создания, использования и поддержке переиспользуемого кода при разработке решений на платформе 1С:Предприятие 8.

15.01.2024    3932    0    Infostart    0    

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

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

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

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


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