четверг, 1 сентября 2016 г.

Расчет отработанных дней

Расчет отработанных дней

Поиск количества рабочих дней от текущей даты в данном месяце.
После получения количества производится запись в справочник по определенному условию.
В условии прописан только данный действующий текущий месяц.
После произведения записи, при последующем вызове данной процедуры производится проверка на уже имеющиеся действительные данные на сегодняшний день.
Если уже данные присутствуют и они правильные то дальнейшая обработка не производится.


&НаСервере
Процедура РасчетОтработанныхРабочихДней()

КоличествоОтрДн = КоличествоОтработанныхРабочихДней ();
МесяцВыбор =Формат(ТекущаяДата(),"ДФ=ММММ");
Выборка = Справочники.ПланПоОтгрузкеПоОплате.Выбрать();

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

ОбъектСправочника = Выборка.ПолучитьОбъект();
ОбъектСсылка = ОбъектСправочника.Ссылка;

Если ОбъектСсылка.Месяц = Перечисления.НазванияМесяцев.Январь И МесяцВыбор = "Январь" Тогда
ОбъектСправочника.КоличОтДней = КоличествоОтрДн;
КонецЕсли;

Если ОбъектСсылка.Месяц = Перечисления.НазванияМесяцев.Февраль И МесяцВыбор = "Февраль" Тогда
ОбъектСправочника.КоличОтДней = КоличествоОтрДн;
КонецЕсли;

Если ОбъектСсылка.Месяц = Перечисления.НазванияМесяцев.Март И МесяцВыбор = "Март" Тогда
ОбъектСправочника.КоличОтДней = КоличествоОтрДн;
КонецЕсли;

Если ОбъектСсылка.Месяц = Перечисления.НазванияМесяцев.Апрель И МесяцВыбор = "Апрель" Тогда
ОбъектСправочника.КоличОтДней = КоличествоОтрДн;
КонецЕсли;

Если ОбъектСсылка.Месяц = Перечисления.НазванияМесяцев.Май И МесяцВыбор = "Май" Тогда
ОбъектСправочника.КоличОтДней = КоличествоОтрДн;
КонецЕсли;

Если ОбъектСсылка.Месяц = Перечисления.НазванияМесяцев.Июнь И МесяцВыбор = "Июнь" Тогда
ОбъектСправочника.КоличОтДней = КоличествоОтрДн;
КонецЕсли;

Если ОбъектСсылка.Месяц = Перечисления.НазванияМесяцев.Июль И МесяцВыбор = "Июль" Тогда
ОбъектСправочника.КоличОтДней = КоличествоОтрДн;
КонецЕсли;

Если ОбъектСсылка.Месяц = Перечисления.НазванияМесяцев.Август И МесяцВыбор = "Август" Тогда
ОбъектСправочника.КоличОтДней = КоличествоОтрДн;
КонецЕсли;

Если ОбъектСсылка.Месяц = Перечисления.НазванияМесяцев.Сентябрь И МесяцВыбор = "Сентябрь" Тогда
ОбъектСправочника.КоличОтДней = КоличествоОтрДн;
КонецЕсли;

Если ОбъектСсылка.Месяц = Перечисления.НазванияМесяцев.Октябрь И МесяцВыбор = "Октябрь" Тогда
ОбъектСправочника.КоличОтДней = КоличествоОтрДн
КонецЕсли;

Если ОбъектСсылка.Месяц = Перечисления.НазванияМесяцев.Ноябрь И МесяцВыбор = "Ноябрь" Тогда
Если ОбъектСправочника.КоличОтДней = КоличествоОтрДн Тогда
Возврат
Иначе
ОбъектСправочника.КоличОтДней = КоличествоОтрДн
КонецЕсли
КонецЕсли;

Если ОбъектСсылка.Месяц = Перечисления.НазванияМесяцев.Декабрь И МесяцВыбор = "Декабрь" Тогда
ОбъектСправочника.КоличОтДней = КоличествоОтрДн
КонецЕсли;

ОбъектСправочника.Записать();
КонецЦикла

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

//master+ 041115
&НаСервере
Функция КоличествоОтработанныхРабочихДней()

Дата = ТекущаяДата();

Число = 0;
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("ПроизводственныйКалендарь", Справочники.ПроизводственныеКалендари.НайтиПоКоду("РФ"));
Запрос.УстановитьПараметр("Дата", Дата);
Запрос.Текст =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(ДанныеПроизводственногоКалендаря.Дата) КАК Количество
|ИЗ
| РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
|ГДЕ
| ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь = &ПроизводственныйКалендарь
| И ДанныеПроизводственногоКалендаря.Дата >= НАЧАЛОПЕРИОДА(&Дата, МЕСЯЦ)
| И ДанныеПроизводственногоКалендаря.Дата <= КОНЕЦПЕРИОДА(&Дата, ДЕНЬ)
| И (ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
| ИЛИ ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))";
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
КоличествоОтработДней = Выборка.Количество
КонецЕсли;
Возврат КоличествоОтработДней

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

Комментариев нет:

Отправить комментарий