Автор Тема: ЗУП 3.0 Специалист Билет 5  (Прочитано 11536 раз)

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

demos

  • Новичок
  • *
  • Сообщений: 4
  • ФИО: demos
ЗУП 3.0 Специалист Билет 5
« : Октябрь 10, 2014, 10:23:32 pm »
1. Создаем Начисление "_Оплата за групповые занятия", Только если введен вид учета времени и Вид Времени : "_Групповое занятие", Дополнительная оплата за уже оплаченное время, формула: "ЧасовойТарифПоДолжности * ОтработаноЧасовВПределахНормыВремени"
 2. Создаем Начисление "_Оплата за персональные тренировки", Только если введен вид учета времени и Вид Времени : "_Персональная тренировка", Дополнительная оплата за уже оплаченное время, формула: "ЧасовойТарифПоДолжности * ОтработаноЧасовВПределахНормыВремени * 20 / 100"

 3. Создаем РС ГрупповыеЗанятия, изм: Тренер,ДатаНачала(датавремя),ДатаОкончания(датавремя), реквизит: Занятия (справочник.Занятия)
 непереодический, подчиненный регистратору: РасписаниеГрупповыхЗанятий

 4. Документ РасписаниеГрупповыхЗанятий:
 Реквизиты: ДатаНачалаПериода, ДатаОкончанияПериода, ИсправленныйДокумент, Подразделение, Организация, скопированы с документа - ИндивидуальногоГрафика
 ТабличнаяЧасть - ТаблицаРасписания: Тренер, ДатаНачала, ДатаОкончания, Занятие, ДеньЗанятия (перечисление ДниНедели: пн.вт.ср. и т.д.)
 Документ будет писать в РС ГрупповыеЗанятия и РН РабочееВремяСотрудников (как Индивидуальный график)
 
 
Код
Функция ПустаяТаблицаДанныхОВремени()
     ТаблицаДанныхОВремени = Новый ТаблицаЗначений;
     ТаблицаДанныхОВремени.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
     ТаблицаДанныхОВремени.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
     ТаблицаДанныхОВремени.Колонки.Добавить("ВидВремени", Новый ОписаниеТипов("СправочникСсылка.ВидыИспользованияРабочегоВремени"));
     ТаблицаДанныхОВремени.Колонки.Добавить("Дней", Новый ОписаниеТипов("Число"));
     ТаблицаДанныхОВремени.Колонки.Добавить("Часов", Новый ОписаниеТипов("Число"));
     ТаблицаДанныхОВремени.Колонки.Добавить("ВЦеломЗаПериод", Новый ОписаниеТипов("Булево"));
     Возврат ТаблицаДанныхОВремени;
 КонецФункции     

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

Добавлено (10.10.2014, 22:23)
---------------------------------------------
5. Документ ПерсональныеТренировки
 Реквизиты: ДатаНачалаПериода, ДатаОкончанияПериода, ИсправленныйДокумент, Подразделение, Организация, ПериодРегистрации, скопированы с документа - Табель
 ТабличнаяЧасть - ТаблицаТренировок: Тренер, ДатаНачала, ДатаОкончания
 Документ будет проверять занятость времени по РС ГрупповыеЗанятия и писать в РН РабочееВремяСотрудников (как Табель)
 
 

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

 Процедура ОбработкаПроведения(Отказ, РежимПроведения)
      
     ДатаТренировки = НачалоДня(Дата);
      
     // готовим регистр для записи
     ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
      
     ЗначенияПоУмолчанию = Новый Структура("Организация");
     ЗарплатаКадры.ПолучитьЗначенияПоУмолчанию(ЗначенияПоУмолчанию, ДатаТренировки );
      
     ДатаНачалаПериода = ДатаТренировки;
     ДатаОкончанияПериода = ДатаТренировки;
     ПериодРегистрации = ДатаТренировки;
     Организация = ЗначенияПоУмолчанию.Организация;
      
     ВыборкаДанныхОВремени = Документы.ТабельУчетаРабочегоВремени.ДанныеОВремениСотрудников(ЭтотОбъект);  
     //ВыборкаДанныхОВремени.Владелец().выгрузить()         
      
      
     Запрос = Новый Запрос;
     Запрос.Текст =  
     "ВЫБРАТЬ
     |    ПерсональныеТренировкиТаблицаТренировок.НомерСтроки,
     |    ПерсональныеТренировкиТаблицаТренировок.Тренер КАК Тренер,
     |    ДОБАВИТЬКДАТЕ(&Дата, СЕКУНДА, ЧАС(ПерсональныеТренировкиТаблицаТренировок.ДатаНачала) * 60 * 60 + МИНУТА(ПерсональныеТренировкиТаблицаТренировок.ДатаНачала) * 60) КАК ДатаНачала,
     |    ДОБАВИТЬКДАТЕ(&Дата, СЕКУНДА, ЧАС(ПерсональныеТренировкиТаблицаТренировок.ДатаОкончания) * 60 * 60 + МИНУТА(ПерсональныеТренировкиТаблицаТренировок.ДатаОкончания) * 60) КАК ДатаОкончания
     |ПОМЕСТИТЬ ВТ
     |ИЗ
     |    Документ.ПерсональныеТренировки.ТаблицаТренировок КАК ПерсональныеТренировкиТаблицаТренировок
     |ГДЕ
     |    ПерсональныеТренировкиТаблицаТренировок.Ссылка = &Ссылка
     |
     |ИНДЕКСИРОВАТЬ ПО
     |    Тренер
     |;
     |
     |////////////////////////////////////////////////////////////////////////////////
     |ВЫБРАТЬ
     |    ВыборкаДанныхОВремени.Сотрудник,
     |    ВыборкаДанныхОВремени.Часы КАК Часов
     |ПОМЕСТИТЬ ВТВыборкаДанныхОВремени
     |ИЗ
     |    &ВыборкаДанныхОВремени КАК ВыборкаДанныхОВремени
     |ГДЕ
     |    ВыборкаДанныхОВремени.ВидУчетаВремени = &ВидУчетаВремениЯвка
     |;
     |
     |////////////////////////////////////////////////////////////////////////////////
     |ВЫБРАТЬ
     |    ВТ.Тренер,
     |    РАЗНОСТЬДАТ(ВТ.ДатаНачала, ВТ.ДатаОкончания, СЕКУНДА) КАК ВремяЗанятия,
     |    ВЫБОР
     |        КОГДА ЕСТЬNULL(ГрупповыеЗанятия.НомерСтроки, 0) = 0
     |            ТОГДА 0
     |        ИНАЧЕ ВТ.НомерСтроки
     |    КОНЕЦ КАК НомерОшибки
     |ПОМЕСТИТЬ ВТРезультат
     |ИЗ
     |    ВТ КАК ВТ
     |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрупповыеЗанятия КАК ГрупповыеЗанятия
     |        ПО ВТ.Тренер = ГрупповыеЗанятия.Тренер
     |            И (ГрупповыеЗанятия.Активность = ИСТИНА)
     |            И (ГрупповыеЗанятия.ДатаНачала > ВТ.ДатаНачала
     |                    И ГрупповыеЗанятия.ДатаНачала < ВТ.ДатаОкончания
     |                ИЛИ ВТ.ДатаНачала > ГрупповыеЗанятия.ДатаНачала
     |                    И ВТ.ДатаНачала < ГрупповыеЗанятия.ДатаОкончания)
     |;
     |
     |////////////////////////////////////////////////////////////////////////////////
     |ВЫБРАТЬ
     |    ВТРезультат.НомерОшибки
     |ИЗ
     |    ВТРезультат КАК ВТРезультат
     |ГДЕ
     |    ВТРезультат.НомерОшибки > 0
     |;
     |
     |////////////////////////////////////////////////////////////////////////////////
     |ВЫБРАТЬ
     |    ВТРезультат.Тренер,
     |    СУММА(ВТРезультат.ВремяЗанятия) КАК ВремяЗанятия,
     |    ВТВыборкаДанныхОВремени.Часов
     |ИЗ
     |    ВТРезультат КАК ВТРезультат
     |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТВыборкаДанныхОВремени КАК ВТВыборкаДанныхОВремени
     |        ПО ВТРезультат.Тренер = ВТВыборкаДанныхОВремени.Сотрудник
     |
     |СГРУППИРОВАТЬ ПО
     |    ВТРезультат.Тренер,
     |    ВТВыборкаДанныхОВремени.Часов";
      
     Запрос.УстановитьПараметр("Ссылка", Ссылка);
     Запрос.УстановитьПараметр("Дата", ДатаТренировки);
     Запрос.УстановитьПараметр("ВыборкаДанныхОВремени", ВыборкаДанныхОВремени.Владелец().Выгрузить() );
     Запрос.УстановитьПараметр("ВидУчетаВремениЯвка", ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.Явка") );
      
     РезультатыЗапроса = Запрос.ВыполнитьПакет();
      
     Выборка = РезультатыЗапроса[3].Выбрать();
     Пока Выборка.Следующий() Цикл
         Сообщение = Новый СообщениеПользователю;
         Сообщение.Текст = "В это время тренер занят на групповых тренировках!";
         Сообщение.Поле = "ТаблицаТренировок["+(Выборка.НомерОшибки-1)+"].Тренер";
         Сообщение.УстановитьДанные(ЭтотОбъект);
         Сообщение.Сообщить();
         Отказ = Истина;
     КонецЦикла;
      
     Если Отказ = Ложь Тогда
          
         ТаблицаДанныхОВремени = ПустаяТаблицаДанныхОВремени();
          
         Выборка = РезультатыЗапроса[4].Выбрать();
          
         Пока Выборка.Следующий() Цикл
              
             ДанныеПоВидуВремениНаДату = ТаблицаДанныхОВремени.Добавить();
             ДанныеПоВидуВремениНаДату.Дата = ДатаТренировки;
             ДанныеПоВидуВремениНаДату.Сотрудник = Выборка.Тренер;
             ДанныеПоВидуВремениНаДату.ВидВремени = Справочники.ВидыИспользованияРабочегоВремени.НайтиПоРеквизиту("БуквенныйКод","ПРС");
             ДанныеПоВидуВремениНаДату.Дней = 1;
             ДанныеПоВидуВремениНаДату.Часов = Выборка.ВремяЗанятия / 60 / 60;
             ДанныеПоВидуВремениНаДату.ВЦеломЗаПериод = Ложь;
              
             ДанныеПоВидуВремениНаДату = ТаблицаДанныхОВремени.Добавить();
             ДанныеПоВидуВремениНаДату.Дата = ДатаТренировки;
             ДанныеПоВидуВремениНаДату.Сотрудник = Выборка.Тренер;
             ДанныеПоВидуВремениНаДату.ВидВремени = ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.Явка");
             ДанныеПоВидуВремениНаДату.Дней = 1;
             ДанныеПоВидуВремениНаДату.Часов = Выборка.Часов;
             ДанныеПоВидуВремениНаДату.ВЦеломЗаПериод = Ложь;             
              
         КонецЦикла;         
          
         // пишем в РН РабочееВремяСотрудников
         УчетРабочегоВремени.ЗарегистрироватьДанныеТабеля(Движения, ТаблицаДанныхОВремени);
          
     КонецЕсли;  
      
 КонецПроцедуры

Добавлено (10.10.2014, 22:23)
---------------------------------------------
4.Отчет
 

Код
ВЫБРАТЬ РАЗРЕШЕННЫЕ
     НачисленияДанныеГрафика.ПериодДействия,
     НачисленияДанныеГрафика.Сотрудник,
     НачисленияДанныеГрафика.Результат,
     НачисленияДанныеГрафика.ОсновноеЗначениеФактическийПериодДействия,
     НачисленияДанныеГрафика.ОсновноеЗначениеНормаФактическийПериодДействия
 ПОМЕСТИТЬ ВТДежурство
 ИЗ
     РегистрРасчета.Начисления.ДанныеГрафика(
             ВидРасчета = &Дежурство
                 И (ПериодДействия МЕЖДУ &НачалоПериода И &КонецПериода)) КАК НачисленияДанныеГрафика
 ГДЕ
     НачисленияДанныеГрафика.Активность = ИСТИНА
     И НачисленияДанныеГрафика.Сторно = ЛОЖЬ
 ;

 ////////////////////////////////////////////////////////////////////////////////
 ВЫБРАТЬ РАЗРЕШЕННЫЕ
     НачисленияДанныеГрафика.ПериодДействия,
     НачисленияДанныеГрафика.Сотрудник,
     НачисленияДанныеГрафика.Результат,
     НачисленияДанныеГрафика.ОсновноеЗначениеФактическийПериодДействия
 ПОМЕСТИТЬ ВТГрупповыеЗанятия
 ИЗ
     РегистрРасчета.Начисления.ДанныеГрафика(
             ВидРасчета = &ГрупповыеЗанятия
                 И (ПериодДействия МЕЖДУ &НачалоПериода И &КонецПериода)) КАК НачисленияДанныеГрафика
 ГДЕ
     НачисленияДанныеГрафика.Активность = ИСТИНА
     И НачисленияДанныеГрафика.Сторно = ЛОЖЬ
 ;

 ////////////////////////////////////////////////////////////////////////////////
 ВЫБРАТЬ РАЗРЕШЕННЫЕ
     НачисленияДанныеГрафика.ПериодДействия,
     НачисленияДанныеГрафика.Сотрудник,
     НачисленияДанныеГрафика.Результат,
     НачисленияДанныеГрафика.ОсновноеЗначениеФактическийПериодДействия
 ПОМЕСТИТЬ ВТПерсональныеТренировки
 ИЗ
     РегистрРасчета.Начисления.ДанныеГрафика(
             ВидРасчета = &ПерсональныеТренировки
                 И (ПериодДействия МЕЖДУ &НачалоПериода И &КонецПериода)) КАК НачисленияДанныеГрафика
 ГДЕ
     НачисленияДанныеГрафика.Активность = ИСТИНА
     И НачисленияДанныеГрафика.Сторно = ЛОЖЬ
 ;

 ////////////////////////////////////////////////////////////////////////////////
 ВЫБРАТЬ
     ВТДежурство.ПериодДействия,
     ВТДежурство.Сотрудник,
     ВТДежурство.ОсновноеЗначениеНормаФактическийПериодДействия КАК ЧасовПоГрафикуРаботы,
     ВТДежурство.ОсновноеЗначениеФактическийПериодДействия КАК ЧасовДежурства,
     ВТДежурство.Результат КАК Начислено1,
     ВТГрупповыеЗанятия.ОсновноеЗначениеФактическийПериодДействия КАК ЧасовЗанятий,
     ВТГрупповыеЗанятия.Результат КАК Начислено2,
     ВТПерсональныеТренировки.ОсновноеЗначениеФактическийПериодДействия КАК ЧасовПерсональныхТренировок,
     ВТПерсональныеТренировки.Результат КАК Начислено3
 ПОМЕСТИТЬ ВТРезультат
 ИЗ
     ВТДежурство КАК ВТДежурство
         ЛЕВОЕ СОЕДИНЕНИЕ ВТГрупповыеЗанятия КАК ВТГрупповыеЗанятия
         ПО ВТДежурство.ПериодДействия = ВТГрупповыеЗанятия.ПериодДействия
             И ВТДежурство.Сотрудник = ВТГрупповыеЗанятия.Сотрудник
         ЛЕВОЕ СОЕДИНЕНИЕ ВТПерсональныеТренировки КАК ВТПерсональныеТренировки
         ПО ВТДежурство.ПериодДействия = ВТПерсональныеТренировки.ПериодДействия
             И ВТДежурство.Сотрудник = ВТПерсональныеТренировки.Сотрудник
 ;

 ////////////////////////////////////////////////////////////////////////////////
 ВЫБРАТЬ
     ВТРезультат.Сотрудник,
     ВТРезультат.ПериодДействия КАК Период
 ПОМЕСТИТЬ ВТСотрудники
 ИЗ
     ВТРезультат КАК ВТРезультат

 СГРУППИРОВАТЬ ПО
     ВТРезультат.Сотрудник,
     ВТРезультат.ПериодДействия
 ;

 ////////////////////////////////////////////////////////////////////////////////
 ВЫБРАТЬ РАЗРЕШЕННЫЕ
     ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник,
     ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность,
     ВТСотрудники.Период
 ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников
 ИЗ
     ВТСотрудники КАК ВТСотрудники
 ГДЕ
     "ТолькоРазрешенные" = ИСТИНА
 ;

 ////////////////////////////////////////////////////////////////////////////////
 ВЫБРАТЬ
     ВТРезультат.ПериодДействия,
     Представления_КадровыеДанныеСотрудников.Должность,
     ВТРезультат.Сотрудник,
     ВТРезультат.ЧасовПоГрафикуРаботы,
     ВТРезультат.ЧасовДежурства,
     ВТРезультат.Начислено1,
     ВТРезультат.ЧасовЗанятий,
     ВТРезультат.Начислено2,
     ВТРезультат.ЧасовПерсональныхТренировок,
     ВТРезультат.Начислено3
 ИЗ
     ВТРезультат КАК ВТРезультат
         ВНУТРЕННЕЕ СОЕДИНЕНИЕ Представления_КадровыеДанныеСотрудников КАК Представления_КадровыеДанныеСотрудников
         ПО ВТРезультат.ПериодДействия = Представления_КадровыеДанныеСотрудников.Период
             И ВТРезультат.Сотрудник = Представления_КадровыеДанныеСотрудников.Сотрудник

Незнайка

  • Новичок
  • *
  • Сообщений: 2
  • ФИО: Незнайка
Re: ЗУП 3.0 Специалист Билет 5
« Ответ #1 : Декабрь 15, 2014, 11:53:24 pm »
Подскажите, пожалуйста, один момент. Не могу разобраться, откуда берется значение показателя ЧасовойТарифПоДолжности .

Возможно изначально неверная логика моего решения. Рассуждаю я так:
1. СОздаю штатное расписание с тремя должностями:
 - мл.тренер - тариф 200 руб/час
 - тренер - тариф 250 руб/час
 - ст.тренер - тариф 300 руб/час

2. Принимаю на работу сотрудников и в самом документе приема на работу вручную на второй закладке меняю значение тарифной ставки со знаения, которое подтянулось из штатного расписания (см.пункт 1) на значение 100 руб/час, так как в задании сказано что все получают по 100 руб в час.

 Таким образом , я полагаю, что у нас и тарифная ставка в 100 рублей установлена, и вроде бы по каждой дожности свой тариф указан.

3. и далее я полагаю, что при расчете зп система подтянет значение показателя ЧасовойТарифПоДолжности именно из штатного расписания - но нет. Значение показателя - 0. Однако часы считает..  Не могу сообразить, что именно я не так заполняю.

Подскажите, пожалуйста


Tex

  • Пользователь
  • **
  • Сообщений: 11
  • ФИО: Андрей
Re: ЗУП 3.0 Специалист Билет 5
« Ответ #2 : Февраль 11, 2015, 02:59:19 pm »
Подскажите, пожалуйста, один момент. Не могу разобраться, откуда берется значение показателя ЧасовойТарифПоДолжности .

Сделал сегодня этот билет. Показатель этот судя по всему заносится вручную, в штатных такого не существует. Я создал документ, который заносит показатель в РС ПериодическиеПоказателиРасчетаЗарплатыСотрудника. Туда заносится показатель для каждого сотрудника и используется бессрочно или до смены пользователем. Это быстрый вариант для экзамена ограниченного по времени. Если делать основательно, то надо, чтобы документы проверяли его наличие в РС РазовыеПоказателиРасчетаЗарплатыСотрудника и, при отсутствии в данном месяце, писали его туда.
« Последнее редактирование: Февраль 11, 2015, 03:06:07 pm от Tex »

IgorXml

  • Пользователь
  • **
  • Сообщений: 42
  • IgorXml
  • ФИО: Игорь
Re: ЗУП 3.0 Специалист Билет 5
« Ответ #3 : Сентябрь 05, 2015, 04:21:16 pm »
Подскажите, пожалуйста, один момент. Не могу разобраться, откуда берется значение показателя ЧасовойТарифПоДолжности .

Сделал сегодня этот билет. Показатель этот судя по всему заносится вручную, в штатных такого не существует. Я создал документ, который заносит показатель в РС ПериодическиеПоказателиРасчетаЗарплатыСотрудника. Туда заносится показатель для каждого сотрудника и используется бессрочно или до смены пользователем. Это быстрый вариант для экзамена ограниченного по времени. Если делать основательно, то надо, чтобы документы проверяли его наличие в РС РазовыеПоказателиРасчетаЗарплатыСотрудника и, при отсутствии в данном месяце, писали его туда.
   Не надо РС Периодический заводить. Здесь показатель является часовой тарифной ставкой. При приеме на работу его надо ввести.
   Решение задачи от  demos удачное и пока единственное. Но надо учесть, что сейчас для релиза 3.0.23.139 от 08.2015 г.  вместо регистра "РН РабочееВремяСотрудников" два разных регистра для д.табеля и д.индивидуального графика. 
   Ещё можно доработать д.Персональные тренировки, чтобы были движения по трем видам начисления, когда они все попадает в один день.
  И в отчете не заполняется колонка "ЧасовПоГрафикуРаботы" (из НачисленияДанныеГрафика.ОсновноеЗначениеНормаФактическийПериодДействия). До релиза 3.0.23.139 эта колонка заполняется правильно. Или ошибка, или иначе заполняется РС.ГрафикиРаботыПоВидамВремени график для РР Начисления. Сделал иначе, на случай если на экзамене будет этот релиз. 
« Последнее редактирование: Сентябрь 20, 2015, 11:36:07 am от IgorXml »

FireAlex

  • Новичок
  • *
  • Сообщений: 2
Re: ЗУП 3.0 Специалист Билет 5
« Ответ #4 : Ноябрь 16, 2015, 07:56:28 pm »
"Сделал иначе, на случай если на экзамене будет этот релиз."

я тоже покопался немного в нашем случае в РР  ВремяВЧасах= Истина, а в РС.ГрафикиРаботыПоВидамВремени пишется измерение ВремяВЧасах = ложь, поэтому не можем получить ни норму, ни отработанное время по графику. Может так задумывалось, не знаю.

Подскажи, как можно вытащить норму в отчете по другому, если получилось?

arthur2003

  • Новичок
  • *
  • Сообщений: 6
  • ФИО: Артур
Re: ЗУП 3.0 Специалист Билет 5
« Ответ #5 : Февраль 18, 2016, 05:12:58 pm »
"Сделал иначе, на случай если на экзамене будет этот релиз."

я тоже покопался немного в нашем случае в РР  ВремяВЧасах= Истина, а в РС.ГрафикиРаботыПоВидамВремени пишется измерение ВремяВЧасах = ложь, поэтому не можем получить ни норму, ни отработанное время по графику. Может так задумывалось, не знаю.

Подскажи, как можно вытащить норму в отчете по другому, если получилось?

присоединяюсь к вопросу. Та же самая проблема и в этом билете и во 2-м.
Не вижу что решение предложенное IgorXML устраняет данную проблему
« Последнее редактирование: Февраль 18, 2016, 05:15:50 pm от arthur2003 »

imp521

  • Новичок
  • *
  • Сообщений: 2
Re: ЗУП 3.0 Специалист Билет 5
« Ответ #6 : Март 25, 2016, 04:40:23 pm »
Я прошу прощения, не могу понять уважаемые, почему в решении Demos для документа РасписаниеГрупповыхЗанятий используется данные о времени взятые из Документы.ИндивидуальныйГрафик.ДанныеОВремениСотрудников(ЭтотОбъект), а для документа ПерсональныеТренировки данные берутся из Документы.ТабельУчетаРабочегоВремени.ДанныеОВремениСотрудников(ЭтотОбъект). Почему в одном случае одно, в другом другое? У меня вроде получилось все данные брать из Документы.ИндивидуальныйГрафик.ДанныеОВремениСотрудников(ЭтотОбъект)

imp521

  • Новичок
  • *
  • Сообщений: 2
Re: ЗУП 3.0 Специалист Билет 5
« Ответ #7 : Март 29, 2016, 08:52:49 am »
По поводу "РР  ВремяВЧасах= Истина, а в РС.ГрафикиРаботыПоВидамВремени пишется измерение ВремяВЧасах = ложь". Тут 2 варианта похоже - получить данные фактически отработанных часов из базы ОтработаноЧасов, а часов в дежурстве посчитать соединением по графику работы т.е. самому. Он более быстрый и не несет доп. нагрузок на систему как второй вариант - создать подписку на РР ПриЗаписи и там поменять для индивидуальных графиков(Тип графика Сотрудники) РС.ВремяВЧасах=Истина дополнительно поменяв местами значения ресурсов ОсновноеЗначение<->ДополнительноеЗначение и ОсновноеЗначениеНорма<->ДополнительноеЗначениеНорма, тем самым позволив в РР.ДанныеГрафика видеть фактически отработанные часы из ОсновноеЗначениеФактическийПериодДействия. Но учитывая, что тот же документ Начисление зарплаты  обращается к записи РР не один раз(что-то вызывался он у меня и при заполнении ТЧ документа и при проведении) это делает дополнительную нагрузку на систему. Мне кажется что примут и первый вариант, т.к. индивидуальные графики в 1С учитываются почему-то всегда по дням.

mkanaev

  • Пользователь
  • **
  • Сообщений: 27
  • ФИО: Канаев Михаил Сергеевич
Re: ЗУП 3.0 Специалист Билет 5
« Ответ #8 : Апрель 05, 2016, 09:55:32 am »
Мое решение:
Описание.
1. Создал виды времени "Индивидуальные тренировки", "Групповые тренировки" вывел из в константы для получения в документах.
2. Создал константы:
   - Показатель_ОкладПоДолжности - автоматической установки ставок по    сотруднику в документах.
   - Начисление_ГрупповыеЗанятия - для использования в отчете
   - Начисление_ИндивидуальныеЗанятия - для использования в отчете
   - Начисление_Оклад - для использования в отчете

3. Создал начисления:
   - Групповые занятия с формулой "ВремяВЧасах * ОкладПоДолжности", вводиться    только если введено значение табеля
   - Групповые занятия с формулой "ВремяВЧасах * ОкладПоДолжности * 1.2",    вводиться только если введено значение табеля.

4. Создал не периодический регистр сведений "СтавкиПоДолжности" для получения ставок по каждой должности.

5. Создал не периодический регистр сведений "ПериодыГрупповыхТренировок", для выполнения контроля "во время групповой тренировки индивидуальная тренировка не проводится".

6. Создал документ "РасписаниеГрупповыхЗанятий". Документ формирует движения в регистр накопления "ДанныеОперативногоУчетаРабочегоВремениСотрудников", "ПериодыГрупповыхТренировок" и если необходимо ввести ставку по должности то в регистр сведений "ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников". В РН "ДанныеОперативногоУчетаРабочегоВремениСотрудников" заносятся две записи + вид времени групповых тренировок, - вид времени явка, так как в задачи сказано что в период групповых тренировок сотрудник получает ЗП по тарифной ставки от должности. Перед проведением проверяются достаточно ли часов работы за день в который вносится групповая тренировка. Разработал процедуры проверки вводимых данных на предмет пересечения периодов и не корректных периодов.

7. Создал документ "ИндивидуальныеТренировки". Документ формирует движения в регистр накопления "ДанныеОперативногоУчетаРабочегоВремениСотрудников" и если необходимо ввести ставку по должности то в регистр сведений "ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников". Перед проведением проверяется не приходится ли время тренировки на групповое занятие. Проверяется корректность данных в документе.

8. Разработал отчет, данные брал из регистра расчета "Начисления", вирт. таблица "ДанныеГрафика", т.к. индивидуальный график не формируется для начислений в часах, если в строке начисления задан индивидуальный график то норму беру из регистра сведений "ГрафикиРаботыПоВидамВремени" и факт с учетом вирт. таблицы "ФактическийПериодДействия", так как это делается в типовых процедурах расчета заработанной платы 1С ЗУП, в модуле "РасчетЗарплатыРасширенный".

9. Ввел данные по 2 сотрудникам за три месяца.


mkanaev

  • Пользователь
  • **
  • Сообщений: 27
  • ФИО: Канаев Михаил Сергеевич
Re: ЗУП 3.0 Специалист Билет 5
« Ответ #9 : Апрель 05, 2016, 09:58:10 am »
Модуль документа "расписание групповых тренировок"
Процедура ОбработкаПроведения(Отказ, Режим)

Если Константы.ВидВремени_ГрупповыеТренировки.Получить().Пустая() Тогда

СообщениеПользвателю = Новый СообщениеПользователю;
СообщениеПользвателю.Текст = "Не установлена константа ""ВидВремени_ГрупповыеТренировки""";
СообщениеПользвателю.Сообщить();
Отказ = Истина;

КонецЕсли;

Если Константы.Показатель_ОкладПоДолжности.Получить().Пустая() Тогда

СообщениеПользвателю = Новый СообщениеПользователю;
СообщениеПользвателю.Текст = "Не установлена константа ""Показатель_ОкладПоДолжности""";
СообщениеПользвателю.Сообщить();
Отказ = Истина;

КонецЕсли;

Если Отказ Тогда

Возврат;

КонецЕсли;

Движения.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Записать();

ДанныеТабеля = Документы.ТабельУчетаРабочегоВремени.ДанныеОВремениСотрудников(ЭтотОбъект, Данные.ВыгрузитьКолонку("Сотрудник")).Владелец().Выгрузить();

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

ВыборкаПроверка = Результат[3].Выбрать();

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

СообщениеПользвателю = Новый СообщениеПользователю;
СообщениеПользвателю.Текст = "Не верно указан период в строке номер: " + Строка(ВыборкаПроверка.НомерСтроки);
СообщениеПользвателю.Сообщить();
Отказ = Истина;
   
КонецЦикла;

Если Отказ Тогда

Возврат;

КонецЕсли;

ВыборкаСотрудников = Результат[2].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

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

ЗначениеПоказателя = 0;
НачалоПериода = Неопределено;

ВыборкаДень = ВыборкаСотрудников.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

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

Если ВыборкаДень.ЧасовПоТабелю < ВыборкаДень.Часов Тогда

СообщениеПользвателю = Новый СообщениеПользователю;
СообщениеПользвателю.Текст = "Сотрудник " + Строка(ВыборкаСотрудников.Сотрудник) + " " + Формат(ВыборкаДень.День, "ДЛФ=DD") + " работает всего " + Строка(ВыборкаДень.ЧасовПоТабелю);
СообщениеПользвателю.Сообщить();
Отказ = Истина;

КонецЕсли;

Если Отказ Тогда

Продолжить;

КонецЕсли;

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

Движение = Движения.ДанныеОперативногоУчетаРабочегоВремениСотрудников.Добавить();
Движение.Период = ВыборкаДень.День;
Движение.Сотрудник = ВыборкаСотрудников.Сотрудник;
Движение.ПериодРегистрации = НачалоМесяца(ВыборкаДень.День);
Движение.ВидУчетаВремени = Справочники.ВидыИспользованияРабочегоВремени.Явка;
Движение.ВидДанных = Перечисления.ВидыДанныхУчетаВремениСотрудников.ДанныеВнутрисменныхНеявок;
Движение.Часы = ВыборкаДень.Часов * -1;   

Выборка = ВыборкаДень.Выбрать();

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

Движение = Движения.ПериодыГрупповыхТренировок.Добавить();
ЗаполнитьЗначенияСвойств(Движение, Выборка);

КонецЦикла;

Если ЗначениеПоказателя = 0 Тогда

ЗначениеПоказателя = ВыборкаДень.Показатель;
НачалоПериода = ВыборкаДень.День;
Продолжить;

КонецЕсли;

Если ЗначениеПоказателя <> ВыборкаДень.Показатель И Не ЗначениеПоказателя = 0 Тогда

Движение = Движения.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Добавить();
Движение.Период = НачалоПериода;
Движение.Сотрудник = ВыборкаСотрудников.Сотрудник;
Движение.Организация = Организация;
Движение.ФизическоеЛицо = ВыборкаСотрудников.Сотрудник.ФизическоеЛицо;
Движение.Показатель = Константы.Показатель_ОкладПоДолжности.Получить();
Движение.Значение = ЗначениеПоказателя;
Движение.ДействуетДо = ВыборкаДень.День;

ЗначениеПоказателя = ВыборкаДень.Показатель;
НачалоПериода = ВыборкаДень.День;
Продолжить;

КонецЕсли;

КонецЦикла;

Если Не ЗначениеПоказателя = 0 Тогда

Движение = Движения.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Добавить();
Движение.Период = НачалоПериода;
Движение.Сотрудник = ВыборкаСотрудников.Сотрудник;
Движение.Организация = Организация;
Движение.ФизическоеЛицо = ВыборкаСотрудников.Сотрудник.ФизическоеЛицо;
Движение.Показатель = Константы.Показатель_ОкладПоДолжности.Получить();
Движение.Значение = ЗначениеПоказателя;

КонецЕсли;

КонецЦикла;                                                                                                                   

Если Не Отказ Тогда

Движения.ДанныеОперативногоУчетаРабочегоВремениСотрудников.Записывать = Истина;
Движения.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Записывать = Истина;
Движения.ПериодыГрупповыхТренировок.Записывать = Истина;

КонецЕсли;

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

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

Дата = Дата(Год(Дата), Месяц(Дата), 25);
ПериодРегистрации = НачалоМесяца(ДобавитьМесяц(Дата, 1));
ДатаНачалаПериода = НачалоМесяца(ДобавитьМесяц(Дата, 1));
ДатаОкончанияПериода = КонецМесяца(ДобавитьМесяц(Дата, 1));

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

mkanaev

  • Пользователь
  • **
  • Сообщений: 27
  • ФИО: Канаев Михаил Сергеевич
Re: ЗУП 3.0 Специалист Билет 5
« Ответ #10 : Апрель 05, 2016, 09:58:29 am »
Модуль документа "Индивидуальные тренировки":
Процедура ОбработкаПроведения(Отказ, Режим)

Если Константы.ВидВремени_ИндивидуальныеТренировки.Получить().Пустая() Тогда

СообщениеПользвателю = Новый СообщениеПользователю;
СообщениеПользвателю.Текст = "Не установлена константа ""ВидВремени_ИндивидуальныеТренировки""";
СообщениеПользвателю.Сообщить();
Отказ = Истина;

КонецЕсли;

Если Константы.Показатель_ОкладПоДолжности.Получить().Пустая() Тогда

СообщениеПользвателю = Новый СообщениеПользователю;
СообщениеПользвателю.Текст = "Не установлена константа ""Показатель_ОкладПоДолжности""";
СообщениеПользвателю.Сообщить();
Отказ = Истина;

КонецЕсли;

Если Отказ Тогда

Возврат;

КонецЕсли;

Движения.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Записать();

ТаблицаДанные = Данные.Выгрузить(Новый Массив);

Для Каждого СтрокаДанные Из Данные Цикл

Если СтрокаДанные.НачалоПериода > СтрокаДанные.КонецПериода Тогда

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

КонецЕсли;

НачалоПериода = СтрокаДанные.НачалоПериода;

Пока Год(НачалоПериода) <> Год(СтрокаДанные.КонецПериода)
Или Месяц(НачалоПериода) <> Месяц(СтрокаДанные.КонецПериода)
Или День(НачалоПериода) <> День(СтрокаДанные.КонецПериода) Цикл

СтрокаТаблицыДанные = ТаблицаДанные.Добавить();
СтрокаТаблицыДанные.сотрудник = СтрокаДанные.Сотрудник;
СтрокаТаблицыДанные.НачалоПериода = НачалоПериода;
СтрокаТаблицыДанные.КонецПериода = КонецДня(НачалоПериода);

НачалоПериода = НачалоДня(НачалоПериода + 60*60*24);

КонецЦикла;

СтрокаТаблицыДанные = ТаблицаДанные.Добавить();
СтрокаТаблицыДанные.сотрудник = СтрокаДанные.Сотрудник;
СтрокаТаблицыДанные.НачалоПериода = НачалоПериода;
СтрокаТаблицыДанные.КонецПериода = СтрокаДанные.КонецПериода;

КонецЦикла;

Если Отказ Тогда

Возврат;

КонецЕсли;

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

ВыборкаПроверка = Результат[2].Выбрать();

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

СообщениеПользвателю = Новый СообщениеПользователю;
Если Не ВыборкаПроверка.ЕстьПересечение Тогда
СообщениеПользвателю.Текст = "Не верно указан период в строке номер: " + Строка(ВыборкаПроверка.НомерСтроки);
Иначе
СообщениеПользвателю.Текст = "Не верно указан период в строке номер: " + Строка(ВыборкаПроверка.НомерСтроки) + " в это время есть групповое занятие";
КонецЕсли;
СообщениеПользвателю.Сообщить();
Отказ = Истина;
   
КонецЦикла;

Если Отказ Тогда

Возврат;

КонецЕсли;

ВыборкаСотрудников = Результат[1].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

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

ЗначениеПоказателя = 0;
НачалоПериода = Неопределено;

ВыборкаДень = ВыборкаСотрудников.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

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

Движение = Движения.ДанныеОперативногоУчетаРабочегоВремениСотрудников.Добавить();
Движение.Период = ВыборкаДень.День;
Движение.Сотрудник = ВыборкаСотрудников.Сотрудник;
Движение.ПериодРегистрации = НачалоМесяца(ВыборкаДень.День);
Движение.ВидУчетаВремени = Константы.ВидВремени_ИндивидуальныеТренировки.Получить();
Движение.ВидДанных = Перечисления.ВидыДанныхУчетаВремениСотрудников.ДополнительноеВнутрисменноеВремя;
Движение.Часы = ВыборкаДень.Часов;

Если ЗначениеПоказателя = 0 Тогда

ЗначениеПоказателя = ВыборкаДень.Показатель;
НачалоПериода = ВыборкаДень.День;
Продолжить;

КонецЕсли;

Если ЗначениеПоказателя <> ВыборкаДень.Показатель И Не ЗначениеПоказателя = 0 Тогда

Движение = Движения.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Добавить();
Движение.Период = НачалоПериода;
Движение.Сотрудник = ВыборкаСотрудников.Сотрудник;
Движение.Организация = Организация;
Движение.ФизическоеЛицо = ВыборкаСотрудников.Сотрудник.ФизическоеЛицо;
Движение.Показатель = Константы.Показатель_ОкладПоДолжности.Получить();
Движение.Значение = ЗначениеПоказателя;
Движение.ДействуетДо = ВыборкаДень.День;

ЗначениеПоказателя = ВыборкаДень.Показатель;
НачалоПериода = ВыборкаДень.День;
Продолжить;

КонецЕсли;

КонецЦикла;

Если Не ЗначениеПоказателя = 0 Тогда

Движение = Движения.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Добавить();
Движение.Период = НачалоПериода;
Движение.Сотрудник = ВыборкаСотрудников.Сотрудник;
Движение.Организация = Организация;
Движение.ФизическоеЛицо = ВыборкаСотрудников.Сотрудник.ФизическоеЛицо;
Движение.Показатель = Константы.Показатель_ОкладПоДолжности.Получить();
Движение.Значение = ЗначениеПоказателя;

КонецЕсли;

КонецЦикла;                                                                                                                   

Если Не Отказ Тогда

Движения.ДанныеОперативногоУчетаРабочегоВремениСотрудников.Записывать = Истина;
Движения.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Записывать = Истина;

КонецЕсли;

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


mkanaev

  • Пользователь
  • **
  • Сообщений: 27
  • ФИО: Канаев Михаил Сергеевич
Re: ЗУП 3.0 Специалист Билет 5
« Ответ #11 : Апрель 05, 2016, 09:58:40 am »
Отчет СКД:
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(ВЗ.ПериодДействияНачало, МЕСЯЦ) КАК Месяц,
ВЗ.Сотрудник,
ВЗ.ПериодДействияНачало КАК ПериодСреза,
0 КАК ЧасовПоГрафикуДежурства,
ВЫБОР
КОГДА ВЗ.ВидРасчета = &Оклад
ТОГДА ВЗ.Результат
ИНАЧЕ 0
КОНЕЦ КАК Начислено_Дежурство,
ВЫБОР
КОГДА ВЗ.ВидРасчета = &ГрупповыеЗанятия
ТОГДА ВЗ.Результат
ИНАЧЕ 0
КОНЕЦ КАК Начислено_ГрупповыеЗанятия,
ВЫБОР
КОГДА ВЗ.ВидРасчета = &ИндивидуальныеЗанятия
ТОГДА ВЗ.Результат
ИНАЧЕ 0
КОНЕЦ КАК Начислено_ИндивидуальныеЗанятия,
ВЫБОР
КОГДА ВЗ.ВидРасчета = &Оклад
ТОГДА ВЫБОР
КОГДА ВЗ.ОтработаноЧасов ЕСТЬ NULL
ТОГДА ВЗ.ОтработаноЧасов_ИндивидуальныйГрафик
ИНАЧЕ ВЗ.ОтработаноЧасов
КОНЕЦ
ИНАЧЕ 0
КОНЕЦ КАК Часов_Дежурство,
ВЫБОР
КОГДА ВЗ.ВидРасчета = &ГрупповыеЗанятия
ТОГДА ВЫБОР
КОГДА ВЗ.ОтработаноЧасов ЕСТЬ NULL
ТОГДА ВЗ.ОтработаноЧасов_ИндивидуальныйГрафик
ИНАЧЕ ВЗ.ОтработаноЧасов
КОНЕЦ
ИНАЧЕ 0
КОНЕЦ КАК Часов_ГрупповыеЗанятия,
ВЫБОР
КОГДА ВЗ.ВидРасчета = &ИндивидуальныеЗанятия
ТОГДА ВЫБОР
КОГДА ВЗ.ОтработаноЧасов ЕСТЬ NULL
ТОГДА ВЗ.ОтработаноЧасов_ИндивидуальныйГрафик
ИНАЧЕ ВЗ.ОтработаноЧасов
КОНЕЦ
ИНАЧЕ 0
КОНЕЦ КАК Часов_ИндивидуальныеЗанятия
ПОМЕСТИТЬ Данные
ИЗ
(ВЫБРАТЬ
Начисления.Регистратор КАК Регистратор,
Начисления.НомерСтроки КАК НомерСтроки,
Начисления.Сотрудник КАК Сотрудник,
Начисления.ВидРасчета КАК ВидРасчета,
Начисления.ПериодДействияНачало КАК ПериодДействияНачало,
Начисления.ПериодДействияКонец КАК ПериодДействияКонец,
Начисления.Результат КАК Результат,
СУММА(ЕСТЬNULL(ГрафикиРаботыПоВидамВремени.ДополнительноеЗначение, 0)) КАК ОтработаноЧасов_ИндивидуальныйГрафик,
Начисления.ОсновноеЗначениеФактическийПериодДействия КАК ОтработаноЧасов
ИЗ
РегистрРасчета.Начисления.ДанныеГрафика(
ГоловнаяОрганизация = &Организация
И ВидРасчета В (&Оклад, &ГрупповыеЗанятия, &ИндивидуальныеЗанятия)) КАК Начисления
ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.Начисления.ФактическийПериодДействия(
ГоловнаяОрганизация = &Организация
И ВидРасчета В (&Оклад, &ГрупповыеЗанятия, &ИндивидуальныеЗанятия)) КАК ФактическийПриодДействия
ПО Начисления.Регистратор = ФактическийПриодДействия.Регистратор
И Начисления.НомерСтроки = ФактическийПриодДействия.НомерСтроки
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботыПоВидамВремени
ПО (ГрафикиРаботыПоВидамВремени.ГрафикРаботы = ФактическийПриодДействия.ГрафикРаботы)
И (ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = ФактическийПриодДействия.ВидУчетаВремени)
И (ГрафикиРаботыПоВидамВремени.Дата МЕЖДУ ФактическийПриодДействия.ПериодДействияНачало И ФактическийПриодДействия.ПериодДействияКонец)
И (НЕ ГрафикиРаботыПоВидамВремени.ВремяВЧасах)
И (ТИПЗНАЧЕНИЯ(ФактическийПриодДействия.ГрафикРаботы) = ТИП(Справочник.Сотрудники))
ГДЕ
Начисления.ПериодДействияНачало МЕЖДУ &НачалоПериода И &КонецПериода

СГРУППИРОВАТЬ ПО
Начисления.Регистратор,
Начисления.НомерСтроки,
Начисления.Сотрудник,
Начисления.ВидРасчета,
Начисления.ПериодДействияНачало,
Начисления.ПериодДействияКонец,
Начисления.Результат,
Начисления.ОсновноеЗначениеФактическийПериодДействия) КАК ВЗ

ОБЪЕДИНИТЬ

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

СГРУППИРОВАТЬ ПО
Начисления.Регистратор,
Начисления.НомерСтроки,
Начисления.Сотрудник,
Начисления.ВидРасчета,
Начисления.ПериодДействияНачало,
Начисления.ПериодДействияКонец,
Начисления.ОсновноеЗначениеНормаПериодДействия) КАК ВЗ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Данные.Сотрудник,
Данные.ПериодСреза
ПОМЕСТИТЬ ТаблицаСреза
ИЗ
Данные КАК Данные
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник,
ДАТАВРЕМЯ(1, 1, 1) КАК ПериодСреза,
ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность
ПОМЕСТИТЬ Представления_Должности
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Данные.Месяц,
Данные.Сотрудник,
Представления_Должности.Должность,
СУММА(Данные.ЧасовПоГрафикуДежурства) КАК ЧасовПоГрафикуДежурства,
СУММА(Данные.Начислено_Дежурство) КАК Начислено_Дежурство,
СУММА(Данные.Начислено_ГрупповыеЗанятия) КАК Начислено_ГрупповыеЗанятия,
СУММА(Данные.Начислено_ИндивидуальныеЗанятия) КАК Начислено_ИндивидуальныеЗанятия,
СУММА(Данные.Часов_Дежурство) КАК Часов_Дежурство,
СУММА(Данные.Часов_ГрупповыеЗанятия) КАК Часов_ГрупповыеЗанятия,
СУММА(Данные.Часов_ИндивидуальныеЗанятия) КАК Часов_ИндивидуальныеЗанятия
ИЗ
Данные КАК Данные
ЛЕВОЕ СОЕДИНЕНИЕ Представления_Должности КАК Представления_Должности
ПО Данные.Сотрудник = Представления_Должности.Сотрудник
И Данные.ПериодСреза = Представления_Должности.ПериодСреза

СГРУППИРОВАТЬ ПО
Данные.Месяц,
Данные.Сотрудник,
Представления_Должности.Должность

« Последнее редактирование: Май 25, 2016, 08:00:51 am от mkanaev »

серж

  • Пользователь
  • **
  • Сообщений: 93
  • Билеты: https://expert.chistov.pro/public/1127069/
Re: ЗУП 3.0 Специалист Билет 5
« Ответ #12 : Сентябрь 09, 2018, 10:26:59 pm »
7. Создал документ "ИндивидуальныеТренировки". Документ формирует движения в регистр накопления "ДанныеОперативногоУчетаРабочегоВремениСотрудников"
  Круто, запись в этом регистре вытесняет все прочие виды времени. Это означает, что записав 1 час времени персональной тренировки в этот регистр, явка сотрудника в этот день тоже будет 1 час, с соответствующим уменьшением з/п при расчете.
 Такие решения прокатывают на экзамене ?

alsygaev

  • Пользователь
  • **
  • Сообщений: 42
  • ФИО: Евгений Алсыгаев
Re: ЗУП 3.0 Специалист Билет 5
« Ответ #13 : Май 15, 2019, 12:28:48 pm »
Всем привет. Предлагаю свое решение билета 5 без отчета. Решение выполнено на релизе 3.1.7.128. Прошу покритиковать.

VAAngelov

  • Пользователь
  • **
  • Сообщений: 23
  • Дорогу осилит идущий
  • ФИО: Ангелов Виталий Алексеевич
Re: ЗУП 3.0 Специалист Билет 5
« Ответ #14 : Июнь 03, 2019, 06:04:47 pm »
Прикладываю свое переработанное решение на основе решения пользователя mkanaev. И прикладываю описание решения(пользователь mkanaev)