Имя: Пароль:
1C
1С v8
Печатная форма в УФ с формой (выбор подписи пользователем!)
,
0 Diamond905
 
23.02.14
17:56
Как сделать на управляемой форме (УТ 11 и БП 3), чтобы можно было при выборе печати сначала вызвать форму, где пользователь что то выберет, а потом это будет использоваться при печати? На обычных просто все было - в процедуре печати вызываешь форму модально, выбираешь что нужно и вуаля используешь реквизиты формы.

На управляемой печать вроде как на сервере, модуль объекта же. Пробовал и так и сяк. Добился того что сначала появляется форма:

    ДобавитьКоманду(ТаблицаКоманд,
                    "Счет-Фактура  с выбором уполномоченных лиц",
                    "ВПФ_MXL_СчетФактура1137",
                    "ОткрытиеФормы",
                    Истина,
                    "ПечатьMXL");

Но дальше то при попытке печати с формы:

&НаКлиенте
Процедура ОК(Команда)
  
    ВыполнитьОткрытиеПечатнойФормы();
        
    ЭтаФорма.Закрыть();
    
КонецПроцедуры

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

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

выходило что при печати создается новый экземпляр обработки и там ему пофиг что выбрано в исходной форме.

Как правильно то сделать этот механизм в этих великих управляемых формах с их клиент-серверной невозможностью работать с нормальным логичным алгоритмом???
1 Dmitry1c
 
23.02.14
18:00
(0) это очень сильное колдунство.
2 marvak
 
23.02.14
18:38
(0)
Я в доп. команде печати в заказе клиента (УТ 11.1.2.28) слелал так:

Если УправлениеПечатьюКлиент.ПроверитьДокументыПроведены(ПараметрКоманды, ПараметрыВыполненияКоманды.Источник) Тогда
        
    ПараметрыПечати = Новый Структура;
        
    СписокВыбора = ПолучитьСписокВыбора(ПараметрКоманды);
        
    Если СписокВыбора.Количество() > 0 Тогда
        
        ВыбранныйЭлемент = СписокВыбора.ВыбратьЭлемент("Выберите представителя организации в договоре.");
            
        Если ВыбранныйЭлемент <> Неопределено Тогда
                            ПараметрыПечати.Вставить("ОтветственноеЛицо", ВыбранныйЭлемент.Значение);
                
                УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(
                "Документ.ЗаказКлиента",
                    "ПремьерПакДоговор",
                    ПараметрКоманды,
                    Неопределено,
                    ПараметрыПечати);
            
        КонецЕсли;
        
    КонецЕсли;
        
КонецЕсли;
    
&НаСервере
Функция ПолучитьСписокВыбора(ПараметрКоманды)

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

    Возврат СписокВыбора;
    
КонецФункции // ()
3 Мимохожий Однако
 
23.02.14
18:46
Удобнее делать выбор не во время печати, а до. Нужную подпись можно хранить в регистре сведений. Например "Уполномоченные лица организации". Или на худой конец в дополнительном реквизите документа.
4 Мимохожий Однако
 
23.02.14
18:47
(0)Как это будет выглядеть при групповой печати документов на 100? ))
5 Diamond905
 
23.02.14
18:47
Эм, господа, смысл в том что это ВНЕШНЯЯ Печатная форма и менять модули нельзя. С заменой в конфе и я горазд
6 Diamond905
 
23.02.14
18:47
(4) никак, ее не будет
7 Diamond905
 
23.02.14
18:53
(3) о, идея - может в хранилище сохранять?
8 Мимохожий Однако
 
23.02.14
18:58
(6)У пользователя может быть другое мнение, т.к. он всегда прав.
(7)Уже как минимум 3 варианта подсказали. Можешь и так. А можешь для каждой подписи свою форму накидать ))
9 Diamond905
 
23.02.14
19:13
(8) Суть то печатной формы чтоб конфиг не менять, мне ж нужен был вариант как на управляемых. Но хоть и косвенно идею то вы подали. Вот так все получилось!

&НаКлиенте
Процедура ОК(Команда)
    СохранитьВХранилищеРеквизиты();
    
    ВыполнитьОткрытиеПечатнойФормы();
        
    ЭтаФорма.Закрыть();
    
КонецПроцедуры

&НаСервере
Процедура СохранитьВХранилищеРеквизиты()
    ХранилищаНастроек.ХранилищеБуфераОбмена.Сохранить("ВПФ","РуководительДляВПФСчетФактуры",Объект.Руководитель);    
    ХранилищаНастроек.ХранилищеБуфераОбмена.Сохранить("ВПФ","ГлавныйБухгалтерДляВПФСчетФактуры",Объект.ГлавныйБухгалтер);    
КонецПроцедуры

Потом при формировании:

Процедура ЗаполнитьРеквизитыПодвалаСчетФактура(ОбластьПодвала, ДанныеПечати, СведенияОбОрганизации)

    Руководитель = ХранилищаНастроек.ХранилищеБуфераОбмена.Загрузить("ВПФ","РуководительДляВПФСчетФактуры");    
    ГлавныйБухгалтер = ХранилищаНастроек.ХранилищеБуфераОбмена.Загрузить("ВПФ","ГлавныйБухгалтерДляВПФСчетФактуры");
    
    
    Если СведенияОбОрганизации.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо Тогда

        ОбластьПодвала.Параметры.ФИОРуководителя =         ?(ЗначениеЗаполнено(Руководитель),Руководитель, ДанныеПечати.Руководитель);
        ОбластьПодвала.Параметры.ФИОГлавногоБухгалтера     = (ЗначениеЗаполнено(ГлавныйБухгалтер),ГлавныйБухгалтер , ДанныеПечати.ГлавныйБухгалтер);
    Иначе
        ОбластьПодвала.Параметры.ФИОПБОЮЛ                 = ДанныеПечати.Руководитель;
        ОбластьПодвала.Параметры.Свидетельство             = СведенияОбОрганизации.Свидетельство;
    КонецЕсли;
    
КонецПроцедуры
10 Холст
 
23.02.14
19:16
1. модальные формы под запретом же говорят в УФ
2. смена последовательности с Док - ОбрПечати - ОбрВыбора - ОбрПечати на Док - ОбрВыбора - ОбрПечати
11 Мимохожий Однако
 
23.02.14
19:31
(9)Хороший велосипед. При нормальной настройке достаточно типовых настроек. Открой демо УТ и увидишь, что и руководитель и бухгалтер попадают нормально и в ТОРГ12 и в Счет-фактуру.
12 Diamond905
 
23.02.14
19:42
(11) мне нужен был скорее универсальный механизм для подобных конструкций. Этот вроде подходит
13 Поpyчик-4
 
24.02.14
09:17
(0) Передача параметров/значений во внешнюю печатную форму для конфигураций на БСП
http://infostart.ru/public/191796/
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс