Курс от Павла Белоусова!

Автор Тема: Помогите разобраться с расчетным регистром  (Прочитано 156 раз)

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

srub

  • Новичок
  • *
  • Сообщений: 8
Помогите пожалуйста разобраться с регистром расчета. Столкнулся с проблемой нумерации строк расчетного регистра. В третьей задаче шестого билета , после Запроса в Движениях РегистраРасчета.ОН вместо номеров строк стоят "0" все остальные Движения прописываются корректно, а номера строк не прописываются, не могу понять в чем дело ведь, такого не должно быть

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

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

Lzrnk

  • Новичок
  • *
  • Сообщений: 9
Re: Помогите разобраться с расчетным регистром
« Ответ #1 : Апрель 06, 2018, 07:26:34 pm »
Ну а где у вас в запросе поле "Номер строки". В запросе только "вид расчёта".
Вообще всё слишком усложнено. Тут полно правильных решений.
1C Специалист 8.3

Адам

  • Новичок
  • *
  • Сообщений: 9
Re: Помогите разобраться с расчетным регистром
« Ответ #2 : Апрель 07, 2018, 04:42:03 am »
Помогите пожалуйста разобраться с регистром расчета. Столкнулся с проблемой нумерации строк расчетного регистра. В третьей задаче шестого билета , после Запроса в Движениях РегистраРасчета.ОН вместо номеров строк стоят "0" все остальные Движения прописываются корректно, а номера строк не прописываются, не могу понять в чем дело ведь, такого не должно быть

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

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

srub

  • Новичок
  • *
  • Сообщений: 8
Re: Помогите разобраться с расчетным регистром
« Ответ #3 : Апрель 16, 2018, 01:51:53 pm »
Адам, спасибо большое, все получилось)))
« Последнее редактирование: Апрель 16, 2018, 02:25:27 pm от srub »

1С:Специалист