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

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

ZZZZ

  • Новичок
  • *
  • Сообщений: 3
Re: Задача 3.03
« Ответ #75 : Июль 09, 2015, 05:20:51 pm »
В билетах можно найти такое условие
Каждый сотрудник может работать одновременно в нескольких подразделениях компании, то есть совместительство допускается.
Или
Каждый сотрудник может работать одновременно только в одном подразделении компании, то есть совместительство не допускается.
Вот как это условие влияет на логику решения????

nuraliev

  • Новичок
  • *
  • Сообщений: 8
Re: Задача 3.03
« Ответ #76 : Июль 09, 2015, 10:15:02 pm »
Наверное влияет на использование измерения подразделение в регистре расчета


ZZZZ

  • Новичок
  • *
  • Сообщений: 3
Re: Задача 3.03
« Ответ #77 : Июль 09, 2015, 10:22:35 pm »
Наверное влияет на использование измерения подразделение в регистре расчета
Да так и есть, уже разобрался, когда совместительство то нужно добавить измерение "Подразделение" иначе, когда совместительство не допускается, то не нужно, ну или если нужно в отчете вывести, то можно добавить реквизит "Подразделение".

ComradeKite

  • Проверенный
  • ***
  • Сообщений: 137
Re: Задача 3.03
« Ответ #78 : Июль 14, 2015, 06:32:53 pm »
Прошу прокомментировать мое решение

Привет,
добавил белдыева с другим отделом и другой должностью на период 01012015 - 01092015.
Отчет сразу перекосило.

Мое решение

« Последнее редактирование: Июль 15, 2015, 07:39:38 am от ComradeKite »

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Re: Задача 3.03
« Ответ #79 : Июль 22, 2015, 09:34:43 pm »
Смотрел только расчет стажа и начисление премии.
Прощу оценить.
Тем, у кого стаж от 1 до 365 дней, премия начисляется в размере 15% (неточность в коде).
На мой взгляд, при таком учете данных о сотрудниках высока вероятность, что не будет соблюдено вот это условие: "на момент начала ведения учета в информационной базе у сотрудника уже может быть стаж отличный от нуля".

Мой вариант решения. Буду рад любым комментариям.
Тоже по поводу стажа. Думаю, вариант с регулярным его вводом кадровиком/расчетчиком - не самый оптимальный.

Я предполагаю для учета стажа в соответствии с условиями задачи добавить в справочник сотрудников реквизит "Дата приема на работу". Как насчет такого варианта?


PS. Еще кое-что добавлю.
В обоих решениях при выборке окладов используется дата регистрации. Думаю, надо брать начало месяца периода действия, тем более, что формально (хотя в этой задаче не указано) периоды действия могут различаться для разных записей (в аналогичной этой задаче 01-СПР из "Актуальных билетов" конкретно указано, что "В одном документе могут быть данные за разные расчетные периоды").
« Последнее редактирование: Июль 23, 2015, 12:51:13 pm от alex1248 »

tatyana_fiesta

  • Пользователь
  • **
  • Сообщений: 39
Re: Задача 3.03
« Ответ #80 : Июль 24, 2015, 03:19:44 pm »
Несколько заморочек у меня в этой задаче из-за условия :"в одном документе могут быть данные за разные расчетные периоды"
Многие здесь решения без этого условия =(((

Пример,
Мой документ с ПериодомРегистрации = 01.03.15
Имеет поля:
ОсновныеНачисления:
Сотрудник Оклад 01.02.15 - 20.02.15
Сотрудник Оклад 01.03.15 - 15.03.15
ДопНачисления:
Сотрудник Премия 01.02.15 - 28.02.15
Сотрудник Премия 01.03.15 - 31.03.15

Первое! Как установить ДатуСреза(Период) у регистра "СведенияОСотрудникахСрезПоследних" равным ПериодуДействия, чтобы получить Оклад?
Второе! Премия не берет Базу за Февраль, а плюсует Февраль и Март
ВЫБРАТЬ
   ДополнительныеНачисленияБазаОсновныеНачисления.НомерСтроки,
   ДополнительныеНачисленияБазаОсновныеНачисления.Сотрудник,
   ДополнительныеНачисленияБазаОсновныеНачисления.ВидРасчета,
   ДополнительныеНачисленияБазаОсновныеНачисления.РезультатБаза
ИЗ
   РегистрРасчета.ДополнительныеНачисления.БазаОсновныеНачисления(&Измерения, &Измерения, , Регистратор = &Ссылка) КАК ДополнительныеНачисленияБазаОсновныеНачисления

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Re: Задача 3.03
« Ответ #81 : Июль 24, 2015, 06:01:59 pm »
Как установить ДатуСреза(Период) у регистра "СведенияОСотрудникахСрезПоследних" равным ПериодуДействия, чтобы получить Оклад?
Я брал данные не из вирт таблицы, а из самого регистра сведений: по каждому сотруднику в ТЧ документа выбираю записи с периодом, меньшим начала периода действия, а затем из них выбираю максимальный период. Далее по этому периоду просто беру нужную запись в РС.
Премия не берет Базу за Февраль, а плюсует Февраль и Март
А тут всё зависит от настроек ПВР - "зависимость от базы". Видимо, у вас выбрана зависимость по периоду регистрации.

tatyana_fiesta

  • Пользователь
  • **
  • Сообщений: 39
Re: Задача 3.03
« Ответ #82 : Июль 27, 2015, 10:13:35 am »
Как установить ДатуСреза(Период) у регистра "СведенияОСотрудникахСрезПоследних" равным ПериодуДействия, чтобы получить Оклад?
Я брал данные не из вирт таблицы, а из самого регистра сведений: по каждому сотруднику в ТЧ документа выбираю записи с периодом, меньшим начала периода действия, а затем из них выбираю максимальный период. Далее по этому периоду просто беру нужную запись в РС.
Помогите додумать ;) Не получается адекватно получить Оклад, запрос ниже:
ВЫБРАТЬ
   ОсновныеНачисленияДанныеГрафика.НомерСтроки,
   ОсновныеНачисленияДанныеГрафика.ЗначениеПериодДействия КАК Норма,
   ОсновныеНачисленияДанныеГрафика.ЗначениеФактическийПериодДействия КАК Факт,
   ОсновныеНачисленияДанныеГрафика.Сотрудник,
   ОсновныеНачисленияДанныеГрафика.ПериодДействия
ПОМЕСТИТЬ Док_ТЧ
ИЗ
   РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(Регистратор = &Ссылка) КАК ОсновныеНачисленияДанныеГрафика
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Док_ТЧ.НомерСтроки,
   МАКСИМУМ(СведенияОСотрудниках.Период) КАК Период,
   Док_ТЧ.Норма,
   Док_ТЧ.Факт,
   СведенияОСотрудниках.Оклад
ИЗ
   Док_ТЧ КАК Док_ТЧ
      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОСотрудниках КАК СведенияОСотрудниках
      ПО Док_ТЧ.Сотрудник = СведенияОСотрудниках.Сотрудник
         И Док_ТЧ.ПериодДействия >= СведенияОСотрудниках.Период

СГРУППИРОВАТЬ ПО
   Док_ТЧ.НомерСтроки,
   Док_ТЧ.Норма,
   Док_ТЧ.Факт,
   СведенияОСотрудниках.Оклад


tatyana_fiesta

  • Пользователь
  • **
  • Сообщений: 39
Re: Задача 3.03
« Ответ #83 : Июль 27, 2015, 10:15:14 am »
Премия не берет Базу за Февраль, а плюсует Февраль и Март
А тут всё зависит от настроек ПВР - "зависимость от базы". Видимо, у вас выбрана зависимость по периоду регистрации.
Проверила ещё раз: зависимость от базы точно по по периоду действия
Сработало, когда установила ПериодДействия у ДопНачислений =) вот только насколько это правильно?!  ???
« Последнее редактирование: Июль 27, 2015, 01:25:35 pm от tatyana_fiesta »

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Re: Задача 3.03
« Ответ #84 : Июль 27, 2015, 11:08:44 pm »
Сработало, когда установила ПериодДействия у ДопНачислений =) вот только насколько это правильно?!  ???
Наверное, всё-таки еще какая-то проблема есть.

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Re: Задача 3.03
« Ответ #85 : Июль 27, 2015, 11:28:54 pm »
Помогите додумать ;) Не получается адекватно получить Оклад, запрос ниже:
Думаю, вместо ПериодДействия следует использовать ПериодДействияНачало (нам же начальный оклад нужен на начало фактического периода, а не расчетного).
А оклад я получал следующим запросом в пакете по уже определенной дате.
И еще, до получения окладов надо к начальному добавить возможные следующие даты изменения оклада в периоде.
« Последнее редактирование: Июль 27, 2015, 11:30:30 pm от alex1248 »

tatyana_fiesta

  • Пользователь
  • **
  • Сообщений: 39
Re: Задача 3.03
« Ответ #86 : Июль 28, 2015, 03:39:16 pm »
Итого! Оклад на ДатуНачалаПериодаДействия удалось получить с помощью простого метода РегистрСведенийМенеджер,
его мне подсказал HRom в другой теме:
А почему обязательно надо запросом? Почему не воспользоваться методами объекта РегистрСведенийМенеджер?
Т.е. в модуле "Начисление з/п" сразу получаем Оклад, исходя из Табличной части:
Движение.Размер = Регистрысведений.СведенияОСотрудниках.ПолучитьПоследнее(ТекСтрокаОсновныеНачисления.ДатаНачала, новый структура("Сотрудник",ТекСтрокаОсновныеНачисления.Сотрудник)).Оклад;

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Re: Задача 3.03
« Ответ #87 : Июль 28, 2015, 05:46:22 pm »
исходя из Табличной части:
Движение.Размер = Регистрысведений.СведенияОСотрудниках.ПолучитьПоследнее(ТекСтрокаОсновныеНачисления.ДатаНачала, новый структура("Сотрудник",ТекСтрокаОсновныеНачисления.Сотрудник)).Оклад;
Я могу ошибаться, но мне кажется, что получается запрос (неявный) в цикле.
« Последнее редактирование: Июль 28, 2015, 06:10:49 pm от alex1248 »

tatyana_fiesta

  • Пользователь
  • **
  • Сообщений: 39
Re: Задача 3.03
« Ответ #88 : Июль 29, 2015, 08:53:30 am »
исходя из Табличной части:
Движение.Размер = Регистрысведений.СведенияОСотрудниках.ПолучитьПоследнее(ТекСтрокаОсновныеНачисления.ДатаНачала, новый структура("Сотрудник",ТекСтрокаОсновныеНачисления.Сотрудник)).Оклад;
Я могу ошибаться, но мне кажется, что получается запрос (неявный) в цикле.
А как всё таки лучше?  ;)

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Re: Задача 3.03
« Ответ #89 : Июль 29, 2015, 09:20:30 am »
исходя из Табличной части:
Движение.Размер = Регистрысведений.СведенияОСотрудниках.ПолучитьПоследнее(ТекСтрокаОсновныеНачисления.ДатаНачала, новый структура("Сотрудник",ТекСтрокаОсновныеНачисления.Сотрудник)).Оклад;
Я могу ошибаться, но мне кажется, что получается запрос (неявный) в цикле.
А как всё таки лучше?  ;)
Лучше без запроса (любого) в цикле. Вы же сами, вроде бы, писали,что у вас  было такое замечание.
А по поводу неявных где-то недавно прочитал, что аналогичное замечание сделали на экзамене за то, что при отборе только товаров из табличной части, содержащей товары и услуги, делали в цикле проверку Если Не Номенклатура.Услуга Тогда...
Так что если цикл неизбежен, и надо обратиться к базе, ИМХО, только запрос (явный или неявный) перед циклом, оптимально - один.
« Последнее редактирование: Июль 29, 2015, 10:40:41 am от alex1248 »