1С-Предприятие 8.0. Практическое пособие разработчика

         

Иллюстрация механизмов вытеснения и зависимости от базы


Создадим новый объект конфигурации Отчет. Назовем его "Перерасчет". На закладке "Макеты" откроем конструктор выходной формы, и выберем следующие поля из виртуальной таблицы перерасчета "Начисления.Перерасчет":

На закладке "Отчет" сбросим флаг "Использовать построитель отчета" и нажмем "OK" – наш отчет готов.

Запустим 1С:Предприятие в режиме отладки, сформируем отчет "Перерасчет" и убедимся, что пока он не содержит никаких данных.

Создадим новый документ Начисление сотрудникам №2, в котором начислим премию за март Гусакову и Деловому:


[345]

Этим документом мы зафиксируем тот факт, что сотрудникам Гусакову и Деловому нужно начислить премию по итогам работы за март. Поскольку размер премии нам неизвестен (он будет рассчитываться по некоторому алгоритму), поля "Результат" мы оставляем пустыми. Нажмем "ОК".

Теперь снова откроем документ Начисление Сотрудникам №1 и изменим оклад Гусакова с 10 000 на 7 000. Нажмем "ОК". Сформируем отчет "Перерасчет":

Как видите, отчет теперь содержит какие-то данные. В самом деле, вид расчета "Премия" зависит у нас по базовому периоду от вида расчета "Оклад". Как только мы изменили существовавшие в регистре записи по виду расчета "Оклад" – платформа сразу же сформировала набор записей перерасчета, которые должны быть рассчитаны заново, т.к. изменилась их база.

Вы можете спросить: "почему в перерасчет попали записи как про Делового, так и про Гусакова, хотя оклад мы меняли только Гусакову"? Дело в том, что платформа не отслеживает конкретные изменения, которые пользователь внес в записи документа. Она отслеживает лишь факт изменения набора записей регистра расчета в результате проведения (перепроведения) документа. Поэтому в набор записей перерасчета она включает информацию о ВСЕХ записях регистра, значение ресурсов которых МОЖЕТ измениться в результате перепроведения документа, создавшего базовые записи регистра.




Перепроведем документ Начисления сотрудникам №2 (которым мы начисляли премию) и сформируем отчет "Перерасчет". Он снова не содержит никаких данных – система отметила тот факт, что MЫ "пересчитали" зависимые записи и очистила таблицу перерасчета. [346]

На этом примере мы с вами познакомились с тем, как работает механизм поддержки зависимости по базовому периоду у регистра расчета.

Теперь посмотрим, как работает механизм вытеснения по периоду действия. Для этого нам понадобится создать третий документ НачисленияСотрудникам №3:



Этим документом мы зафиксируем тот факт, что Гусаков не выходил на работу с 1 по 10 марта. Очевидно, что в этом случае потребуется пересчитать его оплату по окладу и, как следствие, начисленную премию.

Нажмем "ОК" и сформируем отчет "Перерасчет":



Как вы видите, в перерасчет попала запись о начислении оклада Гусакову. Это явилось результатом работы механизма вытеснения по [347] периоду действия, ведь вид расчета "Невыход" вытесняет у нас вид расчета "Оклад".

Обратите внимание, что в перерасчет попала и запись о начислении премии Гусакову. Если вы помните, при создании предопределенных видов расчета мы указали, что результат вида расчета премия будет зависеть от изменения результата вида расчета "Невыход". Эта зависимость косвенная, но поскольку явно указали такую зависимость платформа ее отследила.

Перепроведем документы Начисление сотрудникам №1 и №2 и убедимся, что таблица перерасчета очистилась. [348]


Содержание раздела