Файлы информационной базы Вы можете скачать здесь.
Цель лекции: Освоить использование
Напомним, разрабатывая учебную конфигурацию, мы занимаемся автоматизацией салона красоты. В салоне работают сотрудники, которым нужно начислять и выплачивать заработную плату.
Сразу хочется отметить, что задачи, касающиеся расчета зарплаты являются одними из наиболее сложных и трудоемких. Поэтому, если взглянуть на существующие типовые конфигурации, предназначенные для ведения учета, например, это касается конфигурации "1С:Бухгалтерия 8", "1С:Бухгалтерия бюджетного учреждения 8", окажется, что в этих конфигурациях задачи, касающиеся заработной платы, реализованы лишь на базовом уровне, который позволяет учитывать начисление зарплаты, начисление налогов (
Как правило, в подсистему кадрового учета входят такие компоненты, как документы и другие объекты системы, обеспечивающие следующие операции:
Помимо документов, кадровая подсистема включает в себя набор регистров, который позволяет хранить сведения о сотрудниках, об их начислениях и удержаниях. Так, для хранения таких сведений, как перечни и размеры начислений и удержаний, назначенных сотрудникам, применяются
Подсистема учета заработной платы обычно включает в себя такие документы:
Выше перечислен лишь ограниченный набор документов. В реальных конфигурациях их гораздо больше. Это обусловлено законодательством в области учета заработной платы. Так, невыплаченная зарплата депонируется, помимо обычной заработной платы сотрудникам выплачиваются авансы, осуществляется расчет "зарплатных" налогов и т.д.
Естественно, подсистемы учета кадров и заработной платы оснащают множеством отчетов.
Мы реализуем "зарплатную" часть нашей конфигурации в упрощенном виде. Создадим подсистему расчета с использованием
Подсистема расчета заработной платы будет включать в себя следующие компоненты.
| Справочники | |
| Документы: | |
Некоторые из объектов, которые будут включать наша подсистема (рис 1.1), уже реализованы в учебной конфигурации.
(рис 1.1) Дерево конфигурацииНачнем разработку зарплатной подсистемы с работы над справочниками и регистрами сведений, которые понадобятся нам в дальнейшем. Нас устроят следующие существующие справочники:
Создадим справочник Графики работы. Мы будем применять этот справочник для хранения наименований графиков работы, которые будут назначаться сотрудникам при приеме на работу. Справочник Графики работы будет использоваться совместно с регистром сведений Рабочие дни по графику. Регистр будет содержать сведения о том, какие именно дни являются рабочими при работе по данному графику.
Справочник будет содержать лишь один реквизит Примечание - строку длиной 30 символов. В этом реквизите планируется указывать сведения о графике, являющиеся существенными для понимания особенностей его применения. Например, элемент графика "Шестидневка" можно снабдить примечанием "7-й день выходной" и т.д. В следующей лекции мы рассмотрим обработку, предназначенную для автоматизированного заполнения графиков, в работе которой используется поле Примечание, содержащее номера выходных дней графика.
(рис 1.2) Справочник Графики работыСоздадим
(рис 1.3) Настройка основных свойств регистра сведенийЗаписи в такой регистр можно делать вручную, без использования документов-регистраторов. Периодичность имеет смысл устанавливать для тех регистров, которые хранят какие-либо регулярно изменяющиеся данные. Например, если мы хотим создать
При создании
(рис 1.4) Настройка состава данных регистра сведенийСоздадим следующие измерения:
| Дата | тип - Дата, состав даты - Дата ; |
| График | тип - СправочникСсылка.ГрафикиРаботы, установим галочку Ведущее в окне свойств измерения. Установка этого свойства позволяет подчинить запись регистра объекту, который записывается в данное измерение. |
Создадим ресурс РабочийДень, тип - Число, длина - 1, точность 0. Этот ресурс будем устанавливать в 1 для рабочего дня и в 0 для выходного дня.
Ресурсы
Создадим реквизит Примечание, тип - строка, длина 50. Будем использовать этот реквизит для ввода замечаний по поводу тех или иных дней. В частности, примечаний о выходных днях, которые переносятся на рабочие дни в том случае, если праздничный день совпадает с выходным днем.
Остальные параметры
Продолжим работу, займемся
Прежде чем приступать к проектированию
| Начисление / удержание | Способ расчета | Особенности расчета |
|---|---|---|
| Оклад | Рассчитывается пропорционально отработанным дням | Если сотрудник, которому назначен этот вид начисления, отработал все дни, предусмотренные соответствующим графиком, ему начисляется полный размер оклада. Если нет - оклад уменьшается пропорционально отработанным дням. |
| Премия | Процентом от расчетной базы | При расчете задается процент, который берется от оклада, который начислен за текущий месяц |
| Удержание | Фиксированная сумма | Задается фиксированная сумма, которая будет удержана с сотрудника |
| Прогул | Нулевая сумма | Если у сотрудника был прогул, этот факт фиксируется вводом информации о прогуле. При расчете заработной платы оклад не платится за те дни, в которые у сотрудника был прогул. |
Каждое из перечисленных начислений или удержаний называется в терминах 1С:Предприятие
Так, начисление Оклад рассчитывается с учетом отработанных дней. Скажем, при приеме на работу работнику был назначен оклад в размере 20000 рублей. Если в месяц, за который начисляется заработная плата, было 20 рабочих дней, а работник отработал 19 из них, окажется, что в качестве оклада ему должно быть начислено 19000 рублей. Оклад зависит лишь от количества отработанных дней и от суммы оклада.
Премию имеет смысл считать лишь тогда, когда будет рассчитан тот вид начисления, который влияет на ее расчет. Это - Оклад. Для расчета премии от величины оклада за месяц берется определенный процент.
Удержание зависит лишь от заданной суммы.
Прогул - этот
На закладке .
(рис 1.5) Настройка плана видов расчета ОсновнойПерейдем на вкладку Прочее окна настройки и зададим предопределенные
Создадим
(рис 1.6) Предопределенный вид расчета ОкладСоздадим
(рис 1.7) Настройка вкладки Базовые вида расчета ПремияТак же, при настройке
Добавим
Теперь создаем
Откроем окно настройки
(рис 1.8) Настройка вкладки Вытесняющие вида расчета ОкладОткроем окно настройки
(рис 1.9) Настройка вкладки Ведущие вида расчета ПремияРассмотрим
Теперь все готово для работы над
Создадим новый
(рис 1.10) Настройка вкладки Основные окна свойств регистра расчетаВ поле План видов расчета зададим недавно созданный
Установим флажок Период действия - это означает, что в регистре могут присутствовать
В поле График нам нужно будет указать
Установим флаг Базовый период.
Зададим в группе параметров Периодичность параметр Месяц.
Перейдем на вкладку :
(рис 1.11) Настройка вкладки Данные окна свойств регистра расчетаИзмерение Сотрудник - тип СправочникСсылка.Сотрудники, флаг Базовое установлен. Будем хранить в этом измерении сотрудника, по которому ведется расчет.
Ресурс Результат - тип Число, длина 10, точность 2. Именно этот ресурс будет содержать вычисленное значение
Реквизит ИсходныеДанные - тип число, длина 10, точность 2. В этот реквизит мы будем записывать исходные данные для расчета. Например, для
Реквизит График - тип СправочникСсылка.ГрафикиРаботы. В этом реквизите будем хранить график, который соответствует сотруднику, для которого мы начисляем заработную плату. В свойстве этого реквизита Связь с графиком установим измерение График
Прежде чем продолжать настройку параметров
Создадим новый документ, дадим ему имя НачислениеЗарплаты. Этот документ должен иметь следующую функциональность:
Перейдем на вкладку . Создадим реквизит документа ПериодРегистрации - тип Дата, состав даты - Дата.
(рис 1.12) Настройка вкладки Данные окна свойств документаСоздадим табличную часть НачисленияИУдержания. Создадим в ней следующие реквизиты:
| Сотрудник | - тип СправочникСсылка.Сотрудники ; |
| ВидРасчета | - тип ПланВидовРасчетаСсылка.Основной ; |
| График | - тип СправочникСсылка.ГрафикиРаботы ; |
| ИсходныеДанные | - число, длина 10, точность 2; |
| ДатаНачала и ДатаОкончания | - Дата, состав даты - Дата. |
Теперь перейдем на вкладку Движения. Запретим оперативное
Нажмем на кнопку .
(рис 1.13) Работа с конструктором движенийПри заполнении полей, задающих правила формирования движений мы заполним их следующим образом:
| ВидРасчета | - ТекСтрокаНачисленияИУдержания. |
| ПериодДействияНачало | - это поле мы заполняем значением реквизита табличной части ДатаНачала |
| ПериодДействияКонец | - это поле мы заполняем значением реквизита табличной части ДатаОкончания |
| ПериодРегистрации | - это поле мы заполним значением реквизита ПериодРегистрации ; |
БазовыйПериодНачало и БазовыйПериодКонец в конструкторе мы заполнять не будем. Эти поля нужны нам для
| Сотрудник | - воспользуемся соответствующим параметром табличной части. |
| Результат | - этот параметр мы будем вычислять, именно он является результатом начисления заработной платы по каждому из |
| ИсходныеДанные | - воспользуемся параметром ИсходныеДанные из табличной части. |
| График | - воспользуемся параметром График из табличной части. |
Нажмем на кнопку ОК в окне конструктора движений и посмотрим, какой код он сформировал:
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Для Каждого ТекСтрокаНачисленияИУдержания Из НачисленияИУдержания Цикл
// регистр НачисленияИУдержания
Движение = Движения.НачисленияИУдержания.Добавить();
Движение.Сторно = Ложь;
Движение.ВидРасчета = ТекСтрокаНачисленияИУдержания.ВидРасчета;
Движение.ПериодДействияНачало = ТекСтрокаНачисленияИУдержания.ДатаНачала;
Движение.ПериодДействияКонец = ТекСтрокаНачисленияИУдержания.ДатаОкончания;
Движение.ПериодРегистрации = ПериодРегистрации;
Движение.Сотрудник = ТекСтрокаНачисленияИУдержания.Сотрудник;
Движение.ИсходныеДанные = ТекСтрокаНачисленияИУдержания.ИсходныеДанные;
Движение.График = ТекСтрокаНачисленияИУдержания.График;
КонецЦикла;
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Очевидно, что для каждой строки табличной части создается новый элемент коллекции документа Движения.НачисленияИУдержания, после чего заполняются свойства нового элемента.
Модифицируем этот код таким образом, чтобы задать параметры
Если ТекСтрокаНачисленияИУдержания.ВидРасчета= ПланыВидовРасчета.Основной.Премия Тогда Движение.БазовыйПериодНачало=НачалоМесяца(ПериодРегистрации); Движение.БазовыйПериодКонец=КонецМесяца(ПериодРегистрации); КонецЕсли;
Теперь немного изменим ту часть кода, которая задает начало и конец
Если Движение.ВидРасчета=ПланыВидовРасчета.Основной.Прогул Тогда Движение.ПериодДействияНачало = ТекСтрокаНачисленияИУдержания.ДатаНачала; Движение.ПериодДействияКонец = ТекСтрокаНачисленияИУдержания.ДатаОкончания; Иначе Движение.ПериодДействияНачало = НачалоМесяца(ПериодРегистрации); Движение.ПериодДействияКонец = КонецМесяца(ПериодРегистрации); КонецЕсли;
Этот код заменит строки
Движение.ПериодДействияНачало = ТекСтрокаНачисленияИУдержания.ДатаНачала; Движение.ПериодДействияКонец = ТекСтрокаНачисленияИУдержания.ДатаОкончания;
После всех этих действий документ при проведении будет добавлять в
Прежде чем создавать реальный документ по начислению зарплаты, нужно ввести в справочник Графики работы хотя бы пару графиков и заполнить для них регистр Рабочие дни по графику. Заполним этот регистр вручную, например, для пары графиков за один месяц.
На рис 1.14 вы можете видеть документ, который мы заполнили, и движения в
(рис 1.14) Документ и движения в регистре, которые он произвелЕсли все перенесено верно, а в нашем случае это именно так, мы можем приступать к реализации процедуры расчета. Сделаем это в том же модуле, в котором осуществляется формирование движений.
Сразу хотелось бы отметить, что в существующих конфигурациях обычно применяются несколько другие методы реализации расчетных процедур. В частности, для них характерна следующая последовательность действий. После того, как документ сформировал движения по регистру, происходит запись данных в регистр, после чего управление передается в расчетную процедуру общего модуля с установленным свойством Сервер, что актуально в том случае, если система работает в клиент-серверном режиме. В процедуре, с помощью запроса к таблицам
Добавим в процедуру
Движения.НачисленияИУдержания.Записать();
Эта команда должна следовать за командой закрытия цикла формирования движений.
Добавим в код блок расчета удержания. В соответствии с логикой заданных ранее
Для Каждого Движение из Движения.НачисленияИУдержания Цикл Если Движение.ВидРасчета=ПланыВидовРасчета.Основной.Удержание Тогда Движение.Результат=Движение.ИсходныеДанные; КонецЕсли; КонецЦикла; Движения.НачисленияИУдержания.Записать();
Теперь займемся расчетом оклада.
Для Каждого Движение из Движения.НачисленияИУдержания Цикл Если Движение.ВидРасчета=ПланыВидовРасчета.Основной.Оклад Тогда План = Движение.ПолучитьДанныеГрафика(ВидПериодаРегистраРасчета.ПериодДействия); Факт= Движение.ПолучитьДанныеГрафика(ВидПериодаРегистраРасчета.ФактическийПериодДействия); Движение.Результат= Движение.ИсходныеДанные*Факт[0].РабочийДень/План[0].РабочийДень; КонецЕсли; КонецЦикла; Движения.НачисленияИУдержания.Записать();
Метод ПолучитьДанныеГрафика записи
Запись вида Факт[0] позволяет обратиться к строке таблицы значений. А записью Факт[0].РабочийДень (напомним, РабочийДень - это имя ресурса
В итоге, получив нужные данные, мы проводим следующие манипуляции: делим фактическое количество отработанных дней на плановое и умножаем на размер оклада.
И, наконец, последним этапом нашей расчетной задачи является расчет премии. Его мы реализуем с помощью следующего кода:
Ресурсы=Новый Массив(1);
Ресурсы[0]="НачисленияИУдержания.Результат";
Измерения =Новый Структура ("Сотрудник", "НачисленияИУдержания.Сотрудник");
Для Каждого Движение из Движения.НачисленияИУдержания Цикл
Если Движение.ВидРасчета=ПланыВидовРасчета.Основной.Премия Тогда
ДанныеБазы=Движение.ПолучитьБазу(Ресурсы, Измерения);
Движение.Результат=Движение.ИсходныеДанные*ДанныеБазы[0].Результат/100;
КонецЕсли;
КонецЦикла;
Движения.НачисленияИУдержания.Записать();
Для начала мы подготовим параметры для передачи в метод ПолучитьБазу. Это будет массив Ресурсы, который в нашем случае содержит имя ресурса базового
В цикле мы записываем в переменную ДанныеБазы результаты выполнения метода ПолучитьБазу для текущей записи
Вспомним, как называется ресурс
После того, как расчетная база получена, мы рассчитываем размер премии. Так как при заполнении документа подразумевается, что мы вводим процентное значение премии в виде количества процентов (10, 40 и т.д.), то для того, чтобы узнать размер премии, мы должны введенный процентный размер премии разделить на 100 и уже после этого умножать на полученную расчетную базу.
После того, как все вышеперечисленные действия выполнены, мы можем испытать наше решение на практике. Если все выполнено верно - в поле .
(рис 1.15) Результаты начисления заработной платы в регистре расчетаТеперь в
В реально существующих конфигурациях на одном из этапов работы проводятся расчеты налоговых платежей, отчислений на социальные нужды. После того, как все расчеты завершены, формируется итоговая сумма к выплате работнику. Для этих целей часто используют возможности
Объект конфигурации Регистр расчета может содержать подчиненные объекты - Перерасчеты. Их основная роль заключается в предоставлении разработчику информации о том, какие записи регистра должны быть пересчитаны после изменения других записей. Решение о необходимости перерасчета принимается на основе анализа взаимосвязей
Как мы видели выше, между различными
Понимая принципы работы
Кроме того, рекомендуется изучить соответствующие части тиражных конфигураций. Эти конфигурации можно и нужно изучать, при необходимости внося изменения в код и в состав объектов конфигурации. Как правило, изначально конфигурации поставляются в закрытом для редактирования виде. Это сделано для того, чтобы даже неподготовленные пользователи могли без проблем обновлять такие конфигурации с помощью периодически выпускаемых комплектов обновлений. Для того, чтобы открыть подобную конфигурацию для редактирования, нужно в Конфигураторе сначала выполнить команду Конфигурация>Открыть конфигурацию - в том случае, если
(рис 1.16) Включение возможности редактирования конфигурацииПосле нажатия на эту кнопку появится окно, рис 1.17. Ответьте утвердительно на вопрос системы, и конфигурацию можно будет редактировать в учебных (или практических) целях.
(рис 1.17) Запрос системы о подтверждении разрешения редактировании конфигурацииДля того, чтобы окончательно снять с поддержки конфигурацию и открыть доступ к редактированию всех ее элементов, следует, после того, как будет включена возможность редактирования конфигурации, нажать на кнопку ), которая станет активной.
Еще один ценный, постоянно обновляемый источник информации по различным аспектам разработки для 1С:Предприятие - это диски ИТС (Информационно-Технологическое Сопровождение), которые распространяются фирмой 1С по подписке среди зарегистрированных пользователей системы. Если в вашей организации пользуются одной из тиражных конфигураций (бюджетной или хозрасчетной), для получения обновлений организация должна быть подписана на ИТС. Особенно ценны в плане получения дополнительной информации ИТС-диски серии ПРОФ - они, помимо обновлений, содержат множество полезных статей, справочников и других данных.
В этой лекции мы рассмотрели основные принципы работы с
Наша следующая лекция посвящена разработке справочной системы конфигурации, методам отладки и некоторым дополнительным темам.
Для данной лекции подготовлен видеоурок.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.