Добрый день.
Если кому-то потребуется некую табличную часть в запросе преобразовать в одно строковое поле, которое будет содержать перечисление всех строк таблицы, тогда вам будет интересно это прочитать. Не спорю, что возможно это "жесть".
Первая трудность - Нельзя в запросе преобразовать Число в Строку
В запросе 1С, нельзя сложить в одну строку значения типа Строка и Число, точнее нет возможности преобразовать Число в Строку. Благодаря данному сайту нашел отличное относительно универсальное решение - //infostart.ru/public/331805/ , единственное, что я добавил это убрал нули, т.е. приведенный запрос из 0,5 типа Числа(8,3) вернул бы строку 00000000,500.
Вторая трудность - Строки в столбцы
Трудность была относительной, опять же прочитав где-то в комментариях форума выше упомянутого автора ildarovich про необходимость использовать номер строки, решение пришло само собой. Но решение получилось так же не совсем универсальным. Если с числом ещё понятно, что оно определяется в конфигураторе, то ограничение на количество строк определить не возможно, товаров ведь может быть вбито хоть +100500... проверил, за шесть лет работы компании, максимальное количество строк в таблице товаров было 22 один раз, другие разы не превышало16 и крайне редко... Пришел к мнению, что пока сделаю на 20 строк.
Второй вариант запроса:
(Данный вариант был скорректирован и осмыслен после написания статьи, оптимизация, спасибо всем за советы :))
ВЫБРАТЬ
РеализацияТоваровУслугТовары.Ссылка,
РеализацияТоваровУслугТовары.Номенклатура,
ПОДСТРОКА("0123456789", РеализацияТоваровУслугТовары.Количество / 100000 + 1, 1)
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, РеализацияТоваровУслугТовары.Количество * 0.0006)) / 6 + 1, 1)
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, РеализацияТоваровУслугТовары.Количество * 0.006)) / 6 + 1, 1)
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, РеализацияТоваровУслугТовары.Количество * 0.06)) / 6 + 1, 1)
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, РеализацияТоваровУслугТовары.Количество * 0.6)) / 6 + 1, 1)
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, РеализацияТоваровУслугТовары.Количество * 6)) / 6 + 1, 1)
+ ","
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, РеализацияТоваровУслугТовары.Количество * 60)) / 6 + 1, 1)
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, РеализацияТоваровУслугТовары.Количество * 600)) / 6 + 1, 1)
+ ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, РеализацияТоваровУслугТовары.Количество * 6000)) / 6 + 1, 1) КАК КоличествоСтрокой,
РеализацияТоваровУслугТовары.Количество,
РеализацияТоваровУслугТовары.ЕдиницаИзмерения,
РеализацияТоваровУслугТовары.НомерСтроки
ПОМЕСТИТЬ ЧислоВСтроку
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
И РеализацияТоваровУслугТовары.Ссылка.Проведен = ИСТИНА
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЧислоВСтроку.Ссылка,
ЧислоВСтроку.Номенклатура.Наименование + " " + ВЫБОР
КОГДА ЧислоВСтроку.КоличествоСтрокой = "000000,000"
ТОГДА ""
ИНАЧЕ ВЫБОР
КОГДА ПОДСТРОКА(ЧислоВСтроку.КоличествоСтрокой, 1, 6) = "000000"
ТОГДА "0"
КОГДА ПОДСТРОКА(ЧислоВСтроку.КоличествоСтрокой, 1, 5) = "00000"
ТОГДА ПОДСТРОКА(ЧислоВСтроку.КоличествоСтрокой, 6, 1)
КОГДА ПОДСТРОКА(ЧислоВСтроку.КоличествоСтрокой, 1, 4) = "0000"
ТОГДА ПОДСТРОКА(ЧислоВСтроку.КоличествоСтрокой, 5, 2)
КОГДА ПОДСТРОКА(ЧислоВСтроку.КоличествоСтрокой, 1, 3) = "000"
ТОГДА ПОДСТРОКА(ЧислоВСтроку.КоличествоСтрокой, 4, 3)
КОГДА ПОДСТРОКА(ЧислоВСтроку.КоличествоСтрокой, 1, 2) = "00"
ТОГДА ПОДСТРОКА(ЧислоВСтроку.КоличествоСтрокой, 3, 4)
КОГДА ПОДСТРОКА(ЧислоВСтроку.КоличествоСтрокой, 1, 1) = "0"
ТОГДА ПОДСТРОКА(ЧислоВСтроку.КоличествоСтрокой, 2, 5)
ИНАЧЕ ПОДСТРОКА(ЧислоВСтроку.КоличествоСтрокой, 1, 6)
КОНЕЦ + ВЫБОР
КОГДА ПОДСТРОКА(ЧислоВСтроку.КоличествоСтрокой, 8, 3) = "000"
ТОГДА ""
ИНАЧЕ "," + ВЫБОР
КОГДА ПОДСТРОКА(ЧислоВСтроку.КоличествоСтрокой, 9, 2) = "00"
ТОГДА ПОДСТРОКА(ЧислоВСтроку.КоличествоСтрокой, 8, 1)
КОГДА ПОДСТРОКА(ЧислоВСтроку.КоличествоСтрокой, 10, 1) = "0"
ТОГДА ПОДСТРОКА(ЧислоВСтроку.КоличествоСтрокой, 8, 2)
ИНАЧЕ ПОДСТРОКА(ЧислоВСтроку.КоличествоСтрокой, 8, 3)
КОНЕЦ
КОНЕЦ
КОНЕЦ + " " + ЧислоВСтроку.ЕдиницаИзмерения.Наименование КАК НоменклатураКоличествоЕдиница,
ЧислоВСтроку.Номенклатура,
ЧислоВСтроку.Количество,
ЧислоВСтроку.ЕдиницаИзмерения,
ЧислоВСтроку.НомерСтроки
ПОМЕСТИТЬ НКЕ
ИЗ
ЧислоВСтроку КАК ЧислоВСтроку
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
НКЕ.Ссылка,
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 1 ТОГДА НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 2 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 3 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 4 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 5 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 6 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 7 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 8 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 9 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 10 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 11 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 12 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 13 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 14 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 15 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 16 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 17 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 18 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 19 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 20 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 21 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 22 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 23 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 24 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(ВЫБОР НКЕ.НомерСтроки КОГДА 25 ТОГДА "; " + НКЕ.НоменклатураКоличествоЕдиница ИНАЧЕ "" КОНЕЦ) +
МАКСИМУМ(".") КАК ТаблицаТоварыВСтроку
ИЗ
НКЕ КАК НКЕ
СГРУППИРОВАТЬ ПО
НКЕ.Ссылка