обрый день. Имеет ЗУП 2.0
Добавил доп столбец ОТКЛОНЕНИЕ от баланса (переработка/недоработка), в ней 3 параметра
1С не когда не кодил.
Спасибо большое за помощь.
Код:
Функция Печать(КалендарьНаборЗаписей, ГодПечати = Неопределено) Экспорт
Если Не ЗначениеЗаполнено(ГодПечати) Тогда
ГодПечати = ТекущийГод;
КонецЕсли;
ВыводитьИтогиПроизводственногоКалендаря = Истина;
ДатаНачалаИнтервала = НачалоГода(ГодПечати);
ДатаОкончанияИнтервала = КонецГода(ГодПечати);
ДнейВИнтервале = (КонецДня(ДатаОкончанияИнтервала) - НачалоДня(ДатаНачалаИнтервала) + 1) / мДлинаСуток;
Календарь = ПолучитьДниВПроизводственномКалендаре(ДатаНачалаИнтервала, ДатаОкончанияИнтервала); // это соответствие: дата - вид дня
Если ДнейВИнтервале <> Календарь.Количество() Тогда
Сообщить("Проверьте правильность заполнения регламентированного производственного календаря на " + Формат(Год(ГодПечати), "ЧГ=5") + " год", СтатусСообщения.Важное);
ВыводитьИтогиПроизводственногоКалендаря = Ложь;
КонецЕсли;
ПечатныйДокумент = Новый ТабличныйДокумент;
ПечатныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ГрафикиРаботы";
ПечатныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ПечатныйДокумент.Автомасштаб = Истина;
Макет = ПолучитьМакет("Макет");
ОбластьДанныхШапка = Макет.ПолучитьОбласть("Шапка");
//ОТОБРАЖАЕМ ВСЕ ОБЛАСТЬ ШАПКИ ++
//++ ОбластьДанныхШапка = Макет.ПолучитьОбласть("Шапка|Месяцы");
ОбластьДанныхКолонтитул = Макет.ПолучитьОбласть("Колонтитул");
ОбластьДанныхРасширение = Макет.ПолучитьОбласть("Расширение");
ОбластьДанныхДень = Макет.ПолучитьОбласть("День|Месяцы");
ОбластьДанныхДеньПоДням = Макет.ПолучитьОбласть("День|Дни");
ОбластьДанныхНочные = Макет.ПолучитьОбласть("НЧ");
ОбластьИтогиЗаМесяц = Макет.ПолучитьОбласть("День|Итоги");
ОбластьИтогиЗаКвартал = Макет.ПолучитьОбласть("Квартал");
ОбластьИтогиЗаКварталНЧ = Макет.ПолучитьОбласть("КварталНЧ");
ОбластьИтогиЗаГод = Макет.ПолучитьОбласть("Год");
ОбластьИтогиЗаГодНЧ = Макет.ПолучитьОбласть("ГодНЧ");
ОбластьКалендаря = Макет.ПолучитьОбласть("Календарь");
ОбластьПодписи = Макет.ПолучитьОбласть("Подпись");
ОбластьРасширениеИтоги = Макет.ПолучитьОбласть("РасширениеИтоги");
//Получаем мою область ++
//ОбластьДеньКалендарь = Макет.ПолучитьОбласть("День|Календарь");
//ОбластьКалендаря.Параметры.ОтклЧасов=111;
//ПечатныйДокумент.Вывести(ОбластьКалендаря);
ОбластьДанныхШапка.Параметры.Наименование = "График работы '" + СокрЛП(ЭтотОбъект.Наименование) + "' на " + Формат(Год(ГодПечати), "ЧГ=5") + " год";
ПечатныйДокумент.Вывести(ОбластьДанныхШапка);
ОбластьДнейЗаголовок = "Часов за день";
Если УчитыватьНочныеЧасы Тогда
ОбластьДнейЗаголовок = ОбластьДнейЗаголовок + ", в том числе ночных";
КонецЕсли;
ОбластьДанныхКолонтитул.Параметры.Установить(0, ОбластьДнейЗаголовок);
ПечатныйДокумент.Вывести(ОбластьДанныхКолонтитул);
ДнейЗаКвартал = 0;
ЧасовЗаКвартал = 0;
НочныхЧасовЗаКвартал = 0;
ДнейЗаГод = 0;
ЧасовЗагод = 0;
НочныхЧасовЗаГод = 0;
ДнейПоКалендарю = 0;
ЧасовПоКалендарю = 0;
ВыходныхПоКалендарю = 0;
ДнейЗаКварталПоКалендарю = 0;
ЧасовЗаКварталПоКалендарю = 0;
ВыходныхЗаКварталПоКалендарю = 0;
ДнейЗаГодПоКалендарю = 0;
ЧасовЗаГодПоКалендарю = 0;
ВыходныхЗаГодПоКалендарю = 0;
Квартал = 0;
ИндексСтраницы = 0;
ОтклЧасов = 0;
ОтклКвартал = 0;
ОтклГод = 0;
Для Индекс = 0 По 11 Цикл
НомерМесяца = Индекс + 1;
НазваниеМесяца = КалендарьНаборЗаписей[Индекс].Месяц;
Дней = КалендарьНаборЗаписей[Индекс].ДнейЗаМесяц;
Часов = КалендарьНаборЗаписей[Индекс].ЧасовЗаМесяц;
НочныхЧасов = КалендарьНаборЗаписей[Индекс].НочныхЧасовЗаМесяц;
Если НомерМесяца = 4 ИЛИ НомерМесяца = 7 ИЛИ НомерМесяца = 10 Тогда
ДнейЗаКвартал = 0;
ЧасовЗаквартал = 0;
НочныхЧасовЗаКвартал = 0;
КонецЕсли;
ДнейЗаКвартал = ДнейЗаКвартал + Дней;
ЧасовЗаКвартал = ЧасовЗаКвартал + Часов;
ДнейЗаГод = ДнейЗаГод + Дней;
ЧасовЗаГод = ЧасовЗаГод + Часов;
НочныхЧасовЗаГод = НочныхЧасовЗаГод + НочныхЧасов;
ДанныеМесяца = КалендарьНаборЗаписей[Индекс];
ОбластьДанныхДень.Параметры.Заполнить(ДанныеМесяца);
СтрокаСПодвалом = Новый Массив; // создадим массив для проверки вывода
СтрокаСПодвалом.Добавить(ОбластьДанныхДень);
СтрокаСПодвалом.Добавить(ОбластьИтогиЗаКвартал);
СтрокаСПодвалом.Добавить(ОбластьИтогиЗаКварталНЧ);
Если Не УниверсальныеМеханизмы.ПроверитьВыводДляТабличногоДокумента(ПечатныйДокумент, СтрокаСПодвалом) Тогда
ПечатныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ПечатныйДокумент.Вывести(ОбластьДанныхКолонтитул);
ИндексСтраницы = ИндексСтраницы+1;
КонецЕсли;
ПечатныйДокумент.Вывести(ОбластьДанныхДень);
ОбластьДанныхДеньПоДням.Параметры.Заполнить(ДанныеМесяца);
ОбластьИтогиЗаМесяц.Параметры.Заполнить(ДанныеМесяца);
Если УчитыватьНочныеЧасы Тогда
ОбластьДанныхНочные.Параметры.Заполнить(ДанныеМесяца);
НочныхЧасовЗаКвартал = НочныхЧасовЗаКвартал + НочныхЧасов;
ОбластьИтогиЗаКварталНЧ.Параметры.Установить(0, НочныхЧасовЗаКвартал);
КонецЕсли;
ДнейВМесяце = КоличествоДнейВМесяце(НомерМесяца, Год(ГодПечати));
Если ДнейВМесяце < 31 Тогда
ЛишнийДень = ДнейВМесяце + 1;
Пока ЛишнийДень <= 31 Цикл
ОбластьДанныхДеньПоДням.Параметры.Установить(ЛишнийДень-1, "X");
ОбластьДанныхНочные.Параметры.Установить(ЛишнийДень-1, "X");
ЛишнийДень = ЛишнийДень + 1;
КонецЦикла;
КонецЕсли;
//Установим параметры производственного календаря
ДанныеПроизводственногоКалендаря = ДанныеПроизводственногоКалендаря(НомерМесяца);
ТаблицаИтоговКалендаря = ДанныеПроизводственногоКалендаряЗаГод(Год(ГодПечати));
Если ВыводитьИтогиПроизводственногоКалендаря Тогда
ТаблицаИтогов = ТаблицаИтоговКалендаря[Индекс];
ОбластьИтогиЗаМесяц.Параметры.Установить(2, ТаблицаИтоговКалендаря[Индекс].ДнейПоКалендарю);
ОбластьИтогиЗаМесяц.Параметры.Установить(3, ТаблицаИтоговКалендаря[Индекс].ЧасовПоКалендарю);
ОбластьИтогиЗаМесяц.Параметры.Установить(4, ТаблицаИтоговКалендаря[Индекс].ВыходныхПоКалендарю);
КонецЕсли;
ПечатныйДокумент.Присоединить(ОбластьДанныхДеньПоДням);
ПечатныйДокумент.Присоединить(ОбластьИтогиЗаМесяц);
Если УчитыватьНочныеЧасы Тогда
ПечатныйДокумент.Вывести(ОбластьДанныхНочные);
Иначе
ПечатныйДокумент.Вывести(ОбластьДанныхРасширение);
КонецЕсли;
//Выделим цветом нерабочие дни в календаре
ТекущийМесяц = НачалоМесяца(Дата(Год(ГодПечати), НомерМесяца, 1));
ДеньНеделиМесяца = ДеньНедели(НачалоМесяца(ТекущийМесяц));
Для НомерДня = 1 По 31 Цикл
Если НомерДня <= ДнейВМесяце Тогда
Если ДанныеПроизводственногоКалендаря.Количество() > 0 Тогда
ВидДня = ДанныеПроизводственногоКалендаря[НомерДня - 1].ВидДня;
Если ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье
Или ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота
Или ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник Тогда
ОбластьВыходных = ПечатныйДокумент.НайтиТекст(Строка(НомерДня),,,,Истина);
ОбластьДляЗакрашивания = ПечатныйДокумент.Область(ОбластьВыходных.Верх + НомерМесяца*2 + Квартал*2- 1, ОбластьВыходных.Лево, ОбластьВыходных.Верх + НомерМесяца*2 + Квартал*2, ОбластьВыходных.Лево);
ОбластьДляЗакрашивания.ЦветФона = КрасныйЦвет;
КонецЕсли;
КонецЕсли;
Иначе
ОбластьЛишнихДней = ПечатныйДокумент.НайтиТекст(Строка(НомерДня),,,,Истина);
ОбластьДляЗакрашивания = ПечатныйДокумент.Область(ОбластьЛишнихДней.Верх + НомерМесяца*2 + Квартал*2 - 1, ОбластьЛишнихДней.Лево, ОбластьЛишнихДней.Верх + НомерМесяца*2 + Квартал*2, ОбластьЛишнихДней.Лево);
ОбластьДляЗакрашивания.ЦветФона = СерыйЦвет;
КонецЕсли;
КонецЦикла;
Если НомерМесяца = 3 ИЛИ НомерМесяца = 6 ИЛИ НомерМесяца = 9 ИЛИ НомерМесяца = 12 Тогда
Квартал = НомерМесяца/3;
ОбластьИтогиЗаКвартал.Параметры.Установить(0, "" + Квартал + " квартал");
ОбластьИтогиЗаКвартал.Параметры.Установить(1, ДнейЗаКвартал);
ОбластьИтогиЗаКвартал.Параметры.Установить(2, ЧасовЗаКвартал);
Если ВыводитьИтогиПроизводственногоКалендаря Тогда
ОбластьИтогиЗаКвартал.Параметры.Установить(3, ТаблицаИтоговКалендаря[НомерМесяца-1].ДнейЗаКварталПоКалендарю);
ОбластьИтогиЗаКвартал.Параметры.Установить(4, ТаблицаИтоговКалендаря[НомерМесяца-1].ЧасовЗаКварталПоКалендарю);
ОбластьИтогиЗаКвартал.Параметры.Установить(5, ТаблицаИтоговКалендаря[НомерМесяца-1].ВыходныхЗаКварталПоКалендарю);
КонецЕсли;
ПечатныйДокумент.Вывести(ОбластьИтогиЗаКвартал);
Если УчитыватьНочныеЧасы Тогда
ПечатныйДокумент.Присоединить(ОбластьИтогиЗаКварталНЧ);
Иначе
ПечатныйДокумент.Вывести(ОбластьРасширениеИтоги);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ОбластьИтогиЗаГод.Параметры.Установить(0, ДнейЗаГод);
ОбластьИтогиЗаГод.Параметры.Установить(1, ЧасовЗаГод);
Если ВыводитьИтогиПроизводственногоКалендаря Тогда
ОбластьИтогиЗаГод.Параметры.Установить(2, ТаблицаИтоговКалендаря[11].ДнейЗаГодПоКалендарю);
ОбластьИтогиЗаГод.Параметры.Установить(3, ТаблицаИтоговКалендаря[11].ЧасовЗаГодПоКалендарю);
ОбластьИтогиЗаГод.Параметры.Установить(4, ТаблицаИтоговКалендаря[11].ВыходныхЗаГодПоКалендарю);
КонецЕсли;
ПечатныйДокумент.Вывести(ОбластьИтогиЗаГод);
Если УчитыватьНочныеЧасы Тогда
ОбластьИтогиЗаГодНЧ.Параметры.Установить(0, НочныхЧасовЗаГод);
ПечатныйДокумент.Вывести(ОбластьИтогиЗаГодНЧ);
Иначе
ПечатныйДокумент.Вывести(ОбластьРасширениеИтоги);
ОбластьИтоговЗаГод = ПечатныйДокумент.НайтиТекст("Итого за год:");
СераяОбласть = ПечатныйДокумент.Область(ОбластьИтоговЗаГод.Верх + 1, ОбластьИтоговЗаГод.Лево, ОбластьИтоговЗаГод.Верх + 1, ОбластьИтоговЗаГод.Лево + 37);
СераяОбласть.ЦветФона = ЦветаСтиля.ФонГруппировкиВерхнегоУровня;
КонецЕсли;
ПечатныйДокумент.Вывести(ОбластьПодписи);
УниверсальныеМеханизмы.НапечататьДокумент(ПечатныйДокумент, , , "График работы " + Наименование);
КонецФункции
Социальные закладки