Автор Тема: Билет 1. Спец по платформе V8  (Прочитано 267089 раз)

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

mahuaksk

  • Новичок
  • *
  • Сообщений: 4
  • ФИО: Addept
Re: Билет 1. Спец по платформе V8
« Ответ #480 : Апрель 26, 2017, 01:25:48 pm »
Посмотрел решения по СПР и практически все вычисляют стаж как

РазностьДат(ДатаПриема, БазовыйПериодНачало, Год) + НачальныйСтаж КАК Трудовой стаж

Но ведь если сотрудник к примеру Начальный стаж = 0, Дата Приема 01.12.2016, а базовый период 01.01.2017 то считается стаж как 1 год.
Хотя по факту стаж 1 месяц, т.е. из регистра должно браться 5% премии. Кто нибудь может продемонстрировать другое решение вычисления ТрудовогоСтажа в запросе?
А то я нагородил запрос где ищу разницу в месяцах и если оно меньше 12 то ставлю стаж 0 через выбор когда.

ahang

  • Пользователь
  • **
  • Сообщений: 31
  • ФИО: Антон
Re: Билет 1. Спец по платформе V8
« Ответ #481 : Апрель 26, 2017, 04:24:14 pm »
Посмотрел решения по СПР и практически все вычисляют стаж как

РазностьДат(ДатаПриема, БазовыйПериодНачало, Год) + НачальныйСтаж КАК Трудовой стаж

Но ведь если сотрудник к примеру Начальный стаж = 0, Дата Приема 01.12.2016, а базовый период 01.01.2017 то считается стаж как 1 год.
Хотя по факту стаж 1 месяц, т.е. из регистра должно браться 5% премии. Кто нибудь может продемонстрировать другое решение вычисления ТрудовогоСтажа в запросе?
А то я нагородил запрос где ищу разницу в месяцах и если оно меньше 12 то ставлю стаж 0 через выбор когда.

Я когда готовился к экзамену, построил расчет премии в зависимости от стажа так:
1. В справочнике "Сотрудники" добавил реквизит Стаж - стаж на момент принятия сотрудника на работу, и реквизит "Дата приема".
2. Регистр сведений "ШкалаСтажа" имеет измерение - СтажОт (число) и два ресурса: СтадДо (число) и Процент (число).
3. Код для расчета Премии:
...
...
ИначеЕсли ВидРасчета = ПланыВидовРасчета.ДополнительныеНачисления.Премия Тогда

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

Выборка = РезультатЗапроса.Выбрать();
Для Каждого Запись Из НаборЗаписей Цикл
Отбор = Новый Структура("НомерСтроки", Запись.НомерСтроки);
Выборка.Сбросить();
Если Выборка.НайтиСледующий(Отбор) Тогда
Запись.Результат = Выборка.РезультатБаза * Выборка.Процент / 100;
Запись.Стаж = Выборка.Стаж;
Запись.Процент = Выборка.Процент;
КонецЕсли;
КонецЦикла;

КонецЕсли;


mahuaksk

  • Новичок
  • *
  • Сообщений: 4
  • ФИО: Addept
Re: Билет 1. Спец по платформе V8
« Ответ #482 : Апрель 27, 2017, 11:44:51 am »
Спасибо, действительно нам ведь не нужно округлять стаж до целого  :D

Есть еще вопрос, считается ли это упрощением задачи, когда мы Измерение стаж разбиваем на два измерения "СтажОт" и "СтажДо", ведь это сильно упрощает запрос.
А с одним измерением в виде "Стаж" с запросом приходится думать...

JohnSilver

  • Пользователь
  • **
  • Сообщений: 39
Re: Билет 1. Спец по платформе V8
« Ответ #483 : Май 03, 2017, 09:03:59 pm »
Добрый день.
Уважаемые, если не затруднит посмотрите мое решение.
Решен только раздел расчета.

JohnSilver

  • Пользователь
  • **
  • Сообщений: 39
Re: Билет 1. Спец по платформе V8
« Ответ #484 : Май 03, 2017, 09:24:39 pm »
Поясните пожалуйста - в 4 разделе, где идет речь про бизнес-процессы. На карте маршрута словосочетание "Все кладовщики" отличается от "Любой бухгалтер"? Необходимо ли ставить какие то дополнительные галочки? Или для БП оба этих понятия идентичны?

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Re: Билет 1. Спец по платформе V8
« Ответ #485 : Май 03, 2017, 10:16:27 pm »
Поясните пожалуйста - в 4 разделе, где идет речь про бизнес-процессы. На карте маршрута словосочетание "Все кладовщики" отличается от "Любой бухгалтер"? Необходимо ли ставить какие то дополнительные галочки? Или для БП оба этих понятия идентичны?
Еще как отличается.  :)
Задачу должны выполнить все кладовщики (т.е. каждый), но только один (любой) бухгалтер.
В моем решении в свойствах точки действия кладовщиков стоит галка Групповая на закладке Адресация.
« Последнее редактирование: Май 03, 2017, 10:20:05 pm от alex1248 »

freemaestro

  • Пользователь
  • **
  • Сообщений: 79
  • ФИО: Сергей А.
Re: Билет 1. Спец по платформе V8
« Ответ #486 : Май 04, 2017, 12:02:26 am »
Добрый день.
Уважаемые, если не затруднит посмотрите мое решение.
Решен только раздел расчета.

Доброго времени суток, JohnSilver !

Хотел бы задать вопрос по решению.
Без "задней мысли", самому интересно.
Вот ты все расчеты делаешь через "Движения" регистров расчета.
А в других примерах решений я видел через "НаборЗаписей".
Как правильнее решать - через "Движения" или через "НаборЗаписей" ?

JohnSilver

  • Пользователь
  • **
  • Сообщений: 39
Re: Билет 1. Спец по платформе V8
« Ответ #487 : Май 04, 2017, 08:50:16 am »

Доброго времени суток, JohnSilver !

Хотел бы задать вопрос по решению.
Без "задней мысли", самому интересно.
Вот ты все расчеты делаешь через "Движения" регистров расчета.
А в других примерах решений я видел через "НаборЗаписей".
Как правильнее решать - через "Движения" или через "НаборЗаписей" ?

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

freemaestro

  • Пользователь
  • **
  • Сообщений: 79
  • ФИО: Сергей А.
Re: Билет 1. Спец по платформе V8
« Ответ #488 : Май 04, 2017, 11:26:35 am »
Доброго времени суток, JohnSilver !

Я тут подумал по этому вопросу...

Смотри, к примеру, для формирования сторно записей
нужно применить метод ПолучитьДополнение(),
а он есть только у НабораЗаписей, у Движений его нет.
Но к нашей задаче это не относится - тут не надо делать сторно-записи.

Наверняка ещё найдутся отличия.


freemaestro

  • Пользователь
  • **
  • Сообщений: 79
  • ФИО: Сергей А.
Re: Билет 1. Спец по платформе V8
« Ответ #489 : Май 04, 2017, 11:56:26 am »
Ребята, добрый день,кто подскажет по условию "В одном документе могут быть данные за разные
расчетные периоды" ?
Скажем, за март сотруднику оклад рассчитан.
Мы в апреле считаем оклад за апрель и сюда же,
в ТЧ, по условию задачи - можно "воткнуть" оклад
за март - частично или полностью.
По идее, оклад по предыдущему документу надо сторнировать.
Метод "ПолучитьДополнение" здесь не работает - оклад не может вытеснять
сам себя. Тут по-другому надо как-то.
В зарплатных решениях 1C это называется "исправление документа" -
в ТЧ нового документа "выкидываются" отсторнированные, "красные строки",
а ниже -новые.

Надо ли делать что-то в этом направлении или я сильно усложняю ?
« Последнее редактирование: Май 04, 2017, 02:55:45 pm от freemaestro »

JohnSilver

  • Пользователь
  • **
  • Сообщений: 39
Re: Билет 1. Спец по платформе V8
« Ответ #490 : Май 06, 2017, 04:38:50 pm »
Ребята, добрый день,кто подскажет по условию "В одном документе могут быть данные за разные
расчетные периоды" ?
Скажем, за март сотруднику оклад рассчитан.
Мы в апреле считаем оклад за апрель и сюда же,
в ТЧ, по условию задачи - можно "воткнуть" оклад
за март - частично или полностью.
По идее, оклад по предыдущему документу надо сторнировать.
Метод "ПолучитьДополнение" здесь не работает - оклад не может вытеснять
сам себя. Тут по-другому надо как-то.
В зарплатных решениях 1C это называется "исправление документа" -
в ТЧ нового документа "выкидываются" отсторнированные, "красные строки",
а ниже -новые.

Надо ли делать что-то в этом направлении или я сильно усложняю ?

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

freemaestro

  • Пользователь
  • **
  • Сообщений: 79
  • ФИО: Сергей А.
Re: Билет 1. Спец по платформе V8
« Ответ #491 : Май 06, 2017, 04:53:56 pm »
Ребята, добрый день,кто подскажет по условию "В одном документе могут быть данные за разные
расчетные периоды" ?
Скажем, за март сотруднику оклад рассчитан.
Мы в апреле считаем оклад за апрель и сюда же,
в ТЧ, по условию задачи - можно "воткнуть" оклад
за март - частично или полностью.
По идее, оклад по предыдущему документу надо сторнировать.
Метод "ПолучитьДополнение" здесь не работает - оклад не может вытеснять
сам себя. Тут по-другому надо как-то.
В зарплатных решениях 1C это называется "исправление документа" -
в ТЧ нового документа "выкидываются" отсторнированные, "красные строки",
а ниже -новые.

Надо ли делать что-то в этом направлении или я сильно усложняю ?

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

Доброго времени суток, JohnSilver !
Не совсем понял, что ты имеешь в виду под расчетом прошлого периода - сторнирование, перерасчеты или что-то другое? Перерасчеты в задаче использовать не надо. Сторнирование не проходит, т.к. оклад не может вытеснять сам себя. А просто расчет прошлого периода - это пожалуйста, можно период регистрации поставить текущий, а период действия оклада - прошлый месяц. И сотруднику будет рассчитано 2 оклада за прошлый месяц...

pyrkin_vanya

  • Пользователь
  • **
  • Сообщений: 81
  • ФИО: Иван
Re: Билет 1. Спец по платформе V8
« Ответ #492 : Май 09, 2017, 09:53:35 am »
Я когда готовился к экзамену, построил расчет премии в зависимости от стажа так:
1. В справочнике "Сотрудники" добавил реквизит Стаж - стаж на момент принятия сотрудника на работу, и реквизит "Дата приема".
2. Регистр сведений "ШкалаСтажа" имеет измерение - СтажОт (число) и два ресурса: СтадДо (число) и Процент (число).
3. Код для расчета Премии:
...
...
ИначеЕсли ВидРасчета = ПланыВидовРасчета.ДополнительныеНачисления.Премия Тогда

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

Выборка = РезультатЗапроса.Выбрать();
Для Каждого Запись Из НаборЗаписей Цикл
Отбор = Новый Структура("НомерСтроки", Запись.НомерСтроки);
Выборка.Сбросить();
Если Выборка.НайтиСледующий(Отбор) Тогда
Запись.Результат = Выборка.РезультатБаза * Выборка.Процент / 100;
Запись.Стаж = Выборка.Стаж;
Запись.Процент = Выборка.Процент;
КонецЕсли;
КонецЦикла;

КонецЕсли;
Добрый день. Увидел Ваше решение. Есть немного вопросов.
Цитировать
При решении задачи необходимо учитывать, что на момент начала ведения учета в информационной базе у сотрудника уже может быть стаж отличный от нуля.
Этот момент многие решают как в справочнике физ. лица создают реквизит "Стаж" типа число. Ну типо стаж в годах. Тут все понятно.
Про Дату Приема тоже все норм. Но...Стаж может быть 0, а может и не быть 0. А в вашем запросе и дата приема также должна быть обязательно заполнена. Вы какие то проверки делали на это?

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





pyrkin_vanya

  • Пользователь
  • **
  • Сообщений: 81
  • ФИО: Иван
Re: Билет 1. Спец по платформе V8
« Ответ #493 : Май 09, 2017, 09:56:37 am »
Цитировать
Считать, что все данные вводятся только в пределах одного месяца, например, можно указать начисление оклада с 10.01 по 31.01, а запись оклад: с 10.01 по 03.02 вводить нельзя.
Ни в одном из решений не увидел проверки на это. Это вообще надо делать? Или не обязательно? Будь я преподом, то в бутылку бы полез, раз уж четкое условие в задаче есть.))))

pyrkin_vanya

  • Пользователь
  • **
  • Сообщений: 81
  • ФИО: Иван
Re: Билет 1. Спец по платформе V8
« Ответ #494 : Май 09, 2017, 10:59:39 am »
Цитировать
Каждый сотрудник может работать одновременно только в одном подразделении компании, то есть совместительство не допускается.
Тут понятно, что измерение "Подразделение" должно отсутствовать. В регистре сведений "СведенияОСотрудниках" такое измерение есть сразу в каркасной. Можно ли его удалить? Или может есть какие-то подводные камни, типа нельзя удалять ничего из каркасной?