Имя: Пароль:
1C
 
Есть задачка пакетной печати внешних ПФ к документу
0 BigShmax
 
15.05.24
15:04
Открыть док выбрать обработку  "Пакетная печать" и чтобы поползли  ВнешняяПФ1 - 3 экз. Внешняя ПФ2 - 1 экз  ....

Читаю букварь, думаю ка креализовать. с БСП мало знаком   как к ним вообще можн ообращаться  кк найти конкетную внешнюю ПФ (в дополнительных которая)   мож   какие  статьи есть  оборазцы
1 Мультук
 
15.05.24
15:11
(0)

1) Имхо, типовой механизм примерно так и работает.
Почему бы не воспользоваться им?
Там уже всё есть

Например в УТ11.4 можно глянуть

2) Скажи честно, Infostart гуглил ?
Там точно было несколько приятных примеров, когда в зависимости от контрагента (например)
составлялся нужный "преднастроенный" пакет
2 Кондер
 
21.05.24
15:16
Подробности
//ГОЛОВА
Функция СформироватьОтчет(ИмяФ)
    Таб = Новый ТабличныйДокумент;
    Попытка        
        
        ВнешнийОтчетОбработкаДляОткрытияСсылка = ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере("Сборка заказов за смену");    
        
        ИмяОбработкиСлужебное = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВнешнийОтчетОбработкаДляОткрытияСсылка);
        //КомпоновщикНастроек = ДополнительныеОтчетыИОбработкиВызовСервера.ПолучитьОбъектВнешнейОбработки(ВнешнийОтчетОбработкаДляОткрытияСсылка).КомпоновщикНастроек;
        КомпоновщикНастроек = ДополнительныеОтчетыИОбработкиВызовСервера.ПолучитьОбъектВнешнейОбработки(ВнешнийОтчетОбработкаДляОткрытияСсылка).КомпоновщикНастроек;
        
        СхемаКомпоновкиДанных = ДополнительныеОтчетыИОбработкиВызовСервера.ПолучитьОбъектВнешнейОбработки(ВнешнийОтчетОбработкаДляОткрытияСсылка).СхемаКомпоновкиДанных;
        
        
        СтандартнаяОбработка = Ложь;
        ПользовательскиеНастройкиМодифицированы = Ложь;
        
        УстановитьОбязательныеНастройки(КомпоновщикНастроек, ПользовательскиеНастройкиМодифицированы);
        
        //ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Валюта");
        //Если ПараметрДанных <> Неопределено Тогда
        //    ПараметрДанных.Использование = Ложь;
        //КонецЕсли;
        
        НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();
        
        //-------
        //Настроим период
        ТекущаяДата = ТекущаяДата();
        Если (ТекущаяДата() - НачалоДня(ТекущаяДата)) < 21*3600 Тогда //Ночная
            ДатаН = НачалоДня(НачалоДня(ТекущаяДата) - 2) + 21*3600; //21час вера
            ДатаК = НачалоДня(ТекущаяДата) + 9*3600; //9утра
            ИмяФ ="" + Формат(ДатаН, "ДФ='dd_MM_yy ЧЧ:мм'")  + " - " + Формат(ДатаК, "ДФ='dd_MM_yy ЧЧ:мм'");
        Иначе //дневная
            ДатаН = НачалоДня(ТекущаяДата) + 9*3600;                
            ДатаК = НачалоДня(ТекущаяДата) + 21*3600;
            ИмяФ = "" + Формат(ДатаН, "ДФ='dd_MM_yy ЧЧ:мм'")  + " - " + Формат(ДатаК, "ДФ='dd_MM_yy ЧЧ:мм'") ;
        КонецЕсли;    
        ДатаНачалаСмены = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("ДатаНачалоСмены");
        ДатаНачалаСмены.Значение = ДатаН;        
        ДатаНачалаСмены.Использование = Истина;
        
        ДатаОкончанияСмены = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("ДатаОкончанияСмены");
        ДатаОкончанияСмены.Значение = ДатаК;        
        ДатаОкончанияСмены.Использование = Истина;
        //--------
        
        
        КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
        ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
        МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);

        ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
        ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);

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

Функция ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере(ИмяОтчетаОбработки)
    Возврат Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(ИмяОтчетаОбработки).Ссылка;
КонецФункции

Процедура УстановитьОбязательныеНастройки(КомпоновщикНастроек, ПользовательскиеНастройкиМодифицированы)
    
    //КомпоновкаДанныхСервер.УстановитьПараметрыВалютыОтчета(КомпоновщикНастроек, ПользовательскиеНастройкиМодифицированы);
    //СегментыСервер.ВключитьОтборПоСегментуПартнеровВСКД(КомпоновщикНастроек);
    
    //ПараметрПериод = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "Период");
    //Если ПараметрПериод.Использование И ЗначениеЗаполнено(ПараметрПериод.Значение.ДатаНачала) Тогда
        УстановитьПараметр(КомпоновщикНастроек, "ДатаНачалаСмены", ТекущаяДата());
        УстановитьПараметр(КомпоновщикНастроек, "ДатаОкеончанияСмены", ТекущаяДата() + 12*3600);
    //Иначе
    //    КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "НачалоОстатки", Дата(1,1,1,0,0,1));
    //КонецЕсли;
    
КонецПроцедуры

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

Функция ПолучитьПараметр(ОбъектНастройки, Параметр) Экспорт
    
    ЗначениеПараметра = Неопределено;
    ПолеПараметр = ?(ТипЗнч(Параметр) = Тип("Строка"), Новый ПараметрКомпоновкиДанных(Параметр), Параметр);
    
    Если ТипЗнч(ОбъектНастройки) = Тип("НастройкиКомпоновкиДанных") Тогда
        ЗначениеПараметра = ОбъектНастройки.ПараметрыДанных.НайтиЗначениеПараметра(ПолеПараметр);
    ИначеЕсли ТипЗнч(ОбъектНастройки) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда
        Для Каждого ЭлементНастройки Из ОбъектНастройки.Элементы Цикл
            Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") И ЭлементНастройки.Параметр = ПолеПараметр Тогда
                ЗначениеПараметра = ЭлементНастройки;
                Прервать;
            КонецЕсли;
        КонецЦикла;
    ИначеЕсли ТипЗнч(ОбъектНастройки) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда
        Для Каждого ЭлементНастройки Из ОбъектНастройки.ПользовательскиеНастройки.Элементы Цикл
            Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") И ЭлементНастройки.Параметр = ПолеПараметр Тогда
                ЗначениеПараметра = ЭлементНастройки;
                Прервать;
            КонецЕсли;
        КонецЦикла;
        Если ЗначениеПараметра = Неопределено Тогда
            ЗначениеПараметра = ОбъектНастройки.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ПолеПараметр);
        КонецЕсли;
        Если ЗначениеПараметра = Неопределено Тогда
            ЗначениеПараметра = ОбъектНастройки.ФиксированныеНастройки.ПараметрыДанных.НайтиЗначениеПараметра(ПолеПараметр);
        КонецЕсли;
    ИначеЕсли ТипЗнч(ОбъектНастройки) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда
        ЗначениеПараметра = ОбъектНастройки.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ПолеПараметр);
    ИначеЕсли ТипЗнч(ОбъектНастройки) = Тип("ДанныеРасшифровкиКомпоновкиДанных") Тогда
        ЗначениеПараметра = ОбъектНастройки.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ПолеПараметр);
    ИначеЕсли ТипЗнч(ОбъектНастройки) = Тип("КоллекцияЗначенийПараметровКомпоновкиДанных") Тогда
        ЗначениеПараметра = ОбъектНастройки.Найти(ПолеПараметр);
    ИначеЕсли ТипЗнч(ОбъектНастройки) = Тип("ОформлениеКомпоновкиДанных") Тогда
        ЗначениеПараметра = ОбъектНастройки.НайтиЗначениеПараметра(ПолеПараметр);
    КонецЕсли;
    
    Возврат ЗначениеПараметра;
    
КонецФункции
3 Garykom
 
15.05.24
15:17
(0)
Читаю букварь

Это даже не смешно
У тебя есть полгода-год на решение этой задачки?
4 BigShmax
 
15.05.24
15:18
(1) с него начал, ничего вменяемого не нашёл :-(  либо криво искал нахожу в основном  чтобы по массиву доков печаталась форма
5 BigShmax
 
15.05.24
15:20
(2)   спасибо за чтиво , пойду переваривать.
6 mikecool
 
15.05.24
20:49
для древней УТ делал подобное, но там еще с доп плюшками, ушло на все про все неделя часа по 2 каждый вечер
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.