Имя: Пароль:
1C
1С v8
Программное добавление команд печати на УФ документа
0 vladimir80
 
01.03.19
11:35
Всем привет! Есть нужда - добавить кнопки печати в документ расходный ордер, реализующие печать кусков отдельно по рабочим участкам. Печатная форма добавлена к документу и нарисована в расширении. Список рабочих участков, конечно же, получаем при создании формы на сервере, там же хотелось бы добавить команды печати по каждому из присутствующих в конкретном документе рабочих участков. Подскажите порядок действий, с УФ пока тяжело, в модуль менеджера объекта как-то логически не получается засунуть добавление команд... Конфа УТ 11.4.
1 sqr4
 
01.03.19
11:52
ВПФ не предлагать?
2 vladimir80
 
01.03.19
12:02
Не принципиально. Главное рабочий механизм добавления команд в зависимости от содержимого документа, доступный из расширения.
3 sqr4
 
01.03.19
12:03
4 sqr4
 
01.03.19
12:03
Без расширений без доработки конфигурации
5 vladimir80
 
01.03.19
12:34
Ммм, а в каком моменте я смогу сформировать список команд в зависимости от содержимого документа? Печатные формы сформировать я могу без проблем - мне бы с набором команд разобраться... Ссори, возможно этот момент в коде проскочил - но я не заметил.

Т.е. в документе товары по трем рабочим участкам - на форме три команды. именованные "Печать раб уч 1", "Печать раб уч 2" и т.п., если один участок - значит одна команда, 10 - значит десять команд.
6 vladimir80
 
01.03.19
13:16
Или это предложение внедрить команду для вызова формы, на которой можно расположить команды печати в зависимости от контекста?
7 sqr4
 
01.03.19
13:32
(6) да наверно плохая идея с ВПФ
8 vladimir80
 
01.03.19
14:54
Ну видимо как обычно через гланды придется...

В расширении в процедуре ПриСозданииНаСервере, вернее ПриСозданииНаСервереПосле пишем:

        Для Каждого РУ ИЗ СоответствиеРабочихУчастковДокумента Цикл
            ИмяКоманды = Строка("Печать_" + СтрЗаменить(РУ.Значение.УникальныйИдентификатор(), "-", "_"));
            
            НоваяКоманда = Команды.Добавить(ИмяКоманды);
            НоваяКоманда.Действие = "СделатьЧтото";
            
            КнопкаКоманднойПанели = Элементы.Добавить(ИмяКоманды+"Кнопка", Тип("КнопкаФормы"), Элементы.ПодменюПечать);
            КнопкаКоманднойПанели.ИмяКоманды = ИмяКоманды;
            КнопкаКоманднойПанели.Заголовок = "Печать по учатку "+ Строка(РУ.Значение);
        КонецЦикла;

СоответствиеРабочихУчастковДокумента получить не проблема. В процедуре СделатьЧтоТо берем Команда.ИмяКоманды, отсекаем строку "Печать_", меняем "_" на "-", получаем строковый УИД рабочего участка, ну и дальше печатаем с отбором по этому рабочему участку. Всем спасибо.
9 vladimir80
 
01.03.19
15:32
&НаСервере
Процедура РО_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
        
                
        СоответствиеРабочихУчастковДокумента = ЗаполнитьРабочиеУчасткиНаСервере(); // Возврат Соответствие

        Для Каждого РУ ИЗ СоответствиеРабочихУчастковДокумента Цикл
            ИмяКоманды = "Печать_" + СтрЗаменить(РУ.Значение.УникальныйИдентификатор(), "-", "_");
            
            НоваяКоманда = Команды.Добавить(ИмяКоманды);
            НоваяКоманда.Действие = "СделатьЧтото";
            
            КнопкаКоманднойПанели = Элементы.Добавить(ИмяКоманды+"Кнопка", Тип("КнопкаФормы"), Элементы.ПодменюПечать);
            КнопкаКоманднойПанели.ИмяКоманды = ИмяКоманды;
            КнопкаКоманднойПанели.Заголовок = "Печать по участку "+ Строка(РУ.Значение);
        КонецЦикла;
        
        
КонецПроцедуры


&НаКлиенте
Процедура СделатьЧтото(Команда)
    
ТабДок = Новый ТабличныйДокумент;

СтрокаГУИД = СтрЗаменить(Команда.Имя, "Печать_", "");
СтрокаГУИД = СтрЗаменить(СтрокаГУИД, "_", "-");

СделатьЧтотоНаСервере(ТабДок, СтрокаГУИД);

ТабДок.Показать("Заголовок таб док");
КонецПроцедуры

&НаСервере
Процедура СделатьЧтотоНаСервере(ТабДок, СтрокаГУИД)
    
РабочийУчасток = Справочники.РабочиеУчастки.ПолучитьСсылку( Новый УникальныйИдентификатор(СтрокаГУИД) );

ПроцедураЗаполненияТабличногоДокумента(ТабДок, РабочийУчасток);
    
КонецПроцедуры

Вот как-то так в итоге