Автор Тема: расчет зарплаты запросом  (Прочитано 904 раз)

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

titan6662000

  • Новичок
  • *
  • Сообщений: 5
расчет зарплаты запросом
« : Октябрь 13, 2015, 02:21:39 pm »
можно ли решать расч. задачи таким запросом?
Если нет то плиз расскажите почему.
Процедура Расчет(Ссылка, Перерасчет = Ложь) Экспорт
   
   Запрос = Новый Запрос(
   "ВЫБРАТЬ
   |   ПереодическиеПоказателиСрезПоследних.ВидРасчета,
   |   ПереодическиеПоказателиСрезПоследних.Значение
   |ИЗ
   |   РегистрСведений.ПереодическиеПоказатели.СрезПоследних(&Момент, ) КАК ПереодическиеПоказателиСрезПоследних");
   Запрос.УстановитьПараметр("Момент",Ссылка.МоментВремени());
   Запрос.УстановитьПараметр("РазмерКомпенсации",0);
   Запрос.УстановитьПараметр("Норма",0);
   
   Выборка = Запрос.Выполнить().Выбрать();
   
   Пока Выборка.Следующий() Цикл
      
      Если Выборка.ВидРасчета = ПланыВидовРасчета.ДополнительныеНачисления.Сверхурочные Тогда
         
         Запрос.УстановитьПараметр("Норма",Выборка.Значение);
   
      ИначеЕсли Выборка.ВидРасчета = ПланыВидовРасчета.ДополнительныеНачисления.ЗатратыНаОбмундирование Тогда
         
         Запрос.УстановитьПараметр("РазмерКомпенсации",Выборка.Значение);
   
      КонецЕсли;
      
   КонецЦикла;
   
   Запрос.Текст =
   "ВЫБРАТЬ
   |   ОсновныеНачисления.ПериодРегистрации,
   |   ОсновныеНачисления.Регистратор,
   |   ОсновныеНачисления.НомерСтроки,
   |   ОсновныеНачисления.ВидРасчета,
   |   ОсновныеНачисления.ПериодДействия,
   |   ОсновныеНачисления.ПериодДействияНачало,
   |   ОсновныеНачисления.ПериодДействияКонец,
   |   ОсновныеНачисления.БазовыйПериодНачало,
   |   ОсновныеНачисления.БазовыйПериодКонец,
   |   ОсновныеНачисления.Активность,
   |   ОсновныеНачисления.Сторно,
   |   ОсновныеНачисления.Сотрудник,
   |   ВЫБОР
   |      КОГДА НЕ &Перерасчет
   |            ИЛИ Перерасчет1.Сотрудник = ОсновныеНачисления.Сотрудник
   |         ТОГДА ВЫБОР ОсновныеНачисления.ВидРасчета
   |               КОГДА &ТарифЧасовой
   |                  ТОГДА ВЫБОР ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.ЗначениеПериодДействия, 0)
   |                        КОГДА 0
   |                           ТОГДА 0
   |                        ИНАЧЕ ОсновныеНачисления.Показатель * (ОсновныеНачисленияДанныеГрафика.ЗначениеФактическийПериодДействия / ОсновныеНачисленияДанныеГрафика.ЗначениеПериодДействия)
   |                     КОНЕЦ
   |               КОГДА &Больничный
   |                  ТОГДА ВЫБОР ЕСТЬNULL(ОсновныеНачисленияБазаОсновныеНачисления.ВремяБаза, 0)
   |                        КОГДА 0
   |                           ТОГДА 0
   |                        ИНАЧЕ ОсновныеНачисленияДанныеГрафика.ЗначениеФактическийПериодДействия * (ОсновныеНачисленияБазаОсновныеНачисления.СуммаБаза / ОсновныеНачисленияБазаОсновныеНачисления.ВремяБаза)
   |                     КОНЕЦ
   |               КОГДА &Прогул
   |                  ТОГДА 0
   |               ИНАЧЕ 0
   |            КОНЕЦ * ВЫБОР ОсновныеНачисления.Сторно
   |               КОГДА ИСТИНА
   |                  ТОГДА -1
   |               ИНАЧЕ 1
   |            КОНЕЦ
   |      ИНАЧЕ ОсновныеНачисления.Сумма
   |   КОНЕЦ КАК Сумма,
   |   ВЫБОР
   |      КОГДА НЕ &Перерасчет
   |            ИЛИ Перерасчет1.Сотрудник = ОсновныеНачисления.Сотрудник
   |         ТОГДА ВЫБОР
   |               КОГДА ОсновныеНачисления.ВидРасчета В (&Оклад, &Больничный, &Прогул)
   |                  ТОГДА ОсновныеНачисленияДанныеГрафика.ЗначениеФактическийПериодДействия
   |               ИНАЧЕ 0
   |            КОНЕЦ * ВЫБОР ОсновныеНачисления.Сторно
   |               КОГДА ИСТИНА
   |                  ТОГДА -1
   |               ИНАЧЕ 1
   |            КОНЕЦ
   |      ИНАЧЕ ОсновныеНачисления.Время
   |   КОНЕЦ КАК Время,
   |   ОсновныеНачисления.Смена,
   |   ОсновныеНачисления.Показатель
   |ИЗ
   |   РегистрРасчета.ОсновныеНачисления КАК ОсновныеНачисления
   |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(Регистратор = &Регистратор) КАК ОсновныеНачисленияДанныеГрафика
   |      ПО ОсновныеНачисления.НомерСтроки = ОсновныеНачисленияДанныеГрафика.НомерСтроки
   |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисления.БазаОсновныеНачисления(&Измерения, &Измерения, , Регистратор = &Регистратор) КАК ОсновныеНачисленияБазаОсновныеНачисления
   |      ПО ОсновныеНачисления.НомерСтроки = ОсновныеНачисленияБазаОсновныеНачисления.НомерСтроки
   |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисления.Перерасчет1 КАК Перерасчет1
   |      ПО ОсновныеНачисления.Регистратор = Перерасчет1.ОбъектПерерасчета
   |         И ОсновныеНачисления.ВидРасчета = Перерасчет1.ВидРасчета
   |         И ОсновныеНачисления.Сотрудник = Перерасчет1.Сотрудник
   |ГДЕ
   |   ОсновныеНачисления.Регистратор = &Регистратор
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |   ДополнительныеНачисления.ПериодРегистрации,
   |   ДополнительныеНачисления.Регистратор,
   |   ДополнительныеНачисления.НомерСтроки,
   |   ДополнительныеНачисления.ВидРасчета,
   |   ДополнительныеНачисления.БазовыйПериодНачало,
   |   ДополнительныеНачисления.БазовыйПериодКонец,
   |   ДополнительныеНачисления.Активность,
   |   ДополнительныеНачисления.Сторно,
   |   ДополнительныеНачисления.Сотрудник,
   |   ДополнительныеНачисления.Показатель,
   |   ВЫБОР
   |      КОГДА НЕ &Перерасчет
   |            ИЛИ ДополнительныеНачисления.Сотрудник = Перерасчет2.Сотрудник
   |         ТОГДА ВЫБОР ДополнительныеНачисления.ВидРасчета
   |               КОГДА &Компенсация
   |                  ТОГДА &РазмерКомпенсации
   |               КОГДА &Сверхурочные
   |                  ТОГДА ВЫБОР
   |                        КОГДА ЕСТЬNULL(ДополнительныеНачисленияБазаОсновныеНачисления.ВремяБаза, 0) > &Норма
   |                           ТОГДА (ЕСТЬNULL(ДополнительныеНачисленияБазаОсновныеНачисления.ВремяБаза, 0) - &Норма) * 100
   |                        ИНАЧЕ 0
   |                     КОНЕЦ
   |               ИНАЧЕ 0
   |            КОНЕЦ
   |      ИНАЧЕ ДополнительныеНачисления.Сумма
   |   КОНЕЦ КАК Сумма
   |ИЗ
   |   РегистрРасчета.ДополнительныеНачисления КАК ДополнительныеНачисления
   |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ДополнительныеНачисления.Перерасчет2 КАК Перерасчет2
   |      ПО ДополнительныеНачисления.Регистратор = Перерасчет2.ОбъектПерерасчета
   |         И ДополнительныеНачисления.ВидРасчета = Перерасчет2.ВидРасчета
   |         И ДополнительныеНачисления.Сотрудник = Перерасчет2.Сотрудник
   |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ДополнительныеНачисления.БазаОсновныеНачисления(&Измерения, &Измерения, , Регистратор = &Регистратор) КАК ДополнительныеНачисленияБазаОсновныеНачисления
   |      ПО ДополнительныеНачисления.НомерСтроки = ДополнительныеНачисленияБазаОсновныеНачисления.НомерСтроки
   |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ДополнительныеНачисления.БазаДополнительныеНачисления(&Измерения, &Измерения, , Регистратор = &Регистратор) КАК ДополнительныеНачисленияБазаДополнительныеНачисления
   |      ПО ДополнительныеНачисления.НомерСтроки = ДополнительныеНачисленияБазаДополнительныеНачисления.НомерСтроки
   |ГДЕ
   |   ДополнительныеНачисления.Регистратор = &Регистратор";
   
   ИзмМассив = Новый Массив;
   ИзмМассив.Добавить("Сотрудник");
   
   Запрос.УстановитьПараметр("Измерения",ИзмМассив);
   Запрос.УстановитьПараметр("Перерасчет",Перерасчет);
   Запрос.УстановитьПараметр("Регистратор",Ссылка);
   Запрос.УстановитьПараметр("Компенсация",ПланыВидовРасчета.ДополнительныеНачисления.ЗатратыНаОбмундирование);
   Запрос.УстановитьПараметр("Сверхурочные",ПланыВидовРасчета.ДополнительныеНачисления.Сверхурочные);
   Запрос.УстановитьПараметр("ТарифЧасовой",ПланыВидовРасчета.ОсновныеНачисления.Тариф);
   Запрос.УстановитьПараметр("Больничный",ПланыВидовРасчета.ОсновныеНачисления.Больничный);
   Запрос.УстановитьПараметр("Прогул",ПланыВидовРасчета.ОсновныеНачисления.Прогул);
   
   МассивРезультатов = Запрос.ВыполнитьПакет();
   
   НаборЗаписей = РегистрыРасчета.ОсновныеНачисления.СоздатьНаборЗаписей();
   НаборЗаписей.Отбор.Регистратор.Установить(Ссылка);
   НаборЗаписей.Загрузить(МассивРезультатов[0].Выгрузить());
   
   НаборЗаписей.Записать(,,Ложь);
   
   НаборЗаписей = РегистрыРасчета.ДополнительныеНачисления.СоздатьНаборЗаписей();
   НаборЗаписей.Отбор.Регистратор.Установить(Ссылка);
   НаборЗаписей.Загрузить(МассивРезультатов[1].Выгрузить());
   
   НаборЗаписей.Записать(,,Ложь);
   
КонецПроцедуры