1С 8.3 Функции в запросе - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

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

Данные > Примеры кода 1С > 1С 8.3 Запросы
Функции в запросе 1С 8.3 - это предопределенные название со скобками (), которые используются для оптимизации кода запроса. Все функции могут находиться в полях запроса, а некоторые из них и в условиях запроса. Например, для существенного сокращения кода относительно работы с датами(периодом), используются следующие функции:
НАЧАЛОПЕРИОДА(ВыбДата, ВыбПериод) - получение начало периода
КОНЕЦПЕРИОДА(ВыбДата, ВыбПериод) - получение конец периода
КВАРТАЛ(ВыбДата), Месяц(ВыбДата), День(ВыбДата) - вычисление квартала, месяца или дня даты
РАЗНОСТЬДАТ(ВыбДатаНач, ВыбДатаКон, ВыбПериод) - вычисление разности между датами
ДОБАВИТЬКДАТЕ(ВыбДата, ВыбПериод, ВыбКоличество) - добавление сдвига к дате
Значения периода которые могут быть получены: Год, Полугодие, Квартал, Месяц, Декада, Неделя, День, Час, Минута, Секунда
Отбор записей в запросе по определенному значению (реквизиту) в 1С 8.3:
&НаСервере
Процедура ОтборЗаписейВЗапросеПоОпределенномуЗначениюРеквизиту()

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

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

КонецПроцедуры
Отбор записей в запросе по определенному значению (бух.счету) в 1С 8.3:
&НаСервере
Процедура ОтборЗаписейВЗапросеПоОпределенномуЗначениюБухСчету()

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

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

КонецПроцедуры
Определение переменой типа дата в запросе в 1С 8.3:
&НаСервере
Процедура ОпределениеПеременойТипаДатаВЗапросе()

   
// Указывать дату можно прямо в запросе или передавать через параметр
   
Запрос = Новый Запрос("ВЫБРАТЬ
    |  ДАТАВРЕМЯ(2020, 05, 30, 23, 00, 00) КАК ДоНачалаЛетаОсталсяОдинЧас"
);

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

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

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

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

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

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


Использование оператора ВЫБОР в запросе в 1С 8.3:
&НаСервере
Процедура ИспользованиеОператораВЫБОРвЗапросе()

   
// Выборка материалов с добавлением поля "ОписаниеПлотности" для новой градации
   
Запрос = Новый Запрос("ВЫБРАТЬ
    |   Наименование,
    |   Плотность,
    |   ВЫБОР
    |       КОГДА Плотность < 2 ТОГДА
    |           ""Низкая плотность""
    |       КОГДА Плотность > 2 ТОГДА
    |           ""Средняя плотность""
    |       ИНАЧЕ
    |           ""Очень плотный материал""
    |
    |   КОНЕЦ КАК ОписаниеПлотности
    | ИЗ
    |   Справочник.Материалы"
);

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

КонецПроцедуры
Использование значения Неопределено в запросе в 1С 8.3:
&НаСервере
Процедура ИспользованиеЗначенияНеопределеноВЗапросе()

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

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

КонецПроцедуры
Проверка значения на соответствие ссылочному типу в запросе в 1С 8.3:
&НаСервере
Процедура ПроверкаЗначенияНаСоответствиеСсылочномуТипуВЗапросе()

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

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

КонецПроцедуры
Проверка значения на вхождение в диапазон (включительно) в 1С 8.3:
&НаСервере
Процедура ПроверкаЗначенияНаВхождениеВДиапазон()

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

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

КонецПроцедуры
Проверка значения на вхождение в список в 1С 8.3:
&НаСервере
Процедура ПроверкаЗначенияНаВхождениеВСписок()

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

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

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

КонецПроцедуры
Проверка в запросе на отсутствие реквизита (значение NULL) в 1С 8.3:
&НаСервере
Процедура ПроверкаВЗапросеНаОтсутствиеРеквизита()

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

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

КонецПроцедуры
Проверка в запросе и замена NULL на другое значение в 1С 8.3:
&НаСервере
Процедура ПроверкаВЗапросеИЗаменаNULLНаДрЗначение()

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

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

   //  Функция запроса ЕстьNull обычно используется для избавления от значений типа Null
   //  для числовых полей запроса. В ряде случаев, например полного соединения
   //  двух таблиц функция ЕстьNull (ПараметрN1,ПараметрN2) может с успехом заменить
   //  конструкцию ВЫБОР КОГДА ... ТОГДА ..ИНАЧЕ ….КОНЕЦ, когда для какого-либо поля
   //  значения NULL могут быть как в первой таблице, так и во второй
   //  такая конструкция позволяет получать не Null значение для поля.
  //
   //  Но надо помнить, что в отличие от условного оператора ВЫБОР функция ЕстьNull
   //  приводит тип второго аргумента к типу первого аргумента, что нужно учитывать,
   //  если типы аргументов отличаются!

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

Получение пустой ссылки в запросе в 1С 8.3:
&НаСервере
Процедура ПолучениеПустойСсылкиВЗапросе()

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

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

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

КонецПроцедуры
Сравнение в запросе строки с шаблоном в 1С 8.3:
&НаСервере
Процедура СравнениеВЗапросеСтрокиСШаблоном()

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

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

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

КонецПроцедуры
Функции добавленные в язык запросов начиная с релиза 8.3.20:
Строковые функции:
Строка(String) – преобразует значение в примитивного типа в строку с учетом национальных установок.
ДлинаСтроки(StringLength) – вычисляет длину строки.
СокрЛ(TrimL) – отбрасывает незначащие пробелы слева.
СокрП(TrimR) – отбрасывает незначащие пробелы справа.
СокрЛП(TrimAll) – отбрасывает незначащие пробелы слева и справа.
Лев(Left) – получает первые слева символы строки.
Прав(Right) – получает первые справа символы строки.
СтрНайти(StrFind) – находит первую позицию подстроки в строке (без учета регистра).
ВРег(Upper) – преобразует все символы строки в верхний регистр.
НРег(Lower) – преобразует все символы строки в нижний регистр.
СтрЗаменить(StrReplace) – заменяет все вхождения подстроки на другую подстроку (без учета регистра).

Математические функции:
Exp - вычисляет результат возведения основания натурального логарифма (числа e) в степень
Log - вычисляет натуральный логарифм числа.
Log10 - вычисляет десятичный логарифм числа.
Pow -  вычисляет возведение в степень.
Sqrt – вычисляет квадратный корень.
Окр(Round) - округляет исходное число до нужной разрядности
Цел(Int) - вычисляет целую часть переданного числа, полностью отсекая дробную часть.
Тригонометрические функции Sin, Cos, Tan, ASin, ACos, ATan (все вычисления производятся в радианах)

РазмерХранимыхДанных(StoredDataSize) – возвращает размер данных в байтах, которые занимают данные параметра.
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 14.06.2020
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому