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

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

<<< Основы Группировка Условия Упорядочивание Функции
<<< Итоги Соединение Объединение Параметры

См. пример урока на функции и операторы для работы с типами
Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)

/// Как в запросе задать константу типа дата в 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С 8.3, 8.2 (в примерах)

<<< Основы Группировка Условия Упорядочивание Функции
<<< Итоги Соединение Объединение Параметры

С уважением, (преподаватель школы 1С программистов и разработчик обновлятора).



Владимир Милькин
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

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