0
pessok
19.06.13
✎
10:16
|
Коллеги, приветствую. Внезапно столкнулся с затыком, который утренний мозг (да и вчерашне-вечерний) никак не может решить. Есть группа сотрудников, уволенных по соглашению, им доначисляются некие, согласованные с отделом кадров суммы. Что делает расчетчик:
начисление зряплаты за месяц (31.05.2013) - сколько там наработали за месяц, допустим, 10 рублей
разовые начисления (дополнительные) на согласованную сумму (31.05.2013 16:00:00)- допустим, еще 10 рублей.
Расчет при увольнении, с компенсацией отпуска (31.05.2013 14:20:59)- 7 рублей
Ну и выплату 27 рублей, тоже 31 мая.
В расчетном листке все красиво, переходи в расчет при увольнении, дабы распечатать Т-61 и...
Долг за сотрудником = 10 руб.
Притом эти 10 рублей - не попавшие основные начисления по календарным дням, компенсация при увольнении попадает нормально.
Отсюда вопрос - что именно не так делает расчетчик?
З.Ы.
Запрос, который должен бы получать в поле РезультатСумма 20 рублей, а получает 10
ВЫБРАТЬ
ДАТАВРЕМЯ(2013, 5, 1) КАК ДатаНачала,
ДАТАВРЕМЯ(2013, 6, 30) КАК ДатаОкончания,
"ДругиеНачисленияЗаТекущийМесяц" КАК ГруппаНачислений
ПОМЕСТИТЬ ИсходныеДанные
ИНДЕКСИРОВАТЬ ПО
ДатаНачала,
ДатаОкончания
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВЫБОР
КОГДА ИсходныеДанные.ДатаНачала > ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ПериодДействияНачало
ТОГДА ИсходныеДанные.ДатаНачала
ИНАЧЕ ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ПериодДействияНачало
КОНЕЦ КАК ДатаНачала,
ВЫБОР
КОГДА ИсходныеДанные.ДатаОкончания < ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ПериодДействияКонец
ТОГДА ИсходныеДанные.ДатаОкончания
ИНАЧЕ ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ПериодДействияКонец
КОНЕЦ КАК ДатаОкончания,
ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ВидРасчета,
ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.Результат,
ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ГрафикРаботы КАК ГрафикРаботы,
ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ВидУчетаВремени КАК ВидУчетаВремени,
ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.Регистратор КАК Регистратор,
ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.НомерСтроки КАК НомерСтроки,
ИсходныеДанные.ГруппаНачислений
ПОМЕСТИТЬ ОсновныеНачисленияФактическийПериодДействия
ИЗ
ИсходныеДанные КАК ИсходныеДанные
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций.ФактическийПериодДействия(
Сотрудник = &Сотрудник
И ПериодДействия В (&ПериодыДействия)) КАК ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия
ПО (ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ПериодДействияНачало <= ИсходныеДанные.ДатаОкончания)
И (ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ПериодДействияКонец >= ИсходныеДанные.ДатаНачала)
И (ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ПериодРегистрации <= ИсходныеДанные.ДатаНачала)
И (НЕ ОсновныеНачисленияРаботниковОрганизацийФактическийПериодДействия.ВидРасчета В (&НеВходятВДругиеНачисления))
И (ВЫБОР
КОГДА &ДатаДокумента = ДАТАВРЕМЯ(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
КОНЕЦ) КАК РезультатыНачислений
СГРУППИРОВАТЬ ПО
РезультатыНачислений.ГруппаНачислений
параметры:
НеВходятВДругиеНачисления = Новый Массив;
НеВходятВДругиеНачисления.Добавить(ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.ВыходноеПособие);
НеВходятВДругиеНачисления.Добавить(ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.КомпенсацияОтпускаКалендарныеДни);
НеВходятВДругиеНачисления.Добавить(ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.КомпенсацияОтпускаКалендарныеДниБезУвольнения);
НеВходятВДругиеНачисления.Добавить(ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.КомпенсацияОтпускаШестидневка);
НеВходятВДругиеНачисления.Добавить(ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.КомпенсацияОтпускаШестидневкаБезУвольнения);
НеВходятВДругиеНачисления.Добавить(ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.СохраняемыйЗаработокНаВремяТрудоустройства);
НеВходятВДругиеНачисления.Добавить(ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.УдержаниеЗаНеотработанныйОтпускКалендарныеДни);
НеВходятВДругиеНачисления.Добавить(ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.УдержаниеЗаНеотработанныйОтпускШестидневка);
НеВходятВДругиеНачисления.Добавить(ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОтпускПоБеременностиИРодам);
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
Запрос.УстановитьПараметр("ПериодыДействия", ПериодыДействия); //это массив, в нем одна дата = 01.05.2013 00:00:00
Запрос.УстановитьПараметр("НеВходятВДругиеНачисления", НеВходятВДругиеНачисления);
Запрос.УстановитьПараметр("ДатаДокумента", ?(ДатаДокумента = Неопределено, '00010101000000', ДатаДокумента)); //дата расчета при увольнении
|
|