Всем доброго дня.
Помогите пожалуйста поправить мой код. Заранее Спасибо!))) Если коротко, то есть Изделие в котором может быть несколько Упаковок. И надо чтобы чтобы Изделие было одной большой ячейкой.
На фото видно как сейчас и чего я пытаюсь добиться.
Помогите пожалуйста поправить мой код. Заранее Спасибо!))) Если коротко, то есть Изделие в котором может быть несколько Упаковок. И надо чтобы чтобы Изделие было одной большой ячейкой.
На фото видно как сейчас и чего я пытаюсь добиться.
Запрос = Новый Запрос;
Запрос.Текст =
"….
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ВременныйИтог.Изделие КАК Изделие,
| ВременныйИтог.СтатусИзделия КАК СтатусИзделия,
| ВЫБОР
| КОГДА ВременныйИтог.КоличествоТО = 0
| ТОГДА ВременныйИтог.КоличествоЛО - СУММА(ВременныйИтог.КоличествоТО)
| ИНАЧЕ ВременныйИтог.КоличествоТО
| КОНЕЦ КАК КоличествоЛО,
| ВременныйИтог.Упаковка КАК Упаковка,
| ВременныйИтог.СтатусУпаковки КАК СтатусУпаковки,
| ВременныйИтог.ТочкаОбеспечения КАК ТочкаОбеспечения,
| ВременныйИтог.КоличествоТО КАК КоличествоТО
|ИЗ
| ВременныйИтог КАК ВременныйИтог
|
|СГРУППИРОВАТЬ ПО
| ВременныйИтог.Изделие,
| ВременныйИтог.СтатусИзделия,
| ВременныйИтог.Упаковка,
| ВременныйИтог.СтатусУпаковки,
| ВременныйИтог.ТочкаОбеспечения,
| ВременныйИтог.КоличествоТО,
| ВременныйИтог.КоличествоЛО
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| втНеОбеспеченныйЗаказ.Изделие,
| втНеОбеспеченныйЗаказ.СтатусУпаковки,
| втНеОбеспеченныйЗаказ.Разница,
| втНеОбеспеченныйЗаказ.Упаковка,
| втНеОбеспеченныйЗаказ.СтатусУпаковки,
| NULL,
| 0
|ИЗ
| втНеОбеспеченныйЗаказ КАК втНеОбеспеченныйЗаказ
|ИТОГИ
| МАКСИМУМ(СтатусИзделия)
|ПО
| Изделие";
Запрос.УстановитьПараметр("РД", Объект.Ссылка);
Результат = Запрос.Выполнить().Выбрать();
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ТаблицаДокумента.Вывести(ОбластьШапка);
ТекущееИзделие = "";
ТекущееВысота = 0;
Пока Результат.Следующий() Цикл
Если ТекущееИзделие <> Результат.Изделие Тогда
// Выводим строку с изделием
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрока.Параметры.Номенклатура = Результат.Изделие;
ОбластьСтрока.Параметры.Статус = Результат.СтатусИзделия;
ТаблицаДокумента.Вывести(ОбластьСтрока);
ТекущееИзделие = Результат.Изделие;
КонецЕсли;
// Выводим строку с упаковкой
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрока.Параметры.Упаковка = Результат.Упаковка;
ОбластьСтрока.Параметры.КоличествоТЧ = Результат.КоличествоТО;
ОбластьСтрока.Параметры.СтатусУпаковки = Результат.СтатусУпаковки;
ОбластьСтрока.Параметры.ТочкаОбеспечения = Результат.ТочкаОбеспечения;
ОбластьСтрока.Параметры.Количество = Результат.КоличествоЛО;
ТаблицаДокумента.Вывести(ОбластьСтрока);
КонецЦикла;
Возврат ТаблицаДокумента;
ПоказатьПрикрепленные файлы:



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