Всем доброго времени суток!
Подскажите в чем может быть затык.
Имеется отчет на СКД, расшифровка реализована "ручками"
Вот код формирования отчета:
а вот код оборботки расшифровки:
Сам отчет:
Расшифровываем по любому полю:
И отлично все сформировалось - как надо, но настройки отчета все слетели на стандартные:
И если еще раз сформируем, то получаем дефолтный отчет:
Подскажите как исправить
Подскажите в чем может быть затык.
Имеется отчет на СКД, расшифровка реализована "ручками"
Вот код формирования отчета:
Процедура Сформировать(Режим = Неопределено,Настройки) ЭКСПОРТ
//Не забываем очищать
ЭлементыФормы.Результат.Очистить();
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
//Определим настройки
Если Настройки = Неопределено Тогда
Настройки = КомпоновщикНастроек.Настройки;
КонецЕсли;
//Макет компоновки
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки);
//Определим период и тип цен
НачалоПериода = МакетКомпоновки.ЗначенияПараметров.Найти("ДатаНачала");
КонецПериода = МакетКомпоновки.ЗначенияПараметров.Найти("ДатаОкончания");
ТипЦен = МакетКомпоновки.ЗначенияПараметров.Найти("ТипЦенНоменклатуры");
Если НачалоПериода = Неопределено ИЛИ КонецПериода = Неопределено Тогда //не стоит флажок
ВызватьИсключение("Не задан период формирования отчета!");
//А можно в результат красную строку алярма
Иначе
Если НачалоПериода.Значение = Дата(1,1,1) ИЛИ КонецПериода.Значение = Дата(1,1,1) Тогда
ВызватьИсключение("Не задан тип цен номенклатуры!");
//А можно в результат красную строку алярма
Иначе
НачалоПериода = НачалоПериода.Значение;
КонецПериода = КонецПериода.Значение;
КонецЕсли;
КонецЕсли;
Если МакетКомпоновки.ЗначенияПараметров.Найти("ТипЦенНоменклатуры") = Неопределено Тогда // не стоит флажок
ВызватьИсключение("Не задан тип цен номенклатуры!");
//А можно в результат красную строку алярма
Иначе
Если ТипЦен.Значение = Неопределено ИЛИ ТипЦен.Значение = Справочники.ТипыЦенНоменклатуры.ПустаяСсылка() Тогда //не задано значение
ВызватьИсключение("Не задан тип цен номенклатуры!");
//А можно в результат красную строку алярма
Иначе
ТипЦен = ТипЦен.Значение;
КонецЕсли;
КонецЕсли;
//Сформируем внешние данные
ТаблицаДанных = ПолучитьВнешниеДанные(НачалоПериода,КонецПериода,ТипЦен); //получаем данные из МИС и с оборудования
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ВнешниеДанные", ТаблицаДанных);
//У-у-и-и-и-ху-у-у
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);
КонецПроцедуры //Процедура ДействияФормыДействие(Кнопка)
Показатьа вот код оборботки расшифровки:
//Обработаем расшифровки
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
Перем ВыполненноеДействие;
СтандартнаяОбработка = Ложь;
// Создадим и инициализируем обработчик расшифровки
ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки,Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
ДоступныеДействия = Новый Массив; // заполняем доступные действия, если параметр не указан, то будут доступны все действия
ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Расшифровать);
ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);
ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Оформить);
ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить);
ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Отфильтровать);
ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Сгруппировать);
//Дополняем своими действиями
ДополнительныеДействия=Новый СписокЗначений;
ДополнительныеДействия.Добавить("Т1","Таблица 1 - Количество оказанных услуг по данным МИС"); // добавляем свое действие
ДополнительныеДействия.Добавить("Т2","Таблица 2 - Спецификация"); // добавляем свое действие
ДополнительныеДействия.Добавить("Т3","Таблица 3 - ФактическоеСписание"); // добавляем свое действие
ДополнительныеДействия.Добавить("ФактическоеСписание","ФактическоеСписание"); // добавляем свое действие
ДополнительныеДействия.Добавить("ЦеныНоменклатуры","Цены номенклатуры"); // добавляем свое действие
// Осуществим выбор действия расшифровки пользователем
Настройки = ОбработкаРасшифровки.Выполнить(Расшифровка,ВыполненноеДействие,ДоступныеДействия,ДополнительныеДействия);
//Проверим получили ли расшифровку
Если Настройки = Неопределено Тогда
Возврат; //нет изменений
КонецЕсли;
//Этот кусок если открывать прямо в этой форме
//КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); // загружаем настройки
//ЭлементыФормы.Результат.Очистить(); // очищаем поле табличного документа
//СкомпоноватьРезультат(ЭлементыФормы.Результат,ДанныеРасшифровки); // выводим результат в этом же окне
//Сформируем результат
Если ВыполненноеДействие="Т1" Тогда
// загрузим настройки Т1
//...
ИначеЕсли ВыполненноеДействие = "Т2" Тогда
//Загрузим настройки Т2
//...
ИначеЕсли ВыполненноеДействие = "Т3" Тогда
//Загрузим настройки Т3
//...
ИначеЕсли ВыполненноеДействие = "ФактическоеСписание" Тогда
//Загрузим настройки Т3
//...
ИначеЕсли ВыполненноеДействие = "ЦеныНоменклатуры" Тогда
//Загрузим настройки Т3
//...
ИначеЕсли ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить Тогда
//сортировка
// Если требуется упорядочить - упорядочим в текущем отчете
Сформировать(Истина,Настройки);
Иначе
НовыйОтчет = Новый (ТипЗнч(ОтчетОбъект));
ФормаОтчета = НовыйОтчет.ПолучитьФорму("ФормаОтчета",,Новый УникальныйИдентификатор);
ФормаОтчета.ДействияФормыДействие(Истина,Настройки); //формируем
ФормаОтчета.Открыть();
КонецЕсли; //Если ВыполненноеДействие="Т1" или Т2 или Т3 Иначе
КонецПроцедуры
ПоказатьСам отчет:
![](https://pp.userapi.com/c846522/v846522401/f232/-bLlvllETR0.jpg)
Расшифровываем по любому полю:
![](https://pp.userapi.com/c846522/v846522401/f246/0tj1-kbWB8I.jpg)
И отлично все сформировалось - как надо, но настройки отчета все слетели на стандартные:
![](https://pp.userapi.com/c846522/v846522401/f23c/ravnxZsifXA.jpg)
И если еще раз сформируем, то получаем дефолтный отчет:
![](https://pp.userapi.com/c846522/v846522401/f24f/I3mdCUw-NF4.jpg)
Подскажите как исправить
По теме из базы знаний
- 115 полезностей по курсу СКД Евгения Гилёва
- Отчет для анализа прав доступа в разрезах Право/Объект/Роль/Профиль/Пользователь
- Программная корректировка при выводе отчета СКД
- 1C:Предприятие для программистов: Запросы и отчеты. Онлайн-интенсив.
- Система компоновки данных для разработки отчетов в 1С:Предприятии. Онлайн-курс с 01 апреля по 24 апреля
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
При расшифровке настройке передаются как параметр в процедуру.
Их надо не просто применить при формировании отчета, но и загрузить в компоновщик настроек.
У вас же при расшифровке используются настройки расшифровки, а при повторном формировании - настройки компоновщика.
//Определим настройки
Если Настройки = Неопределено Тогда
Настройки = КомпоновщикНастроек.Настройки;
КонецЕсли;
При расшифровке настройке передаются как параметр в процедуру.
Их надо не просто применить при формировании отчета, но и загрузить в компоновщик настроек.
У вас же при расшифровке используются настройки расшифровки, а при повторном формировании - настройки компоновщика.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот