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

Табель сотрудников ЗУП 3.1

Автор Staler, 13 мар 2018, 06:18

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

Staler

Здравствуйте, Подскажите как сделать правильное заполнение таблицы, или как переделать цикл который заполняет таблицу..
чтоб было вот так:
http://ibb.co/ehFwYH

на данный Момент заполняется вот так
http://ibb.co/nsMyfx

вот сам макет:
http://ibb.co/n25N3S



Код отвечающий за заполнения :


Процедура ВывестиДанныеПоСотруднику(ДокументРезультат, ОбластьДанныеОВремени, ОбластьШапкаТаблицы, ДанныеПоСотруднику, ТекущийЛист)
   ИмяПоляБуквенныйКод = ИмяПоляБуквенныйКод();
   
   
   НастройкиПечатныхФорм = ЗарплатаКадрыПовтИсп.НастройкиПечатныхФорм();
   КоличествоПараметров = ОбластьДанныеОВремени.Параметры.Количество();
   
   Для ИндексПараметра = 0 По КоличествоПараметров - 1 Цикл 
      ОбластьДанныеОВремени.Параметры.Установить(ИндексПараметра, Неопределено);
   КонецЦикла;   
   
   ВидВремениВыходной = ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.ВыходныеДни");
   ВидВремениКомандировка = ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.Командировка");
   
   ОтработаноДнейЗаПервуюПоловинуМесяца = 0;
   ОтработаноЧасовЗаВторуюПоловинуМесяца = 0;
   ОтработаноДнейЗаВторуюПоловинуМесяца = 0;
   ОтработаноЧасовЗаПервуюПоловинуМесяца = 0;
   ОтработаноДнейЗаМесяц = 0;
   ОтработаноЧасовЗаМесяц = 0;
   
   СтруктураФИО = Новый Структура("Фамилия,Имя,Отчество");
   СтруктураФИО.Фамилия = ДанныеПоСотруднику.Фамилия;
   СтруктураФИО.Имя = ДанныеПоСотруднику.Имя;
   СтруктураФИО.Отчество = ДанныеПоСотруднику.Отчество;
   
   Если НастройкиПечатныхФорм.ВыводитьПолныеФИОВСписочныхПечатныхФормах Тогда
      
      ФИО = СтруктураФИО.Фамилия + ?(ПустаяСтрока(СтруктураФИО.Имя), "", " " + СтруктураФИО.Имя
         + ?(ПустаяСтрока(СтруктураФИО.Отчество), "", " " + СтруктураФИО.Отчество))
      
   Иначе
      
      ФИО = ФизическиеЛицаЗарплатаКадрыКлиентСервер.ФамилияИнициалы(СтруктураФИО);
         
   КонецЕсли;
   
   ОбластьДанныеОВремени.Параметры.Сотрудник = ФИО + "
                                 |(" + ДанныеПоСотруднику.ДолжностьНаименование + ")";   
                                 
   ОбластьДанныеОВремени.Параметры.ТабельныйНомер = ДанныеПоСотруднику.СотрудникКод;   
   
   ОбластьДанныеОВремени.Параметры.НомерПП = ДанныеПоСотруднику.СистемныеПоляНомерПоПорядкуВГруппировке;   

   ОтклоненияПоСотруднику = Новый ТаблицаЗначений;
   ОтклоненияПоСотруднику.Колонки.Добавить("ВидВремени");
   ОтклоненияПоСотруднику.Колонки.Добавить("БуквенныйКод");
   ОтклоненияПоСотруднику.Колонки.Добавить("ЦыфровойКод");
   ОтклоненияПоСотруднику.Колонки.Добавить("Часов");
   ОтклоненияПоСотруднику.Колонки.Добавить("Дней");
   
   Для Каждого ДанныеОВремениНаДату Из ДанныеПоСотруднику.Строки Цикл
      
      Если День(ДанныеОВремениНаДату.Дата) <= 15 Тогда
         ОтработаноДнейЗаПервуюПоловинуМесяца = ОтработаноДнейЗаПервуюПоловинуМесяца + ДанныеОВремениНаДату.РабочиеДни;
         ОтработаноЧасовЗаПервуюПоловинуМесяца = ОтработаноЧасовЗаПервуюПоловинуМесяца + ДанныеОВремениНаДату.РабочиеЧасы;
      Иначе
         ОтработаноЧасовЗаВторуюПоловинуМесяца = ОтработаноЧасовЗаВторуюПоловинуМесяца + ДанныеОВремениНаДату.РабочиеЧасы;
         ОтработаноДнейЗаВторуюПоловинуМесяца = ОтработаноДнейЗаВторуюПоловинуМесяца + ДанныеОВремениНаДату.РабочиеДни;
      КонецЕсли;
      
      ОтработаноДнейЗаМесяц = ОтработаноДнейЗаМесяц + ДанныеОВремениНаДату.РабочиеДни;
      ОтработаноЧасовЗаМесяц = ОтработаноЧасовЗаМесяц + ДанныеОВремениНаДату.РабочиеЧасы;

      ПредставлениеВидовВремени = "";
      ЧасыПоВидамВремениСтрока = "";
      
      КоличествоЗаписейНаДату = 0;
      ЭтоКомандировка = Ложь;
      
      Для Каждого ДетальныеЗаписиЗаДень Из ДанныеОВремениНаДату.Строки Цикл
         Если Не ДетальныеЗаписиЗаДень.ВидУчетаВремениРабочееВремя
            И ДетальныеЗаписиЗаДень.ВидУчетаВремени <> ВидВремениВыходной
            И ДетальныеЗаписиЗаДень.ВидУчетаВремениОсновноеВремя <> Справочники.ВидыИспользованияРабочегоВремени.ПустаяСсылка() Тогда
            
            ОтклоненияПоВидуВремени = ОтклоненияПоСотруднику.Добавить();
            
            ОтклоненияПоВидуВремени.ВидВремени = ДетальныеЗаписиЗаДень.ВидУчетаВремени;
            ОтклоненияПоВидуВремени.БуквенныйКод = ДетальныеЗаписиЗаДень[ИмяПоляБуквенныйКод];
            ОтклоненияПоВидуВремени.ЦыфровойКод = ДетальныеЗаписиЗаДень[ИмяПоляБуквенныйКод];
                  ОтклоненияПоВидуВремени.Дней = 1;
            Если ДанныеОВремениНаДату.Строки.Количество() > 1 Тогда
               ОтклоненияПоВидуВремени.Часов = ДетальныеЗаписиЗаДень.Часы;      
            Иначе    
               ОтклоненияПоВидуВремени.Часов = ДанныеОВремениНаДату.Часы;
            КонецЕсли;   
               
         КонецЕсли;
         
         ПредставлениеВидовВремени = ПредставлениеВидовВремени + "/"+  ДетальныеЗаписиЗаДень[ИмяПоляБуквенныйКод];
         
         
         Если Не ДетальныеЗаписиЗаДень.ВидУчетаВремениЦелосменное Тогда
            ЧасыПоВидамВремениСтрока = ЧасыПоВидамВремениСтрока +  "/" + Формат(ДетальныеЗаписиЗаДень.Часы, "ЧГ=");
         КонецЕсли;         
         
         КоличествоЗаписейНаДату = КоличествоЗаписейНаДату + 1;
         
         Если ДетальныеЗаписиЗаДень.ОсновноеВремя = ВидВремениКомандировка Тогда
            ЭтоКомандировка = Истина;
         КонецЕсли;   
      КонецЦикла;   
      
      Если КоличествоЗаписейНаДату = 1
         И ЭтоКомандировка Тогда
         
         ЧасыПоВидамВремениСтрока = "";
      КонецЕсли;   
   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   ////////////////////                             ОД                   ////
   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                  
      НомерДня = День(ДетальныеЗаписиЗаДень.Дата);
      
            ОбластьДанныеОВремени.Параметры.ДниЗаМесяц = ОтработаноДнейЗаМесяц;
      ОбластьДанныеОВремени.Параметры.ЧасыЗаМесяц = ОтработаноЧасовЗаМесяц;
      
      
      ОтклоненияПоСотруднику.Свернуть("ВидВремени,ЦыфровойКод, БуквенныйКод", "Дней, Часов");
            СчетчикОтклонений =1;
      Для Каждого ОтклонениеПоВидуВремени Из ОтклоненияПоСотруднику Цикл
         Если СчетчикОтклонений >1 Тогда
                     Прервать;
         КонецЕсли;
         
         //ОбластьДанныеОВремени.Параметры["НеявкаКод" + СчетчикОтклонений] = ОтклонениеПоВидуВремени.БуквенныйКод;
         //ОбластьДанныеОВремени.Параметры["НеявкаДниЧасы" + СчетчикОтклонений] = Формат(ОтклонениеПоВидуВремени.Дней, "ЧГ=") +
         //   ?(ОтклонениеПоВидуВремени.Часов > 0, "(" + Формат(ОтклонениеПоВидуВремени.Часов, "ЧГ=") + ")", "");
         //СчетчикОтклонений = СчетчикОтклонений + 1;
         
         ОбластьДанныеОВремени.Параметры["НеявкаКод1"] = ОтклонениеПоВидуВремени.ЦифровойКод[ДО];
         ОбластьДанныеОВремени.Параметры["НеявкаДниЧасы1"] = Формат(ОтклонениеПоВидуВремени.Дней, "ЧГ=") +
            ?(ОтклонениеПоВидуВремени.Часов > 0, "(" + Формат(ОтклонениеПоВидуВремени.Часов, "ЧГ=") + ")", "");
               
                  
                КонецЦикла;   
               
               
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////                                        ДО
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
               
                НомерДня = День(ДетальныеЗаписиЗаДень.Дата);
      
            ОбластьДанныеОВремени.Параметры.ДниЗаМесяц = ОтработаноДнейЗаМесяц;
      ОбластьДанныеОВремени.Параметры.ЧасыЗаМесяц = ОтработаноЧасовЗаМесяц;
      
      
      ОтклоненияПоСотруднику.Свернуть("ВидВремени,ЦыфровойКод, БуквенныйКод", "Дней, Часов");
            СчетчикОтклонений =1;
      Для Каждого ОтклонениеПоВидуВремени Из ОтклоненияПоСотруднику Цикл
         Если СчетчикОтклонений > 1 Тогда
                     Прервать;
         КонецЕсли;
                  
         ОбластьДанныеОВремени.Параметры["НеявкаКод2"] = ОтклонениеПоВидуВремени.БуквенныйКод;

         ОбластьДанныеОВремени.Параметры["НеявкаДниЧасы2"] = Формат(ОтклонениеПоВидуВремени.Дней, "ЧГ=") +
            ?(ОтклонениеПоВидуВремени.Часов > 1, "(" + Формат(ОтклонениеПоВидуВремени.Часов, "ЧГ=") + ")", "");
                СчетчикОтклонений = СчетчикОтклонений + 1;

               
             КонецЦикла;   
             //Для шаг = 0 по 50 цикл
                //Сообщить(ПредставлениеВидовВремени[0]);
                //КонецЦикла;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////                                    ОЖ                            //////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                  
                НомерДня = День(ДетальныеЗаписиЗаДень.Дата);
      
            ОбластьДанныеОВремени.Параметры.ДниЗаМесяц = ОтработаноДнейЗаМесяц;
      ОбластьДанныеОВремени.Параметры.ЧасыЗаМесяц = ОтработаноЧасовЗаМесяц;
      
      
      ОтклоненияПоСотруднику.Свернуть("ВидВремени,ЦыфровойКод, БуквенныйКод", "Дней, Часов");
            СчетчикОтклонений =1 ;
      Для Каждого ОтклонениеПоВидуВремени Из ОтклоненияПоСотруднику Цикл
         Если СчетчикОтклонений >2 Тогда
                     Прервать;
         КонецЕсли;
         
                  
         ОбластьДанныеОВремени.Параметры["НеявкаКод3"] = ОтклонениеПоВидуВремени.БуквенныйКод;;

         ОбластьДанныеОВремени.Параметры["НеявкаДниЧасы3"] = Формат(ОтклонениеПоВидуВремени.Дней, "ЧГ=") +
            ?(ОтклонениеПоВидуВремени.Часов > 2, "(" + Формат(ОтклонениеПоВидуВремени.Часов, "ЧГ=") + ")", "");
                СчетчикОтклонений = СчетчикОтклонений + 1;

                  
      КонецЦикла;   

   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   //////////////////////////                     OT                                       ///////////////////////////////////////
   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
          НомерДня = День(ДетальныеЗаписиЗаДень.Дата);
      
            ОбластьДанныеОВремени.Параметры.ДниЗаМесяц = ОтработаноДнейЗаМесяц;
      ОбластьДанныеОВремени.Параметры.ЧасыЗаМесяц = ОтработаноЧасовЗаМесяц;
      
      
      ОтклоненияПоСотруднику.Свернуть("ВидВремени,ЦыфровойКод, БуквенныйКод", "Дней, Часов");
            СчетчикОтклонений =1;
      Для Каждого ОтклонениеПоВидуВремени Из ОтклоненияПоСотруднику Цикл
         Если СчетчикОтклонений >2  Тогда
                     Прервать;
         КонецЕсли;
         
                  
         ОбластьДанныеОВремени.Параметры["НеявкаКод4"] = ОтклонениеПоВидуВремени.БуквенныйКод;

         ОбластьДанныеОВремени.Параметры["НеявкаДниЧасы4"] = Формат(ОтклонениеПоВидуВремени.Дней, "ЧГ=") +
            ?(ОтклонениеПоВидуВремени.Часов > 0, "(" + Формат(ОтклонениеПоВидуВремени.Часов, "ЧГ=") + ")", "");
                СчетчикОтклонений = СчетчикОтклонений + 1;
             КонецЦикла;
             /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   //////////////////////////                            HH                                      ///////////////////////////////////////
   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
          НомерДня = День(ДетальныеЗаписиЗаДень.Дата);
      
            ОбластьДанныеОВремени.Параметры.ДниЗаМесяц = ОтработаноДнейЗаМесяц;
      ОбластьДанныеОВремени.Параметры.ЧасыЗаМесяц = ОтработаноЧасовЗаМесяц;
      
      
      ОтклоненияПоСотруднику.Свернуть("ВидВремени,ЦыфровойКод, БуквенныйКод", "Дней, Часов");
            СчетчикОтклонений =4;
      Для Каждого ОтклонениеПоВидуВремени Из ОтклоненияПоСотруднику Цикл
         Если СчетчикОтклонений >1 Тогда
                     Прервать;
         КонецЕсли;
         
                  
         ОбластьДанныеОВремени.Параметры["НеявкаКод5"] = ОтклонениеПоВидуВремени.БуквенныйКод;
         ОбластьДанныеОВремени.Параметры["НеявкаДниЧасы5"] = Формат(ОтклонениеПоВидуВремени.Дней, "ЧГ=") +
            ?(ОтклонениеПоВидуВремени.Часов > 0, "(" + Формат(ОтклонениеПоВидуВремени.Часов, "ЧГ=") + ")", "");
                СчетчикОтклонений = СчетчикОтклонений + 1;
                КонецЦикла;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   //////////////////////////                      Б                                     ///////////////////////////////////////
   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
          НомерДня = День(ДетальныеЗаписиЗаДень.Дата);
      
            ОбластьДанныеОВремени.Параметры.ДниЗаМесяц = ОтработаноДнейЗаМесяц;
      ОбластьДанныеОВремени.Параметры.ЧасыЗаМесяц = ОтработаноЧасовЗаМесяц;
      
      
      ОтклоненияПоСотруднику.Свернуть("ВидВремени,ЦыфровойКод, БуквенныйКод", "Дней, Часов");
            СчетчикОтклонений =5;
      Для Каждого ОтклонениеПоВидуВремени Из ОтклоненияПоСотруднику Цикл
         Если СчетчикОтклонений >1 Тогда
                     Прервать;
         КонецЕсли;
         
                  
         ОбластьДанныеОВремени.Параметры["НеявкаКод6"] = ОтклонениеПоВидуВремени.БуквенныйКод;
         ОбластьДанныеОВремени.Параметры["НеявкаДниЧасы6"] = Формат(ОтклонениеПоВидуВремени.Дней, "ЧГ=") +
            ?(ОтклонениеПоВидуВремени.Часов > 0, "(" + Формат(ОтклонениеПоВидуВремени.Часов, "ЧГ=") + ")", "");
                СчетчикОтклонений = СчетчикОтклонений + 1;
             КонецЦикла;
             /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   //////////////////////////                              Р                                  ///////////////////////////////////////
   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
          НомерДня = День(ДетальныеЗаписиЗаДень.Дата);
      
            ОбластьДанныеОВремени.Параметры.ДниЗаМесяц = ОтработаноДнейЗаМесяц;
      ОбластьДанныеОВремени.Параметры.ЧасыЗаМесяц = ОтработаноЧасовЗаМесяц;
      
      
      ОтклоненияПоСотруднику.Свернуть("ВидВремени,ЦыфровойКод, БуквенныйКод", "Дней, Часов");
            СчетчикОтклонений =1;
      Для Каждого ОтклонениеПоВидуВремени Из ОтклоненияПоСотруднику Цикл
         Если СчетчикОтклонений >1 Тогда
                     Прервать;
         КонецЕсли;
         
                  
         ОбластьДанныеОВремени.Параметры["НеявкаКод7"] = ОтклонениеПоВидуВремени.БуквенныйКод;
         ОбластьДанныеОВремени.Параметры["НеявкаДниЧасы7"] = Формат(ОтклонениеПоВидуВремени.Дней, "ЧГ=") +
            ?(ОтклонениеПоВидуВремени.Часов > 0, "(" + Формат(ОтклонениеПоВидуВремени.Часов, "ЧГ=") + ")", "");
                СчетчикОтклонений = СчетчикОтклонений + 1;
             КонецЦикла;
             /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   //////////////////////////                      Г                                       ///////////////////////////////////////
   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
          НомерДня = День(ДетальныеЗаписиЗаДень.Дата);
      
            ОбластьДанныеОВремени.Параметры.ДниЗаМесяц = ОтработаноДнейЗаМесяц;
      ОбластьДанныеОВремени.Параметры.ЧасыЗаМесяц = ОтработаноЧасовЗаМесяц;
      
      
      ОтклоненияПоСотруднику.Свернуть("ВидВремени,ЦыфровойКод, БуквенныйКод", "Дней, Часов");
            СчетчикОтклонений =1;
      Для Каждого ОтклонениеПоВидуВремени Из ОтклоненияПоСотруднику Цикл
         Если СчетчикОтклонений >1 Тогда
                     Прервать;
         КонецЕсли;
         
                  
         ОбластьДанныеОВремени.Параметры["НеявкаКод8"] = ОтклонениеПоВидуВремени.БуквенныйКод;
         ОбластьДанныеОВремени.Параметры["НеявкаДниЧасы8"] = Формат(ОтклонениеПоВидуВремени.Дней, "ЧГ=") +
            ?(ОтклонениеПоВидуВремени.Часов > 0, "(" + Формат(ОтклонениеПоВидуВремени.Часов, "ЧГ=") + ")", "");
                СчетчикОтклонений = СчетчикОтклонений + 1;
             КонецЦикла;
             /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   //////////////////////////                                     ОВ                             ///////////////////////////////////////
   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
          НомерДня = День(ДетальныеЗаписиЗаДень.Дата);
      
            ОбластьДанныеОВремени.Параметры.ДниЗаМесяц = ОтработаноДнейЗаМесяц;
      ОбластьДанныеОВремени.Параметры.ЧасыЗаМесяц = ОтработаноЧасовЗаМесяц;
      
      
      ОтклоненияПоСотруднику.Свернуть("ВидВремени,ЦыфровойКод, БуквенныйКод", "Дней, Часов");
            СчетчикОтклонений =1;
      Для Каждого ОтклонениеПоВидуВремени Из ОтклоненияПоСотруднику Цикл
         Если СчетчикОтклонений >1 Тогда
                     Прервать;
         КонецЕсли;
         
                  
         ОбластьДанныеОВремени.Параметры["НеявкаКод9"] = ОтклонениеПоВидуВремени.БуквенныйКод;
         ОбластьДанныеОВремени.Параметры["НеявкаДниЧасы9"] = Формат(ОтклонениеПоВидуВремени.Дней, "ЧГ=") +
            ?(ОтклонениеПоВидуВремени.Часов > 0, "(" + Формат(ОтклонениеПоВидуВремени.Часов, "ЧГ=") + ")", "");
                СчетчикОтклонений = СчетчикОтклонений + 1;
                КонецЦикла;


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   //////////////////////////                                      ПР                                           ///////////////////////////////////////
   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
          НомерДня = День(ДетальныеЗаписиЗаДень.Дата);
      
            ОбластьДанныеОВремени.Параметры.ДниЗаМесяц = ОтработаноДнейЗаМесяц;
      ОбластьДанныеОВремени.Параметры.ЧасыЗаМесяц = ОтработаноЧасовЗаМесяц;
      
      
      ОтклоненияПоСотруднику.Свернуть("ВидВремени,ЦыфровойКод, БуквенныйКод", "Дней, Часов");
            СчетчикОтклонений =0;
      Для Каждого ОтклонениеПоВидуВремени Из ОтклоненияПоСотруднику Цикл
         Если СчетчикОтклонений >1 Тогда
                     Прервать;
         КонецЕсли;
         
                  
         ОбластьДанныеОВремени.Параметры["НеявкаКод10"] = ОтклонениеПоВидуВремени.БуквенныйКод;
         ОбластьДанныеОВремени.Параметры["НеявкаДниЧасы10"] = Формат(ОтклонениеПоВидуВремени.Дней, "ЧГ=") +
            ?(ОтклонениеПоВидуВремени.Часов > 0, "(" + Формат(ОтклонениеПоВидуВремени.Часов, "ЧГ=") + ")", "");
               СчетчикОтклонений = СчетчикОтклонений + 1;
                КонецЦикла;

//////////////////////////////////////////////////////////////////////////////////////////////////////
////////                              Конец Столбцов                   ////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////

КонецЦикла;
   
   ВывестиОбласть(ДокументРезультат, ТекущийЛист, ОбластьДанныеОВремени, ОбластьДанныеОВремени);   
КонецПроцедуры   







Теги:

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

Рейтинг@Mail.ru

Поиск