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

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)

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

10.09.2024    1113    MadRave    1    

13

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

А что, если долгожданная реализация Паузы в 1С смутно напоминает старую, проверенную? А?!

06.09.2024    928    n_mezentsev    10    

7

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

Добавим дополнительные свойства в новый документ средствами БСП

02.09.2024    3621    John_d    10    

52

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

Всё больше организаций выбирает для серверов под 1С операционные системы Linux. Одним из отличий систем Windows и Linux является отсутствие COM объектов, которые зачастую использовались для формирования печатных форм офисных документов (Word). Конечно, можно выполнять печать и на клиенте, но есть риск импортозамещения. В работе у меня случались проблемы с зависанием процесса Word, поэтому я не люблю его использовать.

29.07.2024    4685    PROSTO-1C    12    

49

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

Описание возможности печати произвольного QR-кода в текстовом (не фискальном) документе ККМ с помощью типовых функций БПО.

22.07.2024    710    KirillZ44    6    

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