Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Форма отчета по практике 015Прс.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

4.3 Разработка кода программного продукта

Код документа «Табель»

Процедура ОбработкаПроведения(Отказ, Режим)

// регистр ОтработаныеДни

Движения.ОтработаныеДни.Записывать = Истина;

Для Каждого ТекСтрокаСотрудники Из Сотрудники Цикл

Сотр = ТекСтрокаСотрудники.Сотрудник;

ДобавитьДвижение(Сотр,ТекСтрокаСотрудники.ПН,0);

ДобавитьДвижение(Сотр,ТекСтрокаСотрудники.ВТ,1);

ДобавитьДвижение(Сотр,ТекСтрокаСотрудники.СР,2);

ДобавитьДвижение(Сотр,ТекСтрокаСотрудники.ЧТ,3);

ДобавитьДвижение(Сотр,ТекСтрокаСотрудники.ПТ,4);

ДобавитьДвижение(Сотр,ТекСтрокаСотрудники.СБ,5);

ДобавитьДвижение(Сотр,ТекСтрокаСотрудники.ВС,6);

КонецЦикла;

РегистрацияПерерасчета(); // надо бы пересчитать оклад

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

Процедура ДобавитьДвижение(Сотрудник,ДН,Кол)

Движение = Движения.ОтработаныеДни.Добавить();

Движение.Период = НачалоНедели+Кол*60*60*24;

Движение.Сотрудник = Сотрудник;

Движение.Подразделение = Подразделение;

Движение.Значение = ?(ДН,1,0);

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

Процедура РегистрацияПерерасчета()

//получим документы по которым будем перерасчитывать и их записи

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

Запрос.Текст =

"ВЫБРАТЬ

| ТабельСотрудники.Сотрудник КАК Сотрудник,

| ТабельСотрудники.Ссылка.НачалоНедели КАК НачалоНедели

|ПОМЕСТИТЬ ТЧ

|ИЗ

| Документ.Табель.Сотрудники КАК ТабельСотрудники

|ГДЕ

| ТабельСотрудники.Ссылка = &Ссылка

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

| ТабельСотрудники.Сотрудник,

| ТабельСотрудники.Ссылка.НачалоНедели

|

|ИНДЕКСИРОВАТЬ ПО

| Сотрудник,

| НачалоНедели

|;

|ВЫБРАТЬ

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

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

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

| ОсновныеНачисленияДанныеГрафика.Подразделение

|ИЗ

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

| Сотрудник В

| (ВЫБРАТЬ

| ТЧ.Сотрудник

| ИЗ

| ТЧ КАК ТЧ)

| И (ПериодДействияНачало МЕЖДУ &НачНед И &КонНед)) КАК ОсновныеНачисленияДанныеГрафика

|

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

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

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

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

| ОсновныеНачисленияДанныеГрафика.Подразделение

|ИТОГИ ПО

| Регистратор";

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

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

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

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

ВыборкаРегистратор = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаРегистратор.Следующий() Цикл

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

Набор.Отбор.ОбъектПерерасчета.Значение = ВыборкаРегистратор.Регистратор;

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

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

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

Запись.ВидРасчета = ВыборкаДетальныеЗаписи.ВидРасчета;

Запись.ОбъектПерерасчета = ВыборкаРегистратор.Регистратор;

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

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

КонецЦикла;

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

КонецЦикла;

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

Код документа «Расходная накладная»

Процедура ОбработкаПроведения(Отказ, Режим)

// регистр Продажи

Движения.Продажи.Записывать = Истина;

Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры Цикл

Движение = Движения.Продажи.Добавить();

Движение.Период = Дата;

Движение.Подразделение = Подразделение;

Движение.Сумма = ТекСтрокаСписокНоменклатуры.Сумма;

КонецЦикла;

РегистрацияПерерасчета();

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

Процедура РегистрацияПерерасчета()

//получим документы по которым будем перерасчитывать и их записи

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

Запрос.Текст =

"ВЫБРАТЬ

| ДополнительныеНачисления.Регистратор КАК Регистратор,

| ДополнительныеНачисления.ВидРасчета,

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

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

|ИЗ

| РегистрРасчета.ДополнительныеНачисления КАК ДополнительныеНачисления

|ГДЕ

| ДополнительныеНачисления.Подразделение = &Подразделение

| И ДополнительныеНачисления.ВидРасчета = &ВидРасчета

| И &ДатаДок МЕЖДУ ДополнительныеНачисления.БазовыйПериодНачало И ДополнительныеНачисления.БазовыйПериодКонец

|

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

| ДополнительныеНачисления.Регистратор,

| ДополнительныеНачисления.ВидРасчета,

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

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

|

|УПОРЯДОЧИТЬ ПО

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

|ИТОГИ ПО

| Регистратор";

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

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

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

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

ВыборкаРегистратор = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаРегистратор.Следующий() Цикл

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

Набор.Отбор.ОбъектПерерасчета.Значение = ВыборкаРегистратор.Регистратор;

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

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

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

Запись.ВидРасчета = ВыборкаДетальныеЗаписи.ВидРасчета;

Запись.ОбъектПерерасчета = ВыборкаРегистратор.Регистратор;

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

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

КонецЦикла;

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

КонецЦикла;

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

Код документа «Начисление зарплаты»

Процедура ОбработкаПроведения(Отказ, Режим)

// регистр ОсновныеНачисления

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

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

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

// разделение периода на недели

НачДата = НачалоДня(ТекСтрокаОсновныеНачисления.ДатаНачала);

КонДата = КонецДня(ТекСтрокаОсновныеНачисления.ДатаОкончания);

ТекДата = КонецДня(НачДата);

Пока ТекДата<=КонДата Цикл

Если ТекДата = КонецНедели(НачДата) или ТекДата = КонДата Тогда

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

Движение = Движения.ОсновныеНачисления.Добавить();

Движение.Сторно = Ложь;

Движение.ВидРасчета = ТекСтрокаОсновныеНачисления.ВидРасчета;

Движение.ПериодДействияНачало = НачДата;

Движение.ПериодДействияКонец = ТекДата;

Движение.ПериодРегистрации = ПериодРегистрации;

Движение.Сотрудник = ТекСтрокаОсновныеНачисления.Сотрудник;

Движение.Подразделение = ТекСтрокаОсновныеНачисления.Подразделение;

Движение.График = ТекСтрокаОсновныеНачисления.График;

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

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

Движение.Сторно = Ложь;

Движение.ВидРасчета = ТекСтрокаОсновныеНачисления.ВидРасчета;

Движение.ПериодРегистрации = ПериодРегистрации;

Движение.БазовыйПериодНачало = НачалоКвартала(НачалоКвартала(НачДата)-1);

Движение.БазовыйПериодКонец = НачалоКвартала(НачДата)-1;

Движение.Сотрудник = ТекСтрокаОсновныеНачисления.Сотрудник;

Движение.Подразделение = ТекСтрокаОсновныеНачисления.Подразделение;

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

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

Движение.Сторно = Ложь;

Движение.ВидРасчета = ТекСтрокаОсновныеНачисления.ВидРасчета;

Движение.БазовыйПериодНачало = НачДата;

Движение.БазовыйПериодКонец = ТекДата;

Движение.ПериодРегистрации = ПериодРегистрации;

Движение.Сотрудник = ТекСтрокаОсновныеНачисления.Сотрудник;

Движение.Подразделение = ТекСтрокаОсновныеНачисления.Подразделение;

КонецЕсли;

НачДата = ТекДата+1;

КонецЕсли;

ТекДата = ТекДата+24*60*60;

КонецЦикла;

КонецЦикла;

Движения.Записать();

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

Запрос.Текст =

"ВЫБРАТЬ

| НЗ.ВидРасчета КАК ВидРасчета,

| НЗ.Сотрудник,

| ВЫБОР

| КОГДА НЗ.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисления.Оклад)

| ТОГДА 0

| КОГДА НЗ.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ДополнительныеНачисления.Премия)

| ТОГДА 1

| КОГДА НЗ.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ДополнительныеНачисления.Надбавка)

| ТОГДА 2

| КОНЕЦ КАК Порядок

|ИЗ

| Документ.НачислениеЗарплаты.ОсновныеНачисления КАК НЗ

|ГДЕ

| НЗ.Ссылка = &Ссылка

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

| НЗ.ВидРасчета,

| НЗ.Сотрудник,

| ВЫБОР

| КОГДА НЗ.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисления.Оклад)

| ТОГДА 0

| КОГДА НЗ.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ДополнительныеНачисления.Премия)

| ТОГДА 1

| КОГДА НЗ.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ДополнительныеНачисления.Надбавка)

| ТОГДА 2

| КОНЕЦ

|УПОРЯДОЧИТЬ ПО

| Порядок

|ИТОГИ ПО

| ВидРасчета";

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

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

ВыборкаВидРасчета = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаВидРасчета.Следующий() Цикл

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

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

МассивСотрудников.Добавить(ВыборкаДетальныеЗаписи.Сотрудник);

КонецЦикла;

ИмяРегистра = ВыборкаВидРасчета.ВидРасчета.Метаданные().Имя;

ВычисленияНаСервере.Расчет(Движения[ИмяРегистра],ВыборкаВидРасчета.ВидРасчета,МассивСотрудников);

Движения[ИмяРегистра].Записать(,Истина);

КонецЦикла;

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