Ведущие виды расчета
1. Введение
Настройки большинства свойств планов видов расчета (ПВР) и видов расчета (ВР) в 1С:Предприятие 8.2 не представляют каких-либо сложностей. Книги М.Г.Радченко [9] вполне достаточно, чтобы в них разобраться. А вот ведущие виды расчета - это немного "мутная" тема. Информация о правилах заполнения списка ведущих ВР распределена по многим источникам, которые иногда противоречат друг другу. Если собрать все эти сведения вместе, становится понятным алгоритм, по которому для данного ВР нужно указывать ведущие ВР.
2. Варианты зависимости между видами расчетов
"Ведущие" - одна из закладок в окне настроек видов ВР. Она есть у каждого вида расчета, независимо от значений свойств ПВР. В качестве ведущих можно указывать ВР, принадлежащие любому ПВР конфигурации.
Наряду с ведущими, для ВР могут быть указаны базовые и вытесняющие ВР. Базовые - это ВР, обороты которых за определенный период являются исходными данными для расчета данного ВР. Например, ВР "Премия" рассчитывается на основании ВР "Оклад", то есть "Оклад" является базовым ВР для "Премии".
Вытесняющие - это ВР, которые влияют на фактический период действия и которые могут вытеснять данный ВР по периоду действия. Например, сотрудник за один и тот же день не может получать оклад и выплаты по больничному листу. ВР "Больничный" вытесняет ВР "Оклад".
Поскольку ВР связаны между собой, при изменении одних ВР может потребоваться перерасчет других ВР.
Как, правило, базовые и вытесняющие ВР однозначно определяются постановкой задачи. Указание списка ведущих ВР может вызвать некоторое затруднение.
3. Информация о ведущих видах расчета из различных источников
Документация 1С, как всегда, не балует нас подробной информацией и детальными инструкциями. В [1] о ведущих ВР сказано лишь, что "на закладке "Ведущие" указываются те виды расчета, которые определяют работу механизма перерасчетов соответствующего регистра расчета (т.е. того, которому назначен данный план видов расчета)".
В справке Конфигуратора приведено описание предопределенной табличной части ПВР ВедущиеВидыРасчета, но нет правил заполнения ведущих ВР.
В [3] содержится более подробная информация. Там указано, что ведущие виды расчета используются для перерасчета неактуальных записей в регистрах расчета. Необходимость указания ведущих видов расчета продемонстрирована на примере. Пусть ВР "А" является базовым для ВР "Б", а тот в свою очередь является базовым для ВР "В". Если механизм перерасчетов будет опираться только на базовые ВР, то при изменениях по ВР "А" выяснится необходимость перерасчета только для ВР "Б". И только после внесения изменений (перерасчета) по ВР "Б" выяснится необходимость перерасчета для "В". Правильное использование ведущих ВР позволяет избежать подобных многоэтапных перерасчетов. В данном примере для ВР "В" нужно указать ведущие ВР "А" и "В".
В [4] дано определение, которое совсем не способствуют пониманию сути вопроса: "Ведущий вид расчета - вид расчета, результат которого косвенно влияет на данный вид расчета". Получается, что ВР, который прямо влияет на данный вид расчета, не должен быть включен в список ведущих ВР. Это не правильно. И дальше: "Если результат ведущего вида расчета изменился, данный вид расчета надо рассчитать заново." Нас интересует только результат или любая характеристика ВР, которая может повлиять на данный ВР?
В [5] указано следующее: "В табличной части 'Ведущие виды расчета' указываются виды расчета, при вводе (изменении) которых результат текущего вида расчета должен быть пересчитан (например 'Оклад по дням' является ведущим видом расчета для видов расчета 'Доплата за вредность' и 'Премия процентом')".
В [9] дано такое определение: "Ведущие - изменение их результатов должно приводить к необходимости пересчета этого вида расчета". И далее: "Здравый смысл подсказывает, что все базовые виды расчета должны быть включены и в категорию ведущих. Кроме того, ведущие виды расчета могут содержать и некоторые другие виды, косвенно влияющие на данный вид расчета."
Если "Невыход" вытесняет "Оклад" по периоду действия, а "Премия" зависит по базовому периоду от "Оклада", то в качестве ведущих для "Премии" нужно указывать следующие ВР: "Оклад", "Невыход" [9]. То есть, при формировании списка ведущих ВР нужно учитывать транзитивные (или каскадные) зависимости.
Этот пример также подробно рассмотрен в [8].
Определение из книги [5] почти ничего не добавляет к материалам предыдущих источников: "Ведущими называют виды расчетов, при вводе или изменении которых необходимо перерассчитать результат уже существующих расчетов". Но в этой книге приведен хороший пример. "Премия" зависит по базе от "Доплаты за разъезды", которая в свою очередь зависит по базе от "Командировки". Ведущими ВР для "Премии" являются "Доплата за разъезды" и "Командировка". Это транзитивная (или каскадная) зависимость по базе.
В [6] тема ведущих расчетов не рассмотрена подробно, дается отсылка к [3].
Наиболее полный список причин, по которым ВР надо включать в список ведущих ВР, приведен в [7]. Предназначение ведущих ВР - "отразить влияние видов расчета друг на друга. Влияние может возникать:
- при настройке базы,
- при определении вытеснения,
- от каскадной зависимости видов расчета,
- от специфики решаемой задачи."
3. Выводы
Таким образом, в списке ведущих ВР указываются все ВР, при вводе, удалении или изменении которых нужно выполнять пересчет данного ВР, а именно:
- базовые ВР для данного ВР,
- вся цепочка ВР, от которых базовые ВР зависят прямо или транзитивно (каскадно), это может быть зависимость по базе или вытесняющая зависимость:
- ВР, прямо вытесняющие базовые ВР,
- ВР, транзитивно (каскадно) вытесняющие базовые ВР,
- ВР, которые являются базовыми для базовых или вытесняющих ВР.
В большинстве случаев работает упрощенное правило, сформулированное в [9] в виде примера: ведущие - это базовые ВР и ВР, вытесняющие базовые.
Источники:
1. 1С:Предприятие 8.2. Руководство разработчика. - М.: Фирма "1С".
2. Габец А.П., Козырев Д.В., Кухлевский Д.С., Хрусталева Е.Ю. Реализация прикладных задач в системе 1С:Предприятие 8.2.
3. ИТС. Документ "Ведущие виды расчета".
4. ИТС "Глоссарий разработчика".
5. Материалы курса "Конфигурирование в системе 1С:Предприятие 8. Решение расчетных задач". - 1С-Учебный центр №3.
6. Материалы курса "Конфигурирование платформы 1С:Предприятие 8.2". - 1С-Учебный центр №1.
7. Материалы курса "Профессиональное программирование в 1С:Предприятии 8.x: Базовый курс." - www.Spec8.ru.
8. Материалы форума devtrainingforum.v8.1c.ru.
9. Радченко М.Г., Хрусталева Е.Ю. 1С:Предприятие 8.2. Практическое пособие разработчика.