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

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 от Олег »

vvvlad85

  • Пользователь
  • **
  • Сообщений: 16
  • ФИО: Владислав
Задача 3.04
« Ответ #15 : Август 14, 2011, 12:32:19 pm »
А подскажите какое начисление должно быть отмечено как ведущее в карточке. Командировка в карточке Оклада или наоборот. И также вопрос и командировка и оклад буду ведущими в карточке дополнительных начислений "Доплата по окладу (вахта)".

par_62

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Юрий
Задача 3.04
« Ответ #16 : Октябрь 03, 2011, 05:46:42 pm »
Прочитайте внимательно условия задачи о командировке.И еще ни у кого не учтен приоритет расчета.

 Хотелось бы услышать мысли по поводу оплаты по командироке (если она ниже оклада который мог быть начислен ) тогда доплата

DoctorRoza

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Алексей
Задача 3.04
« Ответ #17 : Ноябрь 01, 2011, 09:56:53 pm »
Коллеги! Прошу помощи в решение задачи 3.4, а конкретно, расчета доплаты! Сложность в том, что доплату нужно рассчитывать в тот момент, когда все вытеснения уже произошли. Как мне видится, тут придется идти через перерасчет, так как стоимость дня так просто не определить. А если еще есть изменение оклада, то тут становится еще сложнее.
 p.s. ИМХО, все решения из ветки ,которые тут есть, либо неправильные, либо неполные. У меня расчет доплаты так и не получился! sad
Вложения:
DoctorRoza_3_4.dt

Gyd

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 3.04
« Ответ #18 : Ноябрь 02, 2011, 10:36:46 am »
Quote (DoctorRoza)
Коллеги! Прошу помощи в решение задачи 3.4, а конкретно, расчета доплаты! Сложность в том, что доплату нужно рассчитывать в тот момент, когда все вытеснения уже произошли. Как мне видится, тут придется идти через перерасчет, так как стоимость дня так просто не определить. А если еще есть изменение оклада, то тут становится еще сложнее.

 Задачу не решал, ибо не входит в список задач из билетов.
 Но решил бы так: Доплата - вид расчета с периодом действия (ПВР Основные начисления), потому что вытесняется Командировкой. Сама Доплата ничего не вытесняет. При записи ставим у неё базовый период (её период действия) и базовый ВР - Оклад, для того чтобы получить базу оклада. Соответственно у плана видов расчета Основные начисления делаем Зависимость от базы по периоду действия и указываем Базовый план видов расчета его же - Основные начисления.

 При записи в модуле документа не имеет значения порядок записи, можно сначала Доплату записать, а потом Оклад. А вот при расчёте в общем модуле, сначала рассчитываем Оклад (чтобы сформировалась база), а потом уже Доплату. Процент надбавки хранится в РС Сведения о сотрудниках. Можно сразу извлечь его в модуле документа и записать в реквизит. Когда получаем базу по окладу (по указанному базовому периоду), берём процент надбавки из реквизита записи и высчитываем сумму надбавки.

 Что касается перерасчетов:
 при записи всех трёх видов расчета (доплаты, командировки и оклада) в одном документе - нужно просто соблюсти порядок расчета. Сначала рассчитать оклад, потом доплату. Командировку можно в начале посчитать, а можно в конце - разницы нет. Почему не важно когда считать Командировку? Перед расчетом в общем модуле уже будут определенны периоды действия всех расчетов. Командировка считается сама по себе (для неё не нужны ни оклад, ни доплата), выясняется сумма оклада и сумма командировочных за период командировки, а потом они сравниваются.
 А вот если вводить эти виды расчетов разными документами, тогда конечно нужно делать перерасчет. Допустим первый документ с окладом, после него документ с доплатой, а следующим документом вводится командировка. Командировка вытеснит часть оклада (прежний оклад станет недействительным) и вытеснит часть надбавки (и надбавка станет недействительной). Значит нужно будет сделать перерасчет оклада и доплаты, чтобы они рассчитались уже с учётом командировки.
« Последнее редактирование: Ноябрь 02, 2011, 10:44:33 am от Олег »

DoctorRoza

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Алексей
Задача 3.04
« Ответ #19 : Ноябрь 02, 2011, 02:12:20 pm »
Gyd, чувствую, что за каждую задачу по СПР, я Вам буду "+" в репутацию ставить за идеи! smile Ну вот нету у меня, верю пока, ясности в решениях расчетных задач .. sad .. хоть тресни! А ведь все просто! )))

Gyd

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

 Я тоже задумывался на эту тему неоднократно, вроде бы и "Профессиональная разработка..." есть, и видеокурс П.Чистова, и "Практическое пособие...", а понимание СПР тяжело даётся. Подумываю мини-гайд написать, но может быть позже, так как сам еще не всё понял.
 Давайте так сделаем, если вопросы есть какие-то - вы мне в личку пишите, не стесняйтесь, чем смогу - помогу.

DoctorRoza

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Алексей
Задача 3.04
« Ответ #21 : Ноябрь 05, 2011, 08:49:10 pm »
Вымучил все-таки .. учел все на что хватило светло-черного вещества. Взял идею товарища SergTH000 для расчета дат нового оклада, в данном случае его вариант самый верный. ИМХО, в данной задаче все начисления имеют период действия, поэтому используем 1 РР. Одно осталось не разрешимым для меня - когда в месяце изменяется оклад, тогда при определении базы для начисления командировки у меня пропадает 1 день!! Когда ввожу даты командировки 20.02.2011 - 20.02.2011, по идеи 1 день командировка, то получают фактический период действия 0! Прошу, Коллеги, помощи, может есть какие - либо мысли по этому поводу!
Вложения:
0312873.dt

Gyd

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 3.04
« Ответ #22 : Ноябрь 07, 2011, 10:16:49 am »
Quote (DoctorRoza)
может есть какие - либо мысли по этому поводу!

 Ответил в личку, посмотрите пожалуйста.

DoctorRoza

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Алексей
Задача 3.04
« Ответ #23 : Ноябрь 07, 2011, 08:19:40 pm »
Gyd, благодарю, сообщение прочитал .. вроде разобрался ..))

xMikezxzz

  • Новичок
  • *
  • Сообщений: 2
  • ФИО: Михаил
Задача 3.04
« Ответ #24 : Ноябрь 08, 2011, 12:04:45 pm »
Gyd, может вы будете такие вопросы/ответы обсуждать в топиках форума, а не в личках?) всем же интересно.)

DoctorRoza

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Алексей
Задача 3.04
« Ответ #25 : Ноябрь 08, 2011, 06:24:57 pm »
xMikezxzz, Вы задавайте вопросы .. будем обсуждать .. и сами учиться ..

LEOON

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Верютин Сергей
Задача 3.04
« Ответ #26 : Ноябрь 15, 2011, 08:26:14 pm »
Чужие базы не смотрел, но по комментариям выбрал вариант SergTH000, и соответственно DoctorRoza.
Вложения:
1.17_3.04.dt

Romdavid

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Давид
Задача 3.04
« Ответ #27 : Ноябрь 19, 2011, 04:48:00 pm »
DoctorRoza, на мой взгляд вы ошибаетесь, думая, что надбавка за вахту тоже имеет период действия.

DoctorRoza

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Алексей
Задача 3.04
« Ответ #28 : Ноябрь 19, 2011, 05:39:52 pm »
Romdavid, пожалуйста аргументируйте. В СПР я имею нулевой опыт, поэтому будет интересно посмотреть Ваше решение.

Romdavid

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Давид
Задача 3.04
« Ответ #29 : Ноябрь 19, 2011, 06:38:31 pm »
DoctorRoza, во-первых, надбавка не вытесняется другими видами расчета и не вытесняет другие виды расчета, во-вторых, надбавка не использует график. В вашем решении вы установили период действия у надбавки и никак не используете это. Если бы вы не установили наличие периода действия у надбавки, логика решения бы не изменилась и код фактически тоже. Однако, при установке галочки "Использует период действия" в БД появляются дополнительные поля.

 P.S. В СПР тоже опыта почти нет. Недавно только начал решать задачи из данного раздела.

DoctorRoza

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Алексей
Задача 3.04
« Ответ #30 : Ноябрь 19, 2011, 08:54:51 pm »
Romdavid, Видимо да, Вы правы. Вытеснений нет, поэтому вахту нужно определять в ПВР без периода действия. Спасибо за ошибку!
 p.s. ИМХО, нарушение основных принципов СПР в корне - самая главная ошибка программиста. Даже, если код изменять не надо. За это .. "Казнить, нельзя помиловать!" smile

sv_mikh

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Михайлов Сергей Валерианович
Задача 3.04
« Ответ #31 : Январь 05, 2012, 09:03:54 pm »
Прошу посмотреть мое решение.
 1. Все реализовал на Основных начислениях. Вида расчета 3. Оклад, командировка, надбавка. Доплату до оклада включил в командировку...
 Такое упрощение. Не знаю насколько наказуемое. Если доплату выделять, то сделал бы доп.начислением.
 2. Оклад и командировку разделяю по ставкам оклада.

Добавлено (05.01.2012, 21:03)
---------------------------------------------

Quote (Romdavid)
DoctorRoza, во-первых, надбавка не вытесняется другими видами расчета и не вытесняет другие виды расчета, во-вторых, надбавка не использует график. В вашем решении вы установили период действия у надбавки и никак не используете это. Если бы вы не установили наличие периода действия у надбавки, логика решения бы не изменилась и код фактически тоже. Однако, при установке галочки "Использует период действия" в БД появляются дополнительные поля.

 P.S. В СПР тоже опыта почти нет. Недавно только начал решать задачи из данного раздела.


 Попробую не согласиться. Считаю, что надбавка должна иметь период действия, ради того, чтобы иметь возможность получить базу не за весь месяц а за указанный период. Для этого надбавка имеет период действия и база = периоду действия ВР.
 Пример: Оклад с 01.01 по 31.01. Командировка с 16.01 по 20.01. Надбавка с 09.01 по 27.01. Как думаете считать надбавку?
Вложения:
sv_mikh_03_04.dt

sv_mikh

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Михайлов Сергей Валерианович
Задача 3.04
« Ответ #32 : Январь 05, 2012, 10:31:40 pm »
Вариант решения с выделенной доплатой до оклада в виде отдельного доп.начисления.
Вложения:
sv_mikh_03_04_2.dt

Кенгуру

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Кенгуру
Задача 3.04
« Ответ #33 : Апрель 23, 2012, 01:14:56 pm »
Не посчитают ли меня уважаемые господа преподаватели извращенцем, если

 буду считать надбавку также как и оклад, а не как некоторый вид расчета имеющий базу по окладу?

 т.е.

 Если (Выборка.ВидРасчета = Оклад) ИЛИ(Выборка.ВидРасчета = Надбавка) Тогда

 Если Выборка.ВидРасчета = Оклад Тогда
 К = 1;
 Иначе
 К = Выборка.ПроцентНадбавки / 100;
 КонецЕсли;

 ...

 ДляКаждогоЗапись ИзНабор Цикл

 Отбор.НомерСтроки = Запись.НомерСтроки;
 Выборка.Сбросить();
 ЕслиВыборка.НайтиСледующий(Отбор) Тогда

 Если(Запись.ВидРасчета = Оклад) ИЛИ(Запись.ВидРасчета = Надбавка) Тогда
 Запись.РезультатРасчета = ?(Выборка.План=0, 0, Запись.ПараметрРасчета * Выборка.Факт / Выборка.План);
 ...
« Последнее редактирование: Апрель 23, 2012, 01:16:24 pm от Кенгуру »

sv_mikh

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Михайлов Сергей Валерианович
Задача 3.04
« Ответ #34 : Апрель 23, 2012, 01:41:55 pm »
Quote (Кенгуру)
Не посчитают ли меня уважаемые господа преподаватели извращенцем, если
 буду считать надбавку также как и оклад, а не как некоторый вид расчета имеющий базу по окладу?


 Я думаю это неверное решение. Возможна ситуация, когда оклад за часть месяца не начисляется (по неизвестным причинам, не связанным с вытеснением), а надбавку начислили за все дни месяца. В целом тут прозрачно намекают на базу надбавки по периоду действия.
« Последнее редактирование: Апрель 23, 2012, 01:42:27 pm от Михайлов Сергей Валерианович »

Кенгуру

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Кенгуру
Задача 3.04
« Ответ #35 : Апрель 23, 2012, 03:07:17 pm »
Quote (sv_mikh)
Я думаю это неверное решение. Возможна ситуация, когда оклад за часть месяца не начисляется (по неизвестным причинам, не связанным с вытеснением), а надбавку начислили за все дни месяца. В целом тут прозрачно намекают на базу надбавки по периоду действия.

 Спасибо, не подумал об этом.. Буду делать через базу

kow1976

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 3.04
« Ответ #36 : Апрель 23, 2012, 03:23:34 pm »
Такой вариант решения задачи.
 Спасибо за комментарии и замечания.
Вложения:
kow1976_3.4.dt

Кенгуру

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Кенгуру
Задача 3.04
« Ответ #37 : Апрель 24, 2012, 11:56:06 am »
kow1976
 объясните, у надбавки стоит галочка в вытесняюих-коммандировка.

 имхо не нужно ее ставить, т.к. надбавка берет базу по окладу, а оклад вытесняется коммандировкой,
 т.е. коммандировка и так будет косвенно вытеснять.

 1) окладу не нужно указывать базовый период
 потому что он начисляется за период действия - отработал с 1 по 10 - получил с 1 по 10, например окладом по дням.
 А больничный, например, отболел с 1 по 10, а базу для расчета больничного взяли с 1 по 31 прошлого месяца.

 2) для надбавки можно также не указывать базовый период в обработке проведения при первой записи,
 т.к. у нее стоит галка "период действия является базовым периодом".
 В РР у нее не будут пустые значения в полях БПНачало и БПКонец, но начисления будут сделаны верно.

 3) можно не писать "Движение.Сторно=Ложь", пока не указано обратное, т.к. по умолчанию ложь

 Из вашей работы узнал, что у меня не правильно рассчитывает коммандировку - запрос берет по значение базы для расчтетов только по ОсновнымНачислениям
Вложения:
kenguru_3_4.dt
« Последнее редактирование: Апрель 24, 2012, 02:24:07 pm от Кенгуру »

kow1976

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 3.04
« Ответ #38 : Апрель 24, 2012, 06:36:46 pm »
Кенгуру,
 Задача интересная. Рад что есть желание обсудить.
 
Quote (Кенгуру)
1) окладу не нужно указывать базовый период

 Делаю для того чтобы отделить командировку от оклада. Чтобы вычислить сколько дней был бы оклад если бы его не вытеснила командировка.

 Фактический период действия оклада минус базовый период действия оклада = Время недополученного оклада в результате командировки.

Добавлено (24.04.2012, 18:36)
---------------------------------------------

Quote (kow1976)
2) для надбавки можно также не указывать базовый период в обработке проведения при первой записи,

 Действительно можно ставить можно не ставить на получение базы по окладу влияние не оказывает. Делал в качестве эксперимента.

 
Quote (kow1976)
имхо не нужно ее ставить, т.к. надбавка берет базу по окладу, а оклад вытесняется коммандировкой,
 т.е. коммандировка и так будет косвенно вытеснять.


 Пробовал. Расчет правильный не получился.

kow1976

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 3.04
« Ответ #39 : Апрель 25, 2012, 03:41:11 am »
Посмотрел ваше решение. Для одного сотрудника расчет вроде бы правильный. Командировку я вытесняю все таки зря. Хотя на этом построено все решение.

 При начислении з/п двум сотрудника ваше решение перестает правильно считать.

 Доплаты на мой взгляд надо бы включать в базу начисления командировок.
Вложения:
s7992011.jpg

Кенгуру

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Кенгуру
Задача 3.04
« Ответ #40 : Апрель 26, 2012, 10:50:01 am »
kow1976,
 странно, посмотрю, что не так; все-таки в фирме чаще больше одного сотрудника biggrin ..
 спасибо, попробую решить заново учитывая недоработки и потестить побольше.
Вложения:
kengoo_03_04.dt
« Последнее редактирование: Апрель 26, 2012, 06:23:53 pm от Кенгуру »

bezplana

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Ivan
Задача 3.04
« Ответ #41 : Май 18, 2012, 12:36:07 pm »
Quote (Lukashov_as)
Коллеги подскажите плз
 Посмотрел решения СрезПоследних по Окладу Все берут на ПериодРегистрации(на начало месяца)
 при этом в условии сказано
 "можно указать начисление оклада с 10.01 по 31.01"
 и если первичное значение оклада установить например на 08.01 то на 10.01 значение оклада будет =0

 
Quote (Matcoder)
Я считаю, что стоит. Решения в этой ветке не смотрел, но в ветке 3.2 есть мое решение, в котором используется запрос, решающий эту проблему.

 А нельзя ли воспользоватся таблицей РегистраСведений Срез первых? Я так и решил, не знаю насколько правильнее, но запрос получился намного понятнее.
 
Code

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

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

Oliver

  • Новичок
  • *
  • Сообщений: 5
  • ФИО: Юрий
Задача 3.04
« Ответ #42 : Ноябрь 27, 2012, 08:27:08 am »
... Прочитал всю тему, посмотрел много баз ...
 ... самое интересное, что в данной задаче Павел Чистов считает, что надбавка не имеет периода действия (и соотвественно в доп. начислениях) ...
 ... под влиянием Авторитета я с Ним согласился ... Я бы мог его решение выложить, на нельзя наверное ...

 P.S. решил немного согрешить и выложу добавление записей в Рег (с разбивкой по периодам, изменение оклада произвольное колличество раз)... авторство: П.Чистов.
 
« Последнее редактирование: Ноябрь 27, 2012, 08:38:21 am от Кошелев Юрий Витальевич »

ivanovnm

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Ivanov N.M.
Задача 3.04
« Ответ #43 : Декабрь 21, 2012, 02:24:09 pm »
Quote
Следует учесть, что данные о командировке не могут вводиться в систему задним числом

 Как это понимать?
 1. Не учитывать ввод данных за прошлый период и не тратить время на работу со сторно, время решения задачи сокращается
 2. При проведении документа проверять ввод командировки задним, время решение задачи увеличивается.
« Последнее редактирование: Декабрь 21, 2012, 02:59:19 pm от Ivanov N.M. »

Oliver

  • Новичок
  • *
  • Сообщений: 5
  • ФИО: Юрий
Задача 3.04
« Ответ #44 : Декабрь 22, 2012, 04:17:06 am »
Цитата
Как это понимать?

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

alex7six

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Александр
Задача 3.04
« Ответ #45 : Январь 12, 2013, 08:49:12 pm »
Данную задачу не решаю, т.к. она очень похожа на предыдущие, но кратко опишу словами основные различия:
 Основные начисления:
 1. Оклад
 2. Командировка
 базовые оба регистра расчета.

 Дополнит. начисления:
 1. надбавка процентом
 2. ДоплатаДоОклада.
 Не использует период действия, базой является регистр Основные начисления.

 Надбавка процентом ничем не отличается от Премии из предыдущих задач.
 Что касается Доплаты до оклада, то ее я бы рассчитывал так:
 при расчете командировки рассчитываю также сумму оклада, который мог быть рассчитан за этот период, и отымаю его от командировки = разницу пишу как ДоплатаДоОклада.
 Тут сложность основная в расчете оклада, т.к. он может меняться в течении месяца

ivanovnm

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Ivanov N.M.
Задача 3.04
« Ответ #46 : Январь 27, 2013, 02:46:34 am »
Цитата (Oliver)
Дополнит. начисления:
 ...
 2. ДоплатаДоОклада.

 Доплата до оклада не может быть в доп начислениях. По условию она сравнивает суммы командировочного и вытесненного (нулевого) оклада, значит вынуждена считать оклад сама.

 Добавлено (27.01.2013, 02:46)
 ---------------------------------------------
 
Цитата (Gyd)
Одно осталось не разрешимым для меня - когда в месяце изменяется оклад, тогда при определении базы для начисления командировки у меня пропадает 1 день!! Когда ввожу даты командировки 20.02.2011 - 20.02.2011, по идеи 1 день командировка, то получают фактический период действия 0! Прошу, Коллеги, помощи, может есть какие - либо мысли по этому поводу!

 Цитата DoctorRozaGyd, может вы будете такие вопросы/ответы обсуждать в топиках форума, а не в личках?) всем же интересно.)

 Скорее всего для ПериодДействияКонец не указано время 23:59:59.
« Последнее редактирование: Январь 27, 2013, 02:48:05 am от Ivanov N.M. »

Oliver

  • Новичок
  • *
  • Сообщений: 5
  • ФИО: Юрий
Задача 3.04
« Ответ #47 : Январь 28, 2013, 07:18:44 am »
Цитата
Доплата до оклада не может быть в доп начислениях. По условию она сравнивает суммы командировочного и вытесненного (нулевого) оклада, значит вынуждена считать оклад сама.
Доплата может считать и оклад и команидровку находясь в любом регистре расчета, но быть в Основных начислениях только если сама имеет перид действия. Вы можете сказать что доплата действовала к примеру с 5-ого по 10-ое, и если да то какой смысл хранить у данного вида расчета период действия. Доплата будет - вытесянться?
 Проблем с базой нет - она может находиться в любом виде расчета.
 Полагаю если Вы поместитье доплату в Основные - с Вас снимут баллы.

alex7six

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Александр
Задача 3.04
« Ответ #48 : Февраль 03, 2013, 01:55:16 pm »
Мой вариант решения. Модуль проведения документа Начисление запрплаты очень компактный
Вложения:
3_4.dt

SerF

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Сергей
Задача 3.04
« Ответ #49 : Февраль 10, 2013, 08:53:14 pm »
Цитата (Oliver)
P.S. решил немного согрешить и выложу добавление записей в Рег (с разбивкой по периодам, изменение оклада произвольное колличество раз)... авторство: П.Чистов.
Хороший запрос, но тоже с ошибкой. Если установить оклад сотруднику на 1-ое число месяца и больше не менять, то запрос возвращает две одинаковые строки с окладом, что приводит к ошибке.
 Следовательно, нужно в запрос добавить дополнительную группировку для учета таких ситуаций.

leonid_kirienko

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Леонид
Задача 3.04
« Ответ #50 : Март 25, 2013, 08:00:53 pm »
Добрый день, коллеги.
 Во всех решениях, которые смотрел, разбивку оклада по периодам выполняют на этапе проведения. А не проще это сделать еще при заполнении табличной части, в интерактиве? Там же контроль дат начала/конца?
 При расчете сначала считаю оклады не вытесняя их командировками, затем от полученной базы беру сумму того, "что могло быть начислено".  
 Затем "включаю" командировки, вытесняя часть оклада, рассчитываю надбавку и собственно командировки, параллельно корректируя доплаты.

 Прошу объективной критики...
Вложения:
8458899.dt

fimanich

  • Пользователь
  • **
  • Сообщений: 49
Задача 3.04
« Ответ #51 : Апрель 13, 2013, 04:04:13 pm »
Цитата (leonid_kirienko)
Прошу объективной критики...
Мне кажется, совершенно излишне "в интерактиве" что-то делать, концепция этих задач такое вряд ли предусматривает. В документе аж 3 табличные части по названиям видов расчета Оклады, Вахты, Командировки... Теоретически: а если добавиться еще вид расчета, будем еще одну табличную часть добавлять? wink
 Включение - выключение командировок через Сторно тоже мне кажется, чересчур. В целом проявлен весьма нестандартный подход, не знаю, насколько это понравится тем, кто будет принимать экзамен...

fimanich

  • Пользователь
  • **
  • Сообщений: 49
Задача 3.04
« Ответ #52 : Апрель 13, 2013, 04:17:45 pm »
Прикрепляю свое решение. Командировку (также как и оклад) разбиваю, если значение оклада менялось. Доплату добавляю прямо при расчете основных начислений. Словом, ничего не усложняю, но и все вроде соответствует условию.
 Критика приветствуется.

Добавлено (13.04.2013, 16:17)
---------------------------------------------
чуть добавлю Доплата и Надбавка - в дополнительных начислениях, конечно же.


Вложения:
fimanich_03_04.dt

TuMyP1985

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Тимур
Задача 3.04
« Ответ #53 : Август 19, 2013, 04:28:12 pm »
Цитата (fimanich)
Прикрепления: fimanich_03_04.dt(160Kb)
Мне думается, что у вас не совсем правильно начисляется доплата. В задаче написано, что если 
 сумма начисленных командировочных, оказываетсяменьше, чем сумма оклада, который мог бы быть начислен за дни командировки,тогда сотруднику начисляется доплата 
 т.е. "Возможная стоимость дней командировки по окладу" =  берется сумма оклада за весь месяц, делится на количество рабочих дней и умножается на количество дней командировки, сравнивается с суммой начисленных командировочных, и если сумма начисленных командировочных меньше, то начисляется доплата.
 Я прикрепил вашу базу, там только один документ.
 РР "основной" все так, а РР "дополнительный", я думаю - не хватает доплаты в размере 147,50.

 Вы берете не сумму оклада за весь месяц, в котором оклад может один раз меняться (до 10.02.2013 был оклад 1000, а с 10.02.2013 оклад стал 5000, как я понял вы оклад берете как 1000)
Вложения:
fimanich_03_04_.dt

TuMyP1985

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Тимур
Задача 3.04
« Ответ #54 : Август 19, 2013, 04:28:42 pm »
Цитата (fimanich)
Прикрепления: fimanich_03_04.dt(160Kb)
Мне думается, что у вас не совсем правильно начисляется доплата. В задаче написано, что если 
 сумма начисленных командировочных, оказываетсяменьше, чем сумма оклада, который мог бы быть начислен за дни командировки,тогда сотруднику начисляется доплата 
 т.е. "Возможная стоимость дней командировки по окладу" =  берется сумма оклада за весь месяц, делится на количество рабочих дней и умножается на количество дней командировки, сравнивается с суммой начисленных командировочных, и если сумма начисленных командировочных меньше, то начисляется доплата.
 Я прикрепил вашу базу, там только один документ.
 РР "основной" все так, а РР "дополнительный", я думаю - не хватает доплаты в размере 147,50.

 Вы берете не сумму оклада за весь месяц, в котором оклад может один раз меняться (до 10.02.2013 был оклад 1000, а с 10.02.2013 оклад стал 5000, как я понял вы оклад берете как 1000)
Вложения:
8017609.dt

TuMyP1985

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Тимур
Задача 3.04
« Ответ #55 : Август 19, 2013, 04:40:24 pm »
Мой вариант
Вложения:
KTT_3_4.dt

fimanich

  • Пользователь
  • **
  • Сообщений: 49
Задача 3.04
« Ответ #56 : Август 21, 2013, 11:18:05 pm »
Цитата (TuMyP1985)
Вы берете не сумму оклада за весь месяц, в котором оклад может один раз меняться (до 10.02.2013 был оклад 1000, а с 10.02.2013 оклад стал 5000, как я понял вы оклад берете как 1000)
Мне кажется, Вы не совсем правильно поняли. Командировку я разбиваю по тому же принципу, что и оклад. Пример: оклад поменялся 10.01.2013. Сотрудник был в командировке 08.01.2013-11.01.2013. В регистре будет 2 записи командировки 08.01.2013-09.01.2013 и 10.01.2013-11.01.2013. Для каждой из этих записей будет рассчитана сумма, которая могла быть оплачена по окладу (по действующей ставке до 10 или начиная с 10-го).

nskripka

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Николай
Задача 3.04
« Ответ #57 : Август 22, 2013, 12:06:19 am »
fimanich, подход правильный.
 Но всё же считаю, что командировка - это сложное начисление и его нужно разбивать на несколько строк, потом группировать. Как сделано в ЗУПе.
 Первый подход - можно считать, данные оклада (какой бы он был) для записей командировок в начале проведения, затем очищать. 
 Можно сделать отдельное временное начисление оклада, которое не будет вытесняться. А строку с начислением командировки разделять на несколько, можно ввести отдельный реквизит для запроса, вычислять оклад, группировать данные для таких строк. Будет время, сделаю решение.
 Первая причина - командировка считается строго по пятидневке (по условию), а вот оклад в общем случае может быть не пятидневке (из первого абзаца, где говорится, что сотрудники работают по пятидневке, но нужно учесть, что могут работать по другому графику). Согласен, слабый аргумент, но всё же.
 Вторая главная причина, что сказано, что не интервал, а полностью вся сумма командировки сравнивается со всей суммой оклада. По Вашему решению Вы сравниваете сумму оклада, точне вычисляете сумму оклада в этой же строки и сравниваете эту сумму с суммой командировки по каждому интервалу. Но смотрите, может быть такая ситуация, когда значение оклада превысит сумму командировки на одном интервале незначительно, но на другом будет меньше. Итоговая сумма оклада за период командировки будет меньше, чем командировка. Оплаты не должно быть. А по вашему алгоритму она будет. А это противоречит условию.
 ....
 А вообще бы не мучался с этой задачей .Всё равно её не будет на экзамене.

artfa

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Артур
Задача 3.04
« Ответ #58 : Август 30, 2013, 12:41:56 am »
Цитата (fimanich)
чуть добавлю Доплата и Надбавка - в дополнительных начислениях, конечно же.

 я не стал выделять доплату в отдельный вид расчета, так как в задаче об этом специально не говорится, а просто начисляю большее из СуммыПоБазе и СуммыПоОкладу за тот же период, в условии задачи сказано что Если сумма наисленных командировочных оказывается (не оказалась) ..., т.е. глаголом оказывается в настоящем времени, авторы задачника как бы намекают что не нужно делать отдельное движение по доплате, а брать СуммуПоОкладу, т.к. в обоих случаях результат будет один, интересно кто об этом что думает?
 так же, у меня вахта в основных начислениях, доп.начислений у меня вообще нет, вахта использует период действия, поэтому выносить ее в отдельный план видов расчета смысла не вижу...

Добавлено (30.08.2013, 00:41)
---------------------------------------------

Цитата (nskripka)
Но смотрите, может быть такая ситуация, когда значение оклада превысит сумму командировки на одном интервале незначительно, но на другом будет меньше. Итоговая сумма оклада за период командировки будет меньше, чем командировка. Оплаты не должно быть. А по вашему алгоритму она будет. А это противоречит условию.

 эта проблема у меня решена
Вложения:
3.4.dt

artfa

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Артур
Задача 3.04
« Ответ #59 : Октябрь 09, 2013, 05:57:06 pm »
переделал
Вложения:
8473248.dt

AvalonE2010

  • Новичок
  • *
  • Сообщений: 2
  • ФИО: Алексей
Задача 3.04
« Ответ #60 : Ноябрь 06, 2013, 04:02:01 pm »
Здравствуйте! Подскажите а как реализуется условие:
 -----------------------------------
 Если сумма начисленных командировочных, оказывается меньше, чем сумма оклада,
 который мог бы быть начислен за дни командировки, тогда сотруднику начисляется доплата до
 оклада
 -------------------------------------
 У самого мысли что надо по периоду действия командировки сформировать записи аналогичные окладу(с учетом того что оклад мог изменится в этом периоде) и сравнить рез. сумму с суммой оклада. Но как то это больно сложно получается...Подскажите кто как делал.

mikas-2008

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Mikas
Задача 3.04
« Ответ #61 : Декабрь 06, 2013, 10:10:17 pm »
Цитата AvalonE2010 ()
Если сумма начисленных командировочных, оказывается меньше, чем сумма оклада, который мог бы быть начислен за дни командировки, тогда сотруднику начисляется доплата до
 оклада

 У меня мысли такие: фирма очень ценит своих сотрудников, так как в реальной жизни при начислении ЗП чаще всего командировочные меньше оклада :D. А если серьезно, то мы смотрим на оклад за день и командировку за день. Если сумма командировки меньше суммы оклада, то появляется еще одно начисление ДоплатаКОкладу, которая компенсирует разницу. Сумма Доплат = (СуммаЗаДеньОклад - СуммаЗаДеньКомандировка) * КоличествоДнейВКомандировке.

 П.с. задачу еще не решал, но в ближайшее выложу свое решение.
« Последнее редактирование: Декабрь 07, 2013, 01:01:38 am от Mikas »

mikas-2008

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Mikas
Задача 3.04
« Ответ #62 : Декабрь 12, 2013, 03:32:38 pm »
artfa, спасибо дружище. wink Натолкнул на гениальную и простую мысль. Делить нужно не только оклад но и командировку. Наверное дня 4-е крутил разные варианты, пока не понял, как нужно использовать механизмы платформы для расчета отпуска и командировки. Выкладываю свое решение. Крутил его по разному. Все работает.

Добавлено (12.12.2013, 15:32)
---------------------------------------------

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

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

 П.с. при данном алгоритме думаю, что даже не важен порядок расчета оклада и командировки. Командировка в любом случае использует свои данные, ей рассчитанные данные оклада за текущий месяц не важны. Оклад в любом случае будет вытеснен, как только данные о периоде действия командировки будут записаны в регистр.
Вложения:
mikas_3.04.dt

Юрий1980

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Юрец
Задача 3.04
« Ответ #63 : Декабрь 27, 2013, 11:45:37 am »
Вот готовое решение. Все работает. http://yadi.sk/d/MfMqUwbKF2Nzs

Добавлено (27.12.2013, 11:45)
---------------------------------------------
Основные начисления Использует период действия. Оклад вытесняется  командировкой, командировка зависит по базе от Основных и дополнительных видов расчета (Кроме Оклада полный). Оклад полный ничем не вытесняется. Дополнительные начисления не используют период действия но зависят по базе от Основных начислений. Надбавка От Оклада. Доплата от оклада полного. При проведение расходной для надбавки базовый период это месяц регистрации а для доплаты (вводится одновременно с командировкой) базовый период это период действия командировки. После этого в общем модуле делаем расчет двух окладов и командировки а потом Надбавки и Доплаты. При расчете доплаты у нас есть база по окладу расчетному с учетом изменения. Мы ее сравниваем с начисленной выше Командировкой (запоминаем номер строки командировки в реквизите размер доплата). И если доплата больше командировки на разницу установим значение результат записи доплаты .


non1ka

  • Новичок
  • *
  • Сообщений: 5
  • ФИО: Тюрин Илья Александрович
Задача 3.04
« Ответ #64 : Февраль 04, 2014, 08:58:28 pm »
sv_mikh, Почему вы в решении Доплату за Вахту выносите в Основные начисления?
 По моему это явное Дополнительное начисление, т.к. не имеет периода действия и не вытесняет ни одно из начислений.
 Но а в остальном очень хорошее решение.
Вложения:
3574294.dt

IT_PROGRAMMIST

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Дмитрий
Задача 3.04
« Ответ #65 : Февраль 05, 2014, 01:36:28 pm »
non1ka.
 
Цитата
По моему это явное Дополнительное начисление, т.к. не имеет периода действия и не вытесняет ни одно из начислений
А в вашем решении для дополнительных начислений указана зависимость по периоду действия...

non1ka

  • Новичок
  • *
  • Сообщений: 5
  • ФИО: Тюрин Илья Александрович
Задача 3.04
« Ответ #66 : Февраль 06, 2014, 11:17:07 pm »
IT_PROGRAMMIST
 
Цитата
А в вашем решении для дополнительных начислений указана зависимость по периоду действия...
В моем решении "Дополнительные начисления" имеют зависимость по базе, другими словами имеют базовый период начало и базовый период конец.
 Но не имеют периода действия другими словами не имеют период действия начало и период действия конец и не влияют на вытеснение.

Leo705

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Андрей
Задача 3.04
« Ответ #67 : Апрель 01, 2014, 07:57:52 am »
Мое решение smile
« Последнее редактирование: Апрель 01, 2014, 10:19:53 am от Андрей »

EfKonstanin

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Константин
Задача 3.04
« Ответ #68 : Сентябрь 14, 2014, 12:38:02 pm »
Посмотрев некоторые решения, можно прийти к выводу, что условие "Если сумма начисленных командировочных, оказывается меньше, чем сумма оклада, который мог бы быть начислен за дни командировки, тогда сотруднику начисляется доплата до оклада" можно выполнить, записав начальное значение оклада в реквизит РР допустим "Параметр", но почему никто не учитывает в решении "худший" вариант, когда размер оклада у нас изменился во время командировки, тогда и запись по виду расчета "Командировка" нужно делить на 2 записи, чтобы корректно рассчитать "Сумму возможного оклада".
 При решении используются 3-этажные запросы. Да это бесспорно более эффективно рассчитать все значения в запросе и через "ЗаполнитьЗначенияСвойств" загрузить все записи, НО мне вот интересно сколько времени будет потрачено на отладку этих самых запросов? В условиях нехватки времени считаю, что лучше лучше не городить 3-этажные запросы.
 Ps. Пока не могу добавить свое решение.

naumenko_alex

  • Пользователь
  • **
  • Сообщений: 11
  • ФИО: Александр
Re: Задача 3.04
« Ответ #69 : Март 30, 2015, 11:20:26 pm »
Интересная задачка.
Выкладываю своё решение. 8)
На разработку ушло часов 5. На экзамене конечно не успеть.
Буду ждать ваших отзывов и комментов.
Интересует ваше мнение.

rusmosav

  • Проверенный
  • ***
  • Сообщений: 137
Re: Задача 3.04
« Ответ #70 : Апрель 22, 2015, 06:18:02 pm »
Прощу оценить.
« Последнее редактирование: Апрель 23, 2015, 05:41:27 am от rusmosav »

Pamazillo

  • Новичок
  • *
  • Сообщений: 8
  • ФИО: Паша
Re: Задача 3.04
« Ответ #71 : Июль 28, 2015, 12:00:18 pm »
Много вариаций по поводу условия:
" Если сумма начисленных командировочных, оказывается меньше, чем сумма оклада,
 который мог бы быть начислен за дни командировки, тогда сотруднику начисляется доплата до
 оклада "
//
Не знаю может я пропустил и такое что-то уже есть, но на всякий случай оставлю свой вариант:
При проведении сначала ввожу только оклады (с алгоритмом учета изменений оклада в середине месяца и т.д.). Далее, смысл в том, что пока не введены никакие вытесняющие начисления, эти оклады можно рассчитать (например сделать это в транзакции, которую потом можно отменить) и таким образом получаем суммы окладов, как если бы сотр не был в командировке.
А тем временем, так же ввожу доп начисления "Доплата до оклада", который имеет в базовых начислениях оклад, а базовый период ставится как в командировке. После чего (пока у нас оклады рассчитаны без вытеснений), мы спокойно получаем расчетную базу Доплаты до оклада, в которой как раз и будет сумма оклада за этот период. И эту сумму сохраняю в реквизит Размер.
Далее делаем уже расчет всех ВР, и уже имея для доплаты в размере сумму "эталона" оклада можем её сравнить с рассчитанным результатом командировки (я делал запросом, в котором объединял суммы и в командировке ставил знак минус). Главное соблюсти последовательность расчетов.
//
Мне кажется вполне всё прилично. Критикуйте:)

venvlad

  • Пользователь
  • **
  • Сообщений: 83
Re: Задача 3.04
« Ответ #72 : Сентябрь 29, 2015, 06:18:50 pm »
Моё.

hakerxp

  • Новичок
  • *
  • Сообщений: 3
  • ФИО: Дмитрий
Re: Задача 3.04
« Ответ #73 : Сентябрь 30, 2015, 03:19:01 pm »
Привет всем! Мое решение с учетом замечаний. Особенности:
- Один план - Основные начисления (т.к. вид расчета "Вахта" должен иметь период действия для авторасчета по базе оклада. Галка "Период действия является базовым периодом" стоит).
- Учтено, если оклад менялся в период командировки.
- "Подразделение" должно быть реквизитом регистра (базу брать не нужно по подразделению по условию задачи).
« Последнее редактирование: Сентябрь 30, 2015, 03:32:14 pm от hakerxp »

pila86

  • Пользователь
  • **
  • Сообщений: 17
Re: Задача 3.04
« Ответ #74 : Январь 04, 2016, 05:22:27 pm »
Выкладываю свое решение.
У меня вахта - доп. начисление. Проценты для вахты - ресурс РС "СведенияОСотрудниках".
Учитывается изменение оклада при расчете командировке.
При записи начальных данных в регистры использую текст запроса
ВЫБРАТЬ
   НачислениеЗарплатыДополнительныеНачисления.Ссылка,
   НачислениеЗарплатыДополнительныеНачисления.НомерСтроки,
   НачислениеЗарплатыДополнительныеНачисления.Сотрудник,
   НачислениеЗарплатыДополнительныеНачисления.Подразделение,
   НачислениеЗарплатыДополнительныеНачисления.ВидРасчета,
   НачислениеЗарплатыДополнительныеНачисления.ДатаНачала,
   НачислениеЗарплатыДополнительныеНачисления.ДатаОкончания
ПОМЕСТИТЬ ВТДопНачисления
ИЗ
   Документ.НачислениеЗарплаты.ДополнительныеНачисления КАК НачислениеЗарплатыДополнительныеНачисления
ГДЕ
   НачислениеЗарплатыДополнительныеНачисления.Ссылка = &Ссылка
;

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

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

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

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

ОБЪЕДИНИТЬ

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

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

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

axel_work

  • Проверенный
  • ***
  • Сообщений: 161
  • ФИО: Алексей
Re: Задача 3.04
« Ответ #75 : Март 07, 2016, 12:18:58 pm »
Критикуем и обсуждаем.

Первый вариант - как у большинства.

Размер вытесненного оклада получаем расчетным путем по графику командировки. Косяки те же - если графики различаются - то неправильный расчет, если диапазоны перекрытия различаются (оклад например не до конца месяца начислен) - то неправильный расчет, ну и превышение оклада контролируется лишь для каждой командировки, а не в целом за месяц - что также при наличии 2-х и более командировок вызовет неправильный расчет.

Доплата и надбавка - в доп. начислениях.

axel_work

  • Проверенный
  • ***
  • Сообщений: 161
  • ФИО: Алексей
Re: Задача 3.04
« Ответ #76 : Март 07, 2016, 12:28:20 pm »
Второй вариант - как предлагал кто-то на 5-й странице форума.

Сначала пишем только оклад в РР и доплату с базовыми периодами, равными периодам командировки. Доплата есс-но зависит по базе от оклада. Считаем оклад, потом считаем доплаты. Получаем суммы оклада за периоды командировки.

Затем добавляем командировки. Заново считаем оклады и первый раз командировки. Затем считаем доплаты уже суммируя все командировки за месяц и все суммы доплат за месяц, получаем разность, и эту разность (если надо доплачивать до оклада) пишем в одну доплату, остальные удаляем.

Минус такой - два раза полная запись (с вытеснением) и в РР ОсновныеНачисления и в Доп. начисления. Ну и кодить больше и дольше немного :)

Плюс - правильный расчет (по суммам окладов) независимо от графиков оклада и командировки и от пересечения их периодов.

ЗЫ: Все не вкурю - получение рабочих дней как правильно? Такая же ерунда - что по графику командировки получаются (базовый период). Можно было бы сделать ресурс Дни и туда писать при расчете оклада период действия план, т.е. как раз рабочие дни. Но если оклад не начислять - то и рабочих дней не будет, тоже нехорошо, а кроме того, непонятно когда человек в командировке - рабочие дни у него по окладу надо считать для этого ресурса (Дни) или и по графику командировки тоже?

aevdovin

  • Пользователь
  • **
  • Сообщений: 21
  • aevdovin
  • ФИО: Вдовин Андрей Евгеньевич
Re: Задача 3.04
« Ответ #77 : Апрель 05, 2016, 10:13:00 pm »
Всем привет.

Делаюсь своим решением. Это моя 2-ая  самостоятельная задача по РР. После 3.35 это пошла легче, правда в некоторых местах ухитрялся как мог )) Например принуждаю пользователей вводить предполагаемую сумму оклада при расчете командировочных. Ведь в задаче есть очень интересное условие: "Если сумма начисленных командировочных, оказывается меньше, чем сумма оклада, который мог бы быть начислен за дни командировки, тогда сотруднику начисляется доплата до оклада"   - долго думал делать доп. вид расчета "ДоплатаДоОклада", но решил просто параллельно с командировкой считать возможный оклад за эти дни - и выбирать МАКС(Знач1, Знач2)...

Fat_Mike

  • Пользователь
  • **
  • Сообщений: 12
Re: Задача 3.04
« Ответ #78 : Май 20, 2016, 04:28:01 am »
Посмотрите ребята решение, делаю доплату прямо в коде, путем сравнения подсчитанного оклада и командировки. Надбавки считается базой от оклада как обычно, фишка в частично попадании в период действия базового расчета. Ставишь в расчете надбавке базовый период, равный длительности вахты и он берет базу от оклада равную длительности дежурства. Командировку вытесняет оклад,  базовые у него все виды расчета а тут фишка в базовом периоде, выставляем прошлый месяц и он берет все начисления за прошлый месяц. Естественно в запросе нужно просуммировать результаты базовых регистров и считать командировку в последнюю очередь, то есть зависимым последнего уровня.

alfalume

  • Проверенный
  • ***
  • Сообщений: 103
Re: Задача 3.04
« Ответ #79 : Июль 18, 2016, 07:40:37 am »
мое решение, покритикуйте

erdem.badluev

  • Проверенный
  • ***
  • Сообщений: 139
Re: Задача 3.04
« Ответ #80 : Октябрь 09, 2016, 01:00:59 pm »
 :D моё решение. всё просто.

Павел2С

  • Новичок
  • *
  • Сообщений: 2
Re: Задача 3.04
« Ответ #81 : Ноябрь 08, 2016, 11:38:20 am »
Решение с максимально прозрачным кодом, для понимания, где командировка сделана двумя начислениями. Одно по Основным начислениям, второе по дополнительным.

majestic

  • Новичок
  • *
  • Сообщений: 9
  • ФИО: Александр
Re: Задача 3.04
« Ответ #82 : Ноябрь 28, 2016, 05:09:36 pm »
Павел2С, посмотрел ваше решение. Я сам при решении данной задачи по-другому реализовал начисление надбавки за вахту, у меня данная надбавка имеет период действия, и рассчитывается от оклада за тот же период действия. Судя по всему я не так понял условие задачи. В варианте, когда в документе не указан оклад, но указана надбавка, выходит ошибка при проведении. Связана с тем, что при получении базы для надбавки выборка из запроса не содержит ни одной записи, у вас нет проверки выборки на наличие записей. И никак не выполнено условие задачи "в течение расчетного периода первоначальное значение оклада может быть один раз изменено". В вашей базе можно изменять оклад каждый день. А вообще после просмотра вашего решения нашел много собственных недочетов :) Спасибо.

p/s/ Если будет желание посмотреть ошибку, прикрепил базу, посмотрите документ №4
« Последнее редактирование: Ноябрь 28, 2016, 05:13:05 pm от majestic »

majestic

  • Новичок
  • *
  • Сообщений: 9
  • ФИО: Александр
Re: Задача 3.04
« Ответ #83 : Ноябрь 28, 2016, 05:24:42 pm »
Павел2С, а измененная форма списка документа "НачислениеЗарплаты" - это для удобства?

mxs89

  • Пользователь
  • **
  • Сообщений: 16
  • Нужно делать так, как нужно
  • ФИО: Макаров Максим
Re: Задача 3.04
« Ответ #84 : Октябрь 17, 2017, 02:28:55 pm »
Второй вариант - как предлагал кто-то на 5-й странице форума.

Сначала пишем только оклад в РР и доплату с базовыми периодами, равными периодам командировки. Доплата есс-но зависит по базе от оклада. Считаем оклад, потом считаем доплаты. Получаем суммы оклада за периоды командировки.

Затем добавляем командировки. Заново считаем оклады и первый раз командировки. Затем считаем доплаты уже суммируя все командировки за месяц и все суммы доплат за месяц, получаем разность, и эту разность (если надо доплачивать до оклада) пишем в одну доплату, остальные удаляем.

Минус такой - два раза полная запись (с вытеснением) и в РР ОсновныеНачисления и в Доп. начисления. Ну и кодить больше и дольше немного :)

Плюс - правильный расчет (по суммам окладов) независимо от графиков оклада и командировки и от пересечения их периодов.

ЗЫ: Все не вкурю - получение рабочих дней как правильно? Такая же ерунда - что по графику командировки получаются (базовый период). Можно было бы сделать ресурс Дни и туда писать при расчете оклада период действия план, т.е. как раз рабочие дни. Но если оклад не начислять - то и рабочих дней не будет, тоже нехорошо, а кроме того, непонятно когда человек в командировке - рабочие дни у него по окладу надо считать для этого ресурса (Дни) или и по графику командировки тоже?
как решения проверяете? создал новое начисление, заполнил график и начислил сотруднику оклад, убедился, что в основных начислениях он появился. далее начисляю второй строкой командировку. период тот же. что ожидаю, оклад в ноль, командировка в ноль, предыд. месяц пустой, и надбавка = окладу. что вижу - оклад 0 и командировка 0.

mxs89

  • Пользователь
  • **
  • Сообщений: 16
  • Нужно делать так, как нужно
  • ФИО: Макаров Максим
Re: Задача 3.04
« Ответ #85 : Октябрь 17, 2017, 02:33:49 pm »
первый вариант так же не работает.

alenka2296

  • Новичок
  • *
  • Сообщений: 4
Re: Задача 3.04
« Ответ #86 : Август 30, 2018, 11:46:20 am »
как правильно понять условие?

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

Вводить вид расчета Доплата в Дополнительные начисления и тогда в доке Начисление зарплаты получается всегда если есть командировка, надо начислять доплату, а там уже сумма доплаты либо 0, либо разница оклад-командировка?
Тогда надо и какую то проверку делать чтобы не было попыток начисления доплат без командировок? неудобно как то

В идеале если в доке начисляют командировку а программно если нужно создается доплата, но как тогда убрать Доплату из интерфейса совсем? чтоб вручную ее не могли начислить?

есть у кого-то пример на этот счет?

reset

  • Новичок
  • *
  • Сообщений: 4
Re: Задача 3.04
« Ответ #87 : Июнь 21, 2019, 12:03:45 am »

Как то все всё усложняют. Какие-то периоды делят ...  :o

В моём решении:
1. Изменение оклада пользователь фиксирует непосредственно в документе начисления (2 строки с окладом и разным периодом)
2. НедополученныйОклад - ресурс регистра основных начислений
При расчете оклада - заполняем его с "плюсом" (Результат по базовому периоду - Результат)
При расчете командировки - с "минусом" (просто -Результат)
При расчете Добавки - получаем базу по нему

Все условия задачи соблюдены. Можно вводить несколько командировок за один месяц (окладов кстати тоже).





molodchic

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: булатов владимир петрович
Re: Задача 3.04
« Ответ #88 : Июль 30, 2021, 02:59:12 pm »
Ребят из тех кто хорошо разбирается в расчетных механизмах, проверьте пжлста.
Кратко.
1. Разделил на два регистра Основные(Оклад,Командировка) и дополнительные начисления(НадбавкаЗаВахту).
2. Создал два регистра сведений для хранения промежуточных данных об окладе и проценте надбавки.
3. Основная трудность возникла в командировках.
  3.1. Решил добавить доп.реквизит в регистр основные начисления "Дубль".
  3.2. Привязал к каждой записи о командировках дубль с базовым периодом за период действия.
  3.2.1. Сначала производил запись окладов, так как оклад и командировка могли оказаться как в разных так и в одном периоде действия в одном документе.
  3.3. При получении базы (отдельно доп и осн базы) в существующую запись записываю расчетное значение, в дубль только расчет по базе(то значение оклада которое могло быб быть начислено).
  3.4. Сохраняю номера строк дублей в массив после обхода выборки сравниваю значение и тут уже на ваш вкус или создать доп запись с доплатой или заменить значение если оно не соответствует условию задачи.
  3.5. отчет не делал (не сложный)

  3.4.