- •Введенине
- •1. Краткое описание предприятия «ооо Профи-т»
- •Сфера деятельности предприятия:
- •Услуги:
- •2. Решение задачи оперативного учета
- •2.1 Описание предметной области
- •2.2 Разработка объектов на базе каркасной конфигурации
- •3.1 Описание предметной области
- •2.3 Разработка кода программного продукта
- •3 Решение задачи бухгалтерского учета
- •3.2 Разработка объектов на базе каркасной конфигурации
- •3.3 Разработка кода программного продукта
- •4 Решение задачи со сложными периодическими расчетами
- •4.1 Описание предметной области
- •4.2 Разработка объектов на базе каркасной конфигурации
- •4.3 Разработка кода программного продукта
- •5 Решение задач с использованием механизмов бизнес-процессов
- •5.1 Описание предметной области
- •Разработка объектов на базе каркасной конфигурации
- •6.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
| КОНЕЦ
|УПОРЯДОЧИТЬ ПО
| Порядок
|ИТОГИ ПО
| ВидРасчета";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Результат = Запрос.Выполнить();
ВыборкаВидРасчета = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаВидРасчета.Следующий() Цикл
ВыборкаДетальныеЗаписи = ВыборкаВидРасчета.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
МассивСотрудников.Добавить(ВыборкаДетальныеЗаписи.Сотрудник);
КонецЦикла;
ИмяРегистра = ВыборкаВидРасчета.ВидРасчета.Метаданные().Имя;
ВычисленияНаСервере.Расчет(Движения[ИмяРегистра],ВыборкаВидРасчета.ВидРасчета,МассивСотрудников);
Движения[ИмяРегистра].Записать(,Истина);
КонецЦикла;
КонецПроцедуры
