Добрый день!
Делаю отчет на СКД с 2мя схемами компоновки данных. Отличаются тем, что в одной можно сделать отбор по номенклатуре,а в другой нет, т.к. группируется по контрагенту и номенклатура не выводится. На форме есть флажок, по которому определяю какую схему использовать. Соответственно, в одной схеме есть поле номенклатура,а в другой нет. И когда флаг=ложь, выдает ошибку, что поле номенклатура не найдена. Проблема, как я поняла, в том что не обновляется сама структура отчета. Не знаю как исправить данную ошибку.
В ОсновнаяСхемаКомпоновкиДанных1 в наборе данных нет поля номенклатура, а в ОсновнаяСхемаКомпоновкиДанных есть.
Делаю отчет на СКД с 2мя схемами компоновки данных. Отличаются тем, что в одной можно сделать отбор по номенклатуре,а в другой нет, т.к. группируется по контрагенту и номенклатура не выводится. На форме есть флажок, по которому определяю какую схему использовать. Соответственно, в одной схеме есть поле номенклатура,а в другой нет. И когда флаг=ложь, выдает ошибку, что поле номенклатура не найдена. Проблема, как я поняла, в том что не обновляется сама структура отчета. Не знаю как исправить данную ошибку.
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Стр = ТЗ.Добавить();
ЗаполнитьЗначенияСвойств(Стр,Выборка);
КонецЦикла;
Если ТЗ.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
Если Отчет.ПоНоменклатуре=Ложь Тогда
СхемаКомпоновкиДанных = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных1");
Иначе
СхемаКомпоновкиДанных = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Конецесли;
Период_1="С "+Строка(Формат( Отчет.Период1.ДатаНачала,"ДФ=dd.MM.yy"))+ " по "+Строка(Формат(Отчет.Период1.ДатаОкончания,"ДФ=dd.MM.yy"));
Период_2="С "+Строка(Формат( Отчет.Период2.ДатаНачала,"ДФ=dd.MM.yy"))+ " по "+Строка(Формат(Отчет.Период2.ДатаОкончания,"ДФ=dd.MM.yy"));
Поле1=СхемаКомпоновкиДанных.НаборыДанных.ТЗ.Поля.найти("Период1");
Поле1.Заголовок=Период_1;
Поле2=СхемаКомпоновкиДанных.НаборыДанных.ТЗ.Поля.найти("Период2");
Поле2.Заголовок=Период_2;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Настройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки);
ВнешниеНаборы = Новый Структура;
ВнешниеНаборы.Вставить("ТЗ",ТЗ);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборы);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
СкомпоноватьРезультат();
ПоказатьВ ОсновнаяСхемаКомпоновкиДанных1 в наборе данных нет поля номенклатура, а в ОсновнаяСхемаКомпоновкиДанных есть.
По теме из базы знаний
- Хитрости системы компоновки данных на примере решения тестового задания проекта "Доминикана"
- Конструктор результата системы компоновки данных.
- Схемы макетов оформления СКД
- По-настоящему свои макеты в отчетах СКД. Исследование процесса компоновки и генерация кода отчета
- Как посмотреть итоговый запрос в отчете СКД
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)Похоже, действительно, на очередной костыль:
запрос СКД подразумевает набор ВСЕХ возможных полей потенциально востребованных при формировании отчета, а что выводить и как группировать, как правило определяет пользователь уже в режиме предприятия ...
т.е., полагаю, Ваша задача легко решается без конфигуратора ...
запрос СКД подразумевает набор ВСЕХ возможных полей потенциально востребованных при формировании отчета, а что выводить и как группировать, как правило определяет пользователь уже в режиме предприятия ...
т.е., полагаю, Ваша задача легко решается без конфигуратора ...
(3)Дело в том, что мне нужно сформировать отчет за 2 периода, соответственно я делаю 2 одинаковых запроса на разные даты,которые связываю затем по партнеру и по номенклатуре. Если я делаю по партнеру,то номенклатуру приходится убрать,т.к. она мешает группировке, т.е. разбивает одну реализацию на несколько строчек, в зависимости от количества номенклатур. А пользователю необходимо формировать как по партнерам, так и по номенклатуре.
Если у Вас не редактируются отборы на форме, тогда в (2) всё правильно написали:
замените
на
Иначе получается что есть две компоновки данных (одна из них похоже указана как основная в отчете), вы для компоновки макета используете компоновщик настроек отчета, который инициализирован основной схемой, а не Схемой1. Из-за этого ошибка, потому что в Отчет.КомпоновщикНастроек - содержит настройки по основной схеме, а не Схеме1.
замените
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки);
на
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
Иначе получается что есть две компоновки данных (одна из них похоже указана как основная в отчете), вы для компоновки макета используете компоновщик настроек отчета, который инициализирован основной схемой, а не Схемой1. Из-за этого ошибка, потому что в Отчет.КомпоновщикНастроек - содержит настройки по основной схеме, а не Схеме1.
(0) Вместо
напишите
Настройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
напишите
КомпоновщикНастроекСхема = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроекСхема.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
КомпоновщикНастроекСхема.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
Настройки = КомпоновщикНастроекСхема.Настройки;
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот