Функции языка запросов 1С. Работа с датами

В запросах 1С с датами приходится работать довольно часто. Рассмотрим функции работы с датами в запросах 1С.

Функции работы с датами

Дата — один из примитивных типов данных в системе 1С:Предприятие. Дата всегда имеет формат год, месяц, день, час, минута, секунда. Таким образом, переменная типа дата содержит не только дату, но и время.

Одной из первых моих статей в этой рубрике была небольшая шпаргалка по работе с датами, но о датах в запросах там было написано очень мало.  В запросах 1С с датами приходится работать довольно часто, особенно когда запрос строится к объектам метаданных в которых содержится периодическая информация. Как правило это регистры (сведений, накопления, расчета, бухгалтерии).

Функция Год

ГОД(<Дата>)

Функция Год() возвращает целое число — год даты. Например, выберем все заказы покупателя оформленные с 1 января 2016 года

ВЫБРАТЬ ЗаказПокупателя.Дата, ГОД(ЗаказПокупателя.Дата) КАК Год, ЗаказПокупателя.СсылкаИЗ Документ.ЗаказПокупателя КАК ЗаказПокупателяГДЕ ГОД(ЗаказПокупателя.Дата) > 2015

Функция Квартал

КВАРТАЛ(<Дата>)

Возвращает номер квартала даты (целочисленное значение от 1 до 4)

ВЫБРАТЬ ЗаказПокупателя.Дата, КВАРТАЛ(ЗаказПокупателя.Дата) КАК НомерКвартала, ЗаказПокупателя.СсылкаИЗ Документ.ЗаказПокупателя КАК ЗаказПокупателяГДЕ ЗаказПокупателя.Ссылка = &ЗаказПокупателя

Предположим, в ЗаказПокупателя передаем заказ №100 от 12.03.2016, в этом случае наш запрос вернет НомерКвартала = 1

Функция Месяц

МЕСЯЦ(<Дата>)

Принимает параметр типа ДАТА. Возвращает номер месяца даты (целочисленное значение от 1 до 12).

ВЫБРАТЬ МЕСЯЦ(ДАТАВРЕМЯ(2016, 6, 23))

Запрос вернет – 6

Функция ДеньГода

ДЕНЬГОДА(<Дата>)

Принимает параметр типа ДАТА. Возвращает номер дня в году (целочисленное значение от 1 до 366).

ВЫБРАТЬ ДЕНЬГОДА(ДАТАВРЕМЯ(2016, 6, 23))

Запрос вернет — 175

Функция День

ДЕНЬ(<Дата>)

Принимает параметр типа ДАТА. Возвращает номер дня в месяце (целочисленное значение от 1 до 31).

ВЫБРАТЬ ДЕНЬ(ДАТАВРЕМЯ(2016, 6, 23))

Запрос вернет — 23

Функция Неделя

НЕДЕЛЯ(<Дата>)

Принимает параметр типа ДАТА. Возвращает номер недели в году.

ВЫБРАТЬ НЕДЕЛЯ(ДАТАВРЕМЯ(2016, 6, 23))

Запрос вернет — 25

Функция ДеньНедели

ДЕНЬНЕДЕЛИ(<Дата>)

Принимает параметр типа ДАТА. Возвращает номер дня недели (целочисленной значение от 1 (понедельник) до 7 (воскресенье)).

ВЫБРАТЬ ДЕНЬНЕДЕЛИ(ДАТАВРЕМЯ(2016, 6, 23))

Запрос вернет — 4

Функция Час

ЧАС(<Дата>)

Принимает параметр типа ДАТА. Возвращает час суток (целочисленное значение от 0 до 23).

ВЫБРАТЬ ЧАС(ДАТАВРЕМЯ(2016, 6, 23, 18, 25, 36))

Запрос вернет — 18

Функция Минута

МИНУТА(<Дата>)

Принимает параметр типа ДАТА.  Возвращает минуты часа (целочисленное значение от 0 до 59).

ВЫБРАТЬ МИНУТА(ДАТАВРЕМЯ(2016, 6, 23, 18, 25, 36))

Запрос вернет — 25

Функция Секунда

СЕКУНДА(<Дата>)

Принимает параметр типа ДАТА. Возвращает секунды минуты (целочисленное значение от 0 до 59).

ВЫБРАТЬ СЕКУНДА(ДАТАВРЕМЯ(2016, 6, 23, 18, 25, 36))

Запрос вернет — 36

Функция НачалоПериода

НАЧАЛОПЕРИОДА(<Дата>, <Период>)

Функция возвращает для указанной даты начало периода в который она входит. Период может принимать следующие значения: МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ

ВЫБРАТЬ НАЧАЛОПЕРИОДА(ДАТАВРЕМЯ(2016, 6, 23), МЕСЯЦ)

Запрос вернет – 01.06.2016

Функция КонецПериода

КОНЕЦПЕРИОДА(<Дата>, <Период>)

Функция возвращает для указанной даты конец периода в который она входит. Период может принимать следующие значения: МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ

ВЫБРАТЬ КОНЕЦПЕРИОДА(ДАТАВРЕМЯ(2016, 6, 23), МЕСЯЦ)

Запрос вернет – 30.06.2016

Функция ДобавитьКДате

ДОБАВИТЬКДАТЕ(<Дата>, <Тип>, <Количество>)

Функция добавляет к дате указанное количество временных интервалов.

ВЫБРАТЬ ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2016, 6, 15), МЕСЯЦ, 4)

Получаем дату 15.10.2016 0:00:00 Очень удобно, что не приходится задумываться о количестве дней в месяцах.
Количество может быть и отрицательным. Тогда отсчет интервала производится в обратную сторону.

Функция РазностьДат

РАЗНОСТЬДАТ(<Дата1>, <Дата2>, <Тип>)

Функция рассчитывает календарную разницу между двумя датами и ее нельзя использовать в местах, где необходимо рассчитать банковских или рабочих дней. Тип может принимать следующие значения: МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ

ВЫБРАТЬ РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2016, 2, 15), ДАТАВРЕМЯ(2016, 6, 12), ДЕНЬ)

Возвращает 118 дней.

Получение дат

Как передать текущую дату в запрос?

Запрос

= Новый

Запрос

(«ВЫБРАТЬ &ТекущаяДата»);

Запрос.УстановитьПараметр(«ТекущаяДата»,ТекущаяДата());
тзРезультатЗапроса = Запрос.Выполнить().Выгрузить();

Далее приводятся только тексты запросов.

Как получить начало текущего месяца?

Используем функцию НАЧАЛОПЕРИОДА(ДАТА,{ГОД,КВАРТАЛ,МЕСЯЦ,ДЕКАДА,НЕДЕЛЯ,ДЕНЬ})

ВЫБРАТЬ
  НАЧАЛОПЕРИОДА(&ТекущаяДата,МЕСЯЦ)

Конец текущего года?

ВЫБРАТЬ
  КОНЕЦПЕРИОДА(&ТекущаяДата,ГОД)

Как получить полдень текущей даты?

Добавим использование функции ДОБАВИТЬКДАТЕ(ДАТА,{ГОД,КВАРТАЛ,МЕСЯЦ,ДЕКАДА,НЕДЕЛЯ,ДЕНЬ},ЧИСЛО)

ВЫБРАТЬ
  ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекущаяДата,ДЕНЬ),ЧАС,12)

Как получить дату без времени (0:00)

ВЫБРАТЬ
   НАЧАЛОПЕРИОДА(&ТекущаяДата,ДЕНЬ)

Как задать дату-константу в запросе 1С?

ВЫБРАТЬ
  ДАТАВРЕМЯ(2017,1,1)

Возможно задать дату с точностью до секунды?

ВЫБРАТЬ
  ДАТАВРЕМЯ(2017,1,1,8,0,1)

А до милисекунды?

Нет!

Что такое запрос и язык запросов

Запросы предназначены для извлечения и обработки информации из базы данных для предоставления пользователю в требуемом виде. Под обработкой здесь подразумевается группировка полей, сортировка строк, расчет итогов и т.д. Изменять данные с помощью запросов в 1С нельзя!

Запрос выполняется в соответствии с заданными инструкциями — текстом запроса. Текст запроса составляется в соответствии с синтаксисом и правилами языка запросов. Язык запросов 1С:Предприятие 8 основан на базе стандартного SQL, но имеет некоторые отличия и расширения.

Схема работы с запросом

Общая схема работы с запросом состоит из нескольких последовательных этапов:

  1. Создание объекта Запрос и установка текста запроса;
  2. Установка параметров запроса;
  3. Выполнение запроса и получение результата;
  4. Обход результата запроса и обработка полученных данных.

1. Объект Запрос имеет свойство Текст, которому необходимо присвоить текст запроса.

// Вариант 1
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| КурсыВалют.Период,
| КурсыВалют.Валюта,
| КурсыВалют.Курс
|ИЗ
| РегистрСведений.КурсыВалют КАК КурсыВалют
|ГДЕ
| КурсыВалют.Валюта = &Валюта»;

// Вариант 2
Запрос = Новый Запрос(«ВЫБРАТЬ
| КурсыВалют.Период,
| КурсыВалют.Валюта,
| КурсыВалют.Курс
|ИЗ
| РегистрСведений.КурсыВалют КАК КурсыВалют
|ГДЕ
| КурсыВалют.Валюта = &Валюта»);

2. Установка значений параметров осуществляется методом УстановитьПараметр(<Имя>, <Значение>). Параметры в тексте запроса обозначаются символом «&» и обычно используются в условиях отбора (секция ГДЕ) и в параметрах виртуальных таблиц.

Запрос.УстановитьПараметр(«Валюта», ВыбраннаяВалюта);

3. После присвоения текста и установки параметров запрос необходимо выполнить и получить результат выполнения. Выполнение производится методом Выполнить(), который возвращает объект РезультатЗапроса. Из результата запроса можно:

  • получить выборку с помощью метода Выбрать(<ТипОбхода>, <Группировки>, <ГруппировкиДляЗначенийГруппировок>);
  • выгрузить значения в таблицу значений или дерево значений с помощью метода Выгрузить(<ТипОбхода>).

// Получение выборки
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

// Получение таблицы значений
РезультатЗапроса = Запрос.Выполнить();
Таблица = РезультатЗапроса.Выгрузить();

4. Обойти выборку результата запроса можно с помощью цикла:

Пока Выборка.Следующий() Цикл
     Сообщить(Выборка.Курс);
КонецЦикла;

Полный пример работы с запросом может выглядеть так:

// Этап 1. Создание запроса и установка текста запроса
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| КурсыВалют.Период,
| КурсыВалют.Валюта,
| КурсыВалют.Курс
|ИЗ
| РегистрСведений.КурсыВалют КАК КурсыВалют
|ГДЕ
| КурсыВалют.Валюта = &Валюта»;

// Этап 2. Установка параметров
Запрос.УстановитьПараметр(«Валюта», ВыбраннаяВалюта);

// Этап 3. Выполнение запроса и получение выборки
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

// Обход выборки
Пока Выборка.Следующий() Цикл
     Сообщить(Выборка.Курс);
КонецЦикла;

Состав текста запроса

Текст запроса состоит из нескольких секций:

  1. Описание запроса — перечень выбираемых полей и источников данных;
  2. Объединение запросов — выражения «ОБЪЕДИНИТЬ» и «ОБЪЕДИНИТЬ ВСЕ»;
  3. Упорядочивание результатов — выражение «УПОРЯДОЧИТЬ ПО …»;
  4. Автоупорядочивание — выражение «АВТОУПОРЯДОЧИВАНИЕ»;
  5. Описание итогов — выражение «ИТОГИ … ПО …».

Обязательной является только первая секция.

Временные таблицы и пакетные запросы

Язык запросов 1С поддерживает использование временных таблиц — таблиц, полученных в результате выполнения запроса и сохраненных на временной основе.

Часто можно столкнуться с ситуацией, когда в качестве источника запроса нужно использовать не таблицы базы данных, а результат выполнения другого запроса. Эту задачу можно решить с помощью вложенных запросов или временных таблиц. Применение временных таблиц позволяет упростить текст сложного запроса, разделив его на составные части, а также, в некоторых случаях, ускорить выполнение запроса и уменьшить количество блокировок. Для работы с временными таблицами используется объект МенеджерВременныхТаблиц. Создание временной таблицы производится при помощи ключевого слова ПОМЕСТИТЬ, за которым следует наименование временной таблицы.

МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос.Текст =
«ВЫБРАТЬ
| Валюты.Код,
| Валюты.Наименование
|ПОМЕСТИТЬ ВТВалюты
|ИЗ
| Справочник.Валюты КАК Валюты»;

РезультатЗапроса = Запрос.Выполнить();

Для использования временной таблицы ВТВалюты в других запросах необходимо этим запросам присвоить общий менеджер временных таблиц — МенеджерВТ.

Пакетный запрос — это запрос, в котором содержится несколько запросов, разделенных символом «;». При выполнении пакетного запроса все входящие в него запросы выполняются последовательно, причем результаты всех временных таблиц доступны всем последующим запросам. Явное присвоение менеджера временных таблиц пакетным запросам не обязательно. Если менеджер временных таблиц не присвоен, то все временные таблицы удалятся сразу после выполнения запроса.

Для пакетных запросов доступен метод ВыполнитьПакет(), который выполняет все запросы и возвращает массив результатов. Временные таблицы в пакетном запросе будут представлены таблицей с одной строкой и одной колонкой «Количество», в которой хранится количество записей. Для отладки пакетных запросов можно использовать метод ВыполнитьПакетСПромежуточнымиДанными(): он возвращает реальное содержимое временных таблиц, а не количество записей.

// Пример работы с пакетным запросом
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| Валюты.Наименование
|ИЗ
| Справочник.Валюты КАК Валюты
|;
|ВЫБРАТЬ
| Номенклатура.Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура»;

РезультатПакета = Запрос.ВыполнитьПакет();

ТЗВалюты = РезультатПакета[0].Выгрузить();
ТЗНоменклатура = РезультатПакета[1].Выгрузить();

// Пример использования временных таблиц в пакетном запросе
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| Товары.Ссылка КАК Товар
|ПОМЕСТИТЬ ВТТовары
|ИЗ
| Справочник.Номенклатура КАК Товары
|ГДЕ
| Товары.Производитель = &Производитель
|;
|ВЫБРАТЬ
| ВТТовары.Товар,
| ПТУ.Количество,
| ПТУ.Цена,
| ПТУ.Ссылка КАК ДокументПоступления
|ИЗ
| ВТТовары КАК ВТТовары
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПТУ
| ПО ВТТовары.Товар = ПТУ.Номенклатура»
;

Запрос.УстановитьПараметр(«Производитель», Производитель);

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл

КонецЦикла;

primer-rascheta-vremeni-do-novogo-godaЧто еще следует знать про дату в запросах?

Дата в запросах может фигурировать не только в полях выборки, и вычислениях, но также передаваться, как параметры виртуальных таблиц.

Например:

  • для среза последних значений в  регистре сведений в качестве момента на которое берется значение. Если периодичность регистра не совпадает с переданным параметром, система обрежет лишние (секунда, дни в зависимости от), округления не происходит
  • для остатков регистра накопления в качестве дата остатка
  • для оборотов регистров бухгалтерии или регистра накопления (НачалоПериода,КонецПериода)
  • других виртуальных таблиц

Допустимо задание дат-констант и использование параметров, также обработка их выше приведенными функциями.

Но нельзя дату передать в параметры виртуальных таблиц из полученных ранее в этом запросе полей выборки. 

Сортировка даты в запросе производится в рамках секунды.

Момент времени документа не является датой, он сортирует более глубже, чем  дата документа, т.е. при наличии документов в одну секунду времени, сортировка по дате производится в недопустимом порядке: например в виде представления. Используйте для этого момент времени.

Внешнее  представление даты определяется представлением операционной системы, управлять из запроса, а также приводить в строковое представление в классическом запросе невозможно в отличии от СКД, где возможна пост-обработка и условное оформление.

Допускается применение функции МАКСИМУМ(),МИНИМУМ() к дата в запросе, как в группировке так и в итогах запроса.

Ошибка «неверные параметры» возникает в случае, когда вместо даты передается null, число или что-то иное.

Виртуальные таблицы

Виртуальные таблицы — это таблицы, которые не хранятся в базе данных, а формируются платформой. По своей сути это вложенные запросы к одной или нескольким физическим таблицам, выполняемые платформой. Виртуальные таблицы получают информацию только из регистров и, в основном, предназначены для решения узкоспециализированных задач.

Существуют следующие виртуальные таблицы (в скобках указаны возможные параметры):

  • Для регистров сведений:
    • СрезПервых(<Период>, <Условие>) — наиболее ранние записи на указанную дату;
    • СрезПоследних(<Период>, <Условие>) — наиболее поздние записи на указанную дату;
  • Для регистров накопления:
    • Остатки(<Период>, <Условие>)  — остатки на указанную дату;
    • Обороты(<НачалоПериода>, <КонецПериода>, <Периодичность>, <Условие>) — обороты за период;
    • ОстаткиИОбороты(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <Условие>) — остатки и обороты за период;
  • Для регистров бухгалтерии:
    • Остатки(<Период>, <УсловиеСчета>, <Субконто>, <Условие>)  — остатки на указанную дату в разрезе счета, измерений и субконто;
    • Обороты(<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчета>, <Субконто>, <Условие>, <УсловиеКорСчета>, <КорСубконто>) — обороты за период в разрезе счета, измерений, кор. счета, субконто, кор. субконто;
    • ОстатковИОборотов(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <УсловиеСчета>, <Субконто>, <Условие>) — остатки и оборотов в разрезе счета, измерений и субконто;
    • ОборотыДтКт(<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчетаДт>, <СубконтоДт>, <УсловиеСчетаКт>, <СубконтоКт>, <Условие>) — обороты за период в разрезе счета Дт, счета Кт, Субконто Дт, Субконто Кт;
    • ДвиженияССубконто(<НачалоПериода>, <КонецПериода>, <Условие>, <Порядок>, <Первые>) — движения вместе со значениями субконто;
  • Для регистров расчета:
    • База(<ИзмеренияОсновногоРегистра>, <ИзмеренияБазовогоРегистра>, <Разрезы>, <Условие>) — базовые данные регистра расчета;
    • ДанныеГрафика(<Условие>) — данные графика;
    • ФактическийПериодДействия(<Условие>) — фактический период действия.

При работе с виртуальными таблицами следует накладывать отборы в параметрах виртуальных таблиц, а не в условии ГДЕ. От этого сильно зависит время выполнения запроса.

Преобразовать строку в дату в запросе

Специальных функций нет. но возможно преобразование через функцию ПОДСТРОКА и конструкцию ВЫБОР КОГДА

[cl-popup title=»Запрос,приводится в академических целях» btn_label=»Открыть текст запроса» size=»m» border_radius=»3″]

ВЫБРАТЬ
“20161012” КАК Параметр,
&Парам = “20161012” КАК ВерныйПараметр,
ПОДСТРОКА(&Парам, 1, 1) КАК символ1,
ПОДСТРОКА(&Парам, 2, 1) КАК символ2,
ПОДСТРОКА(&Парам, 3, 1) КАК символ3,
ПОДСТРОКА(&Парам, 4, 1) КАК символ4
ПОМЕСТИТЬ Расчеты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Расчеты.Параметр,
Расчеты.ВерныйПараметр,
ВЫБОР
КОГДА Расчеты.символ1 = “2”
ТОГДА 2
КОГДА Расчеты.символ1 = “1”
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ * 1000 + ВЫБОР
КОГДА Расчеты.символ2 = “0”
ТОГДА 0
КОГДА Расчеты.символ2 = “1”
ТОГДА 1
КОГДА Расчеты.символ2 = “2”
ТОГДА 2
КОГДА Расчеты.символ2 = “3”
ТОГДА 3
КОГДА Расчеты.символ2 = “4”
ТОГДА 4
КОГДА Расчеты.символ2 = “5”
ТОГДА 5
КОГДА Расчеты.символ2 = “6”
ТОГДА 6
КОГДА Расчеты.символ2 = “7”
ТОГДА 7
КОГДА Расчеты.символ2 = “8”
ТОГДА 8
ИНАЧЕ 9
КОНЕЦ * 100 + ВЫБОР
КОГДА Расчеты.символ3 = “0”
ТОГДА 0
КОГДА Расчеты.символ3 = “1”
ТОГДА 1
КОГДА Расчеты.символ3 = “2”
ТОГДА 2
КОГДА Расчеты.символ3 = “3”
ТОГДА 3
КОГДА Расчеты.символ3 = “4”
ТОГДА 4
КОГДА Расчеты.символ3 = “5”
ТОГДА 5
КОГДА Расчеты.символ3 = “6”
ТОГДА 6
КОГДА Расчеты.символ3 = “7”
ТОГДА 7
КОГДА Расчеты.символ3 = “8”
ТОГДА 8
ИНАЧЕ 9
КОНЕЦ * 10 + ВЫБОР
КОГДА Расчеты.символ4 = “0”
ТОГДА 0
КОГДА Расчеты.символ4 = “1”
ТОГДА 1
КОГДА Расчеты.символ4 = “2”
ТОГДА 2
КОГДА Расчеты.символ4 = “3”
ТОГДА 3
КОГДА Расчеты.символ4 = “4”
ТОГДА 4
КОГДА Расчеты.символ4 = “5”
ТОГДА 5
КОГДА Расчеты.символ4 = “6”
ТОГДА 6
КОГДА Расчеты.символ4 = “7”
ТОГДА 7
КОГДА Расчеты.символ4 = “8”
ТОГДА 8
ИНАЧЕ 9
КОНЕЦ КАК НомерГода
ПОМЕСТИТЬ Цифры
ИЗ
Расчеты КАК Расчеты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
цифры.Параметр,
цифры.ВерныйПараметр,
цифры.НомерГода,
ДобавитьКДате(ДАТАВРЕМЯ(1,1,1),ГОД,цифры.НомерГода-1)
ИЗ
Цифры КАК цифры[/cl-popup]

Про использование пустой даты в запросе.

Реклама похоронного бюро: «Если наши клиенты воскреснут, то вновь обратятся к нам!

Конструктор запроса

Для ускорения ввода текстов запросов платформа имеет специальные инструменты: Конструктор запроса и Конструктор запроса с обработкой результата. Для вызова конструкторов необходимо щелкнуть правой кнопкой мыши и выбрать требуемый пункт:

Вызов конструктора запроса

Также конструкторы можно вызвать из главного меню Текст.

При помощи конструктора запроса программист может интерактивно сконструировать текст запроса. Для этого мышкой выбираются нужные таблицы и поля, устанавливаются связи, группировки, итоги и т.д. Данный подход позволяет экономить время и избавиться от возможных ошибок. В результате своей работы конструктор запроса формирует текст запроса.

Конструктор запроса с обработкой результата кроме формирования текста запроса создает готовый фрагмент кода для получения и обработки данных.

Конструктор запроса 1С

Объект СхемаЗапроса

Платформа позволяет программно создавать и редактировать текст запроса при помощи объекта СхемаЗапроса. Объект имеет единственное свойство ПакетЗапросов, в котором объекта хранятся свойства всех запросов, редактируемых в данный момент. Объект СхемаЗапроса поддерживает следующие методы:

  • УстановитьТекстЗапроса(<Текст>) — заполняет свойство ПакетЗапросов на основании переданного текста запроса;
  • ПолучитьТекстЗапроса() — возвращает сформированный на основании свойства ПакетЗапросов текст запроса;
  • НайтиПараметры() — возвращает параметры запроса.

Рассмотрим пример работы с объектом СхемаЗапроса. Для программного формирования текста запроса

ВЫБРАТЬ
     Валюты.Ссылка КАК Валюта,
     Валюты.Код
ИЗ
     Справочник.Валюты КАК Валюты
ГДЕ
     НЕ Валюты.ПометкаУдаления

УПОРЯДОЧИТЬ ПО
     Валюты.Код

Код на встроенном языке может выглядеть так:

СхемаЗапроса = Новый СхемаЗапроса;
Пакет1 = СхемаЗапроса.ПакетЗапросов[0];
Оператор1 = Пакет1.Операторы[0];
// добавление источника
ТаблицаРегистра = Оператор1.Источники.Добавить(«Справочник.Валюты», «Валюты»);
// добавление полей
ПолеСсылка = Оператор1.ВыбираемыеПоля.Добавить(«Валюты.Ссылка», 0);
ПолеКод = Оператор1.ВыбираемыеПоля.Добавить(«Валюты.Код», 1);
// указание псевдонимов полей
Пакет1.Колонки[0].Псевдоним = «Валюта»;
Пакет1.Колонки[1].Псевдоним = «Код»;
// добавление условия
Оператор1.Отбор.Добавить(«НЕ ПометкаУдаления»);
// добавление упорядочивания
Пакет1.Порядок.Добавить(ПолеКод);
ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();

Остались вопросы?
Спросите в комментариях к статье.

Смотри также:

Использование функции ЗНАЧЕНИЕ в запросе
Оператор ВЫРАЗИТЬ в запросах
Передача значений в запрос 1С

Рейтинг
( 1 оценка, среднее 5 из 5 )
Загрузка ...