Имя: Пароль:
1C
1С v8
Вопрос по ВПФ БП 3
0 voproshatel
 
08.09.21
11:23
Привет кодерам, делаю впф упд бп3, из дока РТиУ идет модуль менеджера "ПечатьУПД", там есть параметр КоллекцияПечатныхФорм, откуда он берется? Как программа понимает что нужно печатать статус упд 1 или 2.
Задача такая: чтобы в моей впф было печать Упд, а не печать упд 1 и печать упд 2.Памагити.
1 voproshatel
 
08.09.21
11:24
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    ЕстьСчетаФактурыВыданные   = Ложь;
    ЕстьСчетаФактурыПолученные = Ложь;
    
    Для каждого Объект Из МассивОбъектов Цикл
        Если ТипЗнч(Объект) = Тип("ДокументСсылка.СчетФактураВыданный") Тогда
            ЕстьСчетаФактурыВыданные = Истина;
            Прервать;
        ИначеЕсли ТипЗнч(Объект) = Тип("ДокументСсылка.СчетФактураПолученный") Тогда
            ЕстьСчетаФактурыПолученные = Истина;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    ТаблицаМакетовУПД = УчетНДС.ТаблицаМакетовУПД();
    
    // Печать УПД в статусе "1"
    Если ЕстьСчетаФактурыВыданные ИЛИ ЕстьСчетаФактурыПолученные Тогда
        Для Каждого МакетУПД ИЗ ТаблицаМакетовУПД Цикл
            Если МакетУПД.Статус <> "1" Тогда
                Продолжить;
            КонецЕсли;
            Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, МакетУПД.ИДМакета) Тогда
                
                Если ЕстьСчетаФактурыВыданные Тогда
                    ТекстЗапроса = Документы.СчетФактураВыданный.ТекстЗапросаПечатьСчетовФактур(
                        МакетУПД.ВерсияПостановленияНДС1137, Истина, МакетУПД.ПрослеживаемыеТовары);
                Иначе
                    ТекстЗапроса = Документы.СчетФактураПолученный.ТекстЗапросаПечатьСчетовФактур(
                        МакетУПД.ВерсияПостановленияНДС1137, МакетУПД.ПрослеживаемыеТовары);
                КонецЕсли;
                
                СтруктураПараметровПечати = УчетНДС.НовыйСтруктураПараметровПечатиУПД_УКД();
                СтруктураПараметровПечати.МассивОбъектов              = МассивОбъектов;
                СтруктураПараметровПечати.ОбъектыПечати               = ОбъектыПечати;
                СтруктураПараметровПечати.ТекстЗапросаДокументам      = ТекстЗапроса;
                СтруктураПараметровПечати.ТолькоПередаточныйДокумент  = Ложь;
                СтруктураПараметровПечати.ТабДокумент                 = Неопределено;
                СтруктураПараметровПечати.ПараметрыПечати             = ПараметрыПечати;
                СтруктураПараметровПечати.КлючПараметровПечати        = МакетУПД.КлючПараметровПечати;
                СтруктураПараметровПечати.ПолныйПутьКМакету           = МакетУПД.ПолныйПутьКМакету;
                
                ТабличныйДокумент = УчетНДС.ПечатьУниверсальныхПередаточныхДокументов(СтруктураПараметровПечати);
                
                УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
                    КоллекцияПечатныхФорм, МакетУПД.ИДМакета, МакетУПД.СинонимМакета,ТабличныйДокумент,,МакетУПД.ПолныйПутьКМакету);
                
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    
    // Печать УПД в статусе "2"
    Для Каждого МакетУПД ИЗ ТаблицаМакетовУПД Цикл
        Если МакетУПД.Статус <> "2" Тогда
            Продолжить;
        КонецЕсли;
        Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, МакетУПД.ИДМакета) Тогда
            ТекстЗапросаПечатьУниверсальныхПередаточныхДокументов = "";
            Для каждого Объект Из МассивОбъектов Цикл
                Если ТипЗнч(Объект) <> Тип("ДокументСсылка.СчетФактураВыданный")
                    И ТипЗнч(Объект) <> Тип("ДокументСсылка.СчетФактураПолученный") Тогда
                    ТекстЗапросаПечатьУниверсальныхПередаточныхДокументов =
                        Документы[Объект.Метаданные().Имя].ТекстЗапросаПечатьУниверсальныхПередаточныхДокументов(
                            МакетУПД.ВерсияПостановленияНДС1137, МакетУПД.ПрослеживаемыеТовары);
                    Прервать;
                КонецЕсли;
            КонецЦикла;
            Если НЕ ПустаяСтрока(ТекстЗапросаПечатьУниверсальныхПередаточныхДокументов) Тогда
                
                СтруктураПараметровПечати = УчетНДС.НовыйСтруктураПараметровПечатиУПД_УКД();
                СтруктураПараметровПечати.МассивОбъектов              = МассивОбъектов;
                СтруктураПараметровПечати.ОбъектыПечати               = ОбъектыПечати;
                СтруктураПараметровПечати.ТекстЗапросаДокументам      = ТекстЗапросаПечатьУниверсальныхПередаточныхДокументов;
                СтруктураПараметровПечати.ТолькоПередаточныйДокумент  = Истина;
                СтруктураПараметровПечати.ТабДокумент                 = Неопределено;
                СтруктураПараметровПечати.ПараметрыПечати             = ПараметрыПечати;
                СтруктураПараметровПечати.КлючПараметровПечати        = МакетУПД.КлючПараметровПечати;
                СтруктураПараметровПечати.ПолныйПутьКМакету           = МакетУПД.ПолныйПутьКМакету;
                
                ТабличныйДокумент = УчетНДС.ПечатьУниверсальныхПередаточныхДокументов(СтруктураПараметровПечати);
                    
                УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
                    КоллекцияПечатныхФорм, МакетУПД.ИДМакета, МакетУПД.СинонимМакета, ТабличныйДокумент,,МакетУПД.ПолныйПутьКМакету);
                
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
    ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);    
    
КонецПроцедуры
2 voproshatel
 
08.09.21
11:24
Функция ТаблицаМакетовУПД() Экспорт
    
    ТаблицаМакетов = Новый ТаблицаЗначений;
    ТаблицаМакетов.Колонки.Добавить("ИДМакета",                   Новый ОписаниеТипов("Строка"));
    ТаблицаМакетов.Колонки.Добавить("СинонимМакета",              Новый ОписаниеТипов("Строка"));
    ТаблицаМакетов.Колонки.Добавить("Статус",                     Новый ОписаниеТипов("Строка"));
    ТаблицаМакетов.Колонки.Добавить("ВерсияПостановленияНДС1137", Новый ОписаниеТипов("Число"));
    ТаблицаМакетов.Колонки.Добавить("ПолныйПутьКМакету",          Новый ОписаниеТипов("Строка"));
    ТаблицаМакетов.Колонки.Добавить("ПрослеживаемыеТовары",       Новый ОписаниеТипов("Булево"));
    ТаблицаМакетов.Колонки.Добавить("КлючПараметровПечати",       Новый ОписаниеТипов("Строка"));
    
    ПорядокПримененияФормСФ =
        УчетНДСПереопределяемый.СоответствиеВерсийПостановленияФормамСчетовФактур();
    
    // УПД.
    НовыйМакет = ТаблицаМакетов.Добавить();
    НовыйМакет.ИДМакета                   = "УПДСтатус1";
    НовыйМакет.СинонимМакета              = "УПД (статус 1)";
    НовыйМакет.Статус                     = "1";
    НовыйМакет.ВерсияПостановленияНДС1137 = ПорядокПримененияФормСФ[НовыйМакет.ИДМакета];
    НовыйМакет.ПолныйПутьКМакету          = "Обработка.ПечатьУПД.ПФ_MXL_УниверсальныйПередаточныйДокумент";
    НовыйМакет.ПрослеживаемыеТовары       = Ложь;
    НовыйМакет.КлючПараметровПечати       = "ПАРАМЕТРЫ_ПЕЧАТИ_УниверсальныйПередаточныйДокумент";
    
    НовыйМакет = ТаблицаМакетов.Добавить();
    НовыйМакет.ИДМакета                   = "УПДСтатус2";
    НовыйМакет.СинонимМакета              = "УПД (статус 2)";
    НовыйМакет.Статус                     = "2";
    НовыйМакет.ВерсияПостановленияНДС1137 = ПорядокПримененияФормСФ[НовыйМакет.ИДМакета];
    НовыйМакет.ПолныйПутьКМакету          = "Обработка.ПечатьУПД.ПФ_MXL_УниверсальныйПередаточныйДокумент";
    НовыйМакет.ПрослеживаемыеТовары       = Ложь;
    НовыйМакет.КлючПараметровПечати       = "ПАРАМЕТРЫ_ПЕЧАТИ_УниверсальныйПередаточныйДокумент";
    
    // УПД 981.
    НовыйМакет = ТаблицаМакетов.Добавить();
    НовыйМакет.ИДМакета                   = "УПДСтатус1_981";
    НовыйМакет.СинонимМакета              = "УПД (статус 1)";
    НовыйМакет.Статус                     = "1";
    НовыйМакет.ВерсияПостановленияНДС1137 = ПорядокПримененияФормСФ[НовыйМакет.ИДМакета];
    НовыйМакет.ПолныйПутьКМакету          = "Обработка.ПечатьУПД.ПФ_MXL_УниверсальныйПередаточныйДокумент981";
    НовыйМакет.ПрослеживаемыеТовары       = Ложь;
    НовыйМакет.КлючПараметровПечати       = "ПАРАМЕТРЫ_ПЕЧАТИ_УниверсальныйПередаточныйДокумент_981";
    
    НовыйМакет = ТаблицаМакетов.Добавить();
    НовыйМакет.ИДМакета                   = "УПДСтатус2_981";
    НовыйМакет.СинонимМакета              = "УПД (статус 2)";
    НовыйМакет.Статус                     = "2";
    НовыйМакет.ВерсияПостановленияНДС1137 = ПорядокПримененияФормСФ[НовыйМакет.ИДМакета];
    НовыйМакет.ПолныйПутьКМакету          = "Обработка.ПечатьУПД.ПФ_MXL_УниверсальныйПередаточныйДокумент981";
    НовыйМакет.ПрослеживаемыеТовары       = Ложь;
    НовыйМакет.КлючПараметровПечати       = "ПАРАМЕТРЫ_ПЕЧАТИ_УниверсальныйПередаточныйДокумент_981";
    
    // УПД 534
    // без прослеживаемого товара.
    НовыйМакет = ТаблицаМакетов.Добавить();
    НовыйМакет.ИДМакета                   = "УПДСтатус1_534";
    НовыйМакет.СинонимМакета              = "УПД (статус 1)";
    НовыйМакет.Статус                     = "1";
    НовыйМакет.ВерсияПостановленияНДС1137 = ПорядокПримененияФормСФ[НовыйМакет.ИДМакета];
    НовыйМакет.ПолныйПутьКМакету          = "Обработка.ПечатьУПД.ПФ_MXL_УниверсальныйПередаточныйДокумент534";
    НовыйМакет.ПрослеживаемыеТовары       = Ложь;
    НовыйМакет.КлючПараметровПечати       = "ПАРАМЕТРЫ_ПЕЧАТИ_УниверсальныйПередаточныйДокумент_534";
    
    НовыйМакет = ТаблицаМакетов.Добавить();
    НовыйМакет.ИДМакета                   = "УПДСтатус2_534";
    НовыйМакет.СинонимМакета              = "УПД (статус 2)";
    НовыйМакет.Статус                     = "2";
    НовыйМакет.ВерсияПостановленияНДС1137 = ПорядокПримененияФормСФ[НовыйМакет.ИДМакета];
    НовыйМакет.ПолныйПутьКМакету          = "Обработка.ПечатьУПД.ПФ_MXL_УниверсальныйПередаточныйДокумент534";
    НовыйМакет.ПрослеживаемыеТовары       = Ложь;
    НовыйМакет.КлючПараметровПечати       = "ПАРАМЕТРЫ_ПЕЧАТИ_УниверсальныйПередаточныйДокумент_534";
    
    // УПД 534
    // с прослеживаемым товаром.
    НовыйМакет = ТаблицаМакетов.Добавить();
    НовыйМакет.ИДМакета                   = "УПДСтатус1_534Прослеж";
    НовыйМакет.СинонимМакета              = "УПД (статус 1)";
    НовыйМакет.Статус                     = "1";
    НовыйМакет.ВерсияПостановленияНДС1137 = ПорядокПримененияФормСФ[НовыйМакет.ИДМакета];
    НовыйМакет.ПолныйПутьКМакету          = "Обработка.ПечатьУПД.ПФ_MXL_УниверсальныйПередаточныйДокумент534Прослеж";
    НовыйМакет.ПрослеживаемыеТовары       = Истина;
    НовыйМакет.КлючПараметровПечати       = "ПАРАМЕТРЫ_ПЕЧАТИ_УниверсальныйПередаточныйДокумент_534Прослеж";
    
    НовыйМакет = ТаблицаМакетов.Добавить();
    НовыйМакет.ИДМакета                   = "УПДСтатус2_534Прослеж";
    НовыйМакет.СинонимМакета              = "УПД (статус 2)";
    НовыйМакет.Статус                     = "2";
    НовыйМакет.ВерсияПостановленияНДС1137 = ПорядокПримененияФормСФ[НовыйМакет.ИДМакета];
    НовыйМакет.ПолныйПутьКМакету          = "Обработка.ПечатьУПД.ПФ_MXL_УниверсальныйПередаточныйДокумент534Прослеж";
    НовыйМакет.ПрослеживаемыеТовары       = Истина;
    НовыйМакет.КлючПараметровПечати       = "ПАРАМЕТРЫ_ПЕЧАТИ_УниверсальныйПередаточныйДокумент_534Прослеж";
    
    Возврат ТаблицаМакетов;
    
КонецФункции
3 ДенисЧ
 
08.09.21
11:27
Он к тебе прилетает параметром в твою функцию из недр БСП.
4 voproshatel
 
08.09.21
11:33
(3) т.е. разделения на упд 1 и упд 2 в моей впф не избежать?
5 voproshatel
 
08.09.21
11:37
Функция СведенияОВнешнейОбработке()Экспорт
    
    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Документ.РеализацияТоваровУслуг");
    МассивНазначений.Добавить("Документ.СчетФактураВыданный");
    
    //Указываем документ к которому делаем внешнюю печ. форму
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
    //может быть - ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов...
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", "УПД (ред.)");
    //имя под которым обработка будет зарегестрирована в справочнике внешних обработок
    ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("Информация", "УПД (ред.)");
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    //ДобавитьКоманду(ТаблицаКоманд, "УПД (ред.)", "УПДСтатус2_981", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
    ДобавитьКоманду(ТаблицаКоманд, "УПД Статус1(ред.)", "УПДСтатус1", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
    ДобавитьКоманду(ТаблицаКоманд, "УПД Статус2(ред.)", "УПДСтатус2", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

    Возврат ПараметрыРегистрации;                                        
КонецФункции
6 ДенисЧ
 
08.09.21
11:39
Ты же сам в сведениях задаёшь две команды. Вот она тебе и показывает два пункта.
Сделай одну команду - будет один пункт...
7 voproshatel
 
08.09.21
11:52
(6) но тогда как она поймет какую упд печатать: 1 или 2? Если оставлю УПДСтатус1, будет печатать только ее.
8 ДенисЧ
 
08.09.21
11:56
(7) Я теб не понимаю. ИЛи тебе одна нужна, или две...
Или ты хочешь пункт "упд", а программа сама поняла, какую, 1 или 2, печатать?
Так определись, как узнать, какую надо. И сделай одну команду, а там уже проверяй документ, решая, что печатать...
9 voproshatel
 
08.09.21
20:36
(8) спасибо Денис. Хочу пункт "упд", чтобы программа сама поняла, какую, 1 или 2, печатать.
10 hhhh
 
08.09.21
22:19
(9) сам же конкретно указываешь, 1 или 2. программа ничего не собирается понимать, она тупо берет то, что ты указал.
11 ДенисЧ
 
09.09.21
04:24
(9) Ну так заставь её понять, исходя из того документа, который печатать собрался...