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

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    3251    16    16    

17

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

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

27.12.2024    1389    PROSTO-1C    6    

28

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

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

11.12.2024    3629    gorenski    0    

8

БСП (Библиотека стандартных подсистем) Менеджеры внешних отчетов Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление холдингом Абонемент ($m)

За последние лет 5 несколько раз сталкиваюсь с проблемой на разных проектах (в конфигурациях 1С:ERP, 1С:ERP УХ и многих других, основанных на БСП), когда много пользователей (около 30 тысяч) в информационной базе, время добавления доступа для пользователей занимает значительное время. Открытие списка занимает от 10 до 15 секунд, и каждое изменение списка еще примерно столько же.

1 стартмани

10.12.2024    876    Iaskeliainen    2    

7

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

Некоторые нюансы, если вы захотите создавать свои расширения. Доработка отчета "Связанные документы" для отражения документов расширения. Печатные формы с шаблоном Word.

20.11.2024    3066    milkers    3    

9

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

В статье описан алгоритм для включения документа или справочника в систему БСП. Будет полезно программистам 1С, начинающим работать с БСП.

24.10.2024    1532    PROSTO-1C    0    

16

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

В материале описан универсальный механизм работы с добавленными элементами на общую форму «ФормаОтчета». Думаю, облегчит работу многим разработчикам.

08.10.2024    1277    PROSTO-1C    4    

14
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 14.01.24 18:52
Сообщение было скрыто модератором.
...
2. Sergeevich 37 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 20 07.03.24 10:26 Сейчас в теме
Это можно разрулить во внешней печатной форме. Там любой нужный алгоритм выбора макета.
Так же можно вывести предварительную форму настроек печати, где пользователь определит нужные параметры.
Оставьте свое сообщение