Условие

Язык запросов

Синтаксис и применение Условие в платформе 1С:Предприятие. Описание и примеры кода.

Полное описание, параметры и ограничения

Условие

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

Методическая информация

Практические примеры

Получить дни собственного графика за разные периоды

Сотрудник — собственное измерение, Результат — ресурс, Комментарий — реквизит. Обе проведённые записи имеют активность Истина, сторно Ложь и номер строки 1.Связь с графиком задана реальными метаданными, а Дни — ресурс непериодического графика.

Где и как запускать

Тело серверной команды собственной учебной обработки; дополнительные блоки запускаются только в указанном для них месте.

Подготовка

  1. В собственной пустой учебной конфигурации создайте план видов расчета УчебныеВидыЗапросов: строковый код 10, наименование 100, Использует период действия Да, Зависимость от базы По периоду действия. В список базовых планов включите этот же план.

  2. В предопределенных данных плана создайте Оклад (код ОКЛ), Премия (ПРМ) и Отсутствие (ОТС). Для всех ПериодДействияБазовый Ложь. У Премия в БазовыеВидыРасчета и ВедущиеВидыРасчета добавьте Оклад. У Оклад в ВытесняющиеВидыРасчета добавьте Отсутствие. Другие списки пустые. Это связи платформы, не формула расчёта зарплаты.

  3. Добавьте в план реквизит Комментарий (Строка 100) и табличную часть Детали с Наименование (Строка 100) и Количество (Число 10.0). После обновления учебной базы заполните у Оклад комментарий Учебный оклад и одну строку Книга, 2; остальные виды оставьте без Детали.

  4. Создайте независимый непериодический регистр сведений УчебныйГрафикЗапросов: измерения График (Строка 20) и ДатаДня (Дата, состав даты Дата), ресурс Дни (Число 2.0). Код заполнения календаря в дополнительном блоке создаст 31 дату октября для графика Демо, каждый день по единице. Это условный календарь, не производственный календарь праздников.

  5. Создайте регистр расчета УчебныеНачисленияЗапросов: периодичность Месяц, план УчебныеВидыЗапросов, Период действия Да и Базовый период Да. Измерение Сотрудник (Строка 20), ресурс Результат (Число 15.2), реквизиты График (Строка 20) и Комментарий (Строка 100).

  6. В свойствах регистра задайте График = УчебныйГрафикЗапросов, Дата графика = ДатаДня, Значение графика = Дни. У реквизита График настройте Связь с графиком на УчебныйГрафикЗапросов.График. Это настройки метаданных; код не присваивает им выдуманные runtime-свойства.

  7. В регистре расчета создайте перерасчет Очередь с измерением Сотрудник, связанным с измерением Сотрудник основного регистра. Данные ведущих регистров оставьте пустыми: отдельный дополнительный блок покажет явное добавление своей записи очереди.

  8. Общие → Общие реквизиты: создайте УчебныйИсточник (Строка 20), Разделение данных Не использовать. В Состав включите УчебныеНачисленияЗапросов и УчебныеВидыЗапросов. Общий реквизит не заменяйте одноимённым обычным реквизитом.

  9. Создайте документ УчебныйРасчетЗапросов: строковый номер 10, автонумерация выключена, проведение разрешено. Реквизиты ВидРасчета (ПланВидовРасчетаСсылка.УчебныеВидыЗапросов), Сотрудник и График (Строка 20), Результат (Число 15.2), Комментарий (Строка 100). Движения по УчебныеНачисленияЗапросов включены; обработчик из отдельного блока разместите в модуле объекта.

  10. Обновите только учебную базу, заполните собственный график дополнительным кодом. Сначала вручную создайте и проведите документ ОКЛ от 01.10.2026 12:00:00: вид Оклад, сотрудник Ученик, график Демо, результат 1000, комментарий Оклад за два дня.

  11. Затем создайте и проведите документ ПРМ от 02.10.2026 12:00:00: вид Премия, сотрудник Ученик, график Демо, результат 0, комментарий Учебная премия. Обработчик задаёт периоды действия и базы 01–02 октября включительно. Записей Отсутствие нет, поэтому фактический период равен исходному.

  12. Основной запрос вставляется в тело серверной команды учебной обработки. Он читает подготовленные записи, не вычисляет и не записывает зарплату. Изменение и повторное проведение ОКЛ могут зарегистрировать перерасчет зависимой премии; само наличие очереди не вычисляет деньги.

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Данные.Сотрудник, Данные.УчебныйИсточник, Данные.ДниБазовыйПериод,
| Данные.Комментарий, Данные.ПериодРегистрации, Данные.ДниПериодДействия,
| Данные.ДниПериодРегистрации, Данные.ДниФактическийПериодДействия, Данные.Результат,
| Данные.Активность, Данные.Сторно, Данные.БазовыйПериодКонец,
| Данные.БазовыйПериодНачало, Данные.ПериодДействияКонец, Данные.ВидРасчета,
| Данные.НомерСтроки, Данные.ПериодДействия, Данные.Регистратор,
| Данные.ПериодДействияНачало
|ИЗ РегистрРасчета.УчебныеНачисленияЗапросов.ДанныеГрафика(Сотрудник = &Сотрудник) КАК Данные";
Запрос.УстановитьПараметр("Сотрудник", "Ученик");
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
    Для Каждого Колонка Из Результат.Колонки Цикл
        Сообщить(Колонка.Имя + ": " + Строка(Выборка[Колонка.Имя]));
    КонецЦикла;
КонецЦикла;
Провести собственный учебный вид расчета

Документы → УчебныйРасчетЗапросов → Модуль объекта

Обработчик вызывается при ручном проведении своего документа.

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    Движения.УчебныеНачисленияЗапросов.Записывать = Истина;
    Запись = Движения.УчебныеНачисленияЗапросов.Добавить();
    Запись.ПериодРегистрации = Дата(2026, 10, 1);
    Запись.ВидРасчета = ВидРасчета;
    Запись.Активность = Истина;
    Запись.Сторно = Ложь;
    Запись.ПериодДействияНачало = Дата(2026, 10, 1);
    Запись.ПериодДействияКонец = КонецДня(Дата(2026, 10, 2));
    Запись.БазовыйПериодНачало = Дата(2026, 10, 1);
    Запись.БазовыйПериодКонец = КонецДня(Дата(2026, 10, 2));
    Запись.Сотрудник = Сотрудник;
    Запись.График = График;
    Запись.Результат = Результат;
    Запись.Комментарий = Комментарий;
    Запись.УчебныйИсточник = "Урок";
КонецПроцедуры
Заполнить только собственный график Демо

Тело отдельной серверной команды учебной обработки. Замещение ограничено графиком Демо.

Набор = РегистрыСведений.УчебныйГрафикЗапросов.СоздатьНаборЗаписей();
Набор.Отбор.График.Установить("Демо");
Для День = 1 По 31 Цикл
    Запись = Набор.Добавить();
    Запись.График = "Демо";
    Запись.ДатаДня = Дата(2026, 10, День);
    Запись.Дни = 1;
КонецЦикла;
Набор.Записать();
Сообщить("Учебный график октября: 31 день");

Разбор по шагам

  1. Подготовка создаёт реальные собственные виды, график и проведённые записи расчета.

  2. Сотрудник — собственное измерение, Результат — ресурс, Комментарий — реквизит. Обе проведённые записи имеют активность Истина, сторно Ложь и номер строки 1.Связь с графиком задана реальными метаданными, а Дни — ресурс непериодического графика.

  3. Выбранные поля действительно читаются: каждый результат выводит имя и значение колонки.

Как проверить результат

  1. У Оклад Результат = 1000, у Премия Результат = 0: никакой скрытый расчёт суммы не выполняется.

  2. ПериодРегистрации и ПериодДействия относятся к октябрю; ПериодДействияНачало = 01.10.2026, конец = 02.10.2026 23:59:59.

  3. ДниПериодДействия = 2, ДниФактическийПериодДействия = 2, ДниБазовыйПериод = 2, ДниПериодРегистрации = 31.

Ожидаемый результат

Получить дни собственного графика за разные периоды по подготовленной учебной схеме.

На что обратить внимание

  1. Набор в памяти не является таблицей запросов: записи должны быть сохранены собственным регистратором.

  2. Период регистрации, период действия и базовый период — разные понятия. Месячная периодичность не делает начало периода действия равным дате документа.

  3. База и данные графика являются исходными данными расчёта. Результат премии остаётся 0, пока прикладной код явно не вычислит и не запишет сумму.

  4. Общий УчебныйИсточник здесь не разделитель. Страницу общего реквизита таблицы базы, требующую разделитель НезависимоИСовместно, этот урок намеренно не покрывает.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.