Функции в запросах в языке 1С 8.3

Jul 08, 2022 16:30


/// Как в запросе задать константу типа дата в 1с 8.3, 8.2

&НаСервере
Процедура КакВЗапросеЗадатьКонстантуТипаДатаНаСервере()

// Нужное значение даты можно передать в запрос через
// параметр, либо указать значение даты прямо
// в тексте запроса.

Запрос = Новый Запрос(
"ВЫБРАТЬ
| ДАТАВРЕМЯ(2013, 12, 31, 23, 59, 59) КАК ЗаСекундуДоНовогоГода"
);

ВыполнитьЗапросИВывестиНаФорму(Запрос);

КонецПроцедуры


/// Функции работы с датами в запросах в 1с 8.3, 8.2

&НаСервере
Процедура ФункцииДляРаботыСДатамиВЗапросахНаСервере()

// Как получить начало или конец периода в запросах 1С 8.3, 8.2
// НАЧАЛОПЕРИОДА(Дата, Период)
// КОНЕЦПЕРИОДА(Дата, Период)

// Как добавить сдвиг к дате в запросах 1С 8.3, 8.2
// ДОБАВИТЬКДАТЕ(Дата, Период, Количество)

// Как вычислить разность между датами в запросах 1С 8.3, 8.2
// РАЗНОСТЬДАТ(Дата1, Дата2, Период)

// Как вычислить квартал, месяц или день даты в запросах 1С 8.3, 8.2
// КВАРТАЛ(Дата), Месяц(Дата), День(Дата)

// Период принимает одно из значений
// Секунда
// Минута
// Час
// День
// Неделя
// Декада
// Месяц
// Квартал
// Полугодие
// Год

Запрос = Новый Запрос(
"ВЫБРАТЬ
| Ссылка,
| ДОБАВИТЬКДАТЕ(Дата, Квартал, 1) КАК ПлюсКвартал,
| РАЗНОСТЬДАТ(Дата, &ВыбДата, Месяц) КАК РазностьВМесяцах,
| КВАРТАЛ(Дата) КАК Квартал,
| МЕСЯЦ(Дата) КАК Месяц,
| ДЕНЬ(Дата) КАК День
|ИЗ
| Документ.ПродажаЕды
|ГДЕ
| Дата МЕЖДУ
| НАЧАЛОПЕРИОДА(&ВыбДата, Год) И
| КОНЕЦПЕРИОДА(&ВыбДата, Год)"
);

Запрос.УстановитьПараметр("ВыбДата", '20140601');

ВыполнитьЗапросИВывестиНаФорму(Запрос);

КонецПроцедуры

/// Как в запросе указать значение поля предопределенной записи
/// одной из таблиц в 1с 8.3, 8.2

&НаСервере
Процедура КакУказатьПредопределенноеЗначениеВЗапросеНаСервере()

// К примеру, требуется вывести только тех котрагентов, у которых
// значение поля Пол равно значению перечисления Мужской.

Запрос = Новый Запрос(
"ВЫБРАТЬ
| Наименование,
| Пол
|ИЗ
| Справочник.Контрагенты
|ГДЕ
| Пол = ЗНАЧЕНИЕ(Перечисление.Пол.Мужской)
|"
);

ВыполнитьЗапросИВывестиНаФорму(Запрос);

// Или требуется выбрать проводки по дебету бухгалтерского счёта 50.01,
// обратившись к нему через предопределенное имя КассаОрганизации.

Запрос = Новый Запрос(
"ВЫБРАТЬ
| СчетДт,
| СчетКт,
| Сумма
|ИЗ
| РегистрБухгалтерии.Хозрасчетный
|ГДЕ
| СчетДт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.КассаОрганизации)"
);

ВыполнитьЗапросИВывестиНаФорму(Запрос);

КонецПроцедуры

/// Как использовать условный оператор выбора в запросе в 1с 8.3, 8.2

&НаСервере
Процедура КакИспользоватьУсловныйОператорВыбораВЗапросеНаСервере()

// При помощи условного оператора выбора добавим
// в результат запроса новое поле описывающее
// количество жира в продукте.

Запрос = Новый Запрос(
"ВЫБРАТЬ
| Наименование,
| Жиры,
| ВЫБОР
| КОГДА Жиры = 0 ТОГДА
| ""Здесь жира нет""
| КОГДА Жиры < 10 ТОГДА
| ""Средняя жирность""
| ИНАЧЕ
| ""Очень жирный продукт""
|
| КОНЕЦ КАК ОписаниеЖирности
| ИЗ
| Справочник.Номенклатура
|"
);

ВыполнитьЗапросИВывестиНаФорму(Запрос);

КонецПроцедуры

/// Как в запросе проверить поле на соответствие ссылочному типу
/// в 1с 8.3, 8.2

&НаСервере
Процедура КакВЗапросеПроверитьПолеНаСсылочныйТипНаСервере()

// Сделаем отбор только тех бухгалтерских проводок, у которых
// регистратором является документ типа "ПродажаЕды"

Запрос = Новый Запрос(
"ВЫБРАТЬ
| Регистратор,
| СчетДт,
| СчетКт,
| Сумма
|ИЗ
| РегистрБухгалтерии.Хозрасчетный
|ГДЕ
| Регистратор ССЫЛКА Документ.ПродажаЕды"
);

ВыполнитьЗапросИВывестиНаФорму(Запрос);

КонецПроцедуры

/// Как в запросе проверить значение на вхождение в
/// диапазон (включительно) в 1с 8.3, 8.2

&НаСервере
Процедура КакВЗапросеПроверитьЗначениеНаДиапазонНаСервере()

Запрос = Новый Запрос(
"ВЫБРАТЬ
| Наименование,
| Калорийность
|ИЗ
| Справочник.Номенклатура
|ГДЕ
| Калорийность МЕЖДУ 200 И 300"
);

ВыполнитьЗапросИВывестиНаФорму(Запрос);

КонецПроцедуры

/// Как в запросе проверить значение на вхождение в список
/// в 1с 8.3, 8.2

&НаСервере
Процедура КакВЗапросеПроверитьЗначениеНаВхождениеВСписокНаСервере()

// Выведем солёные и сладкие продукты.

Запрос = Новый Запрос(
"ВЫБРАТЬ
| Наименование,
| Вкус
|ИЗ
| Справочник.Номенклатура
|ГДЕ
| Вкус В (
| &СладкийВкус,
| &СолёныйВкус
| )"
);

Запрос.УстановитьПараметр("СладкийВкус",
Справочники.Вкусы.НайтиПоНаименованию("Сладкий")
);

Запрос.УстановитьПараметр("СолёныйВкус",
Справочники.Вкусы.НайтиПоНаименованию("Солёный")
);

ВыполнитьЗапросИВывестиНаФорму(Запрос);

// Обратите внимание. У оператора "В" есть вариант "В ИЕРАРХИИ".
// Например, ГДЕ Город В ИЕРАРХИИ (... список групп городов ...)

КонецПроцедуры

/// Как в запросе сравнить строку с шаблоном в 1с 8.3, 8.2

&НаСервере
Процедура КакВЗапросеСравнитьСтрокуСШаблономНаСервере()

// % - любое количество произвольных символов
// _ - один произвольный символ
// [] - любой одиночный символ, перечисленный внутри скобок
// [^] - любой одиночный символ, кроме тех, что внутри скобок после ^

// К примеру, выберем контрагентов, которые содержат
// слова, оканчивающиеся на "ов ".

Запрос = Новый Запрос(
"ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.Контрагенты
|ГДЕ
| Наименование ПОДОБНО ""%_[о][в][ ]%"""
);

ВыполнитьЗапросИВывестиНаФорму(Запрос);

КонецПроцедуры

/// Как проверить в запросе на отсутствие поля (то есть значение NULL)
/// в 1с 8.3, 8.2

&НаСервере
Процедура КакВЗапросеПроверитьПолеНаNULLНаСервере()

// Ну, например, выберем из справочника Контрагенты только
// те элементы, у которых нет поля "Пол" (очевидно, что
// такими элементами окажутся группы).

Запрос = Новый Запрос(
"ВЫБРАТЬ
| Наименование,
| Пол
|ИЗ
| Справочник.Контрагенты
|ГДЕ
| Пол ЕСТЬ NULL"
);

ВыполнитьЗапросИВывестиНаФорму(Запрос);

// Обратите внимание, что сюда не попали элементы,
// у которых это поле есть, но просто не заполнено.

КонецПроцедуры

/// Как в запросе проверить и заменить NULL на другое значение в 1с 8.3, 8.2

&НаСервере
Процедура КакВЗапросеЗаменитьNULLНаДругоеЗначениеНаСервере()

// Добавим в предыдущем примере вывод фразы "NULL", если
// Пол ЕСТЬ NULL.

Запрос = Новый Запрос(
"ВЫБРАТЬ
| Наименование,
| ЕСТЬNULL(Пол, ""NULL"")
|ИЗ
| Справочник.Контрагенты"
);

ВыполнитьЗапросИВывестиНаФорму(Запрос);

КонецПроцедуры

/// Как получить пустую ссылку в запросе в 1с 8.3, 8.2

&НаСервере
Процедура КакВЗапросеПолучитьПустуюСсылкуНаСервере()

// Получим только тех контрагентов, у которых поле Пол есть,
// но оно не заполнено.

Запрос = Новый Запрос(
"ВЫБРАТЬ
| Наименование,
| Пол
|ИЗ
| Справочник.Контрагенты
|ГДЕ
| Пол = ЗНАЧЕНИЕ(Перечисление.Пол.ПустаяСсылка)"
);

ВыполнитьЗапросИВывестиНаФорму(Запрос);

// аналогично пишутся
// ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
// ЗНАЧЕНИЕ(Документ.ПродажаЕды.ПустаяСсылка)
// и т.д.

КонецПроцедуры

/// Как использовать значение Неопределено в запросе
/// в 1с 8.3, 8.2

&НаСервере
Процедура КакВЗапросеИспользоватьНеопределеноНаСервере()

// Значение данного типа применяются, когда необходимо
// использовать пустое значение, не принадлежащее ни к
// одному другому типу.

// Например, такое значение изначально имеют реквизиты
// с составным типом значения.

// Для примера отберём только те города, у которых
// не заполнено поле ОтличительныйПризнак (оно имеет
// составной тип).

Запрос = Новый Запрос(
"ВЫБРАТЬ
| Наименование,
| ОтличительныйПризнак
|ИЗ
| Справочник.Города
|ГДЕ
| ОтличительныйПризнак = Неопределено"
);

ВыполнитьЗапросИВывестиНаФорму(Запрос);

КонецПроцедуры

Смотрите также:
Электронный учебник по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Игра "Кто хочет стать миллионером?" с вопросами на определенную тематику (язык программирования JavaScript, английские, немецкие, французские, испанские, португальские, ни­дер­ландские, итальянские слова, электробезопасность, промышленная безопасность, бокс и т.п.), написанная на 1С
Программирование в 1С 8.3 с нуля - краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки

программирование

Previous post Next post
Up