Имя: Пароль:
1C
1С v8
ЗУП Подскажите функцию позволяющую определить работал сотрудник или нет
0 Fr1eNd
 
17.10.11
10:44
Здравствуйте, подскажите есть в ЗУП функция позволяющая определить, работал сотрудник или был на больничном или в отпуске или прогуливал, вообщем определить работал он или нет? По смыслу такая функция быть должна, не хотелось бы терять время на поиск.

Заранее благодарен.
1 smitru
 
17.10.11
11:02
(0) специальной функции для этого нет, но это легко получается элементарным запросом :-)
2 Fr1eNd
 
17.10.11
11:04
(1) буду благодарен за образец или помощь по запросу, так как ЗУП ковырял не много
Заранее благодарен.
3 luckyluke
 
17.10.11
11:09
(1) элементарным запросом это получается до расчета ЗП или после?
4 Fr1eNd
 
17.10.11
11:16
вообщем мне надо написать функцию заполняющую табличную часть документа списком сотрудников работавшими в определенный день, в этом документе уже есть стандартная функция работающая через обработку Формирования списка сотрудников, она работает через РС.Работники организации, в нём таких данных нет. Ешё как это сделать по другому через какой регистр или готовую функцию.
5 Fr1eNd
 
17.10.11
11:16
(3) какая разница эти данные по идеи идут по кадровому учету
6 NDN
 
17.10.11
11:18
Регистр сведений СостояниеСотрудниковОрганизаций. В нем хранятся отклонение.
Т.е. тебе нужны данные из двух регистров: РаботникиОрганизаций и Состояние...
7 Fr1eNd
 
17.10.11
11:38
да все верно я параллельно уже тоже самое нашел
вот запрос:
ВЫБРАТЬ
   СостояниеРаботниковОрганизацийСрезПоследних.Период,
   СостояниеРаботниковОрганизацийСрезПоследних.Регистратор,
   ПРЕДСТАВЛЕНИЕ(СостояниеРаботниковОрганизацийСрезПоследних.Регистратор),
   СостояниеРаботниковОрганизацийСрезПоследних.НомерСтроки,
   СостояниеРаботниковОрганизацийСрезПоследних.Активность,
   СостояниеРаботниковОрганизацийСрезПоследних.Сотрудник,
   ПРЕДСТАВЛЕНИЕ(СостояниеРаботниковОрганизацийСрезПоследних.Сотрудник),
   СостояниеРаботниковОрганизацийСрезПоследних.Организация,
   ПРЕДСТАВЛЕНИЕ(СостояниеРаботниковОрганизацийСрезПоследних.Организация),
   СостояниеРаботниковОрганизацийСрезПоследних.УдалитьФизЛицо,
   ПРЕДСТАВЛЕНИЕ(СостояниеРаботниковОрганизацийСрезПоследних.УдалитьФизЛицо),
   СостояниеРаботниковОрганизацийСрезПоследних.УдалитьПриказ,
   ПРЕДСТАВЛЕНИЕ(СостояниеРаботниковОрганизацийСрезПоследних.УдалитьПриказ),
   СостояниеРаботниковОрганизацийСрезПоследних.Состояние,
   СостояниеРаботниковОрганизацийСрезПоследних.ПериодЗавершения,
   СостояниеРаботниковОрганизацийСрезПоследних.СостояниеЗавершения,
   СостояниеРаботниковОрганизацийСрезПоследних.ПервичныйДокумент,
   ПРЕДСТАВЛЕНИЕ(СостояниеРаботниковОрганизацийСрезПоследних.ПервичныйДокумент),
   СостояниеРаботниковОрганизацийСрезПоследних.ВидДополнительногоОтпуска,
   ПРЕДСТАВЛЕНИЕ(СостояниеРаботниковОрганизацийСрезПоследних.ВидДополнительногоОтпуска),
   СостояниеРаботниковОрганизацийСрезПоследних.ДатаНачалаДоп
ИЗ
   РегистрСведений.СостояниеРаботниковОрганизаций.СрезПоследних(&Дата, ) КАК СостояниеРаботниковОрганизацийСрезПоследних

щас соединение сделаю с Работники организации и будет мне счастье, я так понимаю, Работники организаций нужен что бы определить работающих?
8 smitru
 
17.10.11
11:42
(0) да.. это для того чтобы получить конкретную должность - т.е. если чел работает ещё и совместителем, то он будет иметь единственную запись как ФизЛицо, но разные записи как СотрудникОрганизации

ЗЫ.. а термин работник - это уже к УПП, где есть ещё понятие как Предприятие
9 Fenrik
 
17.10.11
11:47
(4) "надо написать функцию заполняющую табличную часть документа списком сотрудников работавшими в определенный день"

В такой постановке одного запроса в регистр состояний будет явно мало.
10 guitar_player
 
17.10.11
11:54
(6) это если по кадровым данным
11 luckyluke
 
17.10.11
12:00
(5) большая.
(6) а если введен документ начисление по больничному листу, то я так понимаю считать, что он на больничном не стоит?
12 smitru
 
17.10.11
12:01
(10) а состояние сотрудника это всегда только "кадровые данные", данные по бухгалтерии - это ВР. Кадровые данные более оперативны и как правило более развёрнутые
13 luckyluke
 
17.10.11
12:02
(12) ога, если эти кадровые данные вообще кто-то вводит, а если нет?
14 smitru
 
17.10.11
12:03
(11) а у Вас бывает, что по бухучёту - больничные, а по состоянию - работает?

Просто в случает больничного возможно состояние "неявка по невыясненной причине" - и это нормально
15 smitru
 
17.10.11
12:03
(13) а как у Вас получается табель, если кадровые данные никто не вводит?
16 luckyluke
 
17.10.11
12:04
(15) я так понимаю, ты очень смутно представляешь о том как формируется табель?
17 Жан Пердежон
 
17.10.11
12:08
(15) отлично получается
18 Жан Пердежон
 
17.10.11
12:09
(1) запрос там, кстати, совсем не элементарный
19 Fr1eNd
 
17.10.11
12:15
это точно)))
стандартный запрос выгляжит так:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   Даты.ПраздничныйДень КАК ПраздничныйДень,
   НАЧАЛОПЕРИОДА(Даты.ПраздничныйДень, МЕСЯЦ) КАК ТекущийМесяц,
   Даты.Сотрудник КАК Сотрудник,
   ВЫБОР
       КОГДА РаботникиОрганизаций.ПериодЗавершения <= Даты.ПраздничныйДень
               И РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
           ТОГДА РаботникиОрганизаций.ПодразделениеОрганизацииЗавершения
       ИНАЧЕ РаботникиОрганизаций.ПодразделениеОрганизации
   КОНЕЦ КАК ПодразделениеОрганизации,
   ВЫБОР
       КОГДА РаботникиОрганизаций.ПериодЗавершения <= Даты.ПраздничныйДень
               И РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
           ТОГДА РаботникиОрганизаций.ГрафикРаботыЗавершения
       ИНАЧЕ РаботникиОрганизаций.ГрафикРаботы
   КОНЕЦ КАК ГрафикРаботы,
   ВЫБОР
       КОГДА РаботникиОрганизаций.ПериодЗавершения <= Даты.ПраздничныйДень
               И РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
           ТОГДА ВЫБОР
                   КОГДА РаботникиОрганизаций.ГрафикРаботыЗавершения.СокращенноеРабочееВремя
                           И РаботникиОрганизаций.ГрафикРаботыЗавершения.ГрафикПолногоРабочегоВремени <> ЗНАЧЕНИЕ(Справочник.ГрафикиРаботы.ПустаяСсылка)
                       ТОГДА РаботникиОрганизаций.ГрафикРаботыЗавершения.ГрафикПолногоРабочегоВремени
                   ИНАЧЕ РаботникиОрганизаций.ГрафикРаботыЗавершения
               КОНЕЦ
       КОГДА РаботникиОрганизаций.ГрафикРаботы.СокращенноеРабочееВремя
               И РаботникиОрганизаций.ГрафикРаботы.ГрафикПолногоРабочегоВремени <> ЗНАЧЕНИЕ(Справочник.ГрафикиРаботы.ПустаяСсылка)
           ТОГДА РаботникиОрганизаций.ГрафикРаботы.ГрафикПолногоРабочегоВремени
       ИНАЧЕ РаботникиОрганизаций.ГрафикРаботы
   КОНЕЦ КАК ГрафикРаботыНорма,
   ВЫБОР
       КОГДА РаботникиОрганизаций.ПериодЗавершения <= Даты.ПраздничныйДень
               И РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
           ТОГДА РаботникиОрганизаций.ГрафикРаботыЗавершения.ВидГрафика
       ИНАЧЕ РаботникиОрганизаций.ГрафикРаботы.ВидГрафика
   КОНЕЦ КАК ВидГрафика,
   ЕСТЬNULL(ВЫБОР
           КОГДА РаботникиОрганизаций.ПериодЗавершения <= Даты.ПраздничныйДень
                   И РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
               ТОГДА ВЫБОР
                       КОГДА РаботникиОрганизаций.ГрафикРаботыЗавершения.СокращенноеРабочееВремя
                               И РаботникиОрганизаций.ГрафикРаботыЗавершения.ГрафикПолногоРабочегоВремени <> ЗНАЧЕНИЕ(Справочник.ГрафикиРаботы.ПустаяСсылка)
                           ТОГДА РаботникиОрганизаций.ГрафикРаботыЗавершения.ГрафикПолногоРабочегоВремени.ДлительностьРабочейНедели
                       ИНАЧЕ РаботникиОрганизаций.ГрафикРаботыЗавершения.ДлительностьРабочейНедели
                   КОНЕЦ
           КОГДА РаботникиОрганизаций.ГрафикРаботы.СокращенноеРабочееВремя
                   И РаботникиОрганизаций.ГрафикРаботы.ГрафикПолногоРабочегоВремени <> ЗНАЧЕНИЕ(Справочник.ГрафикиРаботы.ПустаяСсылка)
               ТОГДА РаботникиОрганизаций.ГрафикРаботы.ГрафикПолногоРабочегоВремени.ДлительностьРабочейНедели
           ИНАЧЕ РаботникиОрганизаций.ГрафикРаботы.ДлительностьРабочейНедели
       КОНЕЦ, 0) КАК ДлительностьРабочейНедели
ПОМЕСТИТЬ ВТСотрудникиПоПраздникам
ИЗ
   (ВЫБРАТЬ
       ПраздничныеДаты.ДатаКалендаря КАК ПраздничныйДень,
       РаботникиОрганизаций.Сотрудник КАК Сотрудник,
       МАКСИМУМ(РаботникиОрганизаций.Период) КАК Период
   ИЗ
       ВТПраздничныеДаты КАК ПраздничныеДаты
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
           ПО ПраздничныеДаты.ДатаКалендаря >= РаботникиОрганизаций.Период
   ГДЕ
       РаботникиОрганизаций.Организация = &ГоловнаяОрганизация
   
   СГРУППИРОВАТЬ ПО
       РаботникиОрганизаций.Сотрудник,
       ПраздничныеДаты.ДатаКалендаря) КАК Даты
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
       ПО Даты.Период = РаботникиОрганизаций.Период
           И Даты.Сотрудник = РаботникиОрганизаций.Сотрудник
ГДЕ
   РаботникиОрганизаций.Организация = &ГоловнаяОрганизация
   И ВЫБОР
           КОГДА РаботникиОрганизаций.ПериодЗавершения <= Даты.ПраздничныйДень
                   И РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
               ТОГДА РаботникиОрганизаций.ПричинаИзмененияСостоянияЗавершения
           ИНАЧЕ РаботникиОрганизаций.ПричинаИзмененияСостояния
       КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
   И ВЫБОР
           КОГДА РаботникиОрганизаций.ПериодЗавершения <= Даты.ПраздничныйДень
                   И РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
               ТОГДА РаботникиОрганизаций.ОбособленноеПодразделениеЗавершения
           ИНАЧЕ РаботникиОрганизаций.ОбособленноеПодразделение
       КОНЕЦ = &Организация

ИНДЕКСИРОВАТЬ ПО
   Сотрудник,
   ПраздничныйДень
;

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

ИНДЕКСИРОВАТЬ ПО
   Сотрудник,
   ПраздничныйДень
;

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

ИНДЕКСИРОВАТЬ ПО
   Сотрудник
;

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

ИНДЕКСИРОВАТЬ ПО
   Сотрудник,
   РабочийДень
;

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

ИНДЕКСИРОВАТЬ ПО
   Сотрудник,
   РабочийДень
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
   СписокРаботников.Сотрудник КАК Сотрудник
ПОМЕСТИТЬ ВТСводныеИндивидуальныеГрафикиРаботы
ИЗ
   ВТСотрудникиПоПраздникам КАК СписокРаботников
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СводныеИндивидуальныеГрафики КАК СводныеИндивидуальныеГрафики
       ПО СписокРаботников.Сотрудник = СводныеИндивидуальныеГрафики.Сотрудник
           И СписокРаботников.ТекущийМесяц = СводныеИндивидуальныеГрафики.Месяц
ГДЕ
   СводныеИндивидуальныеГрафики.Сотрудник ЕСТЬ НЕ NULL

ИНДЕКСИРОВАТЬ ПО
   Сотрудник
;

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

ИНДЕКСИРОВАТЬ ПО
   Сотрудник
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
   СписокРаботников.Сотрудник КАК Сотрудник,
   СводныеИндивидуальныеГрафики.Часов КАК ЧасовЗаМесяц
ПОМЕСТИТЬ ВТНормаВремениПоСводнымИндивидуальнымГрафикам
ИЗ
   ВТСотрудникиПоПраздникам КАК СписокРаботников
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СводныеИндивидуальныеГрафики КАК СводныеИндивидуальныеГрафики
       ПО СписокРаботников.Сотрудник = СводныеИндивидуальныеГрафики.Сотрудник
           И СписокРаботников.ТекущийМесяц = СводныеИндивидуальныеГрафики.Месяц
ГДЕ
   СводныеИндивидуальныеГрафики.Сотрудник ЕСТЬ НЕ NULL

ИНДЕКСИРОВАТЬ ПО
   Сотрудник
;

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

СГРУППИРОВАТЬ ПО
   СписокРаботников.Сотрудник

ИНДЕКСИРОВАТЬ ПО
   Сотрудник
;

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

СГРУППИРОВАТЬ ПО
   СписокРаботников.Сотрудник

ИНДЕКСИРОВАТЬ ПО
   Сотрудник
;

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

ИНДЕКСИРОВАТЬ ПО
   Сотрудник,
   ПраздничныйДень
;

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

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

СГРУППИРОВАТЬ ПО
   МЕСЯЦ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
   СотрудникиПоПраздникам.Сотрудник,
   СотрудникиПоПраздникам.Сотрудник.Физлицо КАК Физлицо,
   СотрудникиПоПраздникам.ПодразделениеОрганизации,
   СотрудникиПоПраздникам.ПраздничныйДень КАК ДатаВыхода,
   ВЫБОР
       КОГДА ФактическиОтработано.Сотрудник ЕСТЬ НЕ NULL
           ТОГДА ФактическиОтработано.Часы
       КОГДА ИндивидуальныеГрафикиРаботы.Сотрудник ЕСТЬ НЕ NULL
           ТОГДА ИндивидуальныеГрафикиРаботы.Часы
       ИНАЧЕ ОбщиеГрафикиРаботы.Часы
   КОНЕЦ КАК ОтработаноЧасов,
   ВЫБОР
       КОГДА ПлановыеНачисленияРаботниковОрганизаций.СпособРасчета В (ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоЧасовойТарифнойСтавке), ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.СдельныйЗаработок))
           ТОГДА ПлановыеНачисленияРаботниковОрганизаций.Размер
       КОГДА ПлановыеНачисленияРаботниковОрганизаций.СпособРасчета В (ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоМесячнойТарифнойСтавкеПоЧасам), ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоМесячнойТарифнойСтавкеПоДням))
           ТОГДА ВЫРАЗИТЬ(ВЫБОР
                       КОГДА ЕСТЬNULL(ВариантыВстроенныхАлгоритмовРасчетаЗарплаты.ПорядокПересчетаМесячнойСтавкиВЧасовую, ЗНАЧЕНИЕ(Перечисление.ПорядкиПересчетаМесячнойСтавкиВЧасовую.ПоСреднемуКоличествуЧасовВМесяце)) = ЗНАЧЕНИЕ(Перечисление.ПорядкиПересчетаМесячнойСтавкиВЧасовую.ПоСреднемуКоличествуЧасовВМесяце)
                           ТОГДА ВЫБОР
                                   КОГДА ЕСТЬNULL(ДанныеПроизводственногоКалендаря.ЧислоРабочихДней, 0) = 0
                                       ТОГДА 0
                                   КОГДА СотрудникиПоПраздникам.ДлительностьРабочейНедели = 0
                                       ТОГДА 0
                                   ИНАЧЕ ПлановыеНачисленияРаботниковОрганизаций.Размер / (СотрудникиПоПраздникам.ДлительностьРабочейНедели / 5 * (ЕСТЬNULL(ДанныеПроизводственногоКалендаря.ЧислоРабочихДней, 0) + ЕСТЬNULL(ДанныеПроизводственногоКалендаря.ЧислоПредпраздничныхДней, 0)) - ЕСТЬNULL(ДанныеПроизводственногоКалендаря.ЧислоПредпраздничныхДней, 0)) * 12
                               КОНЕЦ
                       КОГДА ЕСТЬNULL(ВариантыВстроенныхАлгоритмовРасчетаЗарплаты.ПорядокПересчетаМесячнойСтавкиВЧасовую, ЗНАЧЕНИЕ(Перечисление.ПорядкиПересчетаМесячнойСтавкиВЧасовую.ПоСреднемуКоличествуЧасовВМесяце)) = ЗНАЧЕНИЕ(Перечисление.ПорядкиПересчетаМесячнойСтавкиВЧасовую.ПоМесячнойНормеПоПроизводственномуКалендарю)
                           ТОГДА ВЫБОР
                                   КОГДА ЕСТЬNULL(ДанныеПроизводственногоКалендаряЗаМесяц.ЧислоРабочихДней, 0) = 0
                                       ТОГДА 0
                                   КОГДА СотрудникиПоПраздникам.ДлительностьРабочейНедели = 0
                                       ТОГДА 0
                                   ИНАЧЕ ПлановыеНачисленияРаботниковОрганизаций.Размер / (СотрудникиПоПраздникам.ДлительностьРабочейНедели / 5 * (ЕСТЬNULL(ДанныеПроизводственногоКалендаряЗаМесяц.ЧислоРабочихДней, 0) + ЕСТЬNULL(ДанныеПроизводственногоКалендаряЗаМесяц.ЧислоПредпраздничныхДней, 0)) - ЕСТЬNULL(ДанныеПроизводственногоКалендаряЗаМесяц.ЧислоПредпраздничныхДней, 0))
                               КОНЕЦ
                       КОГДА ВЫБОР
                               КОГДА НормаВремениПоСводнымИндивидуальнымГрафикам.Сотрудник ЕСТЬ НЕ NULL
                                   ТОГДА НормаВремениПоСводнымИндивидуальнымГрафикам.ЧасовЗаМесяц
                               КОГДА НормаВремениПоЕжедневнымИндивидуальнымГрафикам.Сотрудник ЕСТЬ НЕ NULL
                                   ТОГДА НормаВремениПоЕжедневнымИндивидуальнымГрафикам.ЧасовЗаМесяц
                               ИНАЧЕ ЕСТЬNULL(НормаВремениПоОбщимГрафикам.ЧасовЗаМесяц, 0)
                           КОНЕЦ = 0
                           ТОГДА 0
                       ИНАЧЕ ПлановыеНачисленияРаботниковОрганизаций.Размер / ВЫБОР
                               КОГДА НормаВремениПоСводнымИндивидуальнымГрафикам.Сотрудник ЕСТЬ НЕ NULL
                                   ТОГДА НормаВремениПоСводнымИндивидуальнымГрафикам.ЧасовЗаМесяц
                               КОГДА НормаВремениПоЕжедневнымИндивидуальнымГрафикам.Сотрудник ЕСТЬ НЕ NULL
                                   ТОГДА НормаВремениПоЕжедневнымИндивидуальнымГрафикам.ЧасовЗаМесяц
                               ИНАЧЕ ЕСТЬNULL(НормаВремениПоОбщимГрафикам.ЧасовЗаМесяц, 0)
                           КОНЕЦ
                   КОНЕЦ КАК ЧИСЛО(15, 3))
       КОГДА ПлановыеНачисленияРаботниковОрганизаций.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоДневнойТарифнойСтавке)
           ТОГДА ВЫРАЗИТЬ(ВЫБОР
                       КОГДА СотрудникиПоПраздникам.ДлительностьРабочейНедели = 0
                           ТОГДА 0
                       ИНАЧЕ ПлановыеНачисленияРаботниковОрганизаций.Размер / СотрудникиПоПраздникам.ДлительностьРабочейНедели * ВЫБОР
                               КОГДА СотрудникиПоПраздникам.ВидГрафика = ЗНАЧЕНИЕ(Перечисление.ВидыРабочихГрафиков.Шестидневка)
                                   ТОГДА 6
                               ИНАЧЕ 5
                           КОНЕЦ
                   КОНЕЦ КАК ЧИСЛО(15, 3))
       ИНАЧЕ 0
   КОНЕЦ КАК Размер,
   ВЫБОР
       КОГДА ФактическиОтработано.Сотрудник ЕСТЬ НЕ NULL
           ТОГДА ФактическиОтработано.Часы
       КОГДА ИндивидуальныеГрафикиРаботы.Сотрудник ЕСТЬ НЕ NULL
           ТОГДА ИндивидуальныеГрафикиРаботы.Часы
       ИНАЧЕ ОбщиеГрафикиРаботы.Часы
   КОНЕЦ * ВЫБОР
       КОГДА ПлановыеНачисленияРаботниковОрганизаций.СпособРасчета В (ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоЧасовойТарифнойСтавке), ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.СдельныйЗаработок))
           ТОГДА ПлановыеНачисленияРаботниковОрганизаций.Размер
       КОГДА ПлановыеНачисленияРаботниковОрганизаций.СпособРасчета В (ЗНАЧЕНИЕ(Перечисление.СпособыРасч
20 IBTM
 
17.10.11
12:27
(0) там все данные по отработанному времени можно вытащить из РегистровРасчета.ДанныеГрафика через ВидРасчета.
21 Fr1eNd
 
17.10.11
14:17
(20) Спасибо попробую, регистры расчета моя слабая сторона, но надо разбираться.
22 guitar_player
 
17.10.11
14:20
(21) смотри процедуру заполнения табеля. Если хочешь реализовать функционал, рассматривающий все события в типовой, то (6) + (20) мало...
23 luckyluke
 
17.10.11
14:26
(20) это если зарплату посчитали, а если нет?
24 Fr1eNd
 
17.10.11
14:27
(22)в типовой там много наворочено, пока надо сделать ,что бы просто выводил сотрудников работавших в этот день, в перспективе также количество отработанных часов.
25 Fr1eNd
 
17.10.11
14:40
разбитые по сменам
26 IBTM
 
18.10.11
22:45
(20), тогда (6), автору этих хватит с головой.

П.С.: к (20), модная организация, имеют ЗУП, а зарплату на счетах считают...