Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 ноя 2024, 02:49

Запрос к производственному календарю.

Автор Gary_P, 19 ноя 2012, 09:56

0 Пользователей и 2 гостей просматривают эту тему.

Dethmontt

// Виды дней
Перем ВидДняРабочий;
Перем ВидДняСуббота;
Перем ВидДняВоскресенье;
Перем ВидДняПраздник;
Перем ВидДняПредпраздничный;


Процедура КнопкаВыполнитьНажатие(Кнопка)

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

РабочееВремя40Год = 0;
РабочееВремя36Год = 0;
РабочееВремя24Год = 0;

Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Год", 2012);
Результат = Запрос.Выполнить();
ВыборкаПоГоду = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоГоду.Следующий() Цикл
ВыборкаПоКварталу = ВыборкаПоГоду.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоКварталу.Следующий() Цикл

КалендарныеДниКв = 0;
РабочееВремя40Кв = 0;
РабочееВремя36Кв = 0;
РабочееВремя24Кв = 0;
РабочиеДниКв = 0;
ВыходныеДниКв = 0;

Если ВыборкаПоКварталу.КварталКалендаря = 1 или ВыборкаПоКварталу.КварталКалендаря = 3 тогда
КалендарныеДниПолугодие1 = 0;
РабочееВремя40Полугодие1 = 0;
РабочееВремя36Полугодие1 = 0;
РабочееВремя24Полугодие1 = 0;
РабочиеДниПолугодие1 = 0;
ВыходныеДниПолугодие1 = 0;
КонецЕсли;

Если ВыборкаПоКварталу.КварталКалендаря = 1 тогда
КалендарныеДниГод = 0;
РабочееВремя40Год = 0;
РабочееВремя36Год = 0;
РабочееВремя24Год = 0;
РабочиеДниГод = 0;
ВыходныеДниГод = 0;
КонецЕсли;

ВыборкаПоМесяцу = ВыборкаПоКварталу.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоМесяцу.Следующий() Цикл
ВыходныеДни = 0;
РабочееВремя40 = 0;
РабочееВремя36 = 0;
РабочееВремя24 = 0;
КалендарныеДни = 0;
РабочиеДни = 0;
ВыборкаПоВидуДня = ВыборкаПоМесяцу.Выбрать(ОбходРезультатаЗапроса.Прямой);
Пока ВыборкаПоВидуДня.Следующий() Цикл
Если ВыборкаПоВидуДня.ВидДня = ВидДняСуббота или
ВыборкаПоВидуДня.ВидДня = ВидДняВоскресенье или
ВыборкаПоВидуДня.ВидДня = ВидДняПраздник тогда
ВыходныеДни = ВыходныеДни + ВыборкаПоВидуДня.КалендарныеДни
ИначеЕсли ВыборкаПоВидуДня.ВидДня = ВидДняРабочий тогда
РабочееВремя40 = РабочееВремя40 + ВыборкаПоВидуДня.КалендарныеДни * 8;
РабочееВремя36 = РабочееВремя36 + ВыборкаПоВидуДня.КалендарныеДни*36/5;
РабочееВремя24 = РабочееВремя24 + ВыборкаПоВидуДня.КалендарныеДни*24/5;
РабочиеДни = РабочиеДни + ВыборкаПоВидуДня.КалендарныеДни;
ИначеЕсли ВыборкаПоВидуДня.ВидДня = ВидДняПредпраздничный тогда
РабочееВремя40 = РабочееВремя40 + ВыборкаПоВидуДня.КалендарныеДни * 7;
РабочееВремя36 = РабочееВремя36 + ВыборкаПоВидуДня.КалендарныеДни*36/5 - 1;
РабочееВремя24 = РабочееВремя24 + ВыборкаПоВидуДня.КалендарныеДни*24/5 - 1;
РабочиеДни = РабочиеДни + ВыборкаПоВидуДня.КалендарныеДни;
КонецЕсли;
КалендарныеДни = КалендарныеДни + ВыборкаПоВидуДня.КалендарныеДни;
КонецЦикла; // вид дня
КалендарныеДниКв = КалендарныеДниКв + КалендарныеДни;
РабочееВремя40Кв = РабочееВремя40Кв + РабочееВремя40;
РабочееВремя36Кв = РабочееВремя36Кв + РабочееВремя36;
РабочееВремя24Кв = РабочееВремя24Кв + РабочееВремя24;
РабочиеДниКв = РабочиеДниКв + РабочиеДни;
ВыходныеДниКв = ВыходныеДниКв + ВыходныеДни;

КалендарныеДниПолугодие1 = КалендарныеДниПолугодие1 + КалендарныеДни;
РабочееВремя40Полугодие1 = РабочееВремя40Полугодие1 + РабочееВремя40;
РабочееВремя36Полугодие1 = РабочееВремя36Полугодие1 + РабочееВремя36;
РабочееВремя24Полугодие1 = РабочееВремя24Полугодие1 + РабочееВремя24;
РабочиеДниПолугодие1 = РабочиеДниПолугодие1 + РабочиеДни;
ВыходныеДниПолугодие1 = ВыходныеДниПолугодие1 + ВыходныеДни;

КалендарныеДниГод = КалендарныеДниГод + КалендарныеДни;
РабочееВремя40Год = РабочееВремя40Год + РабочееВремя40;
РабочееВремя36Год = РабочееВремя36Год + РабочееВремя36;
РабочееВремя24Год = РабочееВремя24Год + РабочееВремя24;
РабочиеДниГод = РабочиеДниГод + РабочиеДни;
ВыходныеДниГод = ВыходныеДниГод + ВыходныеДни;

КонецЦикла; // месяц

КонецЦикла;  // квартал

КонецЦикла; // год

Сообщить("По 36часов:"+РабочееВремя36);
//И т.д.

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

ВидДняРабочий = Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий;
ВидДняСуббота = Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота;
ВидДняВоскресенье = Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье;
ВидДняПраздник = Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник;
ВидДняПредпраздничный = Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный;

Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Теги: ЗУП 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск