Как строки сделать столбцами в запросе 1с
Регистр Накопления «уатВыработкаТС» (оборотный)
— Измерения: ТС, ПараметрВыработки, Организация
— Ресурсы: Количество
Запрос:
ВЫБРАТЬ
уатТС.Ссылка,
уатВыработкаТСОбороты.ПараметрВыработки,
СУММА(уатВыработкаТСОбороты.КоличествоОборот) КАК КоличествоОборот
ИЗ
Справочник.уатТС КАК уатТС
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.уатВыработкаТС.Обороты(&ДатаН, &ДатаК, Период, Организация = &Организация) КАК уатВыработкаТСОбороты
ПО (уатВыработкаТСОбороты.ТС = уатТС.Ссылка)
ГДЕ
уатТС.ЭтоГруппа = &ЭтоГруппа
И уатТС.ТипТС.Родитель В ИЕРАРХИИ(&ТипТСГрузовые)
И уатТС.Модель.Родитель В ИЕРАРХИИ(&МоделиТС)
СГРУППИРОВАТЬ ПО
уатВыработкаТСОбороты.ПараметрВыработки,
уатТС.Ссылка
Выводит естественно таким списком
Ссылка ПараметрВыработки КоличествоОборот
Автомобиль1
Автомобиль2 Время в ремонте 464 400
Автомобиль3 Количество дней 2
Автомобиль3 Пробег порожний 373
Автомобиль3 Тн км 779,87
Автомобиль3 Пробег общий 787
Автомобиль3 Вес груза 11,05
Автомобиль4 Количество дней 8
Автомобиль4 Время в ремонте 118 800
Автомобиль4 Тн км 27 936,36
Автомобиль4 Пробег общий 3 046
Автомобиль4 Вес груза 33,17
В запросе можно ли осуществить, чтобы он выводил Результат столбцами или выгрузить нужно сначала результат, а затем преобразовывать в такое состояние (см.ниже)?
Ссылка В рем. Кол.дней Проб Тн км ПробОб ВесГр
Автомобиль1 0 0 0 0 0 0
Автомобиль2 464 400 0 0 0 0 0
Автомобиль3 0 2 373 779,87 787 11,05
Автомобиль4 0 8 0 27936,36 3 046 33,17
Как строки сделать столбцами в запросе 1с
Войдите как ученик, чтобы получить доступ к материалам школы
Язык запросов 1С 8.3 для начинающих программистов: функции для работы со строками
Автор уроков и преподаватель школы: Владимир Милькин
Функции для работы со строками в запросе
Прямо скажем механизмов для работы со строками в запросах 1С мало. Во-первых, строки можно складывать . Во-вторых, от строки можно взять подстроку . Во-третьих, строки можно сравнивать , в том числе по шаблону . Вот пожалуй и всё, что можно делать со строками. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Когда мы говорим строка в запросе, то имеется в виду либо строковая константа:
ВЫБРАТЬ "Жизнь прекрасна!"
либо реквизит таблицы, у которого тип СТРОКА:
ВЫБРАТЬ Наименование ИЗ Справочник.Еда
Сложение строк
Для сложения используется операция +
ВЫБРАТЬ "Еда: " + Наименование ИЗ Справочник.Еда

Функция ПОДСТРОКА
Данная функция предназначена для выделения подстроки из строки.
В качестве параметров принимает:
- строку , из которой необходимо выделить подстроку;
- позицию символа, с которого начинается выделяемая из строки подстрока;
- длину выделяемой подстроки.
ВЫБРАТЬ ПОДСТРОКА("1234567890", 1, 5)
ВЫБРАТЬ ПОДСТРОКА("1234567890", 3, 4)
ВЫБРАТЬ Наименование, ПОДСТРОКА(Наименование, 1, 2) ИЗ Справочник.Еда

Функция ПОДОБНО
Если нужно убедиться, что строковый реквизит соответствует определённым критериям мы его сравниваем. Например, так:
ВЫБРАТЬ Наименование ИЗ Справочник.Еда ГДЕ Наименование = "Лимон"
А что, если нужно более хитрое сравнение? Не просто на равенство или неравенство, а на подобие определенному шаблону? Вот как раз для этого и создана функция ПОДОБНО.
Если быть совсем точным, то это даже не функция, а оператор, который позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа.
Значение выражения должно иметь тип строка. Если значение выражения удовлетворяет шаблону – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ.
Давайте уже рассмотрим пример, чтобы ситуация прояснилась:
ВЫБРАТЬ Наименование ИЗ Справочник.Еда ГДЕ Наименование ПОДОБНО "[К]%"
Результатом выполнения данного запроса будет вся еда, наименование которой начинается на букву «К»:
Думаю вы догадались, что здесь вся «хитрость» сосредоточена в строке шаблона «[К]%». Буква «К» в квадратных скобках в данном случае означает, что первым символом наименования должна быть буква «К». Знак «%», идущий следом означает, что после буквы «К» могут идти (или не идти) любые символы в любом количестве. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Конечно, я всё это не из головы придумал. При формировании строки шаблона есть определенные правила, которые нужно соблюдать:
- % означает любое количество произвольных символов
- _ означает один произвольный символ
- [] означает любой одиночный символ, перечисленный внутри скобок
- [^] означает любой одиночный символ, кроме тех, что перечислены внутри скобок после ^
Примеры шаблонов с пояснениями:
«%» абсолютно любая строка (в том числе пустая):
«___» строка из трёх символов (любых):
«[ЧЛ]%[ЫН]» строка, начинающаяся с буквы Ч или Л и оканчивающаяся на Ы или Н:
«[^К]%» строка, не содержащая в начале букву К:
«[А-К]%» строка, начинающаяся с буквы из диапазона с А по К:
Обратите внимание на приём, использованный в шаблоне «[А-К]%». Вместо того, чтобы перечислять все буквы от А до К, например так «[АБВГДЕЁЖЗИЙК]%» мы указали диапазон значений через дефис. Квадратные скобки это позволяют делать.
Как преобразовать колонки в строки в запросе
Недавно столкнулся с ситуацией когда надо было в запросе значения в колонках расположить в строках. Если конкретнее, надо было сделать запрос к регистру накопления СтраховыеВзносыИсчисленные и выбрать из него ресурсы: ПФРСтраховая, ПФРНакопительная, ФСС, ФФОМС, ТФОМС, но сделать это таким образом, чтобы значения каждого ресурса располагались не каждый в отдельной колонке, а в одной колонке друг под другом.
То есть если делаем обычный запрос к регистру:
ВЫБРАТЬ СтраховыеВзносыИсчисленные.ФизЛицо, СтраховыеВзносыИсчисленные.Организация, СтраховыеВзносыИсчисленные.ПФРСтраховая, СтраховыеВзносыИсчисленные.ПФРНакопительная, СтраховыеВзносыИсчисленные.ФСС, СтраховыеВзносыИсчисленные.ФФОМС, СтраховыеВзносыИсчисленные.ТФОМС ИЗ РегистрНакопления.СтраховыеВзносыИсчисленные КАК СтраховыеВзносыИсчисленные
получаем вот такой результат:
| Физлицо | Организация | ПФРСтраховая | ПФРНакопительная | ФСС | ФФОМС | ТФОМС |
|---|---|---|---|---|---|---|
| Иванов Иван Иваныч | ООО «Иванов» | 3500,00 | 1500,00 | 725,00 | 275,00 | 500,00 |
а нужно было преобразовать его вот в такой:
| Физлицо | Организация | ВидНалога | Сумма |
|---|---|---|---|
| Иванов Иван Иваныч | ООО «Иванов» | ПФРСтраховая | 3500,00 |
| Иванов Иван Иваныч | ООО «Иванов» | ПФРНакопительная | 1500,00 |
| Иванов Иван Иваныч | ООО «Иванов» | ФСС | 725,00 |
| Иванов Иван Иваныч | ООО «Иванов» | ФФОМС | 275,00 |
| Иванов Иван Иваныч | ООО «Иванов» | ТФОМС | 500,00 |
-
Сначала создадим таблицу с перечнем налогов вот такого вида:
| ВидНалога |
|---|
| ПФРСтраховая |
| ПФРНакопительная |
| ФСС |
| ФФОМС |
| ТФОМС |
с помощью вот такого запроса:
ВЫБРАТЬ "ПФРНакопительная" КАК ВидНалога ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "ПФРСтраховая" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "ФСС" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "ФФОМС" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "ТФОМС"
ВЫБРАТЬ ПереченьНалогов.ВидНалога ПОМЕСТИТЬ ВТ_ВидыНалогов ИЗ (ВЫБРАТЬ "ПФРНакопительная" КАК ВидНалога ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "ПФРСтраховая" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "ФСС" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "ФФОМС" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "ТФОМС") КАК ПереченьНалогов ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СтраховыеВзносыИсчисленные.ФизЛицо, СтраховыеВзносыИсчисленные.Организация, ВТ_ВидыНалогов.ВидНалога, ВЫБОР КОГДА ВТ_ВидыНалогов.ВидНалога = "ПФРНакопительная" ТОГДА СтраховыеВзносыИсчисленные.ПФРНакопительная КОГДА ВТ_ВидыНалогов.ВидНалога = "ПФРСтраховая" ТОГДА СтраховыеВзносыИсчисленные.ПФРСтраховая КОГДА ВТ_ВидыНалогов.ВидНалога = "ФСС" ТОГДА СтраховыеВзносыИсчисленные.ФСС КОГДА ВТ_ВидыНалогов.ВидНалога = "ФФОМС" ТОГДА СтраховыеВзносыИсчисленные.ФФОМС КОГДА ВТ_ВидыНалогов.ВидНалога = "ТФОМС" ТОГДА СтраховыеВзносыИсчисленные.ТФОМС КОНЕЦ КАК Сумма ИЗ ВТ_ВидыНалогов КАК ВТ_ВидыНалогов ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.СтраховыеВзносыИсчисленные КАК СтраховыеВзносыИсчисленные ПО (ВТ_ВидыНалогов.ВидНалога = "ПФРНакопительная" И СтраховыеВзносыИсчисленные.ПФРНакопительная <> 0 ИЛИ ВТ_ВидыНалогов.ВидНалога = "ПФРСтраховая" И СтраховыеВзносыИсчисленные.ПФРСтраховая <> 0 ИЛИ ВТ_ВидыНалогов.ВидНалога = "ФСС" И СтраховыеВзносыИсчисленные.ФСС <> 0 ИЛИ ВТ_ВидыНалогов.ВидНалога = "ФФОМС" И СтраховыеВзносыИсчисленные.ФФОМС <> 0 ИЛИ ВТ_ВидыНалогов.ВидНалога = "ТФОМС" И СтраховыеВзносыИсчисленные.ТФОМС <> 0)
Как в запросе в 1с сложить 3 столбца в 1?
Есть 3 столбца(см скрин) и надо чтобы их значения сложились как строки т.е. чтобы в итоге получилось строка вида 711 в отдельном столбце. Сейчас имею вот такой запрос, но он в отдельный столбец записывает только первое значение
ВЫБРАТЬ ВопросыШаблонаАнкеты.Ссылка КАК Ссылка, ВопросыШаблонаАнкеты.JSON КАК JSON ИЗ Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты, РегистрСведений.ФормированиеЧПУ КАК ФормированиеЧПУ ГДЕ ВопросыШаблонаАнкеты.ТипВопроса = ЗНАЧЕНИЕ(Перечисление.ТипыВопросовШаблонаАнкеты.Табличный) И ВопросыШаблонаАнкеты.Владелец.Ссылка В (ВЫБРАТЬ ФормированиеЧПУ.ШаблоныАнкет ИЗ РегистрСведений.ФормированиеЧПУ КАК ФормированиеЧПУ ГДЕ ФормированиеЧПУ.URL = &URL) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ВопросыШаблонаАнкеты.Ссылка, ВопросыШаблонаАнкеты.ЭлементарныйВопрос.JSON ИЗ Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты, РегистрСведений.ФормированиеЧПУ КАК ФормированиеЧПУ ГДЕ ВопросыШаблонаАнкеты.ТипВопроса <> ЗНАЧЕНИЕ(Перечисление.ТипыВопросовШаблонаАнкеты.Табличный) И ВопросыШаблонаАнкеты.Владелец.Ссылка В (ВЫБРАТЬ ФормированиеЧПУ.ШаблоныАнкет ИЗ РегистрСведений.ФормированиеЧПУ КАК ФормированиеЧПУ ГДЕ ФормированиеЧПУ.URL = &URL)
Так же пробовал через ВЫРАЗИТЬ(ВопросыШаблонаАнкеты.Родитель.Код + «.» + ВопросыШаблонаАнкеты.Родитель.Родитель.Код + «.» + ВопросыШаблонаАнкеты.Код КАК Строка) но тоже не получилось((.Как в запросе в 1с сложить 3 столбца в 1? И где в текущем запросе у меня ошибка?
- Вопрос задан более трёх лет назад
- 1750 просмотров
2 комментария
Простой 2 комментария