Сдвиг результата в СКД

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. 1C_MApteka 27.11.15 13:57 Сейчас в теме
Здравствуйте. При создании своего отчета на СКД при подчинении нескольких группировок одной
возникает проблема - во второй группировке результат сдвигается и выводится справа от первой группировки, а не в своих колонках отчета:

Обе группировки промакетированы. С чем может быть связано такое поведение СКД?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. vovan_victory 63 27.11.15 14:33 Сейчас в теме
(1) 1C_MApteka, перегруппировку программно написали?
3. 1C_MApteka 27.11.15 15:17 Сейчас в теме
Написал группировку программно, сумма встала на свое место, номенклатура и количества все еще сдвинуты
4. vovan_victory 63 27.11.15 16:54 Сейчас в теме
(3) 1C_MApteka, а ну вот.Значит я правильно понял в предыдущем посте. Для того, чтобы перегруппировать так, как нужно, с начала нужно разгруппировать ячейки(предыдущей группировки), указать новый диапазон ячеек и сгруппировать снова.
5. 1C_MApteka 30.11.15 12:13 Сейчас в теме
(4) vovan_victory, на данный момент кусок кода, отвечающий за создание группировок, выглядит так:
//добавим группировки в компоновщик настроек
	Настройки.Структура.Очистить();
	ГруппировкаСкладТанкер = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
	ГруппировкаСкладТанкер.Имя = "СкладТанкер";
	ГруппировкаСкладТанкер.Использование = Истина;
		
	ПолеГруппировкиСклад = ГруппировкаСкладТанкер.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));       
	ПолеГруппировкиСклад.Использование      = Истина;
	ПолеГруппировкиСклад.Поле               = Новый ПолеКомпоновкиДанных("СкладТанкер");
	
	ВыбранноеПоле = ГруппировкаСкладТанкер.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));   
	ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("СкладТанкер");
	ВыбранноеПоле.Использование = Истина;
		
	ГруппировкаНачальныеОстатки = ГруппировкаСкладТанкер.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
	ГруппировкаНачальныеОстатки.Имя = "НачальныеОстатки";
	ГруппировкаНачальныеОстатки.Использование = Истина;
	
	ПолеГруппировкиНоменклатура = ГруппировкаНачальныеОстатки.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));       
	ПолеГруппировкиНоменклатура.Использование      = Истина;
	ПолеГруппировкиНоменклатура.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
		
	ВыбранноеПоле = ГруппировкаНачальныеОстатки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));   
	ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
	ВыбранноеПоле = ГруппировкаНачальныеОстатки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));   
	ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("КоличествоТоннНеттоНачальныйОстаток");
	ВыбранноеПоле = ГруппировкаНачальныеОстатки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));   
	ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("КоличествоТоннБруттоНачальныйОстаток");
	ВыбранноеПоле = ГруппировкаНачальныеОстатки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));   
	ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("КоличествоБаррелейНеттоНачальныйОстаток");
	ВыбранноеПоле = ГруппировкаНачальныеОстатки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));   
	ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("КоличествоБаррелейБруттоНачальныйОстаток");
	ВыбранноеПоле = ГруппировкаНачальныеОстатки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));   
	ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("КоличествоНачальныйОстаток");
	ВыбранноеПоле = ГруппировкаНачальныеОстатки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));   
	ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("СуммаНачОст");
	
	ГруппировкаКонечныеОстатки = ГруппировкаСкладТанкер.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
	ГруппировкаКонечныеОстатки.Имя = "КонечныеОстатки";
	ГруппировкаКонечныеОстатки.Использование = Истина;
	
	ПолеГруппировкиНоменклатура = ГруппировкаКонечныеОстатки.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));       
	ПолеГруппировкиНоменклатура.Использование      = Истина;
	ПолеГруппировкиНоменклатура.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
	
	ВыбранноеПоле = ГруппировкаКонечныеОстатки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));   
	ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
	ВыбранноеПоле = ГруппировкаКонечныеОстатки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));   
	ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("КоличествоТоннНеттоКонечныйОстаток");
	ВыбранноеПоле = ГруппировкаКонечныеОстатки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));   
	ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("КоличествоТоннБруттоКонечныйОстаток");
	ВыбранноеПоле = ГруппировкаКонечныеОстатки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));   
	ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("КоличествоБаррелейНеттоКонечныйОстаток");
	ВыбранноеПоле = ГруппировкаКонечныеОстатки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));   
	ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("КоличествоБаррелейБруттоКонечныйОстаток");
	ВыбранноеПоле = ГруппировкаКонечныеОстатки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));   
	ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("КоличествоКонечныйОстаток");
	ВыбранноеПоле = ГруппировкаКонечныеОстатки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));   
	ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("СуммаНачОст");
Показать

Результат не изменяется, сумма стоит на своем месте, все остальное сдвинуто. Можете уточнить, как это разгруппировать ячейки предыдущей группировки и назначить новые? Ведь мы делаем группировки в компоновщике настроек, еще до поступления в компоновщик макета.
6. Euroset1 11 30.11.15 13:19 Сейчас в теме
Мне кажется, что дело вовсе не в группировках. С макетом что-то не то. Вон даже на картинке видно, что сдвинуты строки группировки по конечному остатку. Вот их макет и нужно смотреть. Может там объединения неудачные или просто банально смещено. Или везде макет есть, а для этой группировки для строк его нету.
7. 1C_MApteka 30.11.15 13:40 Сейчас в теме
(6) Euroset1, Макеты для обеих группировок выглядят одинаково, различаются только параметры:


Вообще в отчете 3 группировки, посередине должна быть группировка "Обороты". Отключил ее вывод для простоты восприятия, но когда она включена, обороты выводятся со сдвигом на ширину начальных остатков, а конечные остатки сдвигаются еще правее на ширину оборотов.
8. Euroset1 11 30.11.15 13:50 Сейчас в теме
(7) 1C_MApteka, может я параноик, но 19 строка на скрине отличается от 3 строки и от всех вообще. Там не видно справа границ у ячейки. Попробуй скопировать 3ю строку целиком, вставить на 19ю и переписать вручную начальный на конечный. Ну или убрать объекдинение ячеек и поставить его как у других строк.
9. 1C_MApteka 30.11.15 13:59 Сейчас в теме
(8) Euroset1, на всякий случай попробовал и так, и так. Макеты в порядке, на мой взгляд. Это либо СКД так работает и ничего с этим не сделать, либо одно из двух...
10. Euroset1 11 30.11.15 14:29 Сейчас в теме
(9) 1C_MApteka, что-то я туплю, надо было сразу тебе на это указать.
Короче... у тебя там ресурсы разные. Они даже в теории не должны встать на одну линию. Как СКД должно понять, что сумма начальная и сумма конечная - одно и то же.

смотри, у тебя для ресурсов заголовки расставлены в макете? ага. а сами ресурсы? фигу. я точно параноик, но это макет полюбому. иного не дано.
и вообще странно, что у тебя заголовки ресурсов на первом скрине непустые. потому что судя по макету ты в заголовки запихнул ячейки, предназначенные для строк ресурсов
11. 1C_MApteka 30.11.15 14:39 Сейчас в теме
(10) Euroset1, я правильно понимаю, что ты предлагаешь сделать макет ресурсов для ресурсов? Я не очень понимаю, как они работают, там 2 группировки нужно указывать. Сделал как смог и результат не изменился.
12. Euroset1 11 30.11.15 14:55 Сейчас в теме
(11) 1C_MApteka, я не совсем в теме, как они правильно называются, но вижу явный разрез логики в твоем макете. Тебе либо макет допилить (и перепроверить желательно, может я еще что упустил), либо названия ресурсов привести к единому названию. Я же тебе говорю, СКД видит, что у тебя ресурсы разные по названию и потому не может их поставить на одну линию. Макет решает твои проблемы, если ты укажешь корректные позиции не только для заголовков, но и для самих строк.

Кстати есть еще вариант попробовать. Заголовки ресурсов убираешь вообще из макетов. а номенклатуру продляешь до тех позиций, на которых кончались они. т.е. номенклатурам отдай эти ячейки. и наверное это сработает.
и еще проверь чтобы эти номенклатуры были правильно разведены по именам каждая к своей группировке. в макете у каждой из них должно быть имя и оно же в группировках. если ты заполняешь компоновщик программно, то значит при создании группировок номенклатуры ты должен эти имена тоже там задать (если не программно, то имена можно задать группировкам только в конфигураторе. потому что на клиенте в редактировании варианта они безликие, хоть за кадром и могут иметь имена)
13. Euroset1 11 30.11.15 15:17 Сейчас в теме
Да, точно, пробуй как я тебе написал. убирай заголовки ресурсов нафиг из макетов, а эти ячейки отдавай сполна номенклатурным группировками - просто продляй их вправо. И разведи грамотно по именам, чтобы СКД знало, какой макет по номенклатуре какой из группировок выдать.

Должно сработать. А если уж не сработает (если все правильно сделаешь, то и так сработает), тогда способ номер два - в запросе объединить начальный и конечный остаток\сумму
и прочее в один набор колонок с едиными именами. Но при этом тебе нужно будет реквизит-флаг добавить, чтобы отличать строки со значением по начальной и по конечной между собой. И в группировках по номенклатуре ставишь фильтры на этот флаг, естественно на каждую свой. И тогда с текущим макетом у тебя все сработает, но.... этот способ фуфлыжный и он только на крайняк.
14. vovan_victory 63 30.11.15 20:28 Сейчас в теме
На картинке я изобразил ситуацию так, как я ее понял
Если это так,то это получается из-за того, что рано удалили не нужную колонку.Алгоритм должен быть такой:
1. Разгруппировать группировку месяц(это я по картинке ориентируюсь). Группировка месяц находится на второй строке.
2. Удаляем колонку 2. Диапазон колонки R2C2:R3C2. Получили эту область, область удалить
3. Заново группируем группировку месяц.

Суммы у Вас съехали(ИМХО) по тому, что Вы удалили со сдвигом колонку R3C2.В итоге, в строке 3 колонка 2 удалена и произошел сдвиг по строке, а строка 2 осталась без изменений.
Я на простой картинке попытался показать что у Вас могло приключиться(ИМХО)
Прикрепленные файлы:
15. Euroset1 11 30.11.15 23:52 Сейчас в теме
(14) vovan_victory, сдвиг колонок в результате происходит из-за того, что две подряд идущие группировки имеют разные имена ресурсов, а макет под их строки, соответствующий им, не найдет. И точка. Тут хоть сто раз перегруппировывай - результат не изменится. Как только конечные остатки и прочее подтянутся под макет - они встанут куда надо.

Предлагаю не путать данные и макет+вывод. Корректность данных - это уже задача иная.
16. 1C_MApteka 01.12.15 10:03 Сейчас в теме
Всё, проблема решена. Удалил все групировки на закладке макеты и написал их заново. На этот раз использовал только макет заголовка группировки и макет группировки. Программную компоновку тоже убрал. Спасибо за помощь.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот