Функции в запросах в языке 1С 8.3, 8.2 (в примерах)
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
2020-02-28T15:15:09+00:00<<< Основы Группировка Условия Упорядочивание Функции
<<< Итоги Соединение Объединение Параметры
См. пример урока на функции и операторы для работы с типами
Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)
/// Как в запросе задать константу типа дата в 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 (в примерах)
<<< Основы Группировка Условия Упорядочивание Функции
<<< Итоги Соединение Объединение Параметры