Разработка прикладных решений для платформы 1С:Предприятие 8.1

Расчет заработной платы

Показывать лекцию целиком

Файлы информационной базы Вы можете скачать здесь.

Цель лекции: Освоить использование планов видов расчета, регистров расчета и вспомогательных механизмов для решения расчетных задач.

1.1. Обзор проблемы

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

Сразу хочется отметить, что задачи, касающиеся расчета зарплаты являются одними из наиболее сложных и трудоемких. Поэтому, если взглянуть на существующие типовые конфигурации, предназначенные для ведения учета, например, это касается конфигурации "1С:Бухгалтерия 8", "1С:Бухгалтерия бюджетного учреждения 8", окажется, что в этих конфигурациях задачи, касающиеся заработной платы, реализованы лишь на базовом уровне, который позволяет учитывать начисление зарплаты, начисление налогов (НДФЛ), страховых взносов, выплату зарплаты и отражение всех этих операций в учете. Расчет заработной платы в таких конфигурациях реализован, как правило, без использования регистров расчета и планов видов расчета, то есть, фактически, если начисленная заработная плата отличается от базового оклада, установленного сотруднику при приеме на работу, бухгалтер вынужден самостоятельно определять нужные суммы и вносить их в программу. Такой подход может показаться неоправданным, но лишь в том случае, если не учитывать существование специализированных конфигураций, ориентированных исключительно на кадровый учет и учет заработной платы. Это - "1С:Зарплата и кадры 8", "1С:Зарплата и кадры бюджетного учреждения 8". Объем работы бухгалтера или расчетчика в подобных прикладных решениях сравним с объемом работы в обычных "бухгалтерских" решениях. В таких конфигурациях центральными объектами, вокруг которых строится вся конфигурация, являются планы видов расчета и регистры расчета.

Как правило, в подсистему кадрового учета входят такие компоненты, как документы и другие объекты системы, обеспечивающие следующие операции:

  • Прием на работу. Этот документ фиксирует прием сотрудника на работу и назначение ему различных начислений, в частности, базового оклада, доплат, надбавок, вычетов. Это может быть оклад, надбавка за особые условия труда и вычет, например, профсоюзный взнос.
  • Кадровое перемещение. Такой документ обычно используется для отражения в программе существенных изменений в условиях труда работника. Так, это может быть переход на другую должность или изменение условий оплаты труда.
  • Увольнение. Этим документом фиксируется увольнение сотрудника и прекращение начислений.
  • Помимо документов, кадровая подсистема включает в себя набор регистров, который позволяет хранить сведения о сотрудниках, об их начислениях и удержаниях. Так, для хранения таких сведений, как перечни и размеры начислений и удержаний, назначенных сотрудникам, применяются регистры сведений. Для хранения данных о взаиморасчетах с работниками применяют регистры накопления.

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

  • Начисление заработной платы. Этот документ позволяет осуществлять расчет и начисление заработной платы работникам. В упрощенном виде, не использующем регистры расчета, роль этого документа заключается в фиксировании в программе сумм, начисленных работнику. В более сложном варианте этот документ интенсивно использует регистры расчета, что позволяет с его помощью реализовывать сложные схемы расчета заработной платы.
  • Выплата заработной платы. Обычно в роли документов, фиксирующих выплату заработной платы, используются банковские и кассовые документы (расходный кассовый ордер, исходящее платежное поручение), а так же специализированные документы - расчетно-платежные ведомости, например. В любом случае процесс выплаты заработной платы завершается каким-либо кассовым или банковским документом.
  • Отражение заработной платы в учете. Этот документ позволяет отразить в бухгалтерском учете начисления, удержания, налоги, страховые взносы, связанные с заработной платой, результаты выплаты заработной платы.
  • Выше перечислен лишь ограниченный набор документов. В реальных конфигурациях их гораздо больше. Это обусловлено законодательством в области учета заработной платы. Так, невыплаченная зарплата депонируется, помимо обычной заработной платы сотрудникам выплачиваются авансы, осуществляется расчет "зарплатных" налогов и т.д.

    Естественно, подсистемы учета кадров и заработной платы оснащают множеством отчетов.

    1.2. Постановка задачи

    Мы реализуем "зарплатную" часть нашей конфигурации в упрощенном виде. Создадим подсистему расчета с использованием планов видов расчета и регистров расчета.

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

    Справочники
  • Графики работы
  • Сотрудники
  • Документы:
  • Начисление заработной платы;
  • Регистры сведений:
  • Рабочие дни по графику
  • Регистры расчета:
  • НачисленияИУдержания;
  • Планы видов расчета:
  • Основной
  • Некоторые из объектов, которые будут включать наша подсистема (рис 1.1), уже реализованы в учебной конфигурации.

    (рис 1.1) Дерево конфигурации

    1.3. Справочники и регистры

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

  • Подразделения;
  • ФизическиеЛица;
  • Сотрудники;
  • Создадим справочник Графики работы. Мы будем применять этот справочник для хранения наименований графиков работы, которые будут назначаться сотрудникам при приеме на работу. Справочник Графики работы будет использоваться совместно с регистром сведений Рабочие дни по графику. Регистр будет содержать сведения о том, какие именно дни являются рабочими при работе по данному графику.

    Справочник будет содержать лишь один реквизит Примечание - строку длиной 30 символов. В этом реквизите планируется указывать сведения о графике, являющиеся существенными для понимания особенностей его применения. Например, элемент графика "Шестидневка" можно снабдить примечанием "7-й день выходной" и т.д. В следующей лекции мы рассмотрим обработку, предназначенную для автоматизированного заполнения графиков, в работе которой используется поле Примечание, содержащее номера выходных дней графика.

    (рис 1.2) Справочник Графики работы

    Создадим регистр сведений .

    (рис 1.3) Настройка основных свойств регистра сведений

    Записи в такой регистр можно делать вручную, без использования документов-регистраторов. Периодичность имеет смысл устанавливать для тех регистров, которые хранят какие-либо регулярно изменяющиеся данные. Например, если мы хотим создать регистр сведений, в котором предполагается хранить сведения о курсах валют, вполне естественно сделать его периодичность равной дню.

    При создании регистра сведений нужно задать состав его измерений, ресурсов и реквизитов, рис 1.4.

    (рис 1.4) Настройка состава данных регистра сведений

    Создадим следующие измерения:

    Дата тип - Дата, состав даты - Дата ;
    График тип - СправочникСсылка.ГрафикиРаботы, установим галочку Ведущее в окне свойств измерения. Установка этого свойства позволяет подчинить запись регистра объекту, который записывается в данное измерение.

    Создадим ресурс РабочийДень, тип - Число, длина - 1, точность 0. Этот ресурс будем устанавливать в 1 для рабочего дня и в 0 для выходного дня.

    Ресурсы регистра сведений могут иметь различные типы.

    Создадим реквизит Примечание, тип - строка, длина 50. Будем использовать этот реквизит для ввода замечаний по поводу тех или иных дней. В частности, примечаний о выходных днях, которые переносятся на рабочие дни в том случае, если праздничный день совпадает с выходным днем.

    Остальные параметры регистра сведений оставим в состоянии по умолчанию. В частности, мы будем пользоваться стандартными формами при работе с ним в режиме 1С:Предприятие.

    Продолжим работу, займемся планом видов расчета.

    1.4. Планы видов расчета

    Прежде чем приступать к проектированию планов видов расчета следует определиться с составом начислений и удержаний, которые планируется использовать в учетной системе. Мы будем реализовывать механизмы расчета для следующих начислений и удержаний, табл. 1.1

    Начисления и удержания
    Начисление / удержание Способ расчета Особенности расчета
    Оклад Рассчитывается пропорционально отработанным дням Если сотрудник, которому назначен этот вид начисления, отработал все дни, предусмотренные соответствующим графиком, ему начисляется полный размер оклада. Если нет - оклад уменьшается пропорционально отработанным дням.
    Премия Процентом от расчетной базы При расчете задается процент, который берется от оклада, который начислен за текущий месяц
    Удержание Фиксированная сумма Задается фиксированная сумма, которая будет удержана с сотрудника
    Прогул Нулевая сумма Если у сотрудника был прогул, этот факт фиксируется вводом информации о прогуле. При расчете заработной платы оклад не платится за те дни, в которые у сотрудника был прогул.

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

    Так, начисление Оклад рассчитывается с учетом отработанных дней. Скажем, при приеме на работу работнику был назначен оклад в размере 20000 рублей. Если в месяц, за который начисляется заработная плата, было 20 рабочих дней, а работник отработал 19 из них, окажется, что в качестве оклада ему должно быть начислено 19000 рублей. Оклад зависит лишь от количества отработанных дней и от суммы оклада.

    Премию имеет смысл считать лишь тогда, когда будет рассчитан тот вид начисления, который влияет на ее расчет. Это - Оклад. Для расчета премии от величины оклада за месяц берется определенный процент.

    Удержание зависит лишь от заданной суммы.

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

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

    На закладке .

    (рис 1.5) Настройка плана видов расчета Основной

    Перейдем на вкладку Прочее окна настройки и зададим предопределенные виды расчета.

    Создадим вид расчета ). Остальные вкладки окна настройки вида расчета пока редактировать не будем. Ведь оклад не зависит от результатов расчета других видов расчета. Однако нельзя забывать, что в соответствии с условиями нашей расчетной задачи, за те дни, в которые у сотрудника зафиксирован прогул, оклад рассчитываться не будет. Это означает, что вид расчета Прогул должен быть отмечен на вкладке Вытесняющие. Мы сможем сделать это только после того, как данный вид расчета будет создан, отредактировав параметры в окне настройки Оклада.

    (рис 1.6) Предопределенный вид расчета Оклад

    Создадим вид расчета ) будет отмечен вид расчета Оклад. Размер премии зависит от размера оклада, поэтому данный вид расчета попадет в расчетную базу премии.

    (рис 1.7) Настройка вкладки Базовые вида расчета Премия

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

    Добавим вид расчета Удержание (имя - Удержание, код 3 ). Настраивая его, нам нужно лишь задать его название и код - остальные вкладки настройки не требуют.

    Теперь создаем вид расчета Прогул - при его настройке мы зададим имя Прогул, код - 4. Остальные вкладки окна настройки не требуют вмешательства. Однако, после создания вида расчета Прогул, мы должны внести изменения в настройку видов расчета Оклад и Премия.

    Откроем окно настройки вида расчета .

    (рис 1.8) Настройка вкладки Вытесняющие вида расчета Оклад

    Вытесняющий вид расчета Прогул вытесняет вид расчета Оклад по периоду действия. То есть, за те периоды, за которые введен вид расчета Прогул, Оклад начисляться не будет.

    Откроем окно настройки вида расчета .

    (рис 1.9) Настройка вкладки Ведущие вида расчета Премия

    Рассмотрим вид расчета Премия. Для него Базовый вид расчета - это вид расчета, от которого зависит результат вычисления Премии. В нашем случае Премия зависит от Оклада, поэтому именно Оклад мы включаем в состав базовых видов расчета для Премии.

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

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

    1.5. Регистры расчета

    Создадим новый регистр расчета, дадим ему имя .

    (рис 1.10) Настройка вкладки Основные окна свойств регистра расчета

    В поле План видов расчета зададим недавно созданный план видов расчета Основной.

    Установим флажок Период действия - это означает, что в регистре могут присутствовать виды расчета, для которых может быть задан период действия. После установки этого флажка мы сможем настроить параметры графика.

    В поле График нам нужно будет указать регистр сведений, который будет содержать график, используемый при расчете. В нашем случае это регистр РабочиеДниПоГрафику. В поле Значение графика выберем РабочийДень - именно в этом ресурсе регистра сведений будет храниться 1, если день является рабочим. В поле Дата графика выберем измерение регистра Дата.

    Установим флаг Базовый период.

    Зададим в группе параметров Периодичность параметр Месяц.

    Перейдем на вкладку :

    (рис 1.11) Настройка вкладки Данные окна свойств регистра расчета

    Измерение Сотрудник - тип СправочникСсылка.Сотрудники, флаг Базовое установлен. Будем хранить в этом измерении сотрудника, по которому ведется расчет.

    Ресурс Результат - тип Число, длина 10, точность 2. Именно этот ресурс будет содержать вычисленное значение вида расчета, заданного для сотрудника. Результат будет содержать значение в рублях, именно это определило параметры типа данных, использованного для него.

    Реквизит ИсходныеДанные - тип число, длина 10, точность 2. В этот реквизит мы будем записывать исходные данные для расчета. Например, для вида расчета Оклад мы запишем сюда исходный размер оклада, для вида расчета Премия - процент, который должен браться от расчетной базы, для вида расчета Удержание - размер удержания в рублях.

    Реквизит График - тип СправочникСсылка.ГрафикиРаботы. В этом реквизите будем хранить график, который соответствует сотруднику, для которого мы начисляем заработную плату. В свойстве этого реквизита Связь с графиком установим измерение График регистра сведений Графики работы. Именно благодаря этой настройке мы сможем использовать различные графики работы для разных сотрудников (пятидневка, шестидневка) и при расчете получать правильное количество рабочих дней по каждому графику.

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

    1.6. Документ Начисление зарплаты

    Создадим новый документ, дадим ему имя НачислениеЗарплаты. Этот документ должен иметь следующую функциональность:

  • Возможность ручного ввода начислений;
  • Формирование движений по регистру расчета ;
  • Перейдем на вкладку . Создадим реквизит документа ПериодРегистрации - тип Дата, состав даты - Дата.

    (рис 1.12) Настройка вкладки Данные окна свойств документа

    Создадим табличную часть НачисленияИУдержания. Создадим в ней следующие реквизиты:

    Сотрудник - тип СправочникСсылка.Сотрудники ;
    ВидРасчета - тип ПланВидовРасчетаСсылка.Основной ;
    График - тип СправочникСсылка.ГрафикиРаботы ;
    ИсходныеДанные - число, длина 10, точность 2;
    ДатаНачала и ДатаОкончания - Дата, состав даты - Дата.

    Теперь перейдем на вкладку Движения. Запретим оперативное проведение документа, добавим в состав регистров, по которым документ формирует движения, регистр НачисленияИУдержания.

    Нажмем на кнопку .

    (рис 1.13) Работа с конструктором движений

    При заполнении полей, задающих правила формирования движений мы заполним их следующим образом:

    ВидРасчета - ТекСтрокаНачисленияИУдержания.Вид расчета - это поле мы заполняем, взяв соответствующий параметр из табличной части
    ПериодДействияНачало - это поле мы заполняем значением реквизита табличной части ДатаНачала
    ПериодДействияКонец - это поле мы заполняем значением реквизита табличной части ДатаОкончания
    ПериодРегистрации - это поле мы заполним значением реквизита ПериодРегистрации ;

    БазовыйПериодНачало и БазовыйПериодКонец в конструкторе мы заполнять не будем. Эти поля нужны нам для вида расчета Премия, поэтому мы заполним их в коде процедуры обработки проведения для данного вида расчета.

    Сотрудник - воспользуемся соответствующим параметром табличной части.
    Результат - этот параметр мы будем вычислять, именно он является результатом начисления заработной платы по каждому из видов расчета.
    ИсходныеДанные - воспользуемся параметром ИсходныеДанные из табличной части.
    График - воспользуемся параметром График из табличной части.

    Нажмем на кнопку ОК в окне конструктора движений и посмотрим, какой код он сформировал:

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

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

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

    Если ТекСтрокаНачисленияИУдержания.ВидРасчета=
    	ПланыВидовРасчета.Основной.Премия Тогда
    		Движение.БазовыйПериодНачало=НачалоМесяца(ПериодРегистрации);
    		Движение.БазовыйПериодКонец=КонецМесяца(ПериодРегистрации);
    	КонецЕсли;

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

    Если Движение.ВидРасчета=ПланыВидовРасчета.Основной.Прогул Тогда
    		Движение.ПериодДействияНачало = ТекСтрокаНачисленияИУдержания.ДатаНачала;
    		Движение.ПериодДействияКонец = ТекСтрокаНачисленияИУдержания.ДатаОкончания;
    	Иначе
    		Движение.ПериодДействияНачало = НачалоМесяца(ПериодРегистрации);
    		Движение.ПериодДействияКонец = КонецМесяца(ПериодРегистрации);
    	КонецЕсли;

    Этот код заменит строки

    Движение.ПериодДействияНачало = ТекСтрокаНачисленияИУдержания.ДатаНачала;
    	Движение.ПериодДействияКонец = ТекСтрокаНачисленияИУдержания.ДатаОкончания;

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

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

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

    (рис 1.14) Документ и движения в регистре, которые он произвел

    Если все перенесено верно, а в нашем случае это именно так, мы можем приступать к реализации процедуры расчета. Сделаем это в том же модуле, в котором осуществляется формирование движений.

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

    Добавим в процедуру проведения документа команду записи сформированных движений:

    Движения.НачисленияИУдержания.Записать();

    Эта команда должна следовать за командой закрытия цикла формирования движений.

    Добавим в код блок расчета удержания. В соответствии с логикой заданных ранее видов расчета, здесь мы лишь копируем ИсходныеДанные для Удержания в Результат.

    Для Каждого Движение из Движения.НачисленияИУдержания Цикл
    	Если Движение.ВидРасчета=ПланыВидовРасчета.Основной.Удержание Тогда
    		Движение.Результат=Движение.ИсходныеДанные;
    	КонецЕсли;
    КонецЦикла;
    Движения.НачисленияИУдержания.Записать();

    Теперь займемся расчетом оклада.

    Для Каждого Движение из Движения.НачисленияИУдержания Цикл
    	Если Движение.ВидРасчета=ПланыВидовРасчета.Основной.Оклад Тогда
    		План = Движение.ПолучитьДанныеГрафика(ВидПериодаРегистраРасчета.ПериодДействия);
    		Факт= Движение.ПолучитьДанныеГрафика(ВидПериодаРегистраРасчета.ФактическийПериодДействия);
    		Движение.Результат= Движение.ИсходныеДанные*Факт[0].РабочийДень/План[0].РабочийДень;
    	КонецЕсли;
    КонецЦикла;
    Движения.НачисленияИУдержания.Записать();

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

    Запись вида Факт[0] позволяет обратиться к строке таблицы значений. А записью Факт[0].РабочийДень (напомним, РабочийДень - это имя ресурса регистра сведений, который используется как график) мы "вытаскиваем" нужные данные. В нашем случае - количество рабочих дней, отработанных по факту.

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

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

    Ресурсы=Новый Массив(1);
    	Ресурсы[0]="НачисленияИУдержания.Результат";
    	Измерения =Новый Структура ("Сотрудник", "НачисленияИУдержания.Сотрудник");
    	Для Каждого Движение из Движения.НачисленияИУдержания Цикл
    		Если Движение.ВидРасчета=ПланыВидовРасчета.Основной.Премия Тогда
    			ДанныеБазы=Движение.ПолучитьБазу(Ресурсы, Измерения);
    			Движение.Результат=Движение.ИсходныеДанные*ДанныеБазы[0].Результат/100;
    		КонецЕсли;
    	КонецЦикла;
    	Движения.НачисленияИУдержания.Записать();

    Для начала мы подготовим параметры для передачи в метод ПолучитьБазу. Это будет массив Ресурсы, который в нашем случае содержит имя ресурса базового регистра расчета в формате "ИмяРегистра.ИмяРесурса". Так же мы готовим структуру Измерения. В структуру мы добавляем новый элемент, имя которого совпадает с именем измерения регистра расчета ( "Сотрудник" ), а значение содержит список измерений (в формате "ИмяРегистра.ИмяИзмерения" ), в нашем случае это одно измерение. Эти данные будут использованы при получении расчетной базы при расчете премии.

    В цикле мы записываем в переменную ДанныеБазы результаты выполнения метода ПолучитьБазу для текущей записи регистра расчета (то есть - для вида расчета Премия ). Метод ПолучитьБазу возвращает таблицу значений, строки которой хранят запрошенные при вызове метода данные.

    Вспомним, как называется ресурс регистра расчета, в котором хранятся результаты вычислений - это ресурс Результат. Именно по такому имени мы можем обратиться к строке таблицы значений (в нашем случае это одна строка с индексом 0) и получить расчетную базу.

    После того, как расчетная база получена, мы рассчитываем размер премии. Так как при заполнении документа подразумевается, что мы вводим процентное значение премии в виде количества процентов (10, 40 и т.д.), то для того, чтобы узнать размер премии, мы должны введенный процентный размер премии разделить на 100 и уже после этого умножать на полученную расчетную базу.

    После того, как все вышеперечисленные действия выполнены, мы можем испытать наше решение на практике. Если все выполнено верно - в поле .

    (рис 1.15) Результаты начисления заработной платы в регистре расчета

    Теперь в регистре расчета находятся все данные, необходимые для получения итогового размера заработной платы сотрудника. Мы остановимся в разработке "зарплатной" подсистемы нашей конфигурации на данном этапе - при желании вы можете расширять ее возможности, основываясь на уже полученных в ранее изученном курсе знаниях.

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

    1.7. О перерасчетах

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

    Как мы видели выше, между различными видами расчета возможны достаточно сложные взаимосвязи. Например, у нас есть вид расчета А, базовым видом расчета для которого является вид расчета Б. Запись регистра с видом расчета А должна быть пересчитана в том случае, если изменилась запись с видом расчета Б. Информация, предоставляемая перерасчетами носит уведомительный характер - то есть разработчик должен самостоятельно принять решение о том, нужно ли производить перерасчет.

    1.8. Рекомендации по дальнейшему изучению

    Понимая принципы работы регистров расчета и планов видов расчета, вы можете продолжить дальнейшее изучение этой темы. Как и в случае с другими механизмами, рекомендуется изучить справочную систему 1С:Предприятие 8 в части описания интересующих вас объектов.

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

    (рис 1.16) Включение возможности редактирования конфигурации

    После нажатия на эту кнопку появится окно, рис 1.17. Ответьте утвердительно на вопрос системы, и конфигурацию можно будет редактировать в учебных (или практических) целях.

    (рис 1.17) Запрос системы о подтверждении разрешения редактировании конфигурации

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

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

    1.9. Выводы

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

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

    1.10. Видеоурок

    Для данной лекции подготовлен видеоурок.

    Вернуться к учебному плану