Автор Тема: Помогите застрял в расчетной задаче (часть 2 - 4-й пост)  (Прочитано 972 раз)

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

Чапай

  • Пользователь
  • **
  • Сообщений: 15
  • ФИО: Чапай
В примитивной расчетной задаче (рассчитать оклад и больничный по методу отклонений) не подтягивается результатБаза (сумма). Пересмотрел уже Чистова 100 раз.
Две недели мучаюсь. Помогите. Где косяк?

Документ - НачислениеЗарплаты.
Расчет производится в ОбщемМодуле.Расчет.Рассчитать.

 Запись.Результат = ?(Выборка.ДнейБазовыйПериод=0,0, Выборка.ФактДней/ Выборка.ДнейБазовыйПериод * Выборка.РезультатБаза);

в выше приведенной не тянет "Выборка.РезультатБаза"


База прилагается.
« Последнее редактирование: Август 29, 2017, 09:22:18 pm от Чапай »

wolfery

  • Пользователь
  • **
  • Сообщений: 13
  • ФИО: wolfery
Re: Помогите застрял в расчетной задаче
« Ответ #1 : Август 22, 2017, 02:12:54 am »
Потому что база берется от оклада, который вводится в том же документе. Нужно сначала рассчитывать и записывать записи оклада, а потом уже получать базу.


Чапай

  • Пользователь
  • **
  • Сообщений: 15
  • ФИО: Чапай
Re: Помогите застрял в расчетной задаче
« Ответ #2 : Август 22, 2017, 08:42:25 am »
Спасибо wolfery!  Сработало. С меня пиво!

Чапай

  • Пользователь
  • **
  • Сообщений: 15
  • ФИО: Чапай
Re: Помогите застрял в расчетной задаче
« Ответ #3 : Август 29, 2017, 09:20:44 pm »
ЗАСТРЯЛ: ЧАСТЬ 2
Таже задача. Теперь новый прикол - не записывается набор записей измененный, хотя все расчитывается и заносится в текущую запись. БазаДанных прилагается.

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

   Для каждого Запись Из НаборЗаписей Цикл
      СтруктураПоиска.НомерСтроки = Запись.НомерСтроки;
      Если Выборка.НайтиСледующий(СтруктураПоиска)И Выборка.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда
           Сообщить("Норма111 "+Выборка.ЧасыНорма + " Факт "+Выборка.ЧасыФакт +" Норма "+Выборка.ЧасыНорма
           +" Оклад "+Запись.Оклад);
           Запись.Результат = ?(Выборка.ЧасыНорма =0,0,Запись.Оклад * Выборка.ЧасыФакт/Выборка.ЧасыНорма);
           Сообщить(" Результат "+Запись.Результат);
           а=1;
        КонецЕсли;
   КонецЦикла;
 НаборЗаписей.Записать(,,Ложь);
КонецПроцедуры
« Последнее редактирование: Август 29, 2017, 09:25:39 pm от Чапай »

wolfery

  • Пользователь
  • **
  • Сообщений: 13
  • ФИО: wolfery
Потому что в модуле проведения свойство движений записывать устанавливается, но процедура движения.записать() не вызывается, поэтому в конце транзакции проведения в регистр записываются движения.основныеначисления, в которых в это время лежат нерассчитанные записи и затирают записанные перед этим рассчитанные.
Короче, надо или не устанавливать движения.основныеначисления.записывать, или вызывать движения.записать() вместо движения.основныеначисления.записать().

Чапай

  • Пользователь
  • **
  • Сообщений: 15
  • ФИО: Чапай
Wolfery спасибо! Помогло! Я Ваш должник!