Имя: Пароль:
1C
1С v8
Подсистема ЗУП - расчет начислений
0 eandrs
 
06.03.12
11:44
Типовой модуль ПроведениеРасчетовПереопределяемый. Методика и идеология выполнения расчета - понятна. Интересует - есть ли сколь-нибудь подробное описание того, по какому принципу собираются данные для расчета. В частности - интересуют показатели отработанного времени. Как-то тяжко вкуривается:

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

- что хотели этим сказать разработчики?
1 Господин ПЖ
 
06.03.12
11:48
подсистемы расчета з/п в 1С - чудо враждебной техники...

почему данные по среднедневному заработку можно получить только внутри документа расчета отпусных например?..
2 eandrs
 
06.03.12
11:54
Иногда мне кажется что зарплату для 1с пишет один-единственный человек. Который всё знает, но ничего никому не говорит. И сами остальные одинесовцы - тоже в душе не е....т как там это всё работает, поэтому этого человека жутко берегут и никому не показывают...
3 ДемонМаксвелла
 
06.03.12
12:03
(0) буквально вчера пытался это вкурить. это делали не люди, а инопланетяне какие-то. в итоге бросил. распровел все документы, потом провел снова, при заполнении начисления з/п стало всё на место.
4 eandrs
 
06.03.12
13:21
А если жертву Ктулху принести - поможет?
5 eandrs
 
07.03.12
08:46
А если Ктулху в жертву принести?
6 Dmitry77
 
07.03.12
09:10
(0) для зарплаты - запросы на пару листов это нормально.

Есть желтые книжки из коробки там много чего написано.

Неси большую кучу денежег и тебе помогут.
7 Ranger_83
 
07.03.12
09:15
(0)Есть матчасть,читай Харитонова "Секреты профессиональной работы"
8 spu79
 
07.03.12
09:20
Харитонов - ГУРУ!
А вообще не стоит обижать с-ников, сами попробуйте написать конфу 1. универсальную для всей страны 2. учесть "дружественное и интуитивно понятное" законодательство, которое еще и меняется постоянно...
9 eandrs
 
12.03.12
12:14
(6) Длина запросов - не проблема... В желтых книжках, как, кстати, и в "Секреты профессиональной работы" от Харитонова - описание со стороны пользователей. Приведен общий принцип - данные графика за вычетом отклонений, либо, если есть - табель. На словах красиво и понятно, а когда лезешь внутрь - стойкое ощущение что тебя нае...
10 СамСебе Режиссер
 
12.03.12
14:47
Имхо, все просто читается по запросу. Проблема-то в чем?
Надо учесть много вариантов ввода данных - отсюда и многоэтажность.
11 eandrs
 
12.03.12
15:40
(10) Ну... Если "все просто читается по запросу", можно мне, неграмотному, прочитать, что скрывается под полем "ОтработаноЧасовПоТабелюОтклонение"? ;-) Что имели ввиду под ним разработчики?
12 eandrs
 
13.03.12
13:56
Опять жертву Ктулху...