Здравствуйте, товарищи!
1С:Предприятие 8.2 (8.2.19.116), не типовая конфигурация.
Столкнулся с такой проблемой. Отчет СКД, выбор полей и параметров выполняется программно. В итоговом отчете, при выборе определенных полей, появляется пустая строка на определенной уровне группировки.
Во вложении скрин лишней пустой строки.
Процедура формирования отчета:
1С:Предприятие 8.2 (8.2.19.116), не типовая конфигурация.
Столкнулся с такой проблемой. Отчет СКД, выбор полей и параметров выполняется программно. В итоговом отчете, при выборе определенных полей, появляется пустая строка на определенной уровне группировки.
Во вложении скрин лишней пустой строки.
Процедура формирования отчета:
Процедура Сформировать(ВарОтчета = 1)
Если НачПериода = Дата(1,1,1) ИЛИ КонПериода = Дата(1,1,1) Тогда
Возврат;
КонецЕсли;
Начало = ТекущаяДата();
//********************************************************
Если ВарОтчета = 1 Тогда
ВариантНастроек = СхемаКомпоновкиДанных.ВариантыНастроек.Основной;
ИначеЕсли ВарОтчета = 2 Тогда
ВариантНастроек = СхемаКомпоновкиДанных.ВариантыНастроек.Горизонтальный;
КонецЕсли;
Настройки = ВариантНастроек.Настройки;
// Разворот
Настройки.Структура.Получить(1).Строки.Очистить();
//Получаем элемент группировки и устанавливаем группируемое поле
ЭлементыСтрок = Настройки.Структура.Получить(1).Строки;// Первый элемент структуры таблица
Отбор = Новый Структура("Показывать",Истина);
ВыгрГруппировки = ГруппировкаОтчета.Выгрузить(Отбор);
Для Каждого Группировка Из ВыгрГруппировки Цикл
ЭлементыСтрок = СтруктураЦикл(ЭлементыСтрок,Группировка).Структура;
КонецЦикла;
// Показать поля
ВыводимыеПоля = Настройки.Выбор.Элементы;
КолвоПолей = ВыводимыеПоля.Количество()-1;
Для i = 0 По КолвоПолей Цикл
Строка = ВыводимыеПоля[i];
Если Строка(Строка.Поле) = "Сумма" Тогда
Настройки.Выбор.Элементы[i].Использование = ПоказатьСуммы;
Продолжить;
КонецЕсли;
Если Строка(Строка.Поле) = "Количество" Тогда
Настройки.Выбор.Элементы[i].Использование = ПоказатьКоличество;
Продолжить;
КонецЕсли;
Если Строка(Строка.Поле) = "Себестоимость" Тогда
Настройки.Выбор.Элементы[i].Использование = ПоказатьСебестоимость;
Продолжить;
КонецЕсли;
Если Строка(Строка.Поле) = "КолПозВариант2" Тогда
//КолПоз
//Ресурс = Сумма(ВычислитьВыражениеСГруппировкойМассив ("Количество(Различные КолПоз)","КолПоз"))
Настройки.Выбор.Элементы[i].Использование = ПоказатьSKU;
Продолжить;
КонецЕсли;
Если Строка(Строка.Поле) = "Скидка" Тогда
Настройки.Выбор.Элементы[i].Использование = ПоказатьСкидки;
Продолжить;
КонецЕсли;
Если Строка(Строка.Поле) = "БазаОборот" Тогда
Настройки.Выбор.Элементы[i].Использование = ПоказатьБазу;
Продолжить;
КонецЕсли;
Если Строка.Поле = Неопределено Тогда
ВыводимыеПоляГруппа = Строка.Элементы;
Для Каждого Стр ИЗ ВыводимыеПоляГруппа Цикл
Если Строка(Стр.Поле) = "Товар.Код" Тогда
Стр.Использование = ПоказатьКод;
Продолжить;
КонецЕсли;
Если Строка(Стр.Поле) = "Товар.Артикул" Тогда
Стр.Использование = ПоказатьАртикул;
Продолжить;
КонецЕсли;
Если Строка(Стр.Поле) = "Товар.ШтрихКод" Тогда
Стр.Использование = ПоказатьШтрихкод;
Продолжить;
КонецЕсли;
Если Строка(Стр.Поле) = "Товар.Бренд" Тогда
Стр.Использование = ПоказатьБренд;
Продолжить;
КонецЕсли;
Если Строка(Стр.Поле) = "Товар.Категория" Тогда
Стр.Использование = ПоказатьКатегорию;
Продолжить;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
// устанавливаем параметры
Отбор = Настройки.ПараметрыДанных.Элементы;
КолвоПолей = Отбор.Количество()-1;
Для i = 0 По КолвоПолей Цикл
Строка = Отбор[i];
Настройки.ПараметрыДанных.Элементы[i].Использование = Ложь;
Если Строка(Строка.Параметр) = "НачалоПериода" И НачПериода <> Дата(1,1,1) Тогда
Настройки.ПараметрыДанных.Элементы[i].Значение = НачПериода;
Настройки.ПараметрыДанных.Элементы[i].Использование = Истина;
Продолжить;
КонецЕсли;
Если Строка(Строка.Параметр) = "КонецПериода" И КонПериода <> Дата(1,1,1) Тогда
Настройки.ПараметрыДанных.Элементы[i].Значение = КонПериода;
Настройки.ПараметрыДанных.Элементы[i].Использование = Истина;
Продолжить;
КонецЕсли;
Если Строка(Строка.Параметр) = "Периодичность" Тогда
Настройки.ПараметрыДанных.Элементы[i].Значение = ?(Периодичность.Пустая() = Истина,Перечисления.Периодичность.Месяц,Периодичность);
Настройки.ПараметрыДанных.Элементы[i].Использование = Истина;
Продолжить;
КонецЕсли;
Если Строка(Строка.Параметр) = "Район" И ЗначениеЗаполнено(Район) = Истина Тогда
Если НесколькоРайон Тогда
Настройки.ПараметрыДанных.Элементы[i].Значение = Район;
Настройки.ПараметрыДанных.Элементы[i].Использование = Истина;
ИначеЕсли Район.Пустая() = Ложь Тогда
РайонСЗ = Новый СписокЗначений;
РайонСЗ.Добавить(Район);
Настройки.ПараметрыДанных.Элементы[i].Значение = РайонСЗ;
Настройки.ПараметрыДанных.Элементы[i].Использование = Истина;
КонецЕсли;
Продолжить;
КонецЕсли;
Если Строка(Строка.Параметр) = "Контрагент" И СписокКонтрагентов.Количество()<>0 Тогда
Настройки.ПараметрыДанных.Элементы[i].Значение = СписокКонтрагентов;
Настройки.ПараметрыДанных.Элементы[i].Использование = Истина;
Продолжить;
КонецЕсли;
Если Строка(Строка.Параметр) = "КонтрагентИсключение" И КонтрагентИсключение.Пустая() = Ложь Тогда
Настройки.ПараметрыДанных.Элементы[i].Значение = КонтрагентИсключение;
Настройки.ПараметрыДанных.Элементы[i].Использование = Истина;
Продолжить;
КонецЕсли;
Если Строка(Строка.Параметр) = "Дистрибуция" И Дистрибуция.Пустая() = Ложь Тогда
Настройки.ПараметрыДанных.Элементы[i].Значение = Дистрибуция;
Настройки.ПараметрыДанных.Элементы[i].Использование = Истина;
Продолжить;
КонецЕсли;
Если Строка(Строка.Параметр) = "Подразделение" И ЗначениеЗаполнено(Подразделение) = Истина Тогда
Если НесколькоПодразд Тогда
Настройки.ПараметрыДанных.Элементы[i].Значение = Подразделение;
Настройки.ПараметрыДанных.Элементы[i].Использование = Истина;
ИначеЕсли Подразделение.Пустая() = Ложь Тогда
ПодразделениеСЗ = Новый СписокЗначений;
ПодразделениеСЗ.Добавить(Подразделение);
Настройки.ПараметрыДанных.Элементы[i].Значение = ПодразделениеСЗ;
Настройки.ПараметрыДанных.Элементы[i].Использование = Истина;
КонецЕсли;
Продолжить;
КонецЕсли;
Если Строка(Строка.Параметр) = "Агент" И ЗначениеЗаполнено(Агент) = Истина Тогда
Если Несколько Тогда
Настройки.ПараметрыДанных.Элементы[i].Значение = Агент;
Настройки.ПараметрыДанных.Элементы[i].Использование = Истина;
ИначеЕсли Агент.Пустая() = Ложь Тогда
АгентСЗ = Новый СписокЗначений;
АгентСЗ.Добавить(Агент);
Настройки.ПараметрыДанных.Элементы[i].Значение = АгентСЗ;
Настройки.ПараметрыДанных.Элементы[i].Использование = Истина;
КонецЕсли;
Продолжить;
КонецЕсли;
Если Строка(Строка.Параметр) = "Товар" И СписокТоваров.Количество()<>0 Тогда
Настройки.ПараметрыДанных.Элементы[i].Значение = СписокТоваров;
Настройки.ПараметрыДанных.Элементы[i].Использование = Истина;
Продолжить;
КонецЕсли;
Если Строка(Строка.Параметр) = "Логистика" И ПолеДоставка <> "ДоставкаСамовывоз" Тогда
Если ПолеДоставка = "ТолькоДоставка" Тогда
УсловиеЛогистика = 2;
ИначеЕсли ПолеДоставка = "ТолькоСамовывоз" Тогда
УсловиеЛогистика = 3;
КонецЕсли;
Настройки.ПараметрыДанных.Элементы[i].Значение = УсловиеЛогистика;
Настройки.ПараметрыДанных.Элементы[i].Использование = Истина;
Продолжить;
КонецЕсли;
Если Строка(Строка.Параметр) = "Возвраты" И ПолеВозвраты <> "ПродажиСВозвратами" Тогда
Если ПолеВозвраты = "ТолькоПродажи" Тогда
УсловиеВозвраты = 2;
ИначеЕсли ПолеВозвраты = "ТолькоВозвраты" Тогда
УсловиеВозвраты = 3;
КонецЕсли;
Настройки.ПараметрыДанных.Элементы[i].Значение = УсловиеВозвраты;
Настройки.ПараметрыДанных.Элементы[i].Использование = Истина;
Продолжить;
КонецЕсли;
Если Строка(Строка.Параметр) = "Бонусы" И ПолеБонусы <> "ПродажиСБонусами" Тогда
Если ПолеБонусы = "ТолькоПродажи" Тогда
УсловиеБонусы = 2;
ИначеЕсли ПолеБонусы = "ТолькоБонусы" Тогда
УсловиеБонусы = 3;
КонецЕсли;
Настройки.ПараметрыДанных.Элементы[i].Значение = УсловиеБонусы;
Настройки.ПараметрыДанных.Элементы[i].Использование = Истина;
Продолжить;
КонецЕсли;
Если Строка(Строка.Параметр) = "ДопПродажи" И ПолеДопПродажи <> "ВсеПродажи" Тогда
Если ПолеДопПродажи = "ТолькоПродажи" Тогда
УсловиеДопПродажи = 2;
ИначеЕсли ПолеДопПродажи = "ТолькоДопПродажи" Тогда
УсловиеДопПродажи = 3;
КонецЕсли;
Настройки.ПараметрыДанных.Элементы[i].Значение = УсловиеДопПродажи;
Настройки.ПараметрыДанных.Элементы[i].Использование = Истина;
Продолжить;
КонецЕсли;
КонецЦикла;
////******************************************************
//ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
// ЭлементОтбора.ВидСравнения=ВидСравненияКомпоновкиДанных.ВИерархии;
// ЭлементОтбора.ЛевоеЗначение=Новый ПолеКомпоновкиДанных("УчастокОбращенияТПС");//поле отбора
// ЭлементОтбора.ПравоеЗначение=РезультатЗапроса.УчастокОбращенияТПС;
// ЭлементОтбора.Использование=Истина;
//ЭлементОтбора.ИдентификаторПользовательскойНастройки=Новый УникальныйИдентификатор();
////добавляет отбор в состав пользовательских настроек
////******************************************************
//Помещаем в переменную данные о расшифровке данных
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
//Передаем в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки, ДанныеРасшифровки);
//Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
//Очищаем поле табличного документа
Результат = ЭлементыФормы.Результат;
Результат.Очистить();
//Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
РасчетШириныКолонок(ЭлементыФормы.Результат);
ЭлементыФормы.Результат.ПоказатьУровеньГруппировокСтрок(1);
СгенерироватьКнопкиУправленияГруппировкой();
ЭлементыФормы.Панель1.ТекущаяСтраница = ЭлементыФормы.Панель1.Страницы.Отчет;
ЭлементыФормы.Время.Значение = "Время создания отчета: "+ СтандартныеКоды.ВремяВыполнения(Начало);
КонецПроцедуры
ПоказатьПрикрепленные файлы:
По теме из базы знаний
- Отчет по структуре метаданных конфигурации / поиск "битых" типов (Строка 10)
- Как я с отчетом СКД боролся (произвольный макет)!
- Доработка типового отчета на СКД с помощью расширения
- Скрыть детальные записи или как вывести ИТОГИ в отчете СКД без детальных записей
- Динамическая группировка в СКД или "Закат солнца вручную"
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Тоже была такая версия. В макете СКД идет объединение 2-х наборов данных (скрин во вложении). Буквально сегодня пробовал в запросе добавить условие к виртуальной таблице регистра: НЕ Товар ЕСТЬ NULL, Товар <> Значение(Справочник.Товары.ПустаяСсылка), результата не дает. Указывал в макете отбор по Товар Не Заполнено, по Товар Не Равно Справочник.Товары.ПустаяСсылка - результата не было. По поводу пустых записей в регистре - вряд ли, так как уже годами отлажено, явные косяки давно устранены.
(2)
(2)
Прикрепленные файлы:
(6) Обязательно попробую, но мне не понятно, каким образом объединение запросов выполняет именно СКД. В отладке тоже не удалось посмотреть, видно только 2 отдельных запроса, как бы "итоговый" текст получить не удалось. Если глобально, правильно было бы наверное переделать отчет, сделать итоговый вариант запроса, убрать объединение именно средствами СКД.
На данный момент, интересно понять, есть ли в текущих обстоятельствах корректное решение.
На данный момент, интересно понять, есть ли в текущих обстоятельствах корректное решение.
Огромное спасибо за погружение в мою проблему.
На данный момент, ситуация решена, но она не решена :)
В условное форматирование отчета добавлено условие (скрин во вложении). В данном условии ограничена максимальная высота строки в случае если Товар не Заполнено. И оно выдает следующий результат (скрин прилагается). Строки как бы и нет, но она никуда не делась. Логично, что все-таки Товар = ПустаяСсылка. Но, считаю это не решением проблемы.
На данный момент, ситуация решена, но она не решена :)
В условное форматирование отчета добавлено условие (скрин во вложении). В данном условии ограничена максимальная высота строки в случае если Товар не Заполнено. И оно выдает следующий результат (скрин прилагается). Строки как бы и нет, но она никуда не делась. Логично, что все-таки Товар = ПустаяСсылка. Но, считаю это не решением проблемы.
Прикрепленные файлы:
Выше не зря спрашивали
Если в других столбцах также пусто, и саму строку в принципе выводить не надо, то неплохим решением было бы не уменьшать высоту строки, а вообще не выводить ее, т.е. добавить отбор.
Данные по этой строке есть? по другим столбцам?
Если в других столбцах также пусто, и саму строку в принципе выводить не надо, то неплохим решением было бы не уменьшать высоту строки, а вообще не выводить ее, т.е. добавить отбор.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот