Ошибка "Неверные параметры Максимум" в запросе на объединение тч в строку
Всем доброго времени суток, столкнулся с задачей объединения табличной части документа в одну строку с запятыми, все шло хорошо пока не дошел до 4й итерации, в этот момент конструктор запросов просто отказывается принимать запрос ссылаясь на неверные параметры. Несколько раз перепроверил, ошибки вроде нет. Если выполнять 3 итерации пакетами, то все ок.
Немного поясню код, я создаю вторую колонку нумерации, далее объединяю строки и группирую по второй нумерации каждый раз сужая кол-во строк вдвое, в конце каждого сужения считаю кол-во строк для правильной расстановки запятых.
"ВЫБРАТЬ
| КОЛИЧЕСТВО(РЕГИЗ_ОДЛИ_ЗаявкаНаИсследованиеУслуги.НомерСтроки) КАК Кол,
| РЕГИЗ_ОДЛИ_ЗаявкаНаИсследованиеУслуги.Ссылка КАК Ссылка
|ПОМЕСТИТЬ КолВоСтрок
|ИЗ
| Документ.РЕГИЗ_ОДЛИ_ЗаявкаНаИсследование.Услуги КАК РЕГИЗ_ОДЛИ_ЗаявкаНаИсследованиеУслуги
|
|СГРУППИРОВАТЬ ПО
| РЕГИЗ_ОДЛИ_ЗаявкаНаИсследованиеУслуги.Ссылка
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| РЕГИЗ_ОДЛИ_ЗаявкаНаИсследованиеУслуги.Ссылка КАК Ссылка,
| РЕГИЗ_ОДЛИ_ЗаявкаНаИсследованиеУслуги.НомерСтроки КАК НомерСтроки,
| ВЫБОР
| КОГДА РЕГИЗ_ОДЛИ_ЗаявкаНаИсследованиеУслуги.НомерСтроки - 2 * (ВЫРАЗИТЬ(РЕГИЗ_ОДЛИ_ЗаявкаНаИсследованиеУслуги.НомерСтроки / 2 - 0.5 КАК ЧИСЛО(15, 0))) = 0
| ТОГДА РЕГИЗ_ОДЛИ_ЗаявкаНаИсследованиеУслуги.НомерСтроки / 2
| ИНАЧЕ (РЕГИЗ_ОДЛИ_ЗаявкаНаИсследованиеУслуги.НомерСтроки + 1) / 2
| КОНЕЦ КАК НомСтр2,
| РЕГИЗ_ОДЛИ_ЗаявкаНаИсследованиеУслуги.Услуга КАК Услуга,
| КолВоСтрок.Кол КАК Кол
|ПОМЕСТИТЬ Шаг1
|ИЗ
| Документ.РЕГИЗ_ОДЛИ_ЗаявкаНаИсследование.Услуги КАК РЕГИЗ_ОДЛИ_ЗаявкаНаИсследованиеУслуги
| ЛЕВОЕ СОЕДИНЕНИЕ КолВоСтрок КАК КолВоСтрок
| ПО РЕГИЗ_ОДЛИ_ЗаявкаНаИсследованиеУслуги.Ссылка = КолВоСтрок.Ссылка
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Шаг1.Ссылка КАК Ссылка,
| Шаг1.НомСтр2 КАК НомСтр1,
| МАКСИМУМ(ВЫБОР Шаг1.НомСтр2 * 2 - Шаг1.НомерСтроки
| КОГДА 1
| ТОГДА Шаг1.Услуга.Наименование
| ИНАЧЕ """"
| КОНЕЦ) + МАКСИМУМ(ВЫБОР
| КОГДА Шаг1.Кол = Шаг1.НомерСтроки
| ТОГДА """"
| ИНАЧЕ "", ""
| КОНЕЦ) + МАКСИМУМ(ВЫБОР Шаг1.НомСтр2 * 2 - Шаг1.НомерСтроки
| КОГДА 1
| ТОГДА """"
| ИНАЧЕ Шаг1.Услуга.Наименование
| КОНЕЦ) КАК Услуга
|ПОМЕСТИТЬ Шаг11
|ИЗ
| Шаг1 КАК Шаг1
|
|СГРУППИРОВАТЬ ПО
| Шаг1.НомСтр2,
| Шаг1.Ссылка
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Шаг11.Ссылка КАК Ссылка,
| КОЛИЧЕСТВО(Шаг11.НомСтр1) КАК Кол
|ПОМЕСТИТЬ Шаг1КолВо
|ИЗ
| Шаг11 КАК Шаг11
|
|СГРУППИРОВАТЬ ПО
| Шаг11.Ссылка
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Шаг1КолВо.Кол КАК Кол,
| Шаг11.Ссылка КАК Ссылка,
| Шаг11.НомСтр1 КАК НомСтр1,
| Шаг11.Услуга КАК Услуга,
| ВЫБОР
| КОГДА Шаг11.НомСтр1 - 2 * (ВЫРАЗИТЬ(Шаг11.НомСтр1 / 2 - 0.5 КАК ЧИСЛО(15, 0))) = 0
| ТОГДА Шаг11.НомСтр1 / 2
| ИНАЧЕ (Шаг11.НомСтр1 + 1) / 2
| КОНЕЦ КАК НомСтр2
|ПОМЕСТИТЬ Шаг2
|ИЗ
| Шаг11 КАК Шаг11
| ЛЕВОЕ СОЕДИНЕНИЕ Шаг1КолВо КАК Шаг1КолВо
| ПО Шаг11.Ссылка = Шаг1КолВо.Ссылка
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Шаг2.Ссылка КАК Ссылка,
| Шаг2.НомСтр2 КАК НомСтр1,
| МАКСИМУМ(ВЫБОР Шаг2.НомСтр2 * 2 - Шаг2.НомСтр1
| КОГДА 1
| ТОГДА Шаг2.Услуга
| ИНАЧЕ """"
| КОНЕЦ) + МАКСИМУМ(ВЫБОР
| КОГДА Шаг2.Кол = Шаг2.НомСтр1
| ТОГДА """"
| ИНАЧЕ "", ""
| КОНЕЦ) + МАКСИМУМ(ВЫБОР Шаг2.НомСтр2 * 2 - Шаг2.НомСтр1
| КОГДА 1
| ТОГДА """"
| ИНАЧЕ Шаг2.Услуга
| КОНЕЦ) КАК Услуга
|ПОМЕСТИТЬ Шаг22
|ИЗ
| Шаг2 КАК Шаг2
|
|СГРУППИРОВАТЬ ПО
| Шаг2.Ссылка,
| Шаг2.НомСтр2
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Шаг22.Ссылка КАК Ссылка,
| КОЛИЧЕСТВО(Шаг22.НомСтр1) КАК Кол
|ПОМЕСТИТЬ Шаг2КолВо
|ИЗ
| Шаг22 КАК Шаг22
|
|СГРУППИРОВАТЬ ПО
| Шаг22.Ссылка
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Шаг2КолВо.Кол КАК Кол,
| Шаг22.Ссылка КАК Ссылка,
| Шаг22.НомСтр1 КАК НомСтр1,
| Шаг22.Услуга КАК Услуга,
| ВЫБОР
| КОГДА Шаг22.НомСтр1 - 2 * (ВЫРАЗИТЬ(Шаг22.НомСтр1 / 2 - 0.5 КАК ЧИСЛО(15, 0))) = 0
| ТОГДА Шаг22.НомСтр1 / 2
| ИНАЧЕ (Шаг22.НомСтр1 + 1) / 2
| КОНЕЦ КАК НомСтр2
|ПОМЕСТИТЬ Шаг3
|ИЗ
| Шаг22 КАК Шаг22
| ЛЕВОЕ СОЕДИНЕНИЕ Шаг2КолВо КАК Шаг2КолВо
| ПО Шаг22.Ссылка = Шаг2КолВо.Ссылка
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Шаг3.Ссылка КАК Ссылка,
| Шаг3.НомСтр2 КАК НомСтр1,
| МАКСИМУМ(ВЫБОР Шаг3.НомСтр2 * 2 - Шаг3.НомСтр1
| КОГДА 1
| ТОГДА Шаг3.Услуга
| ИНАЧЕ """"
| КОНЕЦ) + МАКСИМУМ(ВЫБОР
| КОГДА Шаг3.Кол = Шаг3.НомСтр1
| ТОГДА """"
| ИНАЧЕ "", ""
| КОНЕЦ) + МАКСИМУМ(ВЫБОР Шаг3.НомСтр2 * 2 - Шаг3.НомСтр1
| КОГДА 1
| ТОГДА """"
| ИНАЧЕ Шаг3.Услуга
| КОНЕЦ) КАК Услуга
|ПОМЕСТИТЬ Шаг33
|ИЗ
| Шаг3 КАК Шаг3
|
|СГРУППИРОВАТЬ ПО
| Шаг3.Ссылка,
| Шаг3.НомСтр2
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Шаг33.Ссылка КАК Ссылка,
| КОЛИЧЕСТВО(Шаг33.НомСтр1) КАК Кол
|ПОМЕСТИТЬ Шаг3КолВо
|ИЗ
| Шаг33 КАК Шаг33
|
|СГРУППИРОВАТЬ ПО
| Шаг33.Ссылка
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Шаг3КолВо.Кол КАК Колич,
| Шаг33.Ссылка КАК Ссылка,
| Шаг33.НомСтр1 КАК НомСтр1,
| Шаг33.Услуга КАК Услуга,
| ВЫБОР
| КОГДА Шаг33.НомСтр1 - 2 * (ВЫРАЗИТЬ(Шаг33.НомСтр1 / 2 - 0.5 КАК ЧИСЛО(15, 0))) = 0
| ТОГДА Шаг33.НомСтр1 / 2
| ИНАЧЕ (Шаг33.НомСтр1 + 1) / 2
| КОНЕЦ КАК НомСтр2
|ПОМЕСТИТЬ Шаг4
|ИЗ
| Шаг33 КАК Шаг33
| ЛЕВОЕ СОЕДИНЕНИЕ Шаг3КолВо КАК Шаг3КолВо
| ПО Шаг33.Ссылка = Шаг3КолВо.Ссылка
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Шаг4.Ссылка КАК Ссылка,
| Шаг4.НомСтр2 КАК НомСтр1,
| МАКСИМУМ(ВЫБОР Шаг4.НомСтр2 * 2 - Шаг4.НомСтр1
| КОГДА 1
| ТОГДА Шаг4.Услуга
| ИНАЧЕ """"
| КОНЕЦ) + МАКСИМУМ(ВЫБОР
| КОГДА Шаг4.Кол = Шаг4.НомСтр1
| ТОГДА """"
| ИНАЧЕ "", ""
| КОНЕЦ) + МАКСИМУМ(ВЫБОР Шаг4.НомСтр2 * 2 - Шаг4.НомСтр1
| КОГДА 1
| ТОГДА """"
| ИНАЧЕ Шаг4.Услуга
| КОНЕЦ) КАК Услуга
|ПОМЕСТИТЬ Шаг44
|ИЗ
| Шаг4 КАК Шаг4
|
|СГРУППИРОВАТЬ ПО
| Шаг4.Ссылка,
| Шаг4.НомСтр2
|;"
ПоказатьНемного поясню код, я создаю вторую колонку нумерации, далее объединяю строки и группирую по второй нумерации каждый раз сужая кол-во строк вдвое, в конце каждого сужения считаю кол-во строк для правильной расстановки запятых.
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) вот то:
|ВЫБРАТЬ
| Шаг3КолВо.Кол КАК Колич,
| Шаг33.Ссылка КАК Ссылка,
| Шаг33.НомСтр1 КАК НомСтр1,
| Шаг33.Услуга КАК Услуга,
| ВЫБОР
| КОГДА Шаг33.НомСтр1 - 2 * (ВЫРАЗИТЬ(Шаг33.НомСтр1 / 2 - 0.5 КАК ЧИСЛО(15, 0))) = 0
| ТОГДА Шаг33.НомСтр1 / 2
| ИНАЧЕ (Шаг33.НомСтр1 + 1) / 2
| КОНЕЦ КАК НомСтр2
|ПОМЕСТИТЬ Шаг4
|ИЗ
| Шаг33 КАК Шаг33
| ЛЕВОЕ СОЕДИНЕНИЕ Шаг3КолВо КАК Шаг3КолВо
| ПО Шаг33.Ссылка = Шаг3КолВо.Ссылка
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Шаг4.Ссылка КАК Ссылка,
| Шаг4.НомСтр2 КАК НомСтр1,
| МАКСИМУМ(ВЫБОР Шаг4.НомСтр2 * 2 - Шаг4.НомСтр1
| КОГДА 1
| ТОГДА Шаг4.Услуга
| ИНАЧЕ """"
| КОНЕЦ) + МАКСИМУМ(ВЫБОР
| КОГДА Шаг4.Кол = Шаг4.НомСтр1
| ТОГДА """"
| ИНАЧЕ "", ""
| КОНЕЦ) + МАКСИМУМ(ВЫБОР Шаг4.НомСтр2 * 2 - Шаг4.НомСтр1
| КОГДА 1
| ТОГДА """"
| ИНАЧЕ Шаг4.Услуга
| КОНЕЦ) КАК Услуга
|ПОМЕСТИТЬ Шаг44
|ИЗ
| Шаг4 КАК Шаг4
|
|СГРУППИРОВАТЬ ПО
| Шаг4.Ссылка,
| Шаг4.НомСтр2
|;"
Показать| Шаг3КолВо.Кол КАК Колич,
| Шаг33.Ссылка КАК Ссылка,
| Шаг33.НомСтр1 КАК НомСтр1,
| Шаг33.Услуга КАК Услуга,
| ВЫБОР
| КОГДА Шаг33.НомСтр1 - 2 * (ВЫРАЗИТЬ(Шаг33.НомСтр1 / 2 - 0.5 КАК ЧИСЛО(15, 0))) = 0
| ТОГДА Шаг33.НомСтр1 / 2
| ИНАЧЕ (Шаг33.НомСтр1 + 1) / 2
| КОНЕЦ КАК НомСтр2
|ПОМЕСТИТЬ Шаг4
|ИЗ
| Шаг33 КАК Шаг33
| ЛЕВОЕ СОЕДИНЕНИЕ Шаг3КолВо КАК Шаг3КолВо
| ПО Шаг33.Ссылка = Шаг3КолВо.Ссылка
|;
|
|////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Шаг4.Ссылка КАК Ссылка,
| Шаг4.НомСтр2 КАК НомСтр1,
| МАКСИМУМ(ВЫБОР Шаг4.НомСтр2 * 2 - Шаг4.НомСтр1
| КОГДА 1
| ТОГДА Шаг4.Услуга
| ИНАЧЕ """"
| КОНЕЦ) + МАКСИМУМ(ВЫБОР
| КОГДА Шаг4.Кол = Шаг4.НомСтр1
| ТОГДА """"
| ИНАЧЕ "", ""
| КОНЕЦ) + МАКСИМУМ(ВЫБОР Шаг4.НомСтр2 * 2 - Шаг4.НомСтр1
| КОГДА 1
| ТОГДА """"
| ИНАЧЕ Шаг4.Услуга
| КОНЕЦ) КАК Услуга
|ПОМЕСТИТЬ Шаг44
|ИЗ
| Шаг4 КАК Шаг4
|
|СГРУППИРОВАТЬ ПО
| Шаг4.Ссылка,
| Шаг4.НомСтр2
|;"
(12) ВЫБОР в языке запросов напрямую транслируется в CASE языка t-sql. А в нем это есть:
Так что даже если и не документированная, но существующая возможность присутствует.
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Так что даже если и не документированная, но существующая возможность присутствует.
(4) Да, сразу не обратил внимание.
Перегнал твой запрос в БП 3.0 с заменой Документ.РЕГИЗ_ОДЛИ_ЗаявкаНаИсследование.Услуги на Документ.ПоступлениеТоваровУслуг.Товары. Все работает, кроме ошибки указанной в (8). Ошибку на вычисление максимума не выкидывает.
Возможно, специфическая ошибка базы. Не тестил на консоли запросов от tormozit? Она умеет пошагово пакетные запросы выполнять.
Перегнал твой запрос в БП 3.0 с заменой Документ.РЕГИЗ_ОДЛИ_ЗаявкаНаИсследование.Услуги на Документ.ПоступлениеТоваровУслуг.Товары. Все работает, кроме ошибки указанной в (8). Ошибку на вычисление максимума не выкидывает.
Возможно, специфическая ошибка базы. Не тестил на консоли запросов от tormozit? Она умеет пошагово пакетные запросы выполнять.
а зачем такой гемор? если для отчета, то используйте функции СКД, если для печати, просто в цикле при выводе раз обошли (всего одна строка кода в цикле!!!!)
Для каждого лкСтр из Товары цикл
стрНаименования = стрНаименования + ", " + лкСтр.Номенклатура;
КонецЦикла;
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот