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"")
    |ИЗ
    |  Справочник.Контрагенты"
);

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

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

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

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

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

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

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

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

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

КонецПроцедуры
Поиск кода
0
комментарии
____________________
Copyright by 1Cnik.by©, «Программист 1С в г.Минске», 14.06.2020
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Назад к содержимому