Помогите пожалуйста.. Уже не знаю что делать..
Переделываю отчет. Есть макет. Вывожу данные,и появляются лишние строки. Не могу понять.
Все данные как будто съезжают вправо.
Код начиная с вывода отчета
Переделываю отчет. Есть макет. Вывожу данные,и появляются лишние строки. Не могу понять.
Все данные как будто съезжают вправо.
Код начиная с вывода отчета
ТабличныйДокумент.НачатьАвтогруппировкуСтрок();
Выборка_Номенклатура = Выборка_Итого.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура");
Пока Выборка_Номенклатура.Следующий() Цикл
_Уровень = ?(ВыводитьИерархию, Выборка_Номенклатура.Уровень() - 1, 0);
ОбластьНоменклатураГруппаТело.Область(1,1,1,1).Отступ = _Уровень;
ОбластьНоменклатураТело.Область(1,1,1,1).Отступ = _Уровень;
ОбластьВариантИсполнения_КатегорияТело.Область(1,1,1,1).Отступ = _Уровень + 1;
Область_Пустая_ВариантИсполнения_КатегорияТело.Область(1,1,1,1).Отступ = _Уровень;
//Вывод строки номенклатуры
Если Выборка_Номенклатура.Номенклатура.ЭтоГруппа Тогда
//Группу номенклатуры выводим только если она является итогом по группировке (при иерархическом выводе)
//ИЛИ выводится номенклатура, невключаемая в прайс
Если Выборка_Номенклатура.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии
ИЛИ (НЕ ЭлементОтбора_НеВключатьВПрайс = Неопределено
И ЭлементОтбора_НеВключатьВПрайс.Использование
И ЭлементОтбора_НеВключатьВПрайс.Значение = ИСТИНА) Тогда
ОбластьНоменклатураГруппаТело.Параметры.Заполнить(Выборка_Номенклатура);
ТабличныйДокумент.Вывести(ОбластьНоменклатураГруппаТело, _Уровень,,Истина);
ОбластьНоменклатураГруппаЕдИзм.Параметры.Заполнить(Выборка_Номенклатура);
ТабличныйДокумент.Присоединить(ОбластьНоменклатураГруппаЕдИзм);
ВыборкаИтого_ТипыЦен.Сбросить();
Пока ВыборкаИтого_ТипыЦен.Следующий() Цикл
Если глПустоеЗначение(ВыборкаИтого_ТипыЦен.ТипЦен) Тогда
Продолжить;
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьНоменклатураГруппаТипЦен);
КонецЦикла;
ТабличныйДокумент.Присоединить(ОбластьНоменклатураГруппаИтого);
КонецЕсли;
Продолжить;
Иначе
// Строку номенклатуры (при обходе номенклатуры) выводим только
// если по ней указаны цены для категорий или вариантов исполнения
// Иначе тут строку не выводим, а для детальных записей текущей номенклатуры
// указываем область, в которой вместо пустых категорий/вариантов исполнений выводится сама номенклатура
Если Выборка_Номенклатура.ЕстьНепустой_ВариантИсполненияКатегория Тогда
ОбластьНоменклатураТело.Параметры.Заполнить(Выборка_Номенклатура);
ТабличныйДокумент.Вывести(ОбластьНоменклатураТело, _Уровень,,Истина);
ОбластьНоменклатураЕдИзм.Параметры.Заполнить(Выборка_Номенклатура);
ТабличныйДокумент.Присоединить(ОбластьНоменклатураЕдИзм);
ВыборкаИтого_ТипыЦен.Сбросить();
Пока ВыборкаИтого_ТипыЦен.Следующий() Цикл
Если глПустоеЗначение(ВыборкаИтого_ТипыЦен.ТипЦен) Тогда
Продолжить;
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьНоменклатураТипЦен);
КонецЦикла;
ТабличныйДокумент.Присоединить(ОбластьНоменклатураИтого);
Область_Детали_Тело = ОбластьВариантИсполнения_КатегорияТело;
Область_Детали_ЕдИзм = ОбластьВариантИсполнения_КатегорияЕдИзм;
Область_Детали_ТипЦен = ОбластьВариантИсполнения_КатегорияТипЦен;
Область_Детали_Итого = ОбластьВариантИсполнения_КатегорияИтого;
Детали_Уровень = _Уровень;
Иначе
Область_Детали_Тело = Область_Пустая_ВариантИсполнения_КатегорияТело;
Область_Детали_ЕдИзм = Область_Пустая_ВариантИсполнения_КатегорияЕдИзм;
Область_Детали_ТипЦен = Область_Пустая_ВариантИсполнения_КатегорияТипЦен;
Область_Детали_Итого = Область_Пустая_ВариантИсполнения_КатегорияИтого;
Детали_Уровень = _Уровень -1;
КонецЕсли;
КонецЕсли;
//Вывод ВариантаИсполнения/Категории
Выборка_ТипВИКатегории = Выборка_Номенклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ТипВИКатегории");
Пока Выборка_ТипВИКатегории.Следующий() Цикл
Выборка_ВариантИсполнения_Категория = Выборка_ТипВИКатегории.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ВариантИсполнения_Категория");
Пока Выборка_ВариантИсполнения_Категория.Следующий() Цикл
//
// Если НЕ глПустоеЗначение(Выборка_ВариантИсполнения_Категория.ВариантИсполнения_Категория) Тогда
// _Дополнительно = Новый Структура;
// // _Дополнительно.Вставить("ВариантИсполнения",Выборка_ВариантИсполнения_Категория.ВариантИсполнения_Категория);
// // _Дополнительно.Вставить("ЕдИзм",Выборка_ВариантИсполнения_Категория.Номенклатура.БазоваяЕдИзм);
// шк = глСформироватьВнутреннийШтрихкод(Выборка_ВариантИсполнения_Категория.Номенклатура,_Дополнительно);
// _Дополнительно.Вставить("шк",шк);
// Область_Детали_Тело.Параметры.Заполнить(_Дополнительно);
// ТабличныйДокумент.Вывести(Область_Детали_Тело, Детали_Уровень+1);
// //Область_Детали_Тело.Параметры.ВариантИсполнения_Категория = "";
// Область_Детали_Тело.Параметры.шк = "" ;
// КонецЕсли;
Выборка_ЕдИзм = Выборка_ВариантИсполнения_Категория.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ЕдИзм");
Пока Выборка_ЕдИзм.Следующий() Цикл
Область_Детали_Тело.Параметры.Заполнить(Выборка_ЕдИзм);
//ТабличныйДокумент.Вывести(Область_Детали_Тело,Детали_Уровень+1);
Область_Детали_ЕдИзм.Параметры.Заполнить(Выборка_ЕдИзм);
ТабличныйДокумент.Присоединить(Область_Детали_ЕдИзм);
Если НЕ глПустоеЗначение(Выборка_ВариантИсполнения_Категория.ВариантИсполнения_Категория) Тогда
_Дополнительно = Новый Структура;
_Дополнительно.Вставить("ВариантИсполнения",Выборка_ЕдИзм.ВариантИсполнения_Категория);
_Дополнительно.Вставить("ЕдИзм",Выборка_ЕдИзм.Номенклатура.БазоваяЕдИзм);
шк = глСформироватьВнутреннийШтрихкод(Выборка_ЕдИзм.Номенклатура,_Дополнительно);
_Дополнительно.Вставить("шк",шк);
Область_Детали_Тело.Параметры.Заполнить(_Дополнительно);
ТабличныйДокумент.Вывести(Область_Детали_Тело, Детали_Уровень + 1);
Область_Детали_Тело.Параметры.ВариантИсполнения_Категория = "";
Область_Детали_Тело.Параметры.шк = "" ;
КонецЕсли;
Выборка_ТипыЦен = Выборка_ЕдИзм.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ТипЦен", "Все");
Пока Выборка_ТипыЦен.Следующий() Цикл
Если глПустоеЗначение(Выборка_ТипыЦен.ТипЦен) Тогда
Продолжить;
КонецЕсли;
Область_Детали_ТипЦен.Параметры.Заполнить(Выборка_ТипыЦен);
ТабличныйДокумент.Присоединить(Область_Детали_ТипЦен);
КонецЦикла;
ТабличныйДокумент.Присоединить(Область_Детали_Итого);
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
ТабличныйДокумент.ЗакончитьАвтогруппировкуСтрок ();
ПоказатьПрикрепленные файлы:
По теме из базы знаний
- СКД. Шаг 3. Используем макеты для оформления отчета
- Программная корректировка при выводе отчета СКД
- СКД: все, что вы хотели знать о подмене схемы компоновки данных в отчетах и обработках
- По-настоящему свои макеты в отчетах СКД. Исследование процесса компоновки и генерация кода отчета
- Вывод дополнительных итогов в отчет
Найденные решения
(18)Все получилось,всем спасибо
Пока Выборка_ТипВИКатегории.Следующий() Цикл
Выборка_ВариантИсполнения_Категория = Выборка_ТипВИКатегории.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ВариантИсполнения_Категория");
Пока Выборка_ВариантИсполнения_Категория.Следующий() Цикл
Если НЕ глПустоеЗначение(Выборка_ВариантИсполнения_Категория.ВариантИсполнения_Категория) Тогда
_Дополнительно = Новый Структура;
_Дополнительно.Вставить("ВариантИсполнения",Выборка_ВариантИсполнения_Категория.ВариантИсполнения_Категория);
_Дополнительно.Вставить("ЕдИзм",Выборка_ВариантИсполнения_Категория.Номенклатура.БазоваяЕдИзм);
шк = глСформироватьВнутреннийШтрихкод(Выборка_ВариантИсполнения_Категория.Номенклатура,_Дополнительно);
_Дополнительно.Вставить("шк",шк);
Область_Детали_Тело.Параметры.Заполнить(_Дополнительно);
//ТабличныйДокумент.Вывести(Область_Детали_Тело, Детали_Уровень + 1);
// Область_Детали_Тело.Параметры.ВариантИсполнения_Категория = "";
// Область_Детали_Тело.Параметры.шк = "" ;
КонецЕсли;
Выборка_ЕдИзм = Выборка_ВариантИсполнения_Категория.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ЕдИзм");
Пока Выборка_ЕдИзм.Следующий() Цикл
Область_Детали_Тело.Параметры.Заполнить(Выборка_ЕдИзм);
ТабличныйДокумент.Вывести(Область_Детали_Тело, Детали_Уровень + 1);
Область_Детали_ЕдИзм.Параметры.Заполнить(Выборка_ЕдИзм);
ТабличныйДокумент.Присоединить(Область_Детали_ЕдИзм);
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
А что в итоге нужно получить? Вы хотите в разных группировках разные данные? Может проще таблицу одну целую, а уже заполнением манипулировать? Данные съезжают т.к. присоединяете секции, видимо в одной группировке присоединяется больше чем в другой.
Косяк тут, например:
Присоединять надо в любом случае, пусть даже клетка будет пустая. Ну и выводить, соответственно.
Пока ВыборкаИтого_ТипыЦен.Следующий() Цикл
Если глПустоеЗначение(ВыборкаИтого_ТипыЦен.ТипЦен) Тогда
Продолжить;
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьНоменклатураГруппаТипЦен);
КонецЦикла;
ПоказатьПрисоединять надо в любом случае, пусть даже клетка будет пустая. Ну и выводить, соответственно.
(13)да так же
ТабличныйДокумент.НачатьАвтогруппировкуСтрок();
Выборка_Номенклатура = Выборка_Итого.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура");
Пока Выборка_Номенклатура.Следующий() Цикл
_Уровень = ?(ВыводитьИерархию, Выборка_Номенклатура.Уровень() - 1, 0);
ОбластьНоменклатураГруппаТело.Область(1,1,1,1).Отступ = _Уровень;
ОбластьНоменклатураТело.Область(1,1,1,1).Отступ = _Уровень;
ОбластьВариантИсполнения_КатегорияТело.Область(1,1,1,1).Отступ = _Уровень + 1;
Область_Пустая_ВариантИсполнения_КатегорияТело.Область(1,1,1,1).Отступ = _Уровень;
//Вывод строки номенклатуры
Если Выборка_Номенклатура.Номенклатура.ЭтоГруппа Тогда
//Группу номенклатуры выводим только если она является итогом по группировке (при иерархическом выводе)
//ИЛИ выводится номенклатура, невключаемая в прайс
Если Выборка_Номенклатура.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии
ИЛИ (НЕ ЭлементОтбора_НеВключатьВПрайс = Неопределено
И ЭлементОтбора_НеВключатьВПрайс.Использование
И ЭлементОтбора_НеВключатьВПрайс.Значение = ИСТИНА) Тогда
ОбластьНоменклатураГруппаТело.Параметры.Заполнить(Выборка_Номенклатура);
ТабличныйДокумент.Вывести(ОбластьНоменклатураГруппаТело, _Уровень,,Истина);
ОбластьНоменклатураГруппаЕдИзм.Параметры.Заполнить(Выборка_Номенклатура);
ТабличныйДокумент.Присоединить(ОбластьНоменклатураГруппаЕдИзм);
ВыборкаИтого_ТипыЦен.Сбросить();
Пока ВыборкаИтого_ТипыЦен.Следующий() Цикл
//Если глПустоеЗначение(ВыборкаИтого_ТипыЦен.ТипЦен) Тогда
// ТабличныйДокумент.Присоединить(ОбластьНоменклатураГруппаТипЦен);
// //Продолжить;
//КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьНоменклатураГруппаТипЦен);
КонецЦикла;
ТабличныйДокумент.Присоединить(ОбластьНоменклатураГруппаИтого);
КонецЕсли;
Продолжить;
Иначе
// Строку номенклатуры (при обходе номенклатуры) выводим только
// если по ней указаны цены для категорий или вариантов исполнения
// Иначе тут строку не выводим, а для детальных записей текущей номенклатуры
// указываем область, в которой вместо пустых категорий/вариантов исполнений выводится сама номенклатура
Если Выборка_Номенклатура.ЕстьНепустой_ВариантИсполненияКатегория Тогда
ОбластьНоменклатураТело.Параметры.Заполнить(Выборка_Номенклатура);
ТабличныйДокумент.Вывести(ОбластьНоменклатураТело, _Уровень,,Истина);
ОбластьНоменклатураЕдИзм.Параметры.Заполнить(Выборка_Номенклатура);
ТабличныйДокумент.Присоединить(ОбластьНоменклатураЕдИзм);
ВыборкаИтого_ТипыЦен.Сбросить();
Пока ВыборкаИтого_ТипыЦен.Следующий() Цикл
Если глПустоеЗначение(ВыборкаИтого_ТипыЦен.ТипЦен) Тогда
Продолжить;
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьНоменклатураТипЦен);
КонецЦикла;
ТабличныйДокумент.Присоединить(ОбластьНоменклатураИтого);
Область_Детали_Тело = ОбластьВариантИсполнения_КатегорияТело;
Область_Детали_ЕдИзм = ОбластьВариантИсполнения_КатегорияЕдИзм;
Область_Детали_ТипЦен = ОбластьВариантИсполнения_КатегорияТипЦен;
Область_Детали_Итого = ОбластьВариантИсполнения_КатегорияИтого;
Детали_Уровень = _Уровень;
Иначе
Область_Детали_Тело = Область_Пустая_ВариантИсполнения_КатегорияТело;
Область_Детали_ЕдИзм = Область_Пустая_ВариантИсполнения_КатегорияЕдИзм;
Область_Детали_ТипЦен = Область_Пустая_ВариантИсполнения_КатегорияТипЦен;
Область_Детали_Итого = Область_Пустая_ВариантИсполнения_КатегорияИтого;
Детали_Уровень = _Уровень -1;
КонецЕсли;
КонецЕсли;
//Вывод ВариантаИсполнения/Категории
Выборка_ТипВИКатегории = Выборка_Номенклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ТипВИКатегории");
Пока Выборка_ТипВИКатегории.Следующий() Цикл
Выборка_ВариантИсполнения_Категория = Выборка_ТипВИКатегории.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ВариантИсполнения_Категория");
Пока Выборка_ВариантИсполнения_Категория.Следующий() Цикл
////
// Если НЕ глПустоеЗначение(Выборка_ВариантИсполнения_Категория.ВариантИсполнения_Категория) Тогда
// _Дополнительно = Новый Структура;
// _Дополнительно.Вставить("ВариантИсполнения",Выборка_ВариантИсполнения_Категория.ВариантИсполнения_Категория);
// _Дополнительно.Вставить("ЕдИзм",Выборка_ВариантИсполнения_Категория.Номенклатура.БазоваяЕдИзм);
// шк = глСформироватьВнутреннийШтрихкод(Выборка_ВариантИсполнения_Категория.Номенклатура,_Дополнительно);
// _Дополнительно.Вставить("шк",шк);
// Область_Детали_Тело.Параметры.Заполнить(_Дополнительно);
// ТабличныйДокумент.Вывести(Область_Детали_Тело, Детали_Уровень+1);
// //Область_Детали_Тело.Параметры.ВариантИсполнения_Категория = "";
// Область_Детали_Тело.Параметры.шк = "" ;
// КонецЕсли;
Выборка_ЕдИзм = Выборка_ВариантИсполнения_Категория.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ЕдИзм");
Пока Выборка_ЕдИзм.Следующий() Цикл
Область_Детали_Тело.Параметры.Заполнить(Выборка_ЕдИзм);
//ТабличныйДокумент.Вывести(Область_Детали_Тело,Детали_Уровень+1);
Область_Детали_ЕдИзм.Параметры.Заполнить(Выборка_ЕдИзм);
ТабличныйДокумент.Присоединить(Область_Детали_ЕдИзм);
Если НЕ глПустоеЗначение(Выборка_ВариантИсполнения_Категория.ВариантИсполнения_Категория) Тогда
_Дополнительно = Новый Структура;
_Дополнительно.Вставить("ВариантИсполнения",Выборка_ЕдИзм.ВариантИсполнения_Категория);
_Дополнительно.Вставить("ЕдИзм",Выборка_ЕдИзм.Номенклатура.БазоваяЕдИзм);
шк = глСформироватьВнутреннийШтрихкод(Выборка_ЕдИзм.Номенклатура,_Дополнительно);
_Дополнительно.Вставить("шк",шк);
Область_Детали_Тело.Параметры.Заполнить(_Дополнительно);
ТабличныйДокумент.Вывести(Область_Детали_Тело, Детали_Уровень + 1);
Область_Детали_Тело.Параметры.ВариантИсполнения_Категория = "";
Область_Детали_Тело.Параметры.шк = "" ;
КонецЕсли;
Выборка_ТипыЦен = Выборка_ЕдИзм.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ТипЦен", "Все");
Пока Выборка_ТипыЦен.Следующий() Цикл
//Если глПустоеЗначение(Выборка_ТипыЦен.ТипЦен) Тогда
// Продолжить;
//КонецЕсли;
//
Область_Детали_ТипЦен.Параметры.Заполнить(Выборка_ТипыЦен);
ТабличныйДокумент.Присоединить(Область_Детали_ТипЦен);
КонецЦикла;
ТабличныйДокумент.Присоединить(Область_Детали_Итого);
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
ТабличныйДокумент.ЗакончитьАвтогруппировкуСтрок ();
Показать
Я бы заново начала с рабочего варианта и если, как вы говорите, уже была группировка ВариантИсполнения не трогала бы глобально макет, а только разбила бы ячейку с наименованием "ВариантИсполнения_Категория" на две не нарушая структуру макета. Потом попробуйте в месте где выводится ВариантИсполнения_Категория вставить свой параметр ШК и вписать что то свое типа "000". А уже если все получится, тогда пробуйте получать ШК и выводить его вместо "000". Двигаться лучше постепенно...
не получается,скорее всего ошибка в выводе тела. Если ту первую строку раскомментить,то задваивает значения,но все нормально выводит. Может тут что то подправить? Подскажите пожалуйста...
Область_Детали_Тело.Параметры.Заполнить(Выборка_ЕдИзм);
//ТабличныйДокумент.Вывести(Область_Детали_Тело,Детали_Уровень+1);
Область_Детали_ЕдИзм.Параметры.Заполнить(Выборка_ЕдИзм);
ТабличныйДокумент.Присоединить(Область_Детали_ЕдИзм);
Если НЕ глПустоеЗначение(Выборка_ВариантИсполнения_Категория.ВариантИсполнения_Категория) Тогда
_Дополнительно = Новый Структура;
_Дополнительно.Вставить("ВариантИсполнения",Выборка_ЕдИзм.ВариантИсполнения_Категория);
_Дополнительно.Вставить("ЕдИзм",Выборка_ЕдИзм.Номенклатура.БазоваяЕдИзм);
шк = глСформироватьВнутреннийШтрихкод(Выборка_ЕдИзм.Номенклатура,_Дополнительно);
_Дополнительно.Вставить("шк",шк);
Область_Детали_Тело.Параметры.Заполнить(_Дополнительно);
ТабличныйДокумент.Вывести(Область_Детали_Тело, Детали_Уровень + 1);
Область_Детали_Тело.Параметры.ВариантИсполнения_Категория = "";
Область_Детали_Тело.Параметры.шк = "" ;
КонецЕсли;
Показать
(18)Все получилось,всем спасибо
Пока Выборка_ТипВИКатегории.Следующий() Цикл
Выборка_ВариантИсполнения_Категория = Выборка_ТипВИКатегории.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ВариантИсполнения_Категория");
Пока Выборка_ВариантИсполнения_Категория.Следующий() Цикл
Если НЕ глПустоеЗначение(Выборка_ВариантИсполнения_Категория.ВариантИсполнения_Категория) Тогда
_Дополнительно = Новый Структура;
_Дополнительно.Вставить("ВариантИсполнения",Выборка_ВариантИсполнения_Категория.ВариантИсполнения_Категория);
_Дополнительно.Вставить("ЕдИзм",Выборка_ВариантИсполнения_Категория.Номенклатура.БазоваяЕдИзм);
шк = глСформироватьВнутреннийШтрихкод(Выборка_ВариантИсполнения_Категория.Номенклатура,_Дополнительно);
_Дополнительно.Вставить("шк",шк);
Область_Детали_Тело.Параметры.Заполнить(_Дополнительно);
//ТабличныйДокумент.Вывести(Область_Детали_Тело, Детали_Уровень + 1);
// Область_Детали_Тело.Параметры.ВариантИсполнения_Категория = "";
// Область_Детали_Тело.Параметры.шк = "" ;
КонецЕсли;
Выборка_ЕдИзм = Выборка_ВариантИсполнения_Категория.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ЕдИзм");
Пока Выборка_ЕдИзм.Следующий() Цикл
Область_Детали_Тело.Параметры.Заполнить(Выборка_ЕдИзм);
ТабличныйДокумент.Вывести(Область_Детали_Тело, Детали_Уровень + 1);
Область_Детали_ЕдИзм.Параметры.Заполнить(Выборка_ЕдИзм);
ТабличныйДокумент.Присоединить(Область_Детали_ЕдИзм);
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот