Имя: Пароль:
1C
 
вопрос по УПД внешняя печатная форма
0 program345
 
08.03.18
20:00
Привет друзья!
У упд есть 2 статуса:
"1 – счет-фактура и передаточный документ (акт)
2 – передаточный документ (акт)"        
        
Как сделать Внешнюю ВПФ сразу на 2 печатные формы, ведь в этой обработке жестко указывается команда печати:

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

    Возврат ПараметрыРегистрации;

КонецФункции
1 program345
 
08.03.18
20:03
В данном случает выведет только 1 статус, а если это второй то выдаст ошибку "печатная форма недоступна". Профи, есть идеи?
2 program345
 
08.03.18
20:04
делаю впф для бп 3.0
3 Serg_1960
 
08.03.18
21:06
Добавь ещё одну команду (для печати только передаточного) - пусть сам пользователь выбирает что он  хочет.

PS: то, что назначения - это массив, ты понял, а то что команды - это табличная часть (и их может быть много) - не понял? Не верю :)

Вот тут вроде бы подробно объяснено было:
http://1c-pro.ru/threads/stati-po-razrabotke-k-rassmotreniju.47563/
4 program345
 
08.03.18
21:31
(3) спасибо за отклик!
Так:

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

    Возврат ПараметрыРегистрации;

КонецФункции
5 program345
 
08.03.18
21:45
но в типовых нет такого выбора, там есть функц:

Функция ПолучитьНастройкиПечатиУниверсальныхПередаточныхДокументов(МассивДокументов) Экспорт
    
    УстановитьПривилегированныйРежим(Истина);
    
    СчетаФактуры             = Новый Массив;
    ДокументыБезСчетовФактур = Новый Массив;
    
    Для каждого Объект Из МассивДокументов Цикл
    
        Если ТипЗнч(Объект) = Тип("ДокументСсылка.СчетФактураВыданный") Тогда
            
            СчетаФактуры.Добавить(Объект);
            
        ИначеЕсли ТипЗнч(Объект) = Тип("ДокументСсылка.ОказаниеУслуг") Тогда
            
            Запрос = Новый Запрос;
            Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов);
            Запрос.УстановитьПараметр("ПустаяСФ", Документы.СчетФактураВыданный.ПустаяСсылка());
            Запрос.Текст =
                "ВЫБРАТЬ РАЗЛИЧНЫЕ
                |    ОказаниеУслугКонтрагенты.СчетФактура КАК СчетФактура
                |ИЗ
                |    Документ.ОказаниеУслуг.Контрагенты КАК ОказаниеУслугКонтрагенты
                |ГДЕ
                |    ОказаниеУслугКонтрагенты.Ссылка В(&МассивДокументов)
                |    И ОказаниеУслугКонтрагенты.ВыданСФ
                |    И ОказаниеУслугКонтрагенты.СчетФактура <> &ПустаяСФ";
                
            Результат = Запрос.Выполнить();
            Если Результат.Пустой() Тогда
                ДокументыБезСчетовФактур.Добавить(Объект);
            Иначе
                Выборка = Запрос.Выполнить().Выбрать();
                Пока Выборка.Следующий() Цикл
                    СчетаФактуры.Добавить(Выборка.СчетФактура);
                КонецЦикла;
            КонецЕсли;
            
        Иначе
            
            СтруктураОтбора = Новый Структура;
            Если ТипЗнч(Объект) = Тип("ДокументСсылка.ОтчетКомитентуОПродажах")
                И Объект.ВидОперации = Перечисления.ВидыОперацийОтчетКомитентуОПродажах.ОтчетОЗакупках Тогда
                СтруктураОтбора.Вставить("Продавец", Справочники.Контрагенты.ПустаяСсылка());
            КонецЕсли;
            
            СчетФактура = УчетНДСПереопределяемый.НайтиПодчиненныйСчетФактуруВыданныйНаРеализацию(Объект,,, СтруктураОтбора);
            
            Если СчетФактура = Неопределено Тогда
                ДокументыБезСчетовФактур.Добавить(Объект);
            Иначе
                СчетаФактуры.Добавить(СчетФактура);
            КонецЕсли;
            
        КонецЕсли;
        
    КонецЦикла;
    
    ДокументыСчетФактураНеТребуются = ПолучитьДокументыСчетФактураНеТребуются(ДокументыБезСчетовФактур);
    
    УниверсальныеПередаточныеДокументы = Новый Массив;
    СписокМакетов = "";
    
    ЕстьУПДСтатус1 = Ложь;
    ЕстьУПДСтатус1_981 = Ложь;
    
    ЕстьУПДСтатус2 = Ложь;
    ЕстьУПДСтатус2_981 = Ложь;
    
    Для каждого Документ Из СчетаФактуры Цикл
        
        УниверсальныеПередаточныеДокументы.Добавить(Документ);
        
        ВерсияПостановленияНДС1137 = УчетНДСПереопределяемый.ВерсияПостановленияНДС1137(Документ.Дата);
        
        Если ВерсияПостановленияНДС1137 >= 4 Тогда
            Если НЕ ЕстьУПДСтатус1_981 Тогда
                СписокМакетов = СписокМакетов + ?(СписокМакетов = "", "УПДСтатус1_981", ",УПДСтатус1_981");
                ЕстьУПДСтатус1_981 = Истина;
            КонецЕсли;
        Иначе
            Если НЕ ЕстьУПДСтатус1 Тогда
                СписокМакетов = СписокМакетов + ?(СписокМакетов = "", "УПДСтатус1", ",УПДСтатус1");
                ЕстьУПДСтатус1 = Истина;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
    Для каждого Документ Из ДокументыСчетФактураНеТребуются Цикл
        
        УниверсальныеПередаточныеДокументы.Добавить(Документ);
        
        ВерсияПостановленияНДС1137 = УчетНДСПереопределяемый.ВерсияПостановленияНДС1137(Документ.Дата);
        
        Если ВерсияПостановленияНДС1137 >= 4 Тогда
            Если НЕ ЕстьУПДСтатус2_981 Тогда
                СписокМакетов = СписокМакетов + ?(СписокМакетов = "", "УПДСтатус2_981", ",УПДСтатус2_981");
                ЕстьУПДСтатус2_981 = Истина;
            КонецЕсли;
        Иначе
            Если НЕ ЕстьУПДСтатус2 Тогда
                СписокМакетов = СписокМакетов + ?(СписокМакетов = "", "УПДСтатус2", ",УПДСтатус2");
                ЕстьУПДСтатус2 = Истина;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
    Если УниверсальныеПередаточныеДокументы.Количество() = 1 Тогда
        РеквизитыДокумента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УниверсальныеПередаточныеДокументы[0], "Номер, Дата");
        ЗаголовокФормы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
            НСтр("ru = 'Универсальный передаточный документ №%1 от %2'"),
            РеквизитыДокумента.Номер, Формат(РеквизитыДокумента.Дата, "ДЛФ=D"));
    Иначе
        ЗаголовокФормы = НСтр("ru = 'Печать универсальных передаточных документов'");
    КонецЕсли;
    
    НастройкиПечати = Новый Структура;
    НастройкиПечати.Вставить("ЗаголовокФормы",                     ЗаголовокФормы);
    НастройкиПечати.Вставить("СписокМакетов",                      СписокМакетов);
    НастройкиПечати.Вставить("УниверсальныеПередаточныеДокументы", УниверсальныеПередаточныеДокументы);
    НастройкиПечати.Вставить("ДокументыБезСчетовФактур",           ДокументыБезСчетовФактур);
    НастройкиПечати.Вставить("ДокументыСчетФактураНеТребуются",    ДокументыСчетФактураНеТребуются);
    
    Возврат НастройкиПечати;
    
КонецФункции
2 + 2 = 3.9999999999999999999999999999999...