<<

стр. 6
(всего 11)

СОДЕРЖАНИЕ

>>

отработанных сотрудником. Поэтому для обозначения каждой такой
части мы будем использовать термин вид расчета.
Алгоритм каждого вида расчета опирается в общем случае на две
категории параметров: период, за который нужно получить конечные
данные и набор некоторых исходных данных, используемых при
расчете.
Как правило, в реальной жизни различные виды расчета
существуют не сами по себе, а оказывают некоторое влияние на другие
виды расчета. Исходя из того, что вид расчета опирается на две
различные категории параметров, такое влияние тоже имеет
двойственный характер. Во-вторых, это влияние может быть не на исходные данные, а на
сам период, за который производится расчет. В качестве примера
Во-первых, это может быть влияние на исходные данные,
можно привести расчет оплаты по окладу и невыход на работу.
используемые при расчете. В качестве примера можно привести
Предположим, что мы начислили сотруднику оплату по окладу за март
начисление премии в виде процента от оплаты по окладу. При
месяц. В этом случае период действия такого расчета будет с
изменении оплаты по окладу размер премии тоже должен быть
01.03.2004 по 31.03.2004. После этого мы получили информацию от
пересчитан, исходя из новой суммы начисленного оклада. Другими
руководителя отдела, что, оказывается, сотрудник отсутствовал на
словами, сумма начисленного оклада является базой для расчета
работе с 1 по 10 марта по неизвестной причине. В этом случае нам
премии. Причем, поскольку оклад рассчитывается за некоторый
нужно будет произвести расчет «Невыход» (в котором можно
период, то при расчете премии нам интересно знать не значение
рассчитать какие-то удержания с сотрудника). Но кроме этого, нам


319
318
План видов расчета, регистр расчета
Использование основных объектов конфигурации


Базовый период - это период, в котором мы анализируем
нужно будет пересчитать и оклад сотрудника, исходя из того, ЧТо
результаты других расчетов, которые влияют на наш по базовому
фактический период действия расчета «Оклад» стал теперь с
периоду.
11.03.2004 по 31.03.2004. Такое влияние мы будем называть
Как видите, взаимное влияние между видами расчетов может быть
вытеснением no периоду действия. В результате, если за полный
довольно разнообразным и, что самое сложное, это влияние может
месяц работы сотруднику должно было быть начислено 9300 рублей
быть многоуровневым. To есть один вид расчета может влиять на
то теперь, за фактический период работы начисление составит 6300
другой, который, в свою очередь, влияет на третий и т.д.
рублей:
Очевидно, что в этой ситуации требуется некий универсальный
механизм, позволяющий описать каждый из видов расчетов (его
алгоритм, влияние на другие виды расчетов, зависимость от других
видов расчетов), обеспечить хранение данных, полученных в
результате этих расчетов и контроль необходимости перерасчета
результатов зависимых расчетов в случае изменения результатов
«первичных» расчетов.
В системе 1С:Предприятие такой универсальный механизм
реализован при помощи планов видов расчета и регистров расчета. И
первым объектом конфигурации, с которым мы начнем знакомиться в
этой главе, будет План видов расчета.




Таким образом, исходя из двух видов взаимного влияния расчетов,
можно сказать, что в общем случае с каждым видом расчета будет
связано три периода: период действия, фактический период и базовый
период.
Период действия является «запрашиваемым» периодом, т.е.
указывая период действия, мы говорим что «мы хотели бы, чтобы
результат действовал в этом периоде».
Фактический период - это то, что получилось из периода действия
после анализа всех периодов действия расчетов, которые вытесняют
наш по периоду действия.




321
320
Использование основных объектов конфигурации План видов расчета, регистр расчета

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


О
бъект конфигурации План видов расчета является
• Базовые - это те виды расчета, результаты которых должны
прикладным объектом и предназначен для описания
быть использованы при перерасчете этого вида расчета.
структуры хранения информации о возможных видах
• Вытесняющие - это те виды расчета, которые вытесняют этот
расчетов. На основе объекта конфигурации План видов расчета
вид расчета по периоду действия.
платформа создает в базе данных информационную структуру5 в которой
• Ведущие - это те виды расчета, изменение результатов
может храниться информация о том, какие существуют виды расчета, и
которых должно приводить к необходимости перерасчета
каковы взаимосвязи между ними.
этого вида расчета.
Отличительной особенностью плана видов расчета является то, что
пользователь в процессе работы может добавлять в план видов расчета Здравый смысл подсказывает, что все базовые виды расчета
новые виды расчета. Такая возможность делает механизм должны быть включены и в категорию ведущих. Кроме того, ведущие
периодических расчетов более гибким и позволяет пользователю виды расчета могут содержать и некоторые другие виды расчета,
создавать собственные виды расчета, помимо тех, которые заданы косвенно влияющие на данный вид расчета. Например, мы имеем три
разработчиком как предопределенные. вида расчета: невыход, оклад и премия. Невыход вытесняет оклад по
периоду действия, а премия зависит от оклада по базовому периоду.
Объект конфигурации План видов расчета имеет свойство
«Использует период действия». С помощью этого свойства В этом случае для премии следует указать базовым видом расчета
определяется, будут ли в этом плане находиться виды расчета, которые оклад, а ведущими - оклад и невыход, поскольку изменение результата
могут быть вытеснены по периоду действия. Если это свойство расчета невыхода приведет к изменению результата оклада, что в свою
очередь должно привести к изменению результата премии.
установлено, то разработчик получает возможность указать для
каждого вида расчета те виды расчета, которые вытесняют его по
периоду действия.
Следующим важным свойством объекта конфигурации План видов
расчета является свойство «Зависимость от базы». Оно определяет,
будут ли в этом плане находиться зависимые по базовому периоду
виды расчета. Если это свойство установлено, появляется возможность
указать, в каком плане видов расчета будут находиться базовые виды
расчета и, кроме этого указать, как будет определяться эта
зависимость.
Существует возможность указать один из двух видов зависимости
от базы: «Зависимость по периоду действия» и «Зависимость по
периоду регистрации». Оба вида этой зависимости подробно
объяснены в разделе «Объект конфигурации Регистр расчета» на
странице 327.
Еще одной важной особенностью плана видов расчета является
возможность создания предопределенных видов расчета и описания их
взаимного влияния. При этом в общем случае, разработчик имеет



322 323
План видов расчета, регистр расчета
Использование основных объектов конфигурации


Создание плана видов расчета
˜ Узнай больше!
ОсновныеНачисления
О структуре объектов встроенного языка, предназначенных ^



П
работы с планом видов расчета можно прочитать в главе «Планы
риступим теперь к созданию плана видов расчета
видов расчета» на странице 590.
«ОсновныеНачисления», который будет использоваться в
нашей конфигурации.
Откроем конфигуратор и создадим новый
объект конфигурации План видов расчета. Зададим его имя -
«ОсновныеНачисления».
Сразу перейдем на закладку «Расчет» и укажем, что он будет
использовать период действия и зависеть от базы по периоду действия.
В качестве базового плана видов расчета укажем его самого,
поскольку все наши виды расчетов будут храниться в единственном
плане видов расчета.


Определим использование периода действия, зависимость от базы и
базовые планы видов расчета...




Перейдем на закладку «Прочее» и зададим предопределенные виды
расчета. Как и в случае с бухгалтерией, расчеты в нашем OOO «На все


325
324
T План видов расчета, регистр расчета
Использование основных объектов конфигурации


руки мастер» будут «скромные», поэтому мы создадим всего три
Объект конфигурации Регистр расчета
элемента:


О
бъект конфигурации Регистр расчета является прикладным
• Невыход - с именем и наименованием «Невыход» и кодом объектом и предназначен для описания структуры
«Невыход», накопления данных, являющихся результатами расчетов. На
• Оклад - с именем, кодом и наименованием «Оклад» и основе объекта конфигурации Регистр расчета платформа создает
вытесняющим его видом расчета «Невыход», в базе данных информационную структуру, в которой будут
накапливаться данные, формируемые различными объектами базы
• Премия - с именем, кодом и наименованием «Премия», с
данных.
базовым видом расчета «Оклад» и ведущими видами расчета
«Невыход» и «Оклад». Отличительной особенностью регистра расчета является то, что он
не предназначен для интерактивного редактирования пользователем.
Разработчик может, при необходимости, предоставить пользователю
возможность редактировать регистр расчета, но предназначение
регистра расчета заключается в том, чтобы его модификация
производилась на основе алгоритмов работы объектов базы данных, а
не в результате непосредственных действий пользователя.
Как и другие регистры, регистр расчета имеет ресурсы, в которых
хранит числовые данные, имеет измерения, в разрезе которых можно
получать значения ресурсов регистра, имеет реквизиты, которые
характеризуют каждую запись регистра расчета.
Теперь мы перейдем к рассмотрению второго объекта,
Отличительными же особенностями регистра расчета является его
используемого при реализации механизмов сложных периодических
периодичность, возможность использования механизмов вытеснения
расчетов - регистра расчета.
по периоду действия и зависимости по базовому периоду, и связь с
планом видов расчета. Рассмотрим все эти особенности по порядку.
Периодичность регистра расчета может быть определена одним из
следующих значений:

• День,
• Месяц,
• Квартал,
• Год.
Периодичность регистра расчета определяет промежуток времени,
к которому будет относиться каждая запись регистра. Если указана
периодичность «День», то каждая запись регистра будет относиться к
какому либо дню, если периодичность «Месяц» - то к какому либо
месяцу и т.д. Для указания факта принадлежности записи к какому
либо периоду, регистр имеет служебный реквизит



327
326
Использование основных объектов конфигурации План видов расчета, регистр расчета


«ПериодРегистрации» типа Дата. При записи данных в регистр Если в этой же ситуации периодичность регистра будет год,
платформа всегда приводит значение этого реквизита к началу того сохраненное значение периода регистрации будет 01.01.2004:
периода, в который он попадает.
Например, если в регистр расчета с периодичностью месяц
записать данные, где «ПериодРегистрации» задан как 08.04.2004, то
регистр сохранит эти данные со значением поля «ПериодРегистрации»
01.04.2004:

Документ




328 329
т План видов расчета, регистр расчета
Использование основных объектов конфигурации

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


Запись расчета Невыход вытесняет запись расчета Оклад по
периоду действия

Период действия 31 день




Другим механизмом, который поддерживает регистр расчета,
является зависимость записей по базовому периоду. Этот механизм
позволяет основывать расчет зависимых (вторичных) записей регистра
на данных, полученных в результате расчета первичных записей.
Регистр расчета может поддерживать два вида зависимости от базы:
зависимость по периоду действия и зависимость по периоду
регистрации.
Зависимость по периоду действия означает, что при анализе
базовых записей, будут выбираться те записи, для которых найдено
пересечение их фактического периода действия и указанного базового
периода.

Если рассмотреть структуру записей таблиц регистра расчета, то
после внесения записи о начислении по окладу, таблицы регистра
будут выглядеть следующим образом:

Таблица фактического периода
Таблица регистра расчета действия




331
330
План видов расчета, регистр расчета
Использование основных объектов конфигурации


перекрывающийся, с указанным базовым периодом, участок. При этом
Например, в начале апреля производится расчет зарплаты за март.
будут использованы данные графика, связанного с записью.
Премия за март должна быть начислена исходя из оплаты по окладу за
Зависимость по периоду регистрации означает, что при анализе
март. В этом случае, как правило, используется зависимость по
базовых записей, будут выбираться те записи, которые попадают в
периоду действия:
указанный базовый период значением своего поля «Период
регистрации».
Таблица регистра расчета
В качестве примера можно привести расчет штрафов при
начислении зарплаты за март. В качестве базы для расчета суммы
штрафов должны браться записи о прогулах, зарегистрированные в
марте месяце (это могут быть как записи о мартовских прогулах, так и
записи о прогулах в феврале). В этом случае, как правило,
используется зависимость по периоду регистрации:


Таблица регистра расчета
(периодичность регистра - «Месяц»)




Заключительной важной особенностью регистра расчета является
его связь с планом видов расчета. Именно на основе этой связи
работают механизмы вытеснения по периоду действия и зависимости
по базовому периоду, поскольку в плане видов расчета описано
Следует сделать два замечания к приведенному рисунку. взаимное влияние видов расчета друг на друга.
Поля «Начало базового периода» и «Конец базового периода»
У регистра расчета могут существовать подчиненные объекты
имеют смысл только для записей тех видов расчета, для которых Перерасчет. Они предназначены для регистрации фактов появления в
определена зависимость по базовому периоду (в нашем случае для регистре записей, влияющих на результат расчета уже существующих
записи расчета премии). записей регистра. Объект конфигурации Перерасчет может иметь
Значение базы, которая будет получена от конкретной влияюшеи несколько измерений, каждое из которых может устанавливать связь
записи, в общем случае не равно результату, который содержит эта между измерениями данного регистра расчета и влияющих регистров
запись. База будет рассчитана пропорционально тому, какую часть от расчета. В частном случае это может быть один и тот же регистр.
фактического интервала влияющей записи составляет

333
332
План видов расчета, регистр расчета
Использование основныхобъектов конфигурации


В информационной структуре, созданной в базе данных на основе
Создание регистра расчета Начисления
объекта конфигурации Перерасчет, платформа хранит информацию о


П
том, какие записи регистра подлежат перерасчету. Таблицы режде, чем мы начнем создавать объект конфигурации
перерасчета заполняются автоматически как на основании записей Регистр расчета «Начисления», нам потребуется создать два
регистров расчета, затронутых ведущими видами расчета, так и на дополнительных объекта конфигурации - регистр сведений
основании записей регистра расчета, для которых изменился «ГрафикиРаботы» и справочник «ВидыГрафиковРаботы».
фактический период действия. Исходя из этой информации Справочник понадобится нам для того, чтобы хранить информацию о
разработчик может принимать решение о необходимости перерасчета
том, какие графики работы существуют в OOO «На все руки мастер», а
записей регистра.
регистр сведений - для указания того, какие дни в месяце являются
Последним замечанием, которое следует сделать, говоря о регистре рабочими, поскольку сумма оплаты по окладу будет рассчитываться
расчета, является возможность установки связи регистра расчета с исходя из того, сколько дней отработал сотрудник в расчетном месяце.
графиком времени. Такой график времени должен представлять собой Откроем конфигуратор и создадим новый объект конфигурации
регистр сведений (непериодический, с обязательным измерением типа Справочник с именем «ВидыГрафиковРаботы».
Дата и ресурсом типа Число), в котором содержится временная схема
В этом справочнике у нас будет два предопределенных графика
исходных данных, участвующих в расчетах. Измерениями этого
работы - «ГрафикАдминистрации» и «ГрафикМастеров».
графика могут быть, например, график работы (ссылка на справочник)
и дата, а ресурсом - количество рабочих часов в этой дате. В этом
случае можно будет связать запись регистра расчета с каким-либо
конкретным графиком работы (указав в качестве реквизита записи
ссылку на справочник график работы) и в дальнейшем, средствами
встроенного языка получать информацию о количестве рабочих часов
в периоде действия, фактическом периоде действия или периоде
регистрации этой записи.

"" Узнай больше!
После этого создадим объект конфигурации Регистр сведений с
О структуре объектов встроенного языка, предназначенных для
именем «ГрафикиРаботы». Этот регистр будет иметь два измерения:
работы с регистром расчета, можно прочитать в главе «Регистры
расчета» на странице 606.
• «ГрафикРаботы», тип
СправочникСсылка.ВидыГрафиковРаботы,
Щ
• «Дата», тип Дата.
Затем создадим единственный ресурс регистра - «Значение», с
типом Число, длиной 1.
Запустим 1С:Предприятие в режиме отладки и заполним регистр
данными о рабочих днях марта графика мастеров. Чтобы проще
выполнить эту довольно однообразную работу, можете
воспользоваться возможностью добавления элементов в справочник




334 335
Использование основных объектов конфигурации План видов расчета, регистр расчета


копированием (Действия | Скопировать). Не забудьте, что 8 марта Укажем, что регистр расчета будет использовать базовый период, и
выходной день, и у вас должно получиться 22 рабочих дня в марте. периодичность регистра будет «Месяц».




Затем перейдем на закладку «Данные» и создадим:

• измерение «Сотрудник»,
тип СправочникСсылка.Сотрудники, базовое,
• ресурс «Результат», тип Число, длина 15, точность 2,
• реквизит «ГрафикРаботы»,
тип СправочникСсылка.ВидыГрафиковРаботы, связь с
Теперь все готово для создания регистра расчета.
графиком по измерению «ГрафикРаботы»,
Создадим новый объект конфигурации Регистр расчета с именем • реквизит «ИсходныеДанные», тип Число, длина 15, точность
«Начисления». В качестве плана видов расчета, используемого 2.
регистром, выберем план видов расчетов «ОсновныеНачисления».
Реквизит «ГрафикРаботы» мы будем использовать для того, чтобы
Установим, что регистр будет использовать период действия, график
связать запись регистра с используемым графиком работы, а реквизит
будет задаваться в регистре сведений «ГрафикиРаботы», значение
графика будет находиться в ресурсе «Значение», а дата графика - в «ИсходныеДанные» - чтобы хранить в нем данные, которые могут
понадобиться при расчете или перерасчете (в нашем примере это будет
измерении «Дата».
расчет оклада).



336 337
План видов расчета, регистр расчета
Использование основных объектов конфигурации


Теперь перейдем на закладку «Перерасчеты». Создадим объект
Что нового мы узнали
конфигурации Перерасчет, который так и назовем - «Перерасчет», у
него будет единственное измерение - «Сотрудник», для которого в
установке связи мы укажем измерение регистра «Сотрудник» и в
качестве данных ведущих регистров выберем то же самое измерение
«Сотрудник» регистра расчета «Начисления». - что такое сложные периодические расчеты
На этом создание объекта конфигурации Регистр расчета - что такое вид расчета, база
«Начисления» завершено.
- какая разница между базовым периодом, фактическим
периодом и периодом действия - что такое зависимость
по базовому периоду - что такое вытеснение по периоду
действия - для чего предназначен объект конфигурации
План видов
расчета
- каковы основные свойства плана видов расчета - какая
разница между базовыми, вытесняющими и
ведущими видами расчетов - как создать план
видов расчета - что такое объект конфигурации Регистр
расчета - каковы отличительные особенности регистра
расчета - что такое график времени - что такое
перерасчет
- по какому принципу формируются записи перерасчета -
как создать регистр расчета.




339
338
Использование регистра расчета



Создание документа
Глава 10. Использование регистра
НачисленияСотрудникам
расчета

Д ля того, чтобы иметь возможность регистрировать в базе
Теперь у нас все готово для того, чтобы начать разработку системы
данных начисления производимые сотрудникам OOO «На все
расчета заработной платы OOO «На все руки мастер». В этой главе мы
руки мастер», нам понадобится специальный документ.
создадим документ, с помощью которого будут выполняться
Откроем конфигуратор и создадим новый документ. Назовем
различные виды начислений, посмотрим, как и когда платформа
его «НачисленияСотрудникам».
формирует записи перерасчета, увидим, как работают механизмы
вытеснения по периоду действия и зависимости по базовому периоду. Этот документ будет иметь табличную часть «Начисления»,
содержащую следующие реквизиты:
Кроме этого мы создадим отчет, показывающий начисления
сотрудникам OOO «На все руки мастер» и сделаем так, чтобы данные
• «Сотрудник», тип СправочникСсылка.Сотрудники,
расчетов можно было поддерживались в актуальном состоянии.
• «ГрафикРаботы»,
В заключение мы познакомимся с новым элементом управления -
типСправочникСсылка.ВидыГрафиковРаботы,
Диаграмма Ганта, - и с его помощью наглядно проиллюстрируем
• «ДатаНачала», тип Дата,
работу некоторых механизмов расчета.
• «ДатаОкончания», тип Дата,
• «ВидРасчета»,
тип ПланВидовРасчетаСсылка.ОсновныеНачисления,
• «Результат», Число, длина 15, точность 2.
Реквизиты «ДатаНачала» и «ДатаОкончания» понадобятся нам для
того, чтобы задавать период, в котором должна действовать запись
расчета.
На закладке «Движения» запретим оперативное проведение
документа, отметим, что документ будет создавать движения по
регистру расчета «Начисления» и запустим конструктор движений.




341
340
Использование основных объектов конфигурации Использование регистра расчета


В окне конструктора выберем табличную часть «Начисления» Движение.Сторно = Ложь; Движение.ПериодРегистрации = Дата;
Движение.ВидРасчета = ТекСтрокаНачисления.ВидРасчета;
нажмем «ЗаполнитьВыражения». Для реквизитов
Движение.ПериодДействияНачало = ТекСтрокаНачисления.ДатаНачала;
«ПериодДействияКонец» и «БазовыйПериодКонец» укажем Движение.ПериодДействияКонец =
выражение «КонецДня(ТекСтрокаНачисления.ДатаОкончания)» КонецДня(ТекСтрокаНачисления.ДатаОкончания);
Реквизиту «ИсходныеДанные» поставим в соответствие реквизит Движение.БазовыйПериодНачало = ТекСтрокаНачисления.ДатаНачала;
Движение.БазовыйПериодКонец =
табличной части «Результат», а для реквизита «Результат» наоборот
КонеиДня(ТекСтрокаНачисления.ДатаОкончания);
удалим выражение, присвоенное ему конструктором: Движение.Сотрудник = ТекСтрокаНачисления.Сотрудник; Движение.ГрафикРаботы =
ТекСтрокаНачисления.ГрафикРаботы; Движение.йсходныеДанные =
ТекСтрокаНачисления.Результат; КонецЦтота;
// записываем движения регистров
Движения.Начисления.Записать(); //}
}_КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры


Запустим 1С:Предприятие в режиме отладки и посмотрим, как
работает наш документ.
Начислим оклад за март всем сотрудникам OOO «На все руки
мастер», как показано на рисунке:




Нажмем «ОК» и посмотрим текст обработчика, созданный
конструктором:

Процедура ОбработкаПроведения(Отказ. Режим)
//{{_KOHCTPyKTOP_ДВИЖЕНИЙ_PЕГИСТРОВ //
Данный фрагмент построен конструктором. // При
повторном использовании конструктора, // внесенные
вручную изменения будут утеряны!!! Для Каждого
ТекСтрокаНачисления Из Начисления Цикл
// регистр Начисления
Движение = Движения.Начисления.Добавить();



342 343
Использование регистра расчета
Использование основных объектов конфигурации


Проведем документ и посмотрим, какие движения он сформировал
Иллюстрация механизмов вытеснения и
в регистре «Начисления»:




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




На закладке «Отчет» сбросим флаг «Использовать построитель
Обратите внимание на то, что платформа привела период отчета» и нажмем «OK» - наш отчет готов.
регистрации каждой записи к началу периода регистра расчета (в
Запустим 1С:Предприятие в режиме отладки, сформируем отчет
обработчике проведения мы указывали значение даты документа - «Перерасчет» и убедимся, что пока он не содержит никаких данных.
08.04.2004). Кроме этого заметьте, что с каждой записью мы
Создадим новый документ Начисление сотрудникам №2, в котором
сохранили в реквизите «ИсходныеДанные» размер оклада сотрудника,
начислим премию за март Гусакову и Деловому:
введенный в документе, чтобы в дальнейшем рассчитать сумму
оплаты по окладу.
Для дальнейшего изучения работы регистра расчета нам
понадобится служебный отчет, с помощью которого мы сможем
посмотреть содержимое записей перерасчета.




345
344
Использование основных объектов конфигурации Использование регистра расчета


На этом примере мы с вами познакомились с тем, как работает
Этим документом мы зафиксируем тот факт, что сотрудникам
механизм поддержки зависимости по базовому периоду у регистра
Гусакову и Деловому нужно начислить премию по итогам работы за
расчета.
март. Поскольку размер премии нам неизвестен (он буде т
рассчитываться по некоторому алгоритму), поля «Результат» мц Теперь посмотрим, как работает механизм вытеснения по периоду
оставляем пустыми. Нажмем «ОК». действия. Для этого нам понадобится создать третий документ
НачисленияСотрудникам №3:
Теперь снова откроем документ Начисление Сотрудникам №i и
изменим оклад Гусакова с 10 000 на 7 000. Нажмем «ОК»
Сформируем отчет «Перерасчет»:




Этим документом мы зафиксируем тот факт, что Гусаков не
выходил на работу с 1 по 10 марта. Очевидно, что в этом случае
Как видите, отчет теперь содержит какие-то данные. В самом деле,
потребуется пересчитать его оплату по окладу и, как следствие,
вид расчета «Премия» зависит у нас по базовому периоду от вида
начисленную премию.
расчета «Оклад». Как только мы изменили существовавшие в регистре
Нажмем «ОК» и сформируем отчет «Перерасчет»:
записи по виду расчета «Оклад» - платформа сразу же сформировала
набор записей перерасчета, которые должны быть рассчитаны заново,
т.к. изменилась их база.
Вы можете спросить: «почему в перерасчет попали записи как про
Делового, так и про Гусакова, хотя оклад мы меняли только
Гусакову»? Дело в том, что платформа не отслеживает конкретные
изменения, которые пользователь внес в записи документа. Она
отслеживает лишь факт изменения набора записей регистра расчета в
результате проведения (перепроведения) документа. Поэтому в набор
записей перерасчета она включает информацию о ВСЕХ записях
регистра, значение ресурсов которых МОЖЕТ измениться в результате
перепроведения документа, создавшего базовые записи регистра.
Перепроведем документ Начисления сотрудникам №2 (которым мЫ
Как вы видите, в перерасчет попала запись о начислении оклада
начисляли премию) и сформируем отчет «Перерасчет». Он снова не
Усакову. Это явилось результатом работы механизма вытеснения по
содержит никаких данных - система отметила тот факт, что M&
«пересчитали» зависимые записи и очистила таблицу перерасчета.


346 347
Использование регистра расчета
Использование основных объектов конфигурации


периоду действия, ведь вид расчета «Невыход» вытесняет у нас вил
Создание процедуры расчета записей
расчета «Оклад».
регистра Начисления
Обратите внимание, что в перерасчет попала и запись о начислении

Д о сих пор мы с вами просто заносили в регистр расчета
премии Гусакову. Если вы помните, при создании предопределенных
«Начисления» записи о том, что необходимо выполнить какой-
видов расчета мы указали, что результат вида расчета премия будет
либо вид расчета. Но каким именно образом получать эти
зависеть от изменения результата вида расчета «Невыход». Эта
результаты мы не говорили. Теперь настало время описать
зависимость косвенная, но поскольку явно указали такую зависимость
алгоритмы формирования различных видов расчетов.
платформа ее отследила.
Поскольку эти алгоритмы нам понадобится использовать не только
Перепроведем документы Начисление сотрудникам №1 и №2 и
в документе «Начисление сотрудникам», удобнее всего будет
убедимся, что таблица перерасчета очистилась.
разместить их в отдельном общем модуле.
Откроем в конфигураторе текст обработчика проведения документа
«НачислениеСотрудникам» и добавим в него вызов процедуры из
общего модуля:

Процедура ОбработкаПроведения(Отказ, Режим)
//{{_КОНСТ?УКТОР ДВИЖЕНИЙ_РЕГИСТРОВ //
Данный фрагмент построен конструктором. // При
повторном использовании конструктора, // внесенные
вручную изменения будут утеряны!!! Для Каждого
ТекСтрокаНачисления Из Начисления Цикл
// регистр Начисления
Движение = Движения.Начисления.Добавить();
Движение.Сторно = Ложь;
Движение.ПериодРегистрации = Дата;
Движение.ВидРасчета = ТекСтрокаНачисления.ВидРасчета;
Движение.ПериодДействияНачало = ТекСтрокаНачисления.ДатаНачала;
Движение.ПериодДействияКонец =
КонецДня(ТекСтрокаНачисления.ДатаОкончания);
Движение.БазовыйПериодНачало = ТекСтрокаНачисления.ДатаНачала;
Движение.БазовыйПериодКонец =
КонецДня(ТекСтрокаНачисления.ДатаОкончания);
Движение.Сотрудник = ТекСтрокаНачисления.Сотрудник;
Движение.ГрафикРаботы = ТекетрокаНачисления.ГрафикРаботы;
Движение.ИсходныеДанные = ТекСтрокаНачисления.Результат;
КонецЦикла;
// записываем движения регистров
Движения.Начисления.Записать();

//получим список всех сотрудников, содержащихся в документе
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗЛИЧНЫЕ
__ I НачисленияСотрудникамНачисления.Сотрудник___________________________



349
348
Использование регистра расчета
Использование основных объектов конфигурации

Теперь создадим в ветке «Общие» новый общий модуль
|ИЗ
«ПроведениеРасчетов». Добавим в него заготовку процедуры
| Документ.НачисленияСотрудникам.Начисления
«РасчитатьНачисления»:
| КАК НачисленияСотрудникамНачисления
|
|ГДЕ
ПроцедураРасчитатьНачисления(НаборЗаписейРегистра, ТребуемыйВидРасчета,
| НачисленияСотрудникамНачисления.Ссылка = &ТекущийДокумент");
СписокСотрудников) Экспорт //Рассчитать первичные
записи Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад
Запрос.УстановитьПараметр("ТекущийДокумент",Ссылка);
тогда
//сформируем список сотрудников ТаблЗнач =
//Рассчитать вторичные записи
Запрос.ВыполнитьО.Выгрузить();
иначеЕсли ТребуемыйВидРасчета =
МассивСотрудников = ТаблЗнач.ВыгрузитьКолонкуО'Сотрудник");
ПланыВидовРасчета.ОсновныеНачисления.Премия тогда
СписокСотрудииков = Новый СписокЗначений;
КонецЕсяи; КонецПроцедуры
СписокСотрудников.ЗагрузитьЗначения(МассивСотрудников);

РасчитатьНачисления(Двюкения.Начисления,
Алгоритм расчета начислений будет различным при расчете
ПлапыВидовРасчета.ОсновныеНачисления.Оклад,
первичных и вторичных записей, и каждая из его частей будет
СписокСотрудников);
находиться в своей ветке условия Если...
Движения.Начисления.Записать(,Истнна);
При расчете первичных записей нам понадобятся данные графика
РасчитатьНачиеления(Движении.Начисления,
из регистра расчета, поэтому добавим в первую ветку условия запрос
ПланыВидовРасчета.ОсновныеНачисления.Премия,
по виртуальной таблице регистра расчета
СписокСотрудииков);
«РегистрРасчета.Начисления.ДанныеГрафика»:
Движения.НачисленияЛаписать(,Истина);
//} }_КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
ПроцедураРасчитатьНачисления(НаборЗаписейРегистра,ТребуемыйВидРасчета,
Обратите внимание, что при проведении документа мы сначала СписокСотрудников) Экспорт /Рассчитать первичные
записи Если ТребуемыйВидРасчета e ПланыВидовРасчета.ОсновныеНачисления.Оклад
записываем движения, сформированные документом, в регистр, а
тогда
затем передаем этот набор записей регистра в процедуру расчета.
Сначала для расчета первичных записей («Оклад»), а затем для расчета Запрос = Новый Запрос;
Запрос.Текст =
вторичных («Премия»). Процедура расчета, на основе описанных в ней
"ВЫБРАТЬ
алгоритмов и данных, содержащихся в записях регистра, должна |НачисленияДанныеГрафика.ЗначениеПериодДействия КАК Норма,
сформировать значения ресурсов регистра. После того, как ресурсы |НачисленияДанныеГрафика.ЗначениеФактическийПериодДействия
будут рассчитаны, мы перезаписываем набор записей регистра без |КАК Факт,
|НачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки
формирования записей перерасчета (второй параметр в методе |ИЗ
Записать() - Истина. |РегистрРасчета.Начисления.ДанныеГрафика(
Перед вызовом процедуры из общего модуля мы формируем |Регистратор = &Регистратор И |ВидРасчета = &ВидРасчета И |Сотрудник В
(&СписокСотрудников)) |КАК НачисленияДанныеГрафика";
список сотрудников, содержащихся в документе, чтобы передать его в
вызываемую процедуру. Запрос.УстановитьПараметр("Регистратор",
________________________ НаборЗаписейРегистра.Отбор.Регистратор.Значеяие);




351
350
Использование основных объектов конфигурации Использование регистра расчета

Запрос.УстановитьПараметр("ВидРасчета",ТребуемыйВидРасчета); ВыборкаРезультата = Запрос.Выполнить().Выбрагь();
˜^
^ Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл
3anpoc.ycTaHOBHTbnapaMeTp("CnMcoKCoTpyflHHKOB",CnncoKCoTpyflHHKOB)-
СтруктураНомер = Новый СтруктураС'НомерСтроки");
СтруктураНомер.НомерСтроки = ЗаписьРегистра.НомерСтроки;
ВыборкаРезультата = Залрос.Выполнить().Выбрать();
ВыборкаРезультата.Сбросить();
Если ВыборкаРезультата.НайтиСледующий(СтруктураНомер) тогда
/Л>ассчитать вторичные записи
Если ВыборкаРезультата.Норма = 0 тогда
иначеЕсли ТребуемыйВидРасчета =
Сообщить("Вид расчета: Оклад — Нет рабочих дней в заданном периоде",);
ПланыВидовРасчета.ОсновныеНачисления.Премиятогда
ЗаписьРегистра.Результат = 0; Иначе
КонецЕсли; КонецПроцедуры
/Л*ассчитать оклад по фактическому периоду и исходным данным
ЗаписьРегистра.Результат = (ЗаписьРегистра.ИсходныеДанные /
ВыборкаРезультата.Норма) * ВыборкаРезультата.Факт;
Сообщить("Выполнен расчет "+ЗаписьРегистра.Регистратор+" - "+
В этом запросе мы выбираем из виртуальной таблицы данных
ЗаписьРегистра.ВидРасчета+" - "+ЗаписьРегнстра.Сотрудник,);
графика регистра расчета значение графика для периода действия и КонецЕсли; КонецЕсли; КонецЦикла;
для фактического периода действия. При задании параметров
виртуальной таблицы мы ограничиваем выборку регистратором, //Рассчитать вторичные записи
иначеЕсли ТребуемыйВидРасчета =
нужным нам видом расчета и списком сотрудников, по которым нужно
ПланыВидовРасчета.ОсновныеНачисления.Премиятогда
получить значения графика. КонецЕсли; КонецПроцедуры
Теперь добавим обход переданного в процедуру набора записей и
расчет записей, для которых получены значения графика: Для каждой записи из набора записей регистра расчета мы
получаем номер строки и по этому номеру ищем соответствующую
запись в выборке из результата запроса. Если в результате запроса есть
Процедура РасчитатьНачисления(НаборЗаписейРегистра, ТребуемыйВидРасчета,
СписокСотрудников) экспорт /Рассчитать первичные запись с таким номером строки, мы рассчитываем результат записи
записи Если ТребуемыйВидРасчета =
регистра расчета.
ПланыВидовРасчета.ОсновныеНачисления.Оклад тогда
Теперь добавим текст запроса во вторую ветку условия Если... с
Запрос = Новый Запрос;
той лишь разницей, что теперь мы будем получать значения базы,
Запрос.Текст =
используя виртуальную таблицу регистра расчета
"ВЫБРАТЬ
«РегистрРасчета.Начисления.БазаНачисления»:
| НачисленияДанныеГрафика.ЗначениеПериодДействия КАК Норма,
| НачисленияДанныеГрафика.ЗначениеФактическийПериодДействия
| КАКФакт,
ПроцедураРасчитатьНачисления(НаборЗаписейРегистра^ребуемыйВидРасчета,
| НачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки
СписокСотрудников) Экспорт //Рассчитать первичные
|ИЗ
записи Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад
| РегистрРасчета.Начисления.ДанныеГрафика(
тогда
| Регистратор = &Регистратор И
| ВидРасчета = &ВидРасчета И
| Сотрудник В (&СписокСотрудников))
| КАКНачисленияДанныеГрафика";
// Рассчитать вторичные записи
Запрос.УстановитьПараметр("Регистратор",
НаборЗаписейРегистра.Отбор.Регистратор.Значение);
Запрос.УстановитьПараметр("ВидРасчета",ТребуемыйВидРасчета);
ЗапросУстановитьПараметр("СписокСотрудников", СписокСотрудников);



352
353
Использование регистра расчета
Использование основных объектов конфигурации


иначеЕсли ТребуемыйВвдРасчета = /Л'ассчитать вторичные записи
ПланыВидовРасчета.ОсновныеНачисления.Премиятогд иначеЕсли ТребуемыйВидРасчета =
ПланыВидовРасчета.ОсновныеНачисления.Премия тогда
Запрос = Новый Запрос;
Запрос.Текст = Запрос = Новый Запрос;
"ВЫБРАТЬ Запрос.Текст =
I НачиеленияБазаНачислення.РезультатБаза КАК База, "ВЫБРАТЬ
I НачисленияБазаНачисления.НомерСтроки КАК НомерСтроки | НачисленияБазаНачисления.РезультатБаза КАК База,
1ИЗ | НачисленияБазаНачисления.НомерСтроки КАК НомерСтроки
I РегистрРасчета.Начиеления.БазаНачисления( |ИЗ
I &ИзмереяияОсновного,
| РегистрРасчета.Начисления.БазаНачисления(
I &ИзмеренияБазового,,
| &ИзмеренияОсновного,
I Регистратор = &Регистратор И
| &ИзмереиияБазового,,
I ВидРасчета = &ВидРасчета И
| Регистратор = &Регистратор И
I Сотрудник В (&СписокСотрудников))
| ВидРасчета = &ВидРасчета И
I КАК НачисленияБазаНачисления";
| Сотрудник В (&СписокСотрудников))
| КАКНачисленияБазаНачисления";
Измер = Новый Maccив(1);
Измер[0] = "Сотрудник";
Измер = Новый Массив(1);
Измер[0] = "Сотрудник":
Запрос.УстановитьПараметр("ИзмеренияОсновного",Измер);
Запрос.УстановитьПараметрС'ИзмеренияБазового", Измер);
Запрос.УстановитьПараметр("ИзмеренияОсновного",Измер);
Запрос.УстановитьПараметр("Регистратор",Регистратор);
Запрос.УстановитьПараметрС'ИзмеренияБазового", Измер);
Запрос.УстановитьПараметр("ВидРасчета",Тре6уемыйВидРасчета);
Запрос.УстановитьПараметр("Регистратор",Регистратор);
Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);
Запрос.УстановитьПараметр("ВидРасчета",ТребуемыйВидРасчета);
Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);
ВыборкаРезультата = Запрос.Выполнить().Выбрать();

ВыборкаРезультата = ЗапросВыпоянить()-Выбрать();
КонецЕсли;
КонецПродедуры
Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл
СтруктураНомер = Новый СтруктураС'НомерСтроки");
Здесь в параметрах виртуальной таблицы запроса мы, кроме СтруктураНомер.НомерСтроки = ЗаписьРегистра.НомерСтроки;
привычных для нас регистратора, вида расчета и списка сотрудников, ВыборкаРезультата.Сбросить();
Если ВыборкаРезультата.НайтнСледующийССтруктураНомер) тогда
задаем еще измерения основного и базового регистров. В нашем
ЗаписьРегистра.Результат = ВыборкаРезультата.База * (10/100);
случае это будет один и тот же регистр, а нужное нам измерение - Сообщить("Выполнен расчет "+ЗаписьРегистра.Регистратор+" - "+
«Сотрудник». ЗаписьРегистра.ВвдРасчета+" - "+ЗаписьРегистра.Сотрудник,);
КоиецБсли; КонецЦикла;
В заключение осталось добавить во второе условие Если ... обход
набора записей регистра расчета и вычисление результата вторичных КонецЕсли;
КонедПроцедуры
записей:

ПроцедураРасчитатьНачисления{НаборЗаписейРегистра, ТребуемыйВидРасчета,
Сумму начисленной премии мы рассчитываем как 10% от
СписокСотрудников) Экспорт
рассчитанной оплаты по окладу.
/Л>ассчитать первичные записи
Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад тогд»




355
354
Использование основных объектов конфигурации Использование регистра расчета

Запустим 1С:Предприятие в режиме отладки и провер Им
Создание отчета НачисленияСотрудникам
правильность работы процедуры расчета.



Т
Отменим проведение документа Начисление сотрудникам №з и еперь мы посмотрим, каким образом можно использовать
перепроведем документы Начисление сотрудникам №1 и №2. Регистр данные, хранящиеся в регистре расчета, для получения в
расчета Начисления должен выглядеть следующим образом: отчете итоговой информации о начислениях сотрудникам.
Создадим в конфигураторе новый объект конфигурации
Отчет. Назовем его «НачисленияСотрудникам».
Запустим конструктор выходной формы. Выберем следующие поля
таблицы регистра расчета «Начисления»:




Гусакову и Деловому начислена премия в размере 10% от суммы
начисления по окладу.
Проведем документ Начисление сотрудникам №3, а затем №1 и№2.
Состояние регистра изменится следующим образом:




На закладке «Объединения/Псевдонимы» определим следующие
псевдонимы выбранных полей:



J
В результате невыхода Гусакова на работу, сумма его оплаты по
окладу будет уменьшена и соответствующим образом уменьшится
начисленная ему премия.




356 357
Использование основных объектов конфигурации Использование регистра расчета


На закладке «Порядок» отметим автоупорядочивание. На закладке
Выполнение перерасчета записей регистра
«Итоги» зададим получение общих итогов и промежуточных итогов по
расчета
сотруднику:



И
так, в нашем алгоритме работы с данными расчета осталось
одно «узкое» место - контроль актуальности данных,
содержащихся в регистре расчета. До сих пор мы с вами
использовали служебный отчет «Перерасчет» для того,
чтобы определить, являются ли данные в регистре расчета
актуальными или же они требуют перерасчета.
Теперь мы с вами создадим специальную процедуру, которая будет
определять, требуется ли перерасчет данных регистра расчета и, если
такая необходимость есть - выполнять перерасчет.
Поскольку единственным способом получения итоговой
информации о начислениях сотрудникам в нашей конфигурации
В заключение на закладке «Отчет» сбросим флаг «Использовать является отчет «НачисленияСотрудникам», для вызова этой
построитель отчета». Нажмем «ОК» и запустим 1С:Предприятие в процедуры мы добавим кнопку «Перерасчитать» в командную панель
«ДействияФормы»:
режиме отладки.
В результате работы отчета мы получим следующую таблицу:




В обработчик события нажатия кнопки вставим текст вызова
процедуры перерасчета:

ПроцедураДействияФормыПерерасчитать(Кнопка)
ПерерасчитатьНачисления(ПланыВидовРасчета.ОсновныеНачисления.Оклад);
ПерерасчитатьНачисления01лаиыВидовРасчета.ОсновныеНачисления.Премия);
КонецПроцедуры


Саму процедуру перерасчета разместим в общем модуле
«ПроведениеРасчетов»:

Процедура ПерерасчитатьНачисления(ТребуемыйВидРасчета) экспорт
«здесь следует выбрать из набора записей перерасчета " записи в
следующей последовательности:
//записи документа1 для сотрудников из списка,



359
358
Использование основных объектов конфигурации Использование регистра расчета


В самом начале процедуры мы выбираем запросом данные о
//записи документа2 для сотрудников из списка,
записях перерасчетов, содержащие переданный вид расчета и
//и т.д.
сгруппированные по объекту перерасчета. Далее, при обходе
Запрос = новый Запрос(
"ВЫБРАТЬ результата запроса, мы формируем для каждого объекта перерасчета
| НачисленияПерерасчет.ОбъектПерерасчета,
список сотрудников, читаем соответствующие записи регистра расчета
| НачисленияПерерасчет.Сотрудник
вызываем процедуру «РасчитатьНачисления», которая
|ИЗ и
использовалась нами при расчете записей документа
| РегистрРасчета.Начисления.Перерасчет
«НачисленияСотрудникам». После того, как расчет записей выполнен,
| КАК НачисленияПерерасчет
мы записываем набор записей без формирования записей перерасчета
|
|ГДЕ и очищаем записи перерасчета по тому объекту перерасчета, который
| НачисленияПерерасчет.ВидРасчета = &ТребуемыйВидРасчета
только что обработали.
|
Запустим 1С:Предприятие и проверим, как выполняется перерасчет
|ИТОГИ ПО
I НачисленияПерерасчет.ОбъектПерерасчета"); записей регистра расчета.
Запрос.УстановитьПараметрСТребуемыйВидРасчета'.ТребуемыйВидРасчета);
СписокСотрудников = Новый СписокЗначений; Отменим проведение всех документов «Начисления сотрудникам»
и проведем документ Начисления сотрудникам №1 и затем №2.
//перебрать группировку по регистратору
Сформируем отчет «Начисления сотрудникам» (здесь и далее колонки
ВыборкаПоРегистратору = Запрос.Выполнить()
отчета с 4 по 6 скрыты, в целях экономии места):
.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоРегистратору.Следующий() цикл Регистратор =
ВыборкаПоРегистратору.ОбъектПерерасчета;

//перебрать группировку по сотрудникам
//для выбранного регистратора
//и создать список сотрудников
ВыборкаПоСотрудникам = ВыборкаПоРегистратору.Выбрать();
СписокСотрудников.Очистить();
Пока ВыборкаПоСотрудникам.Следующий() цикл
СписокСотрудников.Добавить(ВыборкаПоСотрудникам.Сотрудник);
КонецЦикла;

//получить набор записей регистра расчета
//для выбранного регистратора
НаборЗаписей = РегистрыРасчета.Начисления.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Значение = Регистратор;
НаборЗаписей.Прочитать();

РасчитатьНачисления(НаборЗаписей, ТребуемыйВидРасчета, СписокСотрудников);
НаборЗаписей.Записать(, Истина);

//очистить перерасчитанные записи в перерасчете
НаборЗаписейПерерасчета = РегистрыРасчета.Начисления.Перерасчеты
.Перерасчет.СоздатьНаборЗаписей();
Теперь откроем документ Начисления сотрудникам №1, изменим
НаборЗаписейПерерасчета.Отбор.ОбъектПерерасчета.Значение = Регистратор;
оклад Гусакова на 10 000 и проведем документ. В отчете
НаборЗаписейПерерасчета.Записать(); КонецЦикла; КонецПроцедуры.



361
360
Использование регистра расчета
Использование основных объектов конфигурации

А данные отчета будут содержать актуальные значения начисления
«НачисленияСотрудникам» нажмем кнопку «Перерасчитать». Будет
оклада и премии:
выполнен перерасчет начисления премии Гусакову и Деловому:




Результат работы отчета будет содержать новые значения премии
Гусакова:




И, наконец, проведем документ Начисления сотрудникам №3 и
нажмем «Перерасчет» в отчете «НачисленияСотрудникам». Снова
будет произведен перерасчет оклада и премии Гусакова:




363
362
Использование регистра расчета
Использование основных объектов конфигурации

Как мы уже говорили, эта диаграмма будет отображать для каждого
Графическое представление начислений сотрудника фактический период действия записи по каждому из видов


В
расчета, имеющих место для этого сотрудника.
конце этой главы мы совместим приятное с полезным и
создадим с вами отчет, который в графическом виде буд ет
показывать нам фактический период действия записей
расчета Помимо наглядной демонстрации работы механизма
вытеснения записей по периоду действия этот отчет позволит нам
познакомиться с элементом управления, позволяющим создавать
диаграммы Ганта.

Диаграмма Ганта

Д иаграмма Ганта представляет собой диаграмму интервалов на
шкале времени и отражает использование объектами (точками)
ресурсов (серий). Чтобы проще было представить себе
составные части диаграммы Ганта, изучим диаграмму, которая
должна получиться в результате работы создаваемого нами отчета.




Итак, диаграмма Ганта представляет собой совокупность точек,
серий и значений для каждой пары точка-серия. В нашем случае
точками диаграммы являются сотрудники, а сериями - виды расчетов.
Таким образом, для каждого сотрудника существует некоторое
значение диаграммы по каждой из серий, то есть по каждому из видов
расчета.
Значение диаграммы Ганта представляет собой специальный
объект, который формируется системой автоматически на основании
того, какие точки и какие серии определены для данной диаграммы.
Этот объект является совокупностью (коллекцией) интервалов, т.е.
может содержать не один, а несколько интервалов, которые
соответствуют паре серия-точка (создаваемый по умолчанию объект
ЗначениеДиаграммыГанта не содержит ни одного интервала).
Разработчик может получить значение диаграммы, указав




365
364
Использование регистра расчета
Использование основных объектов конфигурации

Запрос = Новый Запрос;
интересующую его точку и серию, и затем добавить в коллекцию Запрос.Текст =
необходимое количество интервалов.
КонецПроцедуры ______
Все интервалы всех значений диаграммы располагаются с
привязкой к единой оси времени, что дает возможность видеть их
Откроем конструктор запроса, и выберем виртуальную таблицу
взаимное расположение.
регистра расчета «Начисления.ФактическийПериодДействия». Из этой
Теперь объясним коротко последовательность наших дальнейших таблицы выберем следующие поля:
действий. В качестве исходных данных для построения такой
диаграммы мы возьмем данные регистра расчета «Начисления» • «НачисленияФактическийПериодДействия.Сотрудник»,
Каждая запись этого регистра уже содержит все необходимое для • «НачисленияФактическийПериодДействия.ВидРасчета»,
построения диаграммы: сотрудника, вид расчета, начало и конец • «НачисленияФактическийПериодДействия.ПериодДействияН
интервала. Нам останется только средствами встроенного языка ачало»,
разместить все это в диаграмме. Итак, приступим.
• «НачисленияФактическийПериодДействия.ПериодДействияК
онец»,
Создание отчета ДиаграммаНачислений


С
• «НачисленияФактическийПериодДействия.Результат»,
оздадим новый объект конфигурации Отчет и назовем его
• «НачисленияФактическийПериодДействия.Регистратор»,
«ДиаграммаНачислений». Создадим основную форму отчета и
• «НачисленияФактическийПериодДействия.Регистратор.Предс
разместим на ней элемент управления диаграмма Ганта с именем тавление»:
«ДиаграммаГанта»:




Все, запрос готов. Теперь нажмем «ОК» и добавим в процедуру
следующий текст:

ПроцедураКнопкаСформироватьНажатие(Элемент)
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ
| НачисленияФактическийПериодДействия.Сотрудник, |
НачисленияФактическийПериодЦействия.ВидРасчета, |
НачисленияФактическийПериодДействия.ПериодДействияНачало, |
НачисленияФактическийПериодЦействия.ПериодДействияКонец, |
Откроем модуль формы отчета и в обработчик события «Нажатие» НачисленияФактическийПериодДействия.Результат, |
кнопки сформировать вставим заготовку запроса: НачисленияФактическийПериодЦействия.Регистратор, |
НачисленияФактическийПериодДействия.Регистратор.Представление

ПроцедураКнопкаСформироватьНажатие(Элемент)


367
366
Использование основных объектов конфигурации Использование регистра расчета


Сначала в переменной «Диаграмма» мы сохраняем расположенную
|ИЗ
в форме диаграмму Ганта и запрещаем обновление диаграммы на то
| РегистрРасчета.Начисления.ФактическийПериодДействия
время, пока мы будем заполнять ее данными. Это нужно для того,
| КАК НачисленияФактическийПериодДействия";
чтобы в процессе заполнения не выполнялись пересчеты при каждом
изменении данных диаграммы. После окончания заполнения
ВыборкаРезультата = Запрос.Выполнить().Выбрать();
диаграммы мы разрешим обновление, и все пересчеты будут
Диаграмма = ЭлементыФормы.ДиаграммаГанта: выполнены один раз.
Затем в цикле по выборке запроса мы заполняем диаграмму.
// Запретить обновление диаграммы
Сначала, используя методы УстановитьСерию() и
Диаграмма.Обновление = Ложь;
УстановитьТочку() мы получаем либо существующие, либо новые
Диаграмма.Очистить();
точку и серию. Точки и серии однозначно идентифицируются своими
Диаграмма.ОтображатьЗаголовок = Ложь;
значениями, в качестве которых мы используем сотрудника и вид
расчета из результата запроса.
//заполнить диаграмму Пока
ВыборкаРезультата.Следуюший() цикл
После того, как точка и серия получены, с помощью метода
//получить серию, точку н значение для них
ПолучитьЗначение() мы получаем соответствующее им значение
ТекущаяСерия=Диаграмма.УстановитьСерию(ВыборкаРезультата.ВидРасчета,
диаграммы.
ВыборкаРезультата.ВидРасчета);
ТекущаяТочка = Диаграмма
Затем мы добавляем в значение диаграммы новый интервал, задаем
.УстановитьТочкуСВыборкаРезультата.Сотрудник,
его начало и конец, задаем текст интервала, который будет
ВыборкаРезультага.Сотрудник);
показываться во всплывающей подсказке, и задаем расшифровку
ТекущееЗначение = Диаграмма.ПолучитьЗначение(ТекущаяТочка,
ТекущаяСерия); интервала, которая будет выполняться при двойном щелчке мышью на
этом интервале.
//создать нужные нам интервалы в значении
После того, как все значения диаграммы сформированы, мы
ТекущийИнтервал = ТекущееЗначеиие.Добавить();
ТекущийИнтервал.Начало = ВыборкаРезультата.ПериодДействияНачало; раскрашиваем серии своими цветами. Серии диаграммы представляют
ТекущийИнтервал.Конец = ВыборкаРезультата.ПериодДействияКонец;
собой коллекцию значений, которую мы перебираем при помощи
ТекущийИнтервалЛ*екст = ВыборкаРезультата.РегистраторПредставление;
конструкции Для каждого ... Цикл.
ТекущийИнтервал.Расшифровка = ВыборкаРезультата.Регистратор;
Запустим 1С:Предприятие в режиме отладки и посмотрим на
КонецЦикла;
результат работы отчета:
//раскрасить серии своими цветами Для
Каждого Серия из Диаграмма.Серии цикл
Если Серия.Значение = ПланыВидовРасчета.ОсновиыеНачисления.Оклад тогда
Серия.Цвет = WEBЦвета.Желтый;
иначеЕсли Серия.Значение =
ПланыВидовРасчета.ОсновныеНачисления.Премиятогда
Серия.Цвет = WEBЦвета.Зеленый;
иначеЕсли Серия.Значение =
ПланыВидовРасчета.ОсновныеНачисления.Невыходтогда
Серия.Цвет = WEBЦвета.Красный;
КонецЕсли; КонецЦикла;

//разрешить обновление диаграммы
Диаграмма.Обновление = Истина;
КонецПроцедуры ______




369
368
Использование основных объектов конфигурации Использование регистра расчета

А теперь посмотрим, как выглядит механизм вытеснения По
Что нового мы узнали
периоду действия «в действии». Откроем документ Начисления
сотрудникам №3 и вместо одного прогула с 1 по 10 число зададим
Гусакову два прогула: с 3 по 7 число и с 12 по 15 число.
Проведем документ и снова нажмем «Сформировать» в
отчете: - как создать движения документа по регистру расчета
- как запросом получить записи перерасчета -
как работает перерасчет - как рассчитать
записи регистра расчета
- как запросом получить данные графика и базы - как
выполнить перерасчет отдельных записей регистра расчета
- как получить запросом записи регистра расчета - как
получить запросом фактический период действия записей
Теперь вы наглядно видите, как записи вида расчета «Невыход» регистра расчета
вытеснили по периоду действия запись расчета «Оклад», изменив ее
- для чего используется диаграмма Ганта -
фактический период действия.
как устроена диаграмма Ганта
Следует отметить, что существует также возможность
интерактивной настройки параметров диаграммы Ганта, доступная - как заполнить диаграмму Ганта данными
через пункт контекстного меню «Шкала времени и масштаб...».




370 371
Подсистема



Зачем нужны подсистемы?
Глава 11. Подсистема

В конфигураторе 1С:Предприятия существует возможность
В этой главе мы познакомимся с объектом конфигурацИи определить логическую структуру создаваемого прикладного
Подсистема и узнаем, какие полезные возможности предоставляет решения, описав ее в виде различных, по своей
разработчику использование этого объекта. функциональности, частей, которые в совокупности составляют
данное прикладное решение.
Для описания такой структуры существуют объекты конфигурации
Подсистема. Эти объекты располагаются в ветке объектов «Общие» и
позволяют строить древовидную структуру, состоящую из подсистем
и подчиненных подсистем.
Большинство объектов конфигурации имеют соответствующее
свойство «Подсистемы», с помощью которого объект конфигурации
можно отнести к тем или иным подсистемам. Такая привязка объектов
конфигурации к логической структуре прикладного решения имеет две
полезных возможности использования.
Во-первых, при разработке достаточно крупных прикладных
решений, зачастую возникает необходимость оперировать не всеми
объектами конфигурации, а только теми, которые относятся к
разрабатываемой в данный момент логической части конфигурации. В
этом случае разработчик имеет возможность отфильтровать
содержимое дерева конфигурации по тем подсистемам, которые
интересуют его в данный момент.
Во-вторых, принадлежность объектов конфигурации к
определенной подсистеме позволяет легко создавать пользовательские
интерфейсы и роли, поскольку пользователи, как правило,
осуществляют какой-либо определенный набор действий, который
определяется некоторым набором прав.
Подсистемы позволяют описывать прикладное решение в виде
иерархического дерева функциональных блоков, поскольку каждая
подсистема может состоять, в свою очередь, из нескольких других
подсистем.




373
372
Использование основных объектов конфигурации Подсистема



Создание подсистем

Н ашу конфигурацию, которую мы создавали на протяжении
всей книги, нельзя назвать крупной, однако и в ней
присутствует несколько функциональных частей
представляющих собой отдельные предметные области. Так можно
выделить в отдельную подсистему все, что имеет отношение к
бухгалтерскому учету. Кроме этого, отдельной предметной областью
является расчет зарплаты сотрудников предприятия и все остальное
по-видимому, можно отнести к области учета материалов и услуг.
Поэтому мы создадим в нашей конфигурации три новых объекта
конфигурации Подсистема, которые будут иметь имена:
«Бухгалтерия», «РасчетЗарплаты» и «УчетУслугИМатериалов».
Теперь все объекты нашей конфигурации следует отнести к той или
иной подсистеме. В следующей таблице представлено соответствие
объектов конфигурации и созданных нами подсистем.




Будет удобно задать эти соответствия, воспользовавшись
следующей возможностью конфигуратора: установите курсор в корень
дерева конфигурации («Конфигурация») и из контекстного меню
правой кнопки мыши выберите пункт «Дополнительно». В
появившемся окне перейдите на закладку «Подсистемы».




375
374
Использование основных объектов конфигурации
Подсистема

Теперь, при перемещении по дереву конфигурации, в окне будет
Что нового мы узнали
отображаться состав подсистем, в которые входит выделенный объект
конфигурации:


Зададим принадлежность объектов конфигурации к подсистемам
- для чего используется объект конфигурации Подсистема -
как описать логическую структуру конфигурации при
помощи объектов Подсистема




376 377
Интерфейс, роль, список пользователей



Объект конфигурации Роль
Глава 12. Интерфейс, роль, список

Д ля описания подобных разрешений используются объекты
пользователей конфигурации Роль. С помощью такого объекта разработчик
получает возможность описать набор прав на выполнение тех или
После того, как созданы все основные объекты конфигурации
иных действий над каждым из объектов базы данных и над всей
можно приступить к определению ролей пользователей и созданию
конфигурацией в целом.
интерфейсов.
До сих пор мы с вами использовали пункт меню «Операции», для Как правило, роли создаются отдельно для каждого вида
того, чтобы получить доступ к тому или иному объекту конфигурации. деятельности, и каждому пользователю системы ставится в
Нам были доступны абсолютно все объекты конфигурации, и мы соответствие одна или несколько ролей.
могли осуществлять с ними все доступные действия. В случае, когда пользователю поставлено в соответствие несколько
Однако при реальной работе пользователей одной из главных ролей, предоставление доступа будет осуществляться по следующему
возможностей, которую должно обеспечивать прикладное решение, алгоритму:
является разграничение прав доступа пользователей к той или иной
• если хотя бы в одной роли есть разрешение, то доступ будет
информации, хранящейся в информационной базе.
открыт,
Например, руководитель должен, очевидно, иметь доступ ко всей
• если во всех ролях разрешение отсутствует, то доступ будет
информации, которая содержится в базе данных, а вот кладовщик -
закрыт.
напротив, должен иметь доступ только к информации, касающейся
движения товаров на складах и не иметь возможности просматривать
Создание ролей
бухгалтерскую или кадровую информацию.


П
Кроме этого, должна существовать возможность ограничить ри создании ролей исходят, как правило, из того, какие
пользователей в выполнении тех или иных действий с объектами базы полномочия требуются различным группам пользователей на
данных. Например, кладовщик может создавать и изменять приходные доступ к информации. Для этого ролей мы воспользуемся
накладные, поскольку он отвечает за учет материалов на предприятии. подсистемами, которые значительно облегчат нашу задачу. Первая
Мастеру может понадобиться просматривать приходные накладные роль, которую мы создадим, будет роль «Администратор». Она
для того, чтобы знать, какие материалы и когда были получены. должна включать в себя полные права на работу с данными
Однако мастер не должен иметь возможности вносить какие-либо информационной базы.
изменения в приходные накладные.




379
378
т
Использование основных объектов конфигурации Интерфейс, роль, список пользовате


Создадим новый объект конфигурации Роль с именем создано ни одного объекта. Для таких видов объектов конфигурации
останутся установлены полные права.
«Администратор». Откроется окно редактирования прав:
Теперь нам останется лишь пройти по видам объектов
конфигурации и установить для них права «Чтение», «Просмотр» и
«Использование». Вторая роль нашей конфигурации готова.
Следующая роль, которую мы создадим, будет роль «Мастер».
Снова создадим новый объект конфигурации Роль с именем «Мастер»
и снимем все права в окне редактирования прав. После этого,
Выполним команду Действия | Установить по подсистемам и
выберем подсистему «УчетМатериаловИУслуг». В результате будут
установлены все права на объекты конфигурации, относящиеся к
данной подсистеме.




Слева, в списке объектов, перечислены все объекты и виды
объектов конфигурации, а справа, в окне прав, перечислены доступные
права для выбранного объекта или видов объектов конфигурации.
Пробежав по списку объектов, вы обнаружите, что по умолчанию
новая роль имеет полные права на все объекты и виды объектов. В
данном случае нас это устраивает, поскольку администратор и должен
иметь такие права. Единственное, что следует сделать - снять
разрешение на интерактивное удаления для всех объектов. Это
необходимо для того, чтобы администратор случайно не мог удалить
какой-либо объект базы данных.
Следующей ролью, которую мы создадим, будет роль
«ТолькоПросмотр». Создадим новый объект конфигурации Роль с
именем «ТолькоПросмотр» и в открывшемся окне редактирования
прав выполним команду Действия | Снять все права. В результате
этого, все права на доступ ко всем объектам будут сняты, за
исключением тех видов объектов конфигурации, для которых не

<<

стр. 6
(всего 11)

СОДЕРЖАНИЕ

>>