Автор Тема: Билет1  (Прочитано 6239 раз)

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

Pavel_NT

  • Новичок
  • *
  • Сообщений: 3
Re: Билет1
« Ответ #30 : Июль 31, 2016, 09:00:39 am »
Прошу посмотреть Б1 задача по СПР

misev

  • Новичок
  • *
  • Сообщений: 9
Re: Билет1
« Ответ #31 : Август 02, 2016, 11:06:20 am »
Если несложно, прошу посмотреть решение билета.


filiMike

  • Пользователь
  • **
  • Сообщений: 15
  • Полезные ссылки для подготовки к экз по платформе:
  • ФИО: Михаил Филимонов
Re: Билет1
« Ответ #32 : Август 09, 2016, 10:16:16 am »

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

    Честно говоря, не понял смысл этого запроса. Чем не подходит просто срез последних на дату начала расчетного периода?


В данной задаче формирование вспомогательных записей усложнено. т.к. размер оклада в течение месяца может меняться несколько раз. Если его получать запросом из РС - будет запрос в цикле. По этой причине решение задачи содержит спец. запрос, предназначенный для получения всех значений оклада в диапазоне дат расчета.