ВидРасчета

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

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

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

ВидРасчета (CalculationType)

ВидРасчета (CalculationType)
Тип: ПланВидовРасчетаСсылка.<Имя плана видов расчета>.
Ссылка на вид расчета учетной записи.

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

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

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

Сотрудник — собственное измерение, Результат — ресурс, Комментарий — реквизит. Обе проведённые записи имеют активность Истина, сторно Ложь и номер строки 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С» и не аффилирован с ней.