Условие

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

Синтаксис и применение Условие в платформе 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.

  2. Собственный Результат премии остаётся 0. Это получение базы, а не начисление премии 100.

  3. Сотрудник из основного регистра сопоставляется с тем же сотрудником базы, а не со всеми начислениями месяца.

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

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

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

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

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

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

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

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

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

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

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

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