Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
11 Дек 2017, 04:52
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Табель учета рабочего времени  (Прочитано 4480 раз)

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

Оффлайн Люсёк

  • ***
  • Сообщений: 109
  • РЕПУТАЦИЯ: 3
  • КПД: 3%
  • Регистрация: 2010-10-11
  • Сайт: 
Делаю отчет Табель учета рабочего времени. Вроде почти сделала, но вот беда, если у сотрудника отработан не полный месяц, вместо пустых клеточек выводится предыдущая строка. Подскажите, как справится с этой бедой?)

В табличный документ данные вывожу следующим образом:

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

            НомерДня=Строка(День(ДетальныеЗаписи.ДатаТабеля));

    Если ДетальныеЗаписи.ВидВремени = Справочники.КлассификаторИспользованияРабочегоВремени.Работа Тогда
 
                 ОбластьСтрока.Параметры["Символ"+НомерДня] = ДетальныеЗаписи.Часов;
 
                 ЧасыЗаМесяц = ЧасыЗаМесяц + ДетальныеЗаписи.Часов;
                 ДниЗаМесяц = ДниЗаМесяц + 1;

ИначеЕсли ДетальныеЗаписи.ВидВремени = Справочники.КлассификаторИспользованияРабочегоВремени.ВыходныеДни Тогда
      ОбластьСтрока.Параметры["Символ"+НомерДня] = ДетальныеЗаписи.БуквенныйКод;
  Выходные = Выходные+1;
 
ИначеЕсли ДетальныеЗаписи.ВидВремени = Справочники.КлассификаторИспользованияРабочегоВремени.Праздники Тогда  
  ОбластьСтрока.Параметры["Символ"+НомерДня] = ДетальныеЗаписи.БуквенныйКод;

                                      ЧасыПраздничные = ЧасыПраздничные + ДетальныеЗаписи.Часов;
  ДниПраздничные = ДниПраздничные + 1;
     
ИначеЕсли ДетальныеЗаписи.ВидВремени = Справочники.КлассификаторИспользованияРабочегоВремени.ОсновнойОтпуск
ИЛИ  ДетальныеЗаписи.ВидВремени = Справочники.КлассификаторИспользованияРабочегоВремени.ДополнительныйОтпуск Тогда  
      ОбластьСтрока.Параметры["Символ"+НомерДня] = ДетальныеЗаписи.БуквенныйКод;
  Отпуск = Отпуск+1;

ИначеЕсли ДетальныеЗаписи.ВидВремени = Справочники.КлассификаторИспользованияРабочегоВремени.Болезнь Тогда
      ОбластьСтрока.Параметры["Символ"+НомерДня] = ДетальныеЗаписи.БуквенныйКод;
  Больничный = Больничный+1;
 
ИначеЕсли ДетальныеЗаписи.ВидВремени = Справочники.КлассификаторИспользованияРабочегоВремени.ГосударственныеОбязанности Тогда    
      ОбластьСтрока.Параметры["Символ"+НомерДня] = ДетальныеЗаписи.БуквенныйКод;
  ГосудОбяз = ГосудОбяз+1;
 
ИначеЕсли ДетальныеЗаписи.ВидВремени = Справочники.КлассификаторИспользованияРабочегоВремени.НеоплачиваемыйОтпускПоРазрешениюРаботодателя Тогда    
      ОбластьСтрока.Параметры["Символ"+НомерДня] = ДетальныеЗаписи.БуквенныйКод;
  ОтпускНеоплачДО = ОтпускНеоплачДО+1;
 
ИначеЕсли ДетальныеЗаписи.ВидВремени = Справочники.КлассификаторИспользованияРабочегоВремени.Командировка Тогда    
      ОбластьСтрока.Параметры["Символ"+НомерДня] = ДетальныеЗаписи.БуквенныйКод;
  Командировка = командировка+1;
 
ИначеЕсли ДетальныеЗаписи.ВидВремени = Справочники.КлассификаторИспользованияРабочегоВремени.ОтпускНаОбучение Тогда  
      ОбластьСтрока.Параметры["Символ"+НомерДня] = ДетальныеЗаписи.БуквенныйКод;
                                      УчебныйОтпуск = УчебныйОтпуск+1;


ИначеЕсли ДетальныеЗаписи.ВидВремени = Справочники.КлассификаторИспользованияРабочегоВремени.Прогулы Тогда    
      ОбластьСтрока.Параметры["Символ"+НомерДня] = ДетальныеЗаписи.БуквенныйКод;
                                      Прогул = Прогул+1;

 
ИначеЕсли ДетальныеЗаписи.ВидВремени = Справочники.КлассификаторИспользованияРабочегоВремени.НеявкиПоНевыясненнымПричинам Тогда    
      ОбластьСтрока.Параметры["Символ"+НомерДня] = ДетальныеЗаписи.БуквенныйКод;
  Невыход = Невыход+1;


Иначе  
     ОбластьСтрока.Параметры["Символ"+НомерДня] = ДетальныеЗаписи.БуквенныйКод;
КонецЕсли;

КонецЦикла;


ОбластьСтрока.Параметры.ЧасыЗаМесяц = ЧасыЗаМесяц;
ОбластьСтрока.Параметры.ДниЗаМесяц = ДниЗаМесяц;
ОбластьСтрока.Параметры.ЧасыПраздничные = ЧасыПраздничные;
ОбластьСтрока.Параметры.ДниПраздничные = ДниПраздничные;
ОбластьСтрока.Параметры.Выходные = Выходные;
ОбластьСтрока.Параметры.Отпуск = Отпуск;
ОбластьСтрока.Параметры.Больничный = Больничный;
ОбластьСтрока.Параметры.ГосудОбяз = ГосудОбяз;
ОбластьСтрока.Параметры.ОтпускНеоплачДО = ОтпускНеоплачДО;
ОбластьСтрока.Параметры.Командировки = Командировка;
ОбластьСтрока.Параметры.УчебОтпуск = УчебныйОтпуск;
ОбластьСтрока.Параметры.Прогул = Прогул;
ОбластьСтрока.Параметры.Невыход = Невыход;
ОбластьСтрока.Параметры.Всего = ДниЗаМесяц+Выходные+Отпуск+Больничный+ГосудОбяз+ОтпускНеоплачДО+Командировка+УчебныйОтпуск+Прогул+Невыход+ДниПраздничные;
ТабДокумент.Вывести(ОбластьСтрока);

ЧасыЗаМесяц=0;
ДниЗаМесяц=0;
ЧасыПраздничные=0;
ДниПраздничные=0;
Выходные=0;
Отпуск=0;
Больничный=0;
ГосудОбяз=0;
ОтпускНеоплачДО=0;
Командировка=0;
УчебныйОтпуск=0;
Прогул=0;
Невыход=0;
Всего=0;

КонецЦикла;
КонецЦикла;
КонецЦикла;




Оффлайн Люсёк

  • ***
  • Сообщений: 109
  • РЕПУТАЦИЯ: 3
  • КПД: 3%
  • Регистрация: 2010-10-11
  • Сайт: 
Как то криво код отправился)


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

               КонецЦикла;                   
          КонецЦикла;
       КонецЦикла;

Оффлайн Klyacksa

  • Фрилансер. Милости прошу с задачами в личку.
  • Глобальный модератор
  • *****
  • Сообщений: 1325
  • РЕПУТАЦИЯ: 430
  • КПД: 32%
  • Регистрация: 2010-08-20
  • Сайт: 
  • Профессия: Программист 1С
Скорее всего, проблема в том, что Вы не очищаете Параметры каждой новой строки. То есть, у Вас получается такая схема:
1. Определили область макета
2. Взяли первую строку, заполнили данные по ней
3. Вывели область
<<но область-то осталась заполненной!..>>
4. Берем вторую строку (пусть данных в ней нет, должна вывестись пустая), заполняем нашу область имеющимися данными (сотрудник, например).
<<а остальные данные-то остались от прошлой строки!..>>
5. Вывели область - частично по первой строке, частично по второй.

К сожалению, у параметров макета метода Очистить нет, поэтому придется делать например так:
Если ДетальныеЗаписи.Количество()=0 тогда
      ОбластьСтрока.Параметр1="";
      // и т.д. очищаем все подряд параметры нулевыми значениями
      // либо такой вариант очистки:
      ОбластьСтрока=Макет.ПолучитьОбласть("Строка"); // получаем здесь область так же, как Вы ее изначально получали.
      // далее заполняем данные по сотруднику:
      ОбластьСтрока.Параметры.НомерПП = НомерПП;
      ОбластьСтрока.Параметры.СотрудникНаименование = ВыборкаПоСотруднику.СотрудникНаименование;
      ОбластьСтрока.Параметры.ТабельныйНомер = ВыборкаПоТабельномуНомеру.ТабельныйНомер;
      ОбластьСтрока.Параметры.Должность = ВыборкаПоДолжности.Должность;
      Продолжить();
КонецЕсли;  
// придется заполнение этих параметров перенести еще вот сюда (и убрать эти строки из остального Вашего кода)
ОбластьСтрока.Параметры.НомерПП = НомерПП;
ОбластьСтрока.Параметры.СотрудникНаименование = ВыборкаПоСотруднику.СотрудникНаименование;
ОбластьСтрока.Параметры.ТабельныйНомер = ВыборкаПоТабельномуНомеру.ТабельныйНомер;
ОбластьСтрока.Параметры.Должность = ВыборкаПоДолжности.Должность;

// ну и дальше Ваш цикл
Пока ДетальныеЗаписи.Следующий() Цикл    
...
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Оффлайн Люсёк

  • ***
  • Сообщений: 109
  • РЕПУТАЦИЯ: 3
  • КПД: 3%
  • Регистрация: 2010-10-11
  • Сайт: 
Спасибо))) Суть проблемы то я понимала, а вы подсказали ее решение)))


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
160 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
55 Сообщений
alex0402
46 Сообщений
andron81_81
44 Сообщений
AIFrame
35 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
BuhRust
27 Сообщений
Golickoff Golickoff
27 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 169
  • Точка Скрытых: 0
  • Точка Пользователей: 1
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal