Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сахнюк / Диплом.docx
Скачиваний:
28
Добавлен:
20.02.2016
Размер:
2.53 Mб
Скачать

Додатки

Додаток А

Програмний код елементів конфігурації

Лістинг А.1 – Код модуля розрахунку нарахувань

Функция Рассчитать(Ссылка, Движения) Экспорт

МассивВидовРасчетаОсн = Движения.ОсновныеНачисления.ВыгрузитьКолонку("ВидРасчета");

МассивВидовРасчетаДоп = Движения.ДополнительныеНачисления.ВыгрузитьКолонку("ВидРасчета");

//3. Расчитаем вид расчета "Оклад"

Если МассивВидовРасчетаОсн.Найти(ПланыВидовРасчета.ОсновныеНачисления.Оклад) <> Неопределено Тогда

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ

| ОсновныеНачисленияДанныеГрафика.НомерСтроки,

| ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.ЗначениеФактическийПериодДействия, 0) КАК ЧасовФакт,

| ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.ЗначениеПериодДействия, 0) КАК ЧасовНорма

|ИЗ

| РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(

| Регистратор = &Регистратор

| И ВидРасчета = &ВидРасчета) КАК ОсновныеНачисленияДанныеГрафика";

Запрос.УстановитьПараметр("Регистратор", Ссылка);

Запрос.УстановитьПараметр("ВидРасчета", ПланыВидовРасчета.ОсновныеНачисления.Оклад);

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

Выборка = Результат.Выбрать();

Продовження лістингу А.1:

СтруктураДляПоиска = Новый Структура("НомерСтроки");

Для каждого СтрокаНабора Из Движения.ОсновныеНачисления Цикл

Если Не СтрокаНабора.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда

Продолжить;

КонецЕсли;

СтруктураДляПоиска.НомерСтроки = СтрокаНабора.НомерСтроки;

Выборка.Сбросить();

Выборка.НайтиСледующий(СтруктураДляПоиска);

СтрокаНабора.Результат = СтрокаНабора.Размер * Выборка.ЧасовФакт / Выборка.ЧасовНорма;

КонецЦикла;

Движения.ОсновныеНачисления.Записать(, Истина);

КонецЕсли;

//4. Расчитаем вид расчета "Командировка"

Если МассивВидовРасчетаОсн.Найти(ПланыВидовРасчета.ОсновныеНачисления.Командировка) <> Неопределено Тогда

Для каждого СтрокаНабора Из Движения.ОсновныеНачисления Цикл

Если Не СтрокаНабора.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Командировка Тогда

Продолжить;

КонецЕсли;

СтрокаНабора.Результат = СтрокаНабора.Размер;

КонецЦикла;

Движения.ОсновныеНачисления.Записать(, Истина);

КонецЕсли;

//3. Расчитаем вид расчета "Премия"

Если МассивВидовРасчетаДоп.Найти(ПланыВидовРасчета.ДополнительныеНачисления.Премия) <> Неопределено Тогда

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ

| ДополнительныеНачисленияБазаОсновныеНачисления.НомерСтроки,

Продовження лістингу А.1:

| ДополнительныеНачисленияБазаОсновныеНачисления.Сотрудник,

| ДополнительныеНачисленияБазаОсновныеНачисления.Подразделение,

| ДополнительныеНачисленияБазаОсновныеНачисления.Должность,

| ДополнительныеНачисленияБазаОсновныеНачисления.РезультатБаза КАК ОкладБаза

|ИЗ

| РегистрРасчета.ДополнительныеНачисления.БазаОсновныеНачисления(

| &Измерения,

| &Измерения,

| ,

| Регистратор = &Регистратор

| И ВидРасчета = &ВидРасчета) КАК ДополнительныеНачисленияБазаОсновныеНачисления";

Измерения = Новый Массив;

Измерения.Добавить("Сотрудник");

Измерения.Добавить("Подразделение");

Измерения.Добавить("Должность");

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

Запрос.УстановитьПараметр("Регистратор", Ссылка);

Запрос.УстановитьПараметр("ВидРасчета", ПланыВидовРасчета.ДополнительныеНачисления.Премия);

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

Выборка = Результат.Выбрать();

СтруктураДляПоиска = Новый Структура("НомерСтроки");

Для каждого СтрокаНабора Из Движения.ДополнительныеНачисления Цикл

Если Не СтрокаНабора.ВидРасчета = ПланыВидовРасчета.ДополнительныеНачисления.Премия Тогда

Продолжить;

КонецЕсли;

Продовження лістингу А.1:

СтруктураДляПоиска.НомерСтроки = СтрокаНабора.НомерСтроки;

Выборка.Сбросить();

Если Выборка.НайтиСледующий(СтруктураДляПоиска) Тогда

СтрокаНабора.Результат = СтрокаНабора.Размер * Выборка.ОкладБаза / 10;

КонецЕсли;

КонецЦикла;

Движения.ДополнительныеНачисления.Записать(, Истина);

КонецЕсли;

КонецФункции

Лістинг А.2 – Код створення таблиці з відомостями про співробітників

Процедура СотрудникПриИзменении(Элемент)

// Вставить содержимое обработчика.

ЗаполнениеПодразделения();

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

Функция ЗаполнениеПодразделения()

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ

| ФизическиеЛица.Ссылка

|ИЗ

| Справочник.ФизическиеЛица КАК ФизическиеЛица";

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() цикл

Если Выборка.Ссылка = Запись.Сотрудник тогда

Запись.Подразделение= Выборка.Ссылка.Владелец;

КонецЕсли;

КонецЦикла;

КонецФункции

Лістинг А.3 – Код для переказу на зарплатну картку

&НаКлиенте

Процедура Перевести(Команда)

// Вставить содержимое обработчика.

ПереводЗП();

Продовження лістингу А.3:

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

&НаСервере

Функция ПереводЗП()

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ

| ОсновныеНачисления.Сотрудник,

| ОсновныеНачисления.Подразделение,

| ОсновныеНачисления.Должность,

| СУММА(ЕСТЬNULL(ОсновныеНачисления.Результат, 0)) КАК Результат,

| СУММА(ЕСТЬNULL(ДополнительныеНачисления.Результат, 0)) КАК РезультатПремия,

| ПлатежнаяКарточкаСотрудника.НомерКарточки,

| СведенияОСотрудникахСрезПоследних.Оклад КАК Оклад

|ИЗ

| РегистрРасчета.ОсновныеНачисления КАК ОсновныеНачисления

| ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ДополнительныеНачисления КАК ДополнительныеНачисления

| ПО ОсновныеНачисления.Сотрудник = ДополнительныеНачисления.Сотрудник

| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПлатежнаяКарточкаСотрудника КАК ПлатежнаяКарточкаСотрудника

| ПО ОсновныеНачисления.Сотрудник = ПлатежнаяКарточкаСотрудника.Сотрудник

| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОСотрудниках.СрезПоследних КАК СведенияОСотрудникахСрезПоследних

| ПО ОсновныеНачисления.Сотрудник = СведенияОСотрудникахСрезПоследних.Сотрудник

|ГДЕ

| ОсновныеНачисления.ПериодРегистрации МЕЖДУ &ДатаНачало И &ДатаКонец

|

|СГРУППИРОВАТЬ ПО

| ОсновныеНачисления.Сотрудник,

| ОсновныеНачисления.Подразделение,

| ОсновныеНачисления.Должность,

| ПлатежнаяКарточкаСотрудника.НомерКарточки,

| СведенияОСотрудникахСрезПоследних.Оклад";

Продовження лістингу А.3:

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

Запрос.УстановитьПараметр("ДатаКонец", Период.ДатаОкончания);

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() цикл

НаборЗаписи = РегистрыСведений.ПереводНаКарточку.СоздатьМенеджерЗаписи();

НаборЗаписи.Период = Период.ДатаОкончания;

НаборЗаписи.Сотрудник = Выборка.Сотрудник;

НаборЗаписи.Подразделение = Выборка.Подразделение;

НаборЗаписи.Должность = Выборка.Должность;

НаборЗаписи.НомерЗарплатнойКарточки = Выборка.НомерКарточки;

НаборЗаписи.Ставка = Выборка.Оклад;

НаборЗаписи.ОсновныеНачисления = Выборка.Результат;

НаборЗаписи.Премии = Выборка.РезультатПремия;

НаборЗаписи.СуммаНаВыплату = (Выборка.Результат) + (Выборка.РезультатПремия);

НаборЗаписи.Записать();

КонецЦикла;

Сообщить("Перевод успешно завершен");

КонецФункции

Лістинг А.4 – Код заповнення календарного графіку

&НаКлиенте

Процедура Заполнить(Команда)

ВыполнитьОбработку();

Сообщить("Обработка завершена!");

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

&НаСервере

Процедура ВыполнитьОбработку()

ОбработкаОбъект = РеквизитФормыВЗначение("Объект");

ОбработкаОбъект.ЗаполнитьГрафик(ВыборПериода.ДатаНачала, ВыборПериода.ДатаОкончания, ВыходныеДни);

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

Соседние файлы в папке сахнюк