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

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

SergTH000

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Сергей
Задача 3.04
« : Сентябрь 09, 2010, 11:52:41 am »
1. Для разбиения оклада сделал реквизит в РС (периодичность месяц) ДатаИзменения.
 2. Сложность в задаче - это условие, что "Если сумма начисленных командировочных меньше чем сумма оклада, который мог бы быть начислен за эти дни. Оклад же может измениться как раз в "эти" дни. Пришлось и командировку разбивать на периоды из за этого (если он меняется в дни командировки)
Вложения:
3.04.dt

AS

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Alexander
Задача 3.04
« Ответ #1 : Ноябрь 08, 2010, 08:27:44 pm »
Мое решение...
Вложения:
3-4.dt


trantor

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Trantor
Задача 3.04
« Ответ #2 : Ноябрь 15, 2010, 04:15:53 pm »
SergTH000,
 не смотрел твое решение, но по п.2 зачем разбивать командировку на периоды, если для расчета результата расчета нужно получить базу по предыдущему периоду и для базы не важно какое значение оклада было, там содержится расчитанный результат окладов (он мог меняться или нет, не важно!)

Добавлено (15.11.2010, 16:15)
---------------------------------------------
Вопрос снимается, сам решал разобрался :-)
 Если разбивать команировки, то можно стандартно посчитать возможное изменение оклада в период коммандировки.


AndreiPiter

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Андрей
Задача 3.04
« Ответ #3 : Январь 18, 2011, 07:50:46 pm »
моё решение
Вложения:
AP_3.04.dt

Jer-Mark

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: JERRY
Задача 3.04
« Ответ #4 : Февраль 14, 2011, 12:48:01 pm »
SergTH000
 

 При тестировании сразу ошибка: хочу начислить сотруднику элементарно оклад. Получаю 0 в измерении РЕЗУЛьТАТ, и ПУСТО в ПОДРАЗДЕЛЕНИИ

Добавлено (14.02.2011, 12:35)
---------------------------------------------
Ну и дальше по ходу дела идут ошибки. Проверить правильность невозможно.

Добавлено (14.02.2011, 12:48)
---------------------------------------------
AndreiPiter
 А где учитывается момент, что командировка всегда начисляется по пятидневке?


AndreiPiter

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Андрей
Задача 3.04
« Ответ #5 : Февраль 14, 2011, 09:11:53 pm »
Quote (Jer-Mark)
А где учитывается момент, что командировка всегда начисляется по пятидневке?

 В процедуре ОбработкаПроведения:
 Движение.График = Справочники.ГрафикиРаботы.Пятидневка;
« Последнее редактирование: Февраль 14, 2011, 09:12:34 pm от Андрей »

Jer-Mark

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: JERRY
Задача 3.04
« Ответ #6 : Февраль 15, 2011, 09:42:04 am »
AndreiPiter, как считаете, если командировка считается по пятидневке, то при расчете командировки База / КоличествоРабочихДнейВМесяце * ЧислоДнейВКомандировке, вот КоличествоРабочихДнейВМесяце считаем по какому графику работы - пятидневке или тому, который установлен для работника?

SergTH000

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Сергей
Задача 3.04
« Ответ #7 : Февраль 15, 2011, 03:47:29 pm »
Jer-Mark,
Quote
При тестировании сразу ошибка: хочу начислить сотруднику элементарно оклад. Получаю 0 в измерении РЕЗУЛьТАТ, и ПУСТО в ПОДРАЗДЕЛЕНИИ

 Вообще то в результате 0, потому что задачу я делал в прошлом году и график заполнен только на 2010 год. Про подразделение, я условие уже не помню и посмотреть негде, но посмотрел код, действительно подразделение я почему то выбирал из РС СведенияОСотрудниках, а не из документа, хз почему =)

Добавлено (15.02.2011, 15:47)
---------------------------------------------
Нужно подразделение из документа выбирать и связь РС сотрудники сделать еще по подразделению, вообщем смотря какое условие там в задаче.


Lukashov_as

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Лукашов Андрей Сергеевич
Задача 3.04
« Ответ #8 : Март 14, 2011, 10:40:22 am »
Коллеги подскажите плз
 Посмотрел решения СрезПоследних по Окладу Все берут на ПериодРегистрации(на начало месяца)
 при этом в условии сказано
 "можно указать начисление оклада с 10.01 по 31.01"
 и если первичное значение оклада установить например на 08.01 то на 10.01 значение оклада будет =0

так вот вопрос
 стоит вдаваться в это или это уже считается усложнением задачи и следует принимать что оклад у всех сотрудников на начало периода установлен????


Matcoder

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: алекс
Задача 3.04
« Ответ #9 : Март 14, 2011, 09:25:02 pm »
Lukashov_as,
 Я считаю, что стоит. Решения в этой ветке не смотрел, но в ветке 3.2 есть мое решение, в котором используется запрос, решающий эту проблему.
 
Code

 ВЫБРАТЬ
  НачислениеЗарплатыОсновныеНачисления.Сотрудник,
  НачислениеЗарплатыОсновныеНачисления.Подразделение,
  НачислениеЗарплатыОсновн ыеНачисления.ВидРасчета,
  НачислениеЗарплатыОсновныеНачисления.ДатаНачала,
  КОНЕЦПЕРИОДА(НачислениеЗарплатыОсновныеНачисления.ДатаОкончани я, ДЕНЬ) КАК ДатаОкончания,
  НачислениеЗарплатыОсновныеНачисления.График
 ПОМЕСТИТЬ Начисления
 ИЗ
  Документ.НачислениеЗарплаты.ОсновныеНачисления КАК НачислениеЗарплатыОсновныеНачисления
 ГДЕ
  НачислениеЗарплатыОсновныеНачисления.Ссылка = &Ссылка
 ;

 ////////////////////////////////////////////////////////////////////////////////
 ВЫБРАТЬ
  ВложенныйЗапрос.Сотрудник,
  ВложенныйЗапрос.Подразделение,
  ВложенныйЗапрос.Оклад,
  ВложенныйЗапрос.Период
 ПОМЕСТИТЬ Оклады
 ИЗ
  (ВЫБРАТЬ
   СведенияОСотрудникахСрезПоследних.Сотрудник КАК Сотрудник,
   СведенияОСотрудникахСрезПоследних.Подразделение КАК Подразделение,
   СведенияОСотрудникахСрезПоследних.Оклад КАК Оклад,
   &ПериодРегистрации КАК Период
  ИЗ
   РегистрСведений.СведенияОСотрудниках.СрезПоследних(
     &ПериодРегистрации,
     (Сотрудник, Подразделение) В
      (ВЫБРАТЬ РАЗЛИЧНЫЕ
       т.Сотрудник,
       т.Подразделение
      ИЗ
       начисления КАК т
      ГДЕ
       т.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисления.Оклад))) КАК СведенияОСотрудникахСрезПоследних
   
  ОБЪЕДИНИТЬ
   
  ВЫБРАТЬ ПЕРВЫЕ 1
   СведенияОСотрудниках.Сотрудник,
   СведенияОСотрудниках.Подразделение,
   СведенияОСотрудниках.Оклад,
   СведенияОСотрудниках.Период
  И З
   РегистрСведений.СведенияОСотрудниках КАК СведенияОСотрудниках
  ГДЕ
   СведенияОСотрудниках.Период > &ПериодРегистрации
   И СведенияОСотрудниках.Период <= &КонецПериода) КАК ВложенныйЗапрос
 ;

 ////////////////////////////////////////////////////////////////////////////////
 ВЫБРАТЬ
  Начисления.Сотрудник,
  Начисления.Подразделение,
  Начисления.ВидРасчета,
  Начисления.ДатаНачала,
  Начисления.ДатаОкончания,
  О клады.Оклад,
  Оклады.Период КАК Период
 ПОМЕСТИТЬ НачисленияСОкладами
 ИЗ
  Начисления КАК Начисления
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ Оклады КАК Оклады
   ПО Начисления.Сотрудник = Оклады.Сотрудник
    И Начисления.Подразделение = Оклады.Подразделение
    И (Начисления.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисления.Оклад))
    И (Оклады.Период МЕЖДУ Начисления.ДатаНачала И Начисления.ДатаОкончания)
 ;

 ////////////////////////////////////////////////////////////////////////////////
 ВЫБРАТЬ
  НачисленияСОкладами.Сотрудник,
  НачисленияСОкладами.Подразделение,
  НачисленияСОкладами.ВидРасчета,
  НачисленияСОкладами.Пери од КАК ДатаНачала,
  ВЫБОР
   КОГДА НачисленияСОкладами1.Период ЕСТЬ NULL  
    ТОГДА НачисленияСОкладами.ДатаОкончания
   ИНАЧЕ ДОБАВИТЬКДАТЕ(НачисленияСОкладами1.Период, СЕКУНДА, -1)
  КОНЕЦ КАК ДатаОкончания,
  НачисленияСОкладами.Оклад
 ПОМЕСТИТЬ ПериодыДействияОкладов
 ИЗ
  НачисленияСОкладами КАК НачисленияСОкладами
   ЛЕВОЕ СОЕДИНЕНИЕ НачисленияСОкладами КАК НачисленияСОкладами1
   ПО НачисленияСОкладами.Сотрудник = НачисленияСОкладами1.Сотрудник
    И НачисленияСОкладами.Подразделение = НачисленияСОкладами1.Подразделение
    И НачисленияСОкладами.ВидРасчета = НачисленияСОкладами1.ВидРасчета
    И НачисленияСОкладами.Период < НачисленияСОкладами1.Период
 ;

 ////////////////////////////////////////////////////////////////////////////////
 ВЫБРАТЬ
  Начисления.Сотрудник,
  Начисления.Подразделение,
  Начисления.ВидРасчета,
  ВЫБОР
   КОГДА Начисления.ДатаНачала > ЕСТЬNULL(ПериодыДействияОкладов.ДатаНачала, ДАТАВРЕМЯ(1, 1, 1))
    ТОГДА Начисления.ДатаНачала
   ИНАЧЕ ПериодыДействияОкладов.ДатаНачала
  КОНЕЦ КАК ПериодДействияНачало,
  ВЫБОР
   КОГДА Начисления.ДатаОкончания < ЕСТЬNULL(ПериодыДействияОкладов.ДатаОкончания, ДАТАВРЕМЯ(3999, 11, 1))
    ТОГДА Начисления.ДатаОкончания
   ИНАЧЕ ПериодыДействияОкладов.ДатаОкончания
  КОНЕЦ КАК ПериодДействияКонец,
  Начисления.График,
  ПериодыДействияОкладов.Оклад,
  ПроцентПремииСрезПоследних.Процент
 ИЗ
  Начисления КАК Начисления
   ЛЕВОЕ СОЕДИНЕНИЕ ПериодыДействияОкладов КАК ПериодыДействияОкладов
   ПО Начисления.Сотрудник = ПериодыДействияОкладов.Сотрудник
    И Начисления.Подразделение = ПериодыДействияОкладов.Подразделение
    И Начисления.ВидРасчета = ПериодыДействияОкладов.ВидРасчета
    И (ПериодыДействияОкладов.ДатаНачала >= Начисления.ДатаНачала
      И ПериодыДействияОкладов.ДатаНачала <= Начисления.ДатаОкончания
     ИЛИ ПериодыДействияОкладов.ДатаОкончания >= Начисления.ДатаНачала
      И ПериодыДействияОкладов.ДатаОкончания <= Начисления.ДатаОкончания),
  РегистрСведений.ПроцентПремии.СрезПоследних(&ПериодРегистрации, ) КАК ПроцентПремииСрезПоследних
 

Gulf_Stream

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Радомский Виктор Сергеевич
Задача 3.04
« Ответ #10 : Июнь 13, 2011, 12:47:25 pm »
Реализовал такой алгоритм:
 1)При расчёте основных начислений определяется стоимость одного дня работы
 2)Если изменение оклада выпадает на коммандировку, - разбиваем коммандировку на 2 записи
 3)При расчете доп. начислений выбираем коммандировки, и сравниваем стоимость дня для коммандировки и для оклада
 4)Если условие выполняется - делаем доп. начисление.
Вложения:
Gulf_Stream_3.0.dt
« Последнее редактирование: Июнь 13, 2011, 12:48:51 pm от Радомский Виктор Сергеевич »

metanal

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Соколов А.С.
Задача 3.04
« Ответ #11 : Июль 25, 2011, 11:05:11 am »
А кто знает точный ответ? Если коммандировка (пятидневная) попадает на выходные, то должна ли она вытеснять оклад(полный рабочий график) в эти дни?

Gyd

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 3.04
« Ответ #12 : Июль 25, 2011, 01:45:14 pm »
Quote (metanal)
А кто знает точный ответ? Если коммандировка (пятидневная) попадает на выходные, то должна ли она вытеснять оклад(полный рабочий график) в эти дни?

 Командировке, когда она вытесняет оклад, без разницы какой у нее график и какой график у оклада. Она вытесняет по периоду. То есть в этот период сотрудник не работал по своему основному графику. Но он не прогуливал, а был в командировке, надо начислить зарплату. А сколько он был в командировке? Всё это время? Нет, по пятидневке: пн-пт - рабочие дни (начисляем з/п), сб-вс - выходные.

metanal

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Соколов А.С.
Задача 3.04
« Ответ #13 : Июль 25, 2011, 02:00:20 pm »
Спасибо! стало понятнее.
 И по ходу решения возник еще вопрос:
 
Quote
Если сумма начисленных командировочных, оказывается меньше, чем сумма оклада, который мог бы быть начислен за дни командировки

 Оклад считать по пятидневке или по такому же графику, который у сотрудника в этом месяце?

Gyd

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 3.04
« Ответ #14 : Июль 25, 2011, 03:39:32 pm »
Quote (metanal)
Quote

 Если сумма начисленных командировочных, оказывается меньше, чем сумма оклада, который мог бы быть начислен за дни командировки

 Оклад считать по пятидневке или по такому же графику, который у сотрудника в этом месяце?

 Оклад считается по тому графику который был у сотрудника в этом месяце. Например, нельзя же ему посчитать по пятидневке если он работал больше.
 Да, вы правы, сумма командировочных будет меньше. Но это уже управленческая проблема, тех кто придумал сделать сотруднику оплату командировки по пятидневке, а работают они при этом всю неделю. А может у них и не планируется отправлять сотрудников на выходные в командировку или они работают почти всегда по пятидневке - и тогда логика совсем не нарушается.

 В общем, много внимания на подобные вещи не обращайте. Главное знать как работают механизмы, видеть возможные варианты задачи и уметь их реализовывать. Если экзаменатор скажет "запускаем ракеты на Луну из 1С" - сделаете ему правильный и качественный "запуск".
« Последнее редактирование: Июль 25, 2011, 03:42:26 pm от Олег »