Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
15 дек 2024, 11:32

как программно в отчете скд при компоновке результат выбрать вариант отчета в зависимости от условий

Автор margo, 21 апр 2023, 18:45

0 Пользователей и 1 гость просматривают эту тему.

margo

Добрый день!
Есть потребность в зависимости от условия выводить пользователю тот или другой вариант отчета. Подскажите, пожалуйста, как это можно сделать программно из модуля объекта отчета при компоновке результата?

margo

Цитата: margo от 21 апр 2023, 18:45Добрый день!
Есть потребность в зависимости от условия выводить пользователю тот или другой вариант отчета. Подскажите, пожалуйста, как это можно сделать программно из модуля объекта отчета при компоновке результата?



СтандартнаяОбработка = Ложь;
ПользовательскиеНастройкиМодифицированы = Ложь;

//УстановитьОбязательныеНастройки(ПользовательскиеНастройкиМодифицированы);


ПараметрПериод = ОтчетыКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "Период1");
Если ПараметрПериод.Использование Тогда
ДатаНачала = ПараметрПериод.Значение.ДатаНачала;
Иначе
ДатаНачала = ТекущаяДата();
КонецЕсли;

СкладОтправитель = ОтчетыКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "СкладОтправитель");
Если СкладОтправитель.Использование Тогда
СкладОтправительСсылка = СкладОтправитель.Значение;
Иначе
СкладОтправительСсылка = Справочники.Склады.ПустаяСсылка();
КонецЕсли;
СкладПолучатель = ОтчетыКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "СкладПолучатель");
Если СкладПолучатель.Использование Тогда
СкладПолучательСсылка = СкладПолучатель.Значение;
Иначе
СкладПолучательСсылка = Справочники.Склады.ПустаяСсылка();
КонецЕсли;

КодОтправителя = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СкладОтправительСсылка, "СУТЗ_Код");
КодПолучателя  = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СкладПолучательСсылка,  "СУТЗ_Код");
ТекстЗаголовка = "Накладна на переміщення №01/" + Месяц(ДатаНачала) + "/" + Год(ДатаНачала) + "/" + КодОтправителя + "-" + КодПолучателя
  + " від " + Формат(ДатаНачала, "Л=uk; ДЛФ=DD");

КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ТекстЗаголовка", ТекстЗаголовка);

ПараметрОрганизация = ОтчетыКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "Организация");
Если ПараметрОрганизация.Использование Тогда
ОрганизацияСсылка = ПараметрОрганизация.Значение;
Иначе
ОрганизацияСсылка = Справочники.Организации.ОрганизацияСолди;
КонецЕсли;


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

КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("РеквизитыОрганизации", РеквизитыОрганизации);


ОтправительАдрес = ФормированиеПечатныхФорм.ПолучитьАдресИзКонтактнойИнформации(СкладОтправительСсылка);
ПолучательАдрес  = ФормированиеПечатныхФорм.ПолучитьАдресИзКонтактнойИнформации(СкладПолучательСсылка);

КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ОтправительАдрес", ОтправительАдрес);
КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ПолучательАдрес", ПолучательАдрес);


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


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

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

КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Отгрузил", Отгрузил);
КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ОтгрузилДолжность", ОтгрузилДолжность);
КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Получил", Получил);
КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ПолучилДолжность", ПолучилДолжность);

//КодЯзыкаПечать = "uk";
//Вес = ?(КодЯзыкаПечать = "ru", "Вес: " + Формат(Вес,"ЧЦ=15; ЧДЦ=3;") + " кг",  "Вага: " + Формат(Вес,"ЧЦ=15; ЧДЦ=3;") + " кг");

НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();

//ПараметрыОтчета = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
//ПолеГруппировки = Новый ПолеКомпоновкиДанных("Регистратор");

ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос;

ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаВесНоменклатуры1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаВесУпаковки("ВложенныйЗапрос.Номенклатура.ЕдиницаИзмерения", "ВложенныйЗапрос.Номенклатура"));

ТекстЗапроса = СтрЗаменить(
ТекстЗапроса,
"&ТекстЗапросаОбъемНоменклатуры1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаОбъемУпаковки("ВложенныйЗапрос.Номенклатура.ЕдиницаИзмерения", "ВложенныйЗапрос.Номенклатура"));

СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос = ТекстЗапроса;

//СтандартнаяОбработка = Ложь;
   
    НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();

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

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
//МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);
//МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, лкВариантОтчета.Настройки, ДанныеРасшифровки);
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки);

КомпоновкаДанныхСервер.УстановитьЗаголовкиМакетаКомпоновки(ПолучитьСтруктуруЗаголовковПолей(), МакетКомпоновки);

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

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);


вариант вроде загружается, но при формировании отчета ругается на не заполненные поля (параметры), но фактически они заполнены

Максим75

margo, может глупость скажу, но если попробовать вначале вариант загрузить, а потом уже параметры заполнять.
местами просто поменять, выбор варианта поднять выше установки параметров.

margo

Максим75, пробывала менять местами не помогла. у меня эти параметры, на которые ругается устанавливаются не  программно а пользователем в шапке отчета :dfbsdfbsdf:

Максим75

margo, так их потом надо еще раз установить в компоновщике.
сделать процедуру что-то типа УстановитьПараметры, и в ней компоновщику параметры установить из шапки отчета.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск