Смекни!
smekni.com

Описание функционирования организации (стр. 10 из 12)

|ГДЕ

| ВыполнениеДоговоровОстаткиИОбороты.Договор = &Договор";

Запрос.УстановитьПараметр("Договор",Договор);

Табл=Запрос.Выполнить().Выгрузить();

Для каждого СтрокаТаблицыЗначений из Табл Цикл

Долг=СтрокаТаблицыЗначений.СуммаКонечныйОстаток;

Док=Документы.Договор.НайтиПоНомеру(Договор.Номер);

Объект=Док.ПолучитьОбъект();

Объект.Долг=СтрокаТаблицыЗначений.СуммаКонечныйОстаток;

Объект.Записать();

КонецЦикла;

ЗП=Задачи.ЗадачаДляДоговора.Выбрать();

Пока ЗП.Следующий() цикл

Если ЗП.Наименование="Проверить долг" тогда

Если ЗП.Выполнена=Ложь и ЗП.Договор=Договор тогда

ЗП.ПолучитьОбъект().ВыполнитьЗадачу();

КонецЕсли

КонецЕсли

КонецЦикла

КонецПроцедуры

После завершения данной задачи маршрут бизнес-процесса подошел к точке условия. Проверка условия осуществляется по документу договор, ссылка на который установлена в бизнес-процессе (каждый бизнес-процесс соответствует одному договору).

Для формирования процедуры проверки на карте маршрута бизнес-процесса активизировать точку условия Выполнены обязательства, в разделе события активизировать событие проверка условия. Текст процедуры представлен ниже:

Процедура ВыполненыОбязательстваПроверкаУсловия(ТочкаМаршрутаБизнесПроцесса, Результат)

Если Договор.Долг>0 тогда

Результат=Ложь

Иначе

Результат=Истина

КонецЕсли

КонецПроцедуры

В соответствии с результатом проверки или опять создается задача Сформировать акт (вторая такая задача), или запускается задача Закрыть договор.

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

Для задачи Закрыть договор создать процедуру, открывающую форму закрываемого договора:

Процедура ЗакрытьДоговорПриСозданииЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, Отказ)

Для каждого Задача из ФормируемыеЗадачи цикл

Задача.Договор=Договор;

Дог=Документы.Договор.НайтиПоНомеру(Договор.Номер);

Дог.ПолучитьФорму("ФормаДокумента").Открыть();

КонецЦикла;

КонецПроцедуры

Завершение задачи Закрыть договор. Завершение бизнес-процесса.

Задача закрытия договора завершается, как только установлено значение Истина для поля Выполнено в форме документа соответствующего договора.

Процедура завершения указанной задачи формируется в модуле формы договора:

Процедура ВыполненПриИзменении(Элемент)

Если Выполнен=Истина тогда

ЗП=Задачи.ЗадачаДляДоговора.Выбрать();

Пока ЗП.Следующий() цикл

Если ЗП.Наименование="Закрыть договор" и ЗП.Выполнена=Ложь тогда

Если ЗП.Договор=Ссылка тогда

ЗП.ПолучитьОбъект().ВыполнитьЗадачу();

КонецЕсли

КонецЕсли

КонецЦикла

КонецЕсли

КонецПроцедуры

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

Процедура ЗавершениеПриЗавершении(ТочкаМаршрутаБизнесПроцесса, Отказ)

Предупреждение("Бизнес-процесс завершен",,"Окончание")

КонецПроцедуры

3.9 Поддержка периодических расчетов

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



Рис. 13. Общая схема периодического расчета выплат сотрудникам

В представленном случае можно выделить следующие составляющие (виды расчета): оклад, премия, невыход, больничный. Премия и больничные рассчитываются на основе оклада, или – оклад является базой для расчета премии и оплате по больничному листу. Причем, расчеты премии идут не просто на основании установленного оклада, а на окладе, приведенном к периоду. То есть если сотрудник работал только часть периода расчета (часть месяца), то и размер оклада и премия рассчитываются только за отработанные дни. Такая зависимость называется зависимостью по базовому периоду. В рассматриваемом примере период действия соответствует месяцу (смотри период расчета на Рис. 13). Фактическим периодом действия является: Период расчета - Дни невыхода – Дни на больничном. Такое влияние называется вытеснением по периоду действия.

Кроме того, для каждого расчета определяют:

Базовые виды расчета – те виды расчета, которые являются базой для устанавливаемого вида;

Вытесняющие виды расчета - те виды расчета, которые вытесняют устанавливаемый вид по периоду действия;

Ведущие виды расчета - те виды расчета, изменение результатов которых приводит к перерасчету устанавливаемого вида расчета.

Таблица 3

Виды начисления Базовые Вытесняющие Ведущие
Оклад НевыходБольничный
Невыход
Премия Оклад Больничный ОкладНевыход
Больничный Оклад Оклад

3.9.1 Формирование структур для поддержки периодических расчетов

Для поддержки обработки периодических расчетов в среде 1С:Предприятие существуют следующие объекты:

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

Регистр расчета – описывает структуру накопления данных, являющихся результатом расчетов. Данный регистр не предназначен для интерактивного редактирования пользователем.

Разработка планов видов расчетов

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

В качестве базовых планов видов расчетов указывается сам план ОсновныеНачисления.

На вкладке Прочее создать предопределенные планы видов расчета в соответствии с Таблица 3.

Создание вспомогательных справочников и регистров

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

Прежде всего необходимо создать два дополнительных справочника:

Должности. Реквизиты: Код, Наименование, Оклад.

Сотрудники: Код, Наименование, Должность.

Необходимо создать справочник ВидыГрафиковРабот. Реквизиты – Код, Наименование. Задать два предопределенных видов графиков: ГрафикАдминистрации, ГрафикИсполнителей.

Непосредственно сам график на каждый месяц будет формироваться в регистре сведений ГрафикиРабот. Необходимо создать соответствующий регистр сведений. Измерения регистра: График (тип данных – ссылка на ВидыГрафиковРабот), Дата. Ресурсы регистра – Значение, число длиной 1 (может принимать два значения: 1 – если день рабочий, в противном случае пусто).

Перейти в режим приложения и заполнить график в рамках календаря данного месяца.

Разработка регистра расчета

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

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

Применение вытеснения по периоду действия. То есть при появлении вида расчета с вытесняющим для данного действием (Невыход для Оклада) определяется фактический период действия, о котором говорилось выше (см. стр. 41).