Ошибка "Неверные параметры Максимум" в запросе на объединение тч в строку

1. user1039778 14.12.20 04:14 Сейчас в теме
Всем доброго времени суток, столкнулся с задачей объединения табличной части документа в одну строку с запятыми, все шло хорошо пока не дошел до 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
	|;"
Показать


Немного поясню код, я создаю вторую колонку нумерации, далее объединяю строки и группирую по второй нумерации каждый раз сужая кол-во строк вдвое, в конце каждого сужения считаю кол-во строк для правильной расстановки запятых.
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
7. spacecraft 14.12.20 12:18 Сейчас в теме
8. spacecraft 14.12.20 12:26 Сейчас в теме
(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
|;"
Показать
user1039778; +1 Ответить
9. starik-2005 3093 14.12.20 15:47 Сейчас в теме
(1)
МАКСИМУМ(ВЫБОР Шаг2.НомСтр2 * 2 - Шаг2.НомСтр1
Э... Условие должно быть после "КОГДА".

ВЫБОР КОГДА Х=1 ТОГДА Х КОГДА Х=2 ТОГДА У КОДГА Х=3 ТОГДА Z ИНАЧЕ ХУZ КОНЕЦ
После ВЫБОР и перед КОГДА ничего не должно стоять.
10. spacecraft 14.12.20 19:00 Сейчас в теме
(9)
После ВЫБОР и перед КОГДА ничего не должно стоять.

Может стоят. Это аналог switch в запросе.
13. spacecraft 14.12.20 19:06 Сейчас в теме
(12) это для начинающих )
Вот вам посложнее:
https://infostart.ru/1c/articles/67585/
user1039778; starik-2005; +2 Ответить
14. spacecraft 14.12.20 19:22 Сейчас в теме
(12) ВЫБОР в языке запросов напрямую транслируется в CASE языка t-sql. А в нем это есть:
CASE input_expression   
     WHEN when_expression THEN result_expression [ ...n ]   
     [ ELSE else_result_expression ]   
END

Так что даже если и не документированная, но существующая возможность присутствует.
18. starik-2005 3093 15.12.20 11:01 Сейчас в теме
(14) ну приведите мне пример на языке 1С такого вот варианта использования, и чтобы это сработало. А я стану может быть умнее из-за этого, но что-то сомневаюсь...
19. spacecraft 15.12.20 14:07 Сейчас в теме
(18) какой еще пример хотите? Один из примеров уже приведен по ссылке в (13)
Этим механизмом уже давно и успешно пользуюсь. Особенно когда проверяемое условие довольно громоздкое.
BrainWashed; starik-2005; +2 Ответить
11. spacecraft 14.12.20 19:02 Сейчас в теме
(1) разобрались с тем что я в (8) подчеркнул? У вас там ошибка именования. Именованное поле Колич, а обращаетесь в последствии к Кол
16. user1039778 14.12.20 22:07 Сейчас в теме
(11) Я несколько раз переписывал с нуля, думал где-то синтаксическую ошибку допустил, и в торопях перед публикацией ошибся, но это не помогло, так-же висит ошибка параметра
2. ixijixi 1939 14.12.20 09:03 Сейчас в теме
Ну у тебя там и число, и строка, и ссылка в этом поле. Полагаю, в этом дело
4. user1039778 14.12.20 12:01 Сейчас в теме
(2) Ссылок там нет, .Услуга это уже строка, да и в таблице Шаг33 все отрабатывает отлично без ошибок..
15. ixijixi 1939 14.12.20 19:49 Сейчас в теме
(4) Да, сразу не обратил внимание.

Перегнал твой запрос в БП 3.0 с заменой Документ.РЕГИЗ_ОДЛИ_ЗаявкаНаИсследование.Услуги на Документ.ПоступлениеТоваровУслуг.Товары. Все работает, кроме ошибки указанной в (8). Ошибку на вычисление максимума не выкидывает.

Возможно, специфическая ошибка базы. Не тестил на консоли запросов от tormozit? Она умеет пошагово пакетные запросы выполнять.
17. user1039778 14.12.20 22:09 Сейчас в теме
(15) консоль даже не дает прогнать этот запрос, сразу жалуется на параметры максимум, проверял пакетные запросы, в них все ок..
3. soft_wind 14.12.20 11:42 Сейчас в теме
а зачем такой гемор? если для отчета, то используйте функции СКД, если для печати, просто в цикле при выводе раз обошли (всего одна строка кода в цикле!!!!)

Для каждого лкСтр из Товары цикл
стрНаименования = стрНаименования + ", " + лкСтр.Номенклатура;
КонецЦикла;
5. user1039778 14.12.20 12:09 Сейчас в теме
(3) это все нужно для формы списка, хотел запросом все обойти
6. soft_wind 14.12.20 12:12 Сейчас в теме
ээээ
для формы списка???
а там-то зачем/куда?

ни разу не попадалась задача где надо вывести строку с 1000-ей наименований !!!
Оставьте свое сообщение

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