Имя: Пароль:
1C
1С v8
ЗУП: Т-60 - другие начисления
0 21stas
 
03.08.11
06:47
Не получается разобраться, как рассчитывается сумма в графе "другие начисления" формы Т-60. Еще и из-за того, что ЗУП базовая - не могу в отладчике общие модули смотреть.
Подскажите, пожалуйста, как рассчитать эту сумму.
ЗУП 2.5.38.1.
1 al8
 
03.08.11
07:12
процедура из типовой зуп
Функция ПолучитьДругиеНачисления(ДокументСсылка, ПериодРегистрации, Сотрудник, ДатаДокумента = Неопределено) Экспорт
   
   // получим периоды для расчета базы "других" начислений
   ТаблицаПериодов = ПериодыРасчетаБазыВсехДругихНачислений(ДокументСсылка, ПериодРегистрации);
   
   // для параметра виртуальных таблиц построим массив периодов действия
   ПериодыДействия = Новый Массив;
   Для Каждого СтрокаПериодов Из ТаблицаПериодов Цикл
       ПериодыДействия.Добавить(НачалоМесяца(СтрокаПериодов.ДатаНачала));
   КонецЦикла;
   
   НеВходятВДругиеНачисления = Новый Массив;
   НеВходятВДругиеНачисления.Добавить(ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.ВыходноеПособие);
   НеВходятВДругиеНачисления.Добавить(ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.КомпенсацияОтпускаКалендарныеДни);
   НеВходятВДругиеНачисления.Добавить(ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.КомпенсацияОтпускаКалендарныеДниБезУвольнения);
   НеВходятВДругиеНачисления.Добавить(ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.КомпенсацияОтпускаШестидневка);
   НеВходятВДругиеНачисления.Добавить(ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.КомпенсацияОтпускаШестидневкаБезУвольнения);
   НеВходятВДругиеНачисления.Добавить(ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.СохраняемыйЗаработокНаВремяТрудоустройства);
   НеВходятВДругиеНачисления.Добавить(ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.УдержаниеЗаНеотработанныйОтпускКалендарныеДни);
   НеВходятВДругиеНачисления.Добавить(ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.УдержаниеЗаНеотработанныйОтпускШестидневка);
   НеВходятВДругиеНачисления.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОтпускПоБеременностиИРодам);
   
   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("ТаблицаПериодов", ТаблицаПериодов);
   Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
   Запрос.УстановитьПараметр("ПериодыДействия", ПериодыДействия);
   Запрос.УстановитьПараметр("НеВходятВДругиеНачисления", НеВходятВДругиеНачисления);
   Запрос.УстановитьПараметр("ДатаДокумента", ?(ДатаДокумента = Неопределено, '00010101000000', ДатаДокумента));
   
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ТаблицаПериодов.ДатаНачала КАК ДатаНачала,
   |    ТаблицаПериодов.ДатаОкончания КАК ДатаОкончания,
   |    ТаблицаПериодов.ГруппаНачислений
   |ПОМЕСТИТЬ ИсходныеДанные
   |ИЗ
   |    &ТаблицаПериодов КАК ТаблицаПериодов
   |
   |ИНДЕКСИРОВАТЬ ПО
   |    ДатаНачала,
   |    ДатаОкончания
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |    ВЫБОР
   |        КОГДА ИсходныеДанные.ДатаНачала > ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ПериодДействияНачало
   |            ТОГДА ИсходныеДанные.ДатаНачала
   |        ИНАЧЕ ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ПериодДействияНачало
   |    КОНЕЦ КАК ДатаНачала,
   |    ВЫБОР
   |        КОГДА ИсходныеДанные.ДатаОкончания < ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ПериодДействияКонец
   |            ТОГДА ИсходныеДанные.ДатаОкончания
   |        ИНАЧЕ ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ПериодДействияКонец
   |    КОНЕЦ КАК ДатаОкончания,
   |    ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ВидРасчета,
   |    ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.Результат,
   |    ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ГрафикРаботы КАК ГрафикРаботы,
   |    ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ВидУчетаВремени КАК ВидУчетаВремени,
   |    ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.Регистратор КАК Регистратор,
   |    ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.НомерСтроки КАК НомерСтроки,
   |    ИсходныеДанные.ГруппаНачислений
   |ПОМЕСТИТЬ ОсновныеНачисленияФактическийПериодДействия
   |ИЗ
   |    ИсходныеДанные КАК ИсходныеДанные
   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций.ФактическийПериодДействия(
   |                Сотрудник = &Сотрудник
   |                    И ПериодДействия В (&ПериодыДействия)) КАК ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия
   |        ПО (ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ПериодДействияНачало <= ИсходныеДанные.ДатаОкончания)
   |            И (ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ПериодДействияКонец >= ИсходныеДанные.ДатаНачала)
   |            И (ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ПериодРегистрации <= ИсходныеДанные.ДатаНачала)
   |            И ((НЕ ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ВидРасчета В (&НеВходятВДругиеНачисления)))
   |            И (ВЫБОР
   |                КОГДА &ДатаДокумента = ДАТАВРЕМЯ(1,1,1,0,0,0)
   |                    ТОГДА ИСТИНА
   |                ИНАЧЕ ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.Регистратор.Дата <= КОНЕЦПЕРИОДА(&ДатаДокумента, ДЕНЬ)
   |            КОНЕЦ)
   |ГДЕ
   |    (НЕ ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ВидРасчета.ЯвляетсяДоходомВНатуральнойФорме)
   |
   |ИНДЕКСИРОВАТЬ ПО
   |    ГрафикРаботы,
   |    ВидУчетаВремени,
   |    Регистратор,
   |    НомерСтроки,
   |    ДатаНачала
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |    СУММА(ГрафикиРаботыПоВидамВремени.ОсновноеЗначение) КАК ОсновноеЗначение,
   |    ОсновныеНачисленияФактическийПериодДействия.ДатаНачала КАК ДатаНачала,
   |    ОсновныеНачисленияФактическийПериодДействия.ДатаОкончания КАК ДатаОкончания,
   |    ОсновныеНачисленияФактическийПериодДействия.Регистратор КАК Регистратор,
   |    ОсновныеНачисленияФактическийПериодДействия.НомерСтроки КАК НомерСтроки
   |ПОМЕСТИТЬ ОтработанноеВремя
   |ИЗ
   |    ОсновныеНачисленияФактическийПериодДействия КАК ОсновныеНачисленияФактическийПериодДействия
   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботыПоВидамВремени
   |        ПО ОсновныеНачисленияФактическийПериодДействия.ГрафикРаботы = ГрафикиРаботыПоВидамВремени.ГрафикРаботы
   |            И (НАЧАЛОПЕРИОДА(ОсновныеНачисленияФактическийПериодДействия.ДатаНачала, МЕСЯЦ) = ГрафикиРаботыПоВидамВремени.Месяц)
   |            И ОсновныеНачисленияФактическийПериодДействия.ВидУчетаВремени = ГрафикиРаботыПоВидамВремени.ВидУчетаВремени
   |            И (ГрафикиРаботыПоВидамВремени.Дата МЕЖДУ ОсновныеНачисленияФактическийПериодДействия.ДатаНачала И ОсновныеНачисленияФактическийПериодДействия.ДатаОкончания)
   |
   |СГРУППИРОВАТЬ ПО
   |    ОсновныеНачисленияФактическийПериодДействия.ДатаНачала,
   |    ОсновныеНачисленияФактическийПериодДействия.ДатаОкончания,
   |    ОсновныеНачисленияФактическийПериодДействия.Регистратор,
   |    ОсновныеНачисленияФактическийПериодДействия.НомерСтроки
   |
   |ИНДЕКСИРОВАТЬ ПО
   |    Регистратор,
   |    НомерСтроки,
   |    ДатаНачала,
   |    ДатаОкончания
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |    РезультатыНачислений.ГруппаНачислений,
   |    ЕСТЬNULL(СУММА(РезультатыНачислений.Результат), 0) КАК РезультатСумма,
   |    ЕСТЬNULL(СУММА(РезультатыНачислений.НеОблагаетсяНДФЛ), 0) КАК НеОблагаетсяНДФЛ
   |ИЗ
   |    (ВЫБРАТЬ
   |        СУММА(РезультатыОсновныхНачислений.Результат) КАК Результат,
   |        РезультатыОсновныхНачислений.ГруппаНачислений КАК ГруппаНачислений,
   |        СУММА(РезультатыОсновныхНачислений.НеОблагаетсяНДФЛ) КАК НеОблагаетсяНДФЛ
   |    ИЗ
   |        (ВЫБРАТЬ
   |            ОсновныеНачисленияФактическийПериодДействия.ДатаНачала КАК ДатаНачала,
   |            ОсновныеНачисленияФактическийПериодДействия.ДатаОкончания КАК ДатаОкончания,
   |            СУММА(ВЫБОР
   |                    КОГДА ЕСТЬNULL(ДанныеГрафика.ОсновноеЗначениеФактическийПериодДействия, 0) = 0
   |                        ТОГДА ОсновныеНачисленияФактическийПериодДействия.Результат
   |                    ИНАЧЕ ОсновныеНачисленияФактическийПериодДействия.Результат * (ОтработанноеВремя.ОсновноеЗначение / ДанныеГрафика.ОсновноеЗначениеФактическийПериодДействия)
   |                КОНЕЦ) КАК Результат,
   |            ОсновныеНачисленияФактическийПериодДействия.ГруппаНачислений КАК ГруппаНачислений,
   |            ВЫБОР
   |                КОГДА ОсновныеНачисленияФактическийПериодДействия.ВидРасчета.КодДоходаНДФЛ = ЗНАЧЕНИЕ(Справочник.ДоходыНДФЛ.ПустаяСсылка)
   |                    ТОГДА ВЫБОР
   |                            КОГДА ЕСТЬNULL(ДанныеГрафика.ОсновноеЗначениеФактическийПериодДействия, 0) = 0
   |                                ТОГДА ОсновныеНачисленияФактическийПериодДействия.Результат
   |                            ИНАЧЕ ОсновныеНачисленияФактическийПериодДействия.Результат * (ОтработанноеВремя.ОсновноеЗначение / ДанныеГрафика.ОсновноеЗначениеФактическийПериодДействия)
   |                        КОНЕЦ
   |                ИНАЧЕ 0
   |            КОНЕЦ КАК НеОблагаетсяНДФЛ
   |        ИЗ
   |            ОсновныеНачисленияФактическийПериодДействия КАК ОсновныеНачисленияФактическийПериодДействия
   |                ЛЕВОЕ СОЕДИНЕНИЕ ОтработанноеВремя КАК ОтработанноеВремя
   |                ПО ОсновныеНачисленияФактическийПериодДействия.Регистратор = ОтработанноеВремя.Регистратор
   |                    И ОсновныеНачисленияФактическийПериодДействия.НомерСтроки = ОтработанноеВремя.НомерСтроки
   |                    И ОсновныеНачисленияФактическийПериодДействия.ДатаНачала = ОтработанноеВремя.ДатаНачала
   |                    И ОсновныеНачисленияФактическийПериодДействия.ДатаОкончания = ОтработанноеВремя.ДатаОкончания
   |                ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций.ДанныеГрафика(
   |                        Сотрудник = &Сотрудник
   |                            И ПериодДействия В (&ПериодыДействия)) КАК ДанныеГрафика
   |                ПО ОсновныеНачисленияФактическийПериодДействия.Регистратор = ДанныеГрафика.Регистратор
   |                    И ОсновныеНачисленияФактическийПериодДействия.НомерСтроки = ДанныеГрафика.НомерСтроки
   |        
   |        СГРУППИРОВАТЬ ПО
   |            ОсновныеНачисленияФактическийПериодДействия.ДатаОкончания,
   |            ОсновныеНачисленияФактическийПериодДействия.ДатаНачала,
   |            ОсновныеНачисленияФактическийПериодДействия.ГруппаНачислений,
   |            ВЫБОР
   |                КОГДА ОсновныеНачисленияФактическийПериодДействия.ВидРасчета.КодДоходаНДФЛ = ЗНАЧЕНИЕ(Справочник.ДоходыНДФЛ.ПустаяСсылка)
   |                    ТОГДА ВЫБОР
   |                            КОГДА ЕСТЬNULL(ДанныеГрафика.ОсновноеЗначениеФактическийПериодДействия, 0) = 0
   |                                ТОГДА ОсновныеНачисленияФактическийПериодДействия.Результат
   |                            ИНАЧЕ ОсновныеНачисленияФактическийПериодДействия.Результат * (ОтработанноеВремя.ОсновноеЗначение / ДанныеГрафика.ОсновноеЗначениеФактическийПериодДействия)
   |                        КОНЕЦ
   |                ИНАЧЕ 0
   |            КОНЕЦ) КАК РезультатыОсновныхНачислений
   |    
   |    СГРУППИРОВАТЬ ПО
   |        РезультатыОсновныхНачислений.ГруппаНачислений
   |    
   |    ОБЪЕДИНИТЬ
   |    
   |    ВЫБРАТЬ
   |        СУММА(ДополнительныеНачисленияРаботниковОрганизаций.Результат),
   |        ИсходныеДанные.ГруппаНачислений,
   |        ВЫБОР
   |            КОГДА ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета.КодДоходаНДФЛ = ЗНАЧЕНИЕ(Справочник.ДоходыНДФЛ.ПустаяСсылка)
   |                ТОГДА ДополнительныеНачисленияРаботниковОрганизаций.Результат
   |            ИНАЧЕ 0
   |        КОНЕЦ
   |    ИЗ
   |        ИсходныеДанные КАК ИсходныеДанные
   |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций КАК ДополнительныеНачисленияРаботниковОрганизаций
   |            ПО (ДополнительныеНачисленияРаботниковОрганизаций.ПериодРегистрации МЕЖДУ ИсходныеДанные.ДатаНачала И ИсходныеДанные.ДатаОкончания)
   |                И (ДополнительныеНачисленияРаботниковОрганизаций.Сотрудник = &Сотрудник)
   |                И ((НЕ ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета В (&НеВходятВДругиеНачисления)))
   |                И ((НЕ ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета.ЯвляетсяДоходомВНатуральнойФорме))
   |                И (ВЫБОР
   |                    КОГДА &ДатаДокумента = ДАТАВРЕМЯ(1,1,1,0,0,0)
   |                        ТОГДА ИСТИНА
   |                    ИНАЧЕ ДополнительныеНачисленияРаботниковОрганизаций.Регистратор.Дата <= КОНЕЦПЕРИОДА(&ДатаДокумента, ДЕНЬ)
   |                КОНЕЦ)
   |    
   |    СГРУППИРОВАТЬ ПО
   |        ИсходныеДанные.ГруппаНачислений,
   |        ВЫБОР
   |            КОГДА ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета.КодДоходаНДФЛ = ЗНАЧЕНИЕ(Справочник.ДоходыНДФЛ.ПустаяСсылка)
   |                ТОГДА ДополнительныеНачисленияРаботниковОрганизаций.Результат
   |            ИНАЧЕ 0
   |        КОНЕЦ) КАК РезультатыНачислений
   |
   |СГРУППИРОВАТЬ ПО
   |    РезультатыНачислений.ГруппаНачислений";
   
   ТаблицаДругихНачислений = Запрос.Выполнить().Выгрузить();
   
   ДругиеНачисления = Новый Структура("ДругиеНачисленияЗаТекущийМесяц, ДругиеНачисленияЗаБудущиеМесяцы, НеОблагаетсяНДФЛ, ПериодНачальногоСальдо", 0, 0, 0);
   
   Для Каждого СтрокаДругихНачислений Из ТаблицаДругихНачислений Цикл
       ДругиеНачисления[СтрокаДругихНачислений.ГруппаНачислений] = СтрокаДругихНачислений.РезультатСумма;
       ДругиеНачисления["НеОблагаетсяНДФЛ"] = ДругиеНачисления["НеОблагаетсяНДФЛ"] + СтрокаДругихНачислений.НеОблагаетсяНДФЛ;
   КонецЦикла;
   
   // таблица периодов упорядочена, поэтому в строке 0 точно будет начало самого раннего периода
   Если ТаблицаПериодов.Количество() > 0 Тогда
       ДругиеНачисления.Вставить("ПериодНачальногоСальдо", ТаблицаПериодов[0].ДатаНачала);
   КонецЕсли;
   
   Возврат ДругиеНачисления;
   
КонецФункции // ПолучитьДругиеНачисления
2 21stas
 
03.08.11
13:28
Спасибо за текст модуля, только взглядом окинуть его мне не хватает понимания - только предположения выстраиваются. По этим предположениям у меня результаты не сходятся.
Если была бы проф - я могу бы в отладчике по шагам посмотреть - запрос по шагам не разберёшь, но всё же куда легче.

А посему хотел попросить - может, кто понял, как считается.
У меня вроде ситуация простая - отпуск - две недели посреди месяца, оклад+р.к.+премия - а на цифру из отчёта выйти никак не могу, сколько Excel не мучил.
3 NDN
 
03.08.11
13:33
4 NDN
 
03.08.11
13:33
// Функция предназначена для получения значений заполнения граф "другие начисления"
//  унифицированных форм "Т-60" и "Т-61". Значения "других начислений" определяются
//  в текущем или в будущем месяце как сумма всех начислений с момента окончания
//  последнего отпуска, если он закончился в текущем (будущем) месяце или с начала месяца
//  (текущего или будущего), если отпуска в этом месяце не было.
5 21stas
 
03.08.11
13:47
Да. Я тоже эту тему нашёл. Пробовал по этой описухе считать.

Взял долю всех начислений, приходящихся на период до отпуска.
Например, отпуск начинается с 17 июля. В июле 31 день.
Взял все начисления, разделил на 31, умножил на 17. Не получается.

Пробовал то же самое с рабочими днями. Скажем, 11 явок в табеле до отпуска, 2 - после. Взял сумму всех начислений/(11+2)*11 - не получается.

Как считать - не пойму.
6 21stas
 
03.08.11
14:14
Описался. Отпуск начинается 18 июля. Поэтому я беру 17 календарных дней.
7 NDN
 
03.08.11
14:17
Открой расчетный листок сотрудника за прошлый месяц
8 21stas
 
03.08.11
14:20
Открыл. Похожей суммы не вижу.