Автор Тема: Задача 3.03  (Прочитано 35684 раз)

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

tatyana_fiesta

  • Пользователь
  • **
  • Сообщений: 39
Re: Задача 3.03
« Ответ #90 : Июль 29, 2015, 11:11:30 am »
Помогите додумать ;) Не получается адекватно получить Оклад, запрос ниже:
Думаю, вместо ПериодДействия следует использовать ПериодДействияНачало (нам же начальный оклад нужен на начало фактического периода, а не расчетного).
А оклад я получал следующим запросом в пакете по уже определенной дате.
И еще, до получения окладов надо к начальному добавить возможные следующие даты изменения оклада в периоде.
В задаче написано "но берется на начало расчетного периода", поэтому я и беру ПериодДействия  :)

Если я в табличной части документа с ПериодомРегистрации "01.03.15" пишу две след.записи Оклада по сотруднику:
10.01.15 - 25.01.15
10.02.15 - 28.02.15
В Регистре расчета получаем:
Период действия   Дата начала периода действия   Дата окончания периода действия
01.01.2015 0:00:00   10.01.2015 0:00:00   25.01.2015 23:59:59
01.02.2015 0:00:00   10.02.2015 0:00:00   28.02.2015 23:59:59

Как получить Оклады на ПериодДействия?
Неужели ни у кого не возникло проблемы???!!!   ??? ведь такое же условие в половине задач =(((
Пожалуйста, дайте текст запроса  ;D

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Re: Задача 3.03
« Ответ #91 : Июль 29, 2015, 11:47:42 am »
В задаче написано "но берется на начало расчетного периода", поэтому я и беру ПериодДействия  :)
А еще есть задачи, где оклад не просто меняется, но и берется с учетом этих изменений, почему-то я решил, что вы говорите об этой ситуации.
ОК, выкладываю мой запрос, при условии, что берется на начало периода (только что исправил ошибку, брал на начало фактического периода действия, а вообще пока всего 2 задачи по СПР решил, так что "нюансы" возможны :D) вроде работает правильно.
Но в нем не учтена ситуация, когда на начало расчетного периода оклад не установлен (хотя, на сколько я понял, если в задаче специально не оговорена возможность ситуации, то следует допускать, что данные введены корректно в соответствии с условиями задачи).

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

ПС. Убрал в первом запросе ГДЕ, переместил в условие вирт таблицы.
« Последнее редактирование: Июль 29, 2015, 12:02:55 pm от alex1248 »


tatyana_fiesta

  • Пользователь
  • **
  • Сообщений: 39
Re: Задача 3.03
« Ответ #92 : Июль 29, 2015, 12:23:05 pm »
В задаче написано "но берется на начало расчетного периода", поэтому я и беру ПериодДействия  :)
А еще есть задачи, где оклад не просто меняется, но и берется с учетом этих изменений, почему-то я решил, что вы говорите об этой ситуации.
ОК, выкладываю мой запрос, при условии, что берется на начало периода (только что исправил ошибку, брал на начало фактического периода действия, а вообще пока всего 2 задачи по СПР решил, так что "нюансы" возможны :D) вроде работает правильно.
Но в нем не учтена ситуация, когда на начало расчетного периода оклад не установлен (хотя, на сколько я понял, если в задаче специально не оговорена возможность ситуации, то следует допускать, что данные введены корректно в соответствии с условиями задачи).

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

ПС. Убрал в первом запросе ГДЕ, переместил в условие вирт таблицы.

СПАСИБО!!! Теперь всё получилось  ;D
Ещё не хватает условия: ВТ_Период.Сотрудник = СведенияОСотрудниках.Сотрудник
А то одно условие по ПО ВТ_Период.Период = СведенияОСотрудниках.Период, не исключает всех сотрудников в данном Периоде  ;)

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Re: Задача 3.03
« Ответ #93 : Июль 29, 2015, 12:55:28 pm »
Ещё не хватает условия: ВТ_Период.Сотрудник = СведенияОСотрудниках.Сотрудник
А то одно условие по ПО ВТ_Период.Период = СведенияОСотрудниках.Период, не исключает всех сотрудников в данном Периоде  ;)
Да, спасибо, видимо, при переделке (менял источники данных) что-то упустил. Тем не менее, не могу понять, почему при 4-х сотрудниках в базе всё работало корректно. Ввел 5-го - выборка оклада стала двоиться с одним из старых.
Теперь вроде бы всё норм.  :)
« Последнее редактирование: Июль 29, 2015, 12:57:12 pm от alex1248 »

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Re: Задача 3.03
« Ответ #94 : Июль 29, 2015, 02:31:38 pm »
Доработал запрос (в том варианте было 2 обращения к одной таблице).
Вот так должно быть лучше  :)

      Запрос.Текст = "ВЫБРАТЬ
                     |   ОсновныеНачисленияДанныеГрафика.НомерСтроки,
                     |   ОсновныеНачисленияДанныеГрафика.Сотрудник,
                     |   ОсновныеНачисленияДанныеГрафика.ЗначениеПериодДействия,
                     |   ОсновныеНачисленияДанныеГрафика.ЗначениеФактическийПериодДействия,
                     |   МАКСИМУМ(СведенияОСотрудниках.Период) КАК Период
                     |ПОМЕСТИТЬ ВТ_Период
                     |ИЗ
                     |   РегистрРасчета.ОсновныеНачисления.ДанныеГрафика КАК ОсновныеНачисленияДанныеГрафика
                     |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОСотрудниках КАК СведенияОСотрудниках
                     |      ПО ОсновныеНачисленияДанныеГрафика.Сотрудник = СведенияОСотрудниках.Сотрудник
                     |         И ОсновныеНачисленияДанныеГрафика.ПериодДействия >= СведенияОСотрудниках.Период
                     |ГДЕ
                     |   ОсновныеНачисленияДанныеГрафика.Регистратор.Ссылка = &Ссылка
                     |   И ОсновныеНачисленияДанныеГрафика.ВидРасчета = &ВидРасчета
                     |
                     |СГРУППИРОВАТЬ ПО
                     |   ОсновныеНачисленияДанныеГрафика.НомерСтроки,
                     |   ОсновныеНачисленияДанныеГрафика.Сотрудник,
                     |   ОсновныеНачисленияДанныеГрафика.ЗначениеПериодДействия,
                     |   ОсновныеНачисленияДанныеГрафика.ЗначениеФактическийПериодДействия
                     |;
                     |
                     |////////////////////////////////////////////////////////////////////////////////
                     |ВЫБРАТЬ
                     |   ВТ_Период.НомерСтроки КАК НомерСтроки,
                     |   ВТ_Период.ЗначениеПериодДействия КАК Норма,
                     |   ВТ_Период.ЗначениеФактическийПериодДействия КАК Факт,
                     |   СведенияОСотрудниках.Оклад
                     |ИЗ
                     |   ВТ_Период КАК ВТ_Период
                     |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОСотрудниках КАК СведенияОСотрудниках
                     |      ПО ВТ_Период.Период = СведенияОСотрудниках.Период
                     |         И ВТ_Период.Сотрудник = СведенияОСотрудниках.Сотрудник";
« Последнее редактирование: Июль 29, 2015, 02:36:24 pm от alex1248 »

GROOVY

  • Администратор
  • Старожил
  • *****
  • Сообщений: 284
  • ФИО: Павел Чистов
Re: Задача 3.03
« Ответ #95 : Июль 29, 2015, 08:04:07 pm »
Зачем вы это все делаете? Достаточно руками в документ ввести оклады с разными периодами и все.

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Re: Задача 3.03
« Ответ #96 : Июль 29, 2015, 08:55:51 pm »
Зачем вы это все делаете? Достаточно руками в документ ввести оклады с разными периодами и все.
Тогда, чтобы выполнить условие "В информационной базе необходимо хранить историю его изменения" надо будет по каждой записи записывать также данные об окладах в РС? Причем, делать это независимо от того, было фактическое изменение или нет, ведь позже может быть введен документ за ранний период, в котором было изменение, и возврат к прежнему значению уже не отразится в РС. Но тогда это будет не совсем "история изменения".  :-\

ПС. Такая формулировка почти во всех задачах из "Сборника актуальных".
« Последнее редактирование: Июль 29, 2015, 09:01:40 pm от alex1248 »

tatyana_fiesta

  • Пользователь
  • **
  • Сообщений: 39
Re: Задача 3.03
« Ответ #97 : Июль 30, 2015, 09:41:52 am »
Зачем вы это все делаете? Достаточно руками в документ ввести оклады с разными периодами и все.
Мне, кажется, тогда снимут балы за Упрощение задачи

artemusII

  • Пользователь
  • **
  • Сообщений: 34
  • ФИО: Артем А.
Re: Задача 3.03
« Ответ #98 : Октябрь 03, 2015, 02:56:03 pm »
Привет всем. Если есть у кого время - прошу глянуть мое решение.

pila86

  • Пользователь
  • **
  • Сообщений: 17
Re: Задача 3.03
« Ответ #99 : Декабрь 30, 2015, 01:02:42 pm »
Гляньте и мой вариант, если кто имеет время и желание.

Odines

  • Проверенный
  • ***
  • Сообщений: 112
  • ФИО: Odines
Re: Задача 3.03
« Ответ #100 : Февраль 11, 2016, 09:08:59 pm »
Мое решение

Rokky78

  • Пользователь
  • **
  • Сообщений: 11
  • ФИО: Морокин Михаил
Re: Задача 3.03
« Ответ #101 : Март 27, 2016, 08:07:12 pm »
Odines, а зачем нужно перечисление "СпособРасчета" в ПВР?

Odines

  • Проверенный
  • ***
  • Сообщений: 112
  • ФИО: Odines
Re: Задача 3.03
« Ответ #102 : Март 27, 2016, 08:14:17 pm »
Odines, а зачем нужно перечисление "СпособРасчета" в ПВР?
что бы сделать учет зп более универсальным, то есть что бы была возможность добавлять новые виды расчетов. По моему есть такое требование к задачам по периодическим расчетам

Гакусей

  • Проверенный
  • ***
  • Сообщений: 154
Re: Задача 3.03
« Ответ #103 : Март 27, 2016, 10:55:19 pm »
Мое решение
Да вроде нормально, только забыл галочки "Базовое" в измерениях ОН. И ведущие можно было не настраивать, раз в условии не просят сделать перерасчеты.

alfalume

  • Проверенный
  • ***
  • Сообщений: 103
Re: Задача 3.03
« Ответ #104 : Август 06, 2016, 02:18:48 pm »
покритикуйте