ВытесняющиеВидыРасчета

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

Синтаксис и применение ВытесняющиеВидыРасчета в платформе 1С:Предприятие. Описание и примеры кода.

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

ВытесняющиеВидыРасчета (DisplacingCalculationTypes)

ВытесняющиеВидыРасчета (DisplacingCalculationTypes)
Тип: РезультатЗапроса.
Вложенная таблица вытесняющих видов расчета.
Представляет результат запроса к предопределенной табличной части плана видов расчета.
Результат состоит из двух колонок - НомерСтроки (LineNumber) и ВидРасчета (CalculationKind).

Примечание:
Только для планов видов расчета с признаком "Использует период действия".
Методическая информация

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

Прочитать вложенную таблицу ВытесняющиеВидыРасчета собственного плана

Поле ВытесняющиеВидыРасчета имеет тип РезультатЗапроса. Для его строк создаётся отдельная выборка; вложенная таблица не подменяется строкой или произвольным массивом.

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

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

Подготовка

  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. Поле ВытесняющиеВидыРасчета имеет тип РезультатЗапроса. Для его строк создаётся отдельная выборка; вложенная таблица не подменяется строкой или произвольным массивом.

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

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

  1. У Оклад одна строка с Отсутствие.

  2. У остальных видов вложенный результат пуст. Пустой цикл не создаёт фиктивную строку.

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

Прочитать вложенную таблицу ВытесняющиеВидыРасчета собственного плана по подготовленной учебной схеме.

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

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

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

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

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

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

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

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

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

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