Аттестация "1С:Специалист" > Аттестация "1С:Специалист" ЗУП
ЗУП 3.0 Программист Билет 1 ПОЕХАЛИ!!!
demos:
Цитата tank-kras ()а зачем нам сумма процентов? нам нужен процент на каждый день (или период с одинаковым условием) умноженный на количество отработанных дней в этом условие и умноженный на тарифную ставку, если на следующий день условие поменялось, то и процент для этих отработанных дней тоже поменялся. в условии задачи: "Размер доплаты в % от дневной тарифной ставки", получается дневная тарифная ставка - постоянная, проценты - разные. находим сумма процентов и умножаем на тарифную ставку, получим доплату за месяц.
Цитата tank-kras ()а где идет умножение на отработанные часы? в виртуальной таблице:
Код|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТРабочееВремяПоДнямПоВидам.ИдентификаторСтроки КАК ИдентификаторСтроки,
| СУММА(ВЫБОР
| КОГДА _УсловиСреды.Условие = 0
| ТОГДА 30 * ВТРабочееВремяПоДнямПоВидам.Часов
| КОГДА _УсловиСреды.Условие = 1
| ТОГДА 40 * ВТРабочееВремяПоДнямПоВидам.Часов
| КОГДА _УсловиСреды.Условие = 2
| ТОГДА 50 * ВТРабочееВремяПоДнямПоВидам.Часов
| ИНАЧЕ 0
| КОНЕЦ) КАК СуммаПроцентовЗаСложность
|ПОМЕСТИТЬ ВТЗаСложность
|ИЗ
| ВТРабочееВремяПоДнямПоВидам КАК ВТРабочееВремяПоДнямПоВидам
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений._УсловиСреды КАК _УсловиСреды
| ПО ВТРабочееВремяПоДнямПоВидам.Дата = _УсловиСреды.Период
|ГДЕ
| ВТРабочееВремяПоДнямПоВидам.ВидРасчета = &ВидРасчетаЗаСложность
| И ВТРабочееВремяПоДнямПоВидам.ВидУчетаВремени = &ВидВремениЗаСложность
|
|СГРУППИРОВАТЬ ПО
| ВТРабочееВремяПоДнямПоВидам.ИдентификаторСтроки
|;
Цитата tank-kras ()Скажите, пожалуйста, сколько у вас получается строк для начисления "ЗаРаботуВОсобыхУсловиях"? Судя по тому, что в РС ПлановыеНачисления идет одна запись, то получается одна строка? В РС Плановые начисления идет одна строка на полный месяц. Для начисления "ЗаРаботуВОсобыхУсловиях" тоже идет одна строка. Причем если в месяце сменилась должность или разряд, то идет две и больше строк.
И еще получается документ "ФактическиеУсловияТруда" должен идти после документа
"ГрафикРабот_В_ОсобыхУсловиях" ? Но ведь в задании расплывчатые условия "25 числа каждого месяца" и "в
конце каждого месяца" поэтому не факт, что один будет идти за другим
Цитата tank-kras ()demos, у вас есть еще решенные билеты, хотелось бы свериться с альтернативным взглядом? я решил пока 3, остальные 3 решу в эти выходные. Сдаю экзамен 10.10.2014нет пока нету, буду рад увидеть хоть какие то чужие решения
P.S. На экзамене наверно будут не эти задачи, а 10 задач из 2.5, немного измененных...
nasurdinov:
--- Цитата: demos;36439 ---Алгоритм решения:
--- Конец цитаты ---
В целом согласен, особенно по суммированию процентов, по сути ведь тарифная ставка одинаковая, а нас нужно знать только общую сумму за месяц.
Смущает такой момент
--- Цитата: demos;36439 ---3. Создаем документ - "ГрафикРаботыВОсобыхУсловиях", который будет писать в РС - ПлановыеНачисления (с указанием действуетДО как конец месяца, чтобы начисление появлялось, в начислении зарплаты) и в РН - РабочееВремяСотрудников пишем Явку и РаботаВОсобыхУсловиях причем исключаем выходные через ВыборкаДанныхОВремени = Документы.ИндивидуальныйГрафик.ДанныеОВремениСотрудников(ЭтотОбъект);
--- Конец цитаты ---
Получается, что если после ввода документа изменился график сотрудника, то нужно перепроводить? Может просто при расчете соединять РС с фактическим периодом работы?
Добавлено (08.10.2014, 08:02)
---------------------------------------------
Немного ошибся. Но проблема остается.
Стал делать по аналогии с решением demos, но сначала получаю во временной таблице процент надбавки на каждый день, а потом пытаюсь соединить эту таблицу с фактическим периодом действия. Но ничего не выходит.
А дело в том, что если при проведении документ ГрафикРаботыВОсобыхУсловиях писать в РН РабочееВремяСотрудников или РС ГрафикиРаботПоВидамВремени, то система считает, что это индивидуальный график сотрудника. В первом случае она за те дни, что мы указали, не считает оплату по тарифу (т.к. там стоит 0), во втором при проведении документа НачислениеЗарплаты индивидуальные графики не пишутся в тот же регистр сведений и тогда оплата по тарифу не считается совсем (т.к. тоже указывается 0 часов).
И мы не может сразу писать туда часы, т.к. не знаем заранее. Более того, в обоих случаях пользователь не может ввести индивидуальный график для сотрудника.
Я застрял на этом месте. Может, я чего-то не понимаю?
demos:
переделал 1-ый билет, сделал, просто 3 начисления: Оплата за работу в особых условиях 0-1-2, с формулой: ТарифнаяСтавкаЧасовая * ОтработаноЧасовВПределахНормыВремени * 30 / 100, где 30,40,50 соответственно в каждом начислении. Зависят каждый от своего времени, "Только если введен вид учета времени".
Документ ГрафикРаботыВОсобыхУсловиях будет писать в РН - РаботаВОсобыхУсловиях (изм: Сотрудник, ресурс: Дней, Периодичность: День)
КодПроцедура ОбработкаПроведения(Отказ, Режим)
// регистр РаботаВОсобыхУсловиях
Движения.РаботаВОсобыхУсловиях.Записывать = Истина;
Для Каждого ТС Из ТаблицаПериодов Цикл
Счетчик = ТС.ДатаНачала;
Пока Счетчик <= ТС.ДатаОкончания Цикл
Движение = Движения.РаботаВОсобыхУсловиях.Добавить();
Движение.Период = Счетчик;
Движение.Сотрудник = ТС.Сотрудник;
Движение.Дней = 1;
Счетчик = Счетчик + 24*60*60;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Документ ВводПоказанийУсловийСреды создается в конце месяца, берет данные из графика работы и пишет в РН РабочееВремяСотрудников (как Табель).
Реквизиты: ДатаНачалаПериода, ДатаОкончанияПериода, ИсправленныйДокумент, Подразделение, Организация, ПериодРегистрации, скопированы с документа - Табель
ТабличнаяЧасть - ТаблицаУсловий: Дата, Условие
ФормаДокумента:
Код&НаКлиенте
Процедура ЗагрузитьИзФайла(Команда)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
Если ДиалогОткрытияФайла.Выбрать() Тогда
Объект.ТаблицаУсловий.Очистить();
ТекстФайла = Новый ТекстовыйДокумент;
ТекстФайла.Прочитать( ДиалогОткрытияФайла.ВыбранныеФайлы[0] );
ТекстФайла = ТекстФайла.ПолучитьТекст();
Для Счетчик = 1 По СтрЧислоСтрок( ТекстФайла ) Цикл
ТекСтрока = СтрПолучитьСтроку( ТекстФайла, Счетчик );
ТекДень = Сред( ТекСтрока, 1, 2 );
ТекМесяц = Сред( ТекСтрока, 4, 2 );
ТекГод = Сред( ТекСтрока, 7, 4 );
Условие = Сред( ТекСтрока, 12, 1 );
Строка = Объект.ТаблицаУсловий.Добавить();
Строка.Дата = Дата( ТекГод + ТекМесяц + ТекДень );
Строка.Условие = Условие;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
МодульОбъекта:
КодФункция ТаблицаДанныхОВремени()
ТаблицаДанныхОВремени = Новый ТаблицаЗначений;
ТаблицаДанныхОВремени.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
ТаблицаДанныхОВремени.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
ТаблицаДанныхОВремени.Колонки.Добавить("ВидВремени", Новый ОписаниеТипов("СправочникСсылка.ВидыИспользованияРабочегоВремени"));
ТаблицаДанныхОВремени.Колонки.Добавить("Дней", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОВремени.Колонки.Добавить("Часов", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОВремени.Колонки.Добавить("ВЦеломЗаПериод", Новый ОписаниеТипов("Булево"));
Возврат ТаблицаДанныхОВремени;
КонецФункции
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ЗначенияПоУмолчанию = Новый Структура("Организация");
ЗарплатаКадры.ПолучитьЗначенияПоУмолчанию(ЗначенияПоУмолчанию, НачалоМесяца(Дата) );
ПериодРегистрации = Дата;
ДатаНачалаПериода = НачалоМесяца(Дата);
ДатаОкончанияПериода = КонецМесяца(Дата);
Организация = ЗначенияПоУмолчанию.Организация;
ВыборкаДанныхОВремени = Документы.ТабельУчетаРабочегоВремени.ДанныеОВремениСотрудников(ЭтотОбъект);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВводПоказанийУсловийСредыТаблицаУсловий.Дата КАК Дата,
| ВводПоказанийУсловийСредыТаблицаУсловий.Условие
|ПОМЕСТИТЬ ВТУсловияСреды
|ИЗ
| Документ.ВводПоказанийУсловийСреды.ТаблицаУсловий КАК ВводПоказанийУсловийСредыТаблицаУсловий
|ГДЕ
| ВводПоказанийУсловийСредыТаблицаУсловий.Ссылка = &Ссылка
|
|ИНДЕКСИРОВАТЬ ПО
| Дата
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДанныеТабеля.Сотрудник,
| ДанныеТабеля.Дата КАК Дата,
| ДанныеТабеля.ВидУчетаВремени,
| ДанныеТабеля.Дни,
| ДанныеТабеля.Часы
|ПОМЕСТИТЬ ВТДанныеТабеля
|ИЗ
| &ДанныеТабеля КАК ДанныеТабеля
|ГДЕ
| ДанныеТабеля.ВидУчетаВремени = &ВидУчетаВремениЯвка
|
|ИНДЕКСИРОВАТЬ ПО
| Дата
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТДанныеТабеля.Дата,
| ВТДанныеТабеля.Сотрудник,
| ВТДанныеТабеля.Дни КАК Дней,
| ВТДанныеТабеля.Часы КАК Часов,
| ЕСТЬNULL(ВТУсловияСреды.Условие, 0) КАК Условие
|ИЗ
| ВТДанныеТабеля КАК ВТДанныеТабеля
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТУсловияСреды КАК ВТУсловияСреды
| ПО ВТДанныеТабеля.Дата = ВТУсловияСреды.Дата
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.РаботаВОсобыхУсловиях.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК РаботаВОсобыхУсловияхОбороты
| ПО ВТДанныеТабеля.Дата = РаботаВОсобыхУсловияхОбороты.Период
| И ВТДанныеТабеля.Сотрудник = РаботаВОсобыхУсловияхОбороты.Сотрудник";
Запрос.УстановитьПараметр("ВидУчетаВремениЯвка", ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.Явка") );
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("ДанныеТабеля", ВыборкаДанныхОВремени.Владелец().Выгрузить() );
Запрос.УстановитьПараметр("НачалоПериода", ДатаНачалаПериода);
Запрос.УстановитьПараметр("КонецПериода", ДатаОкончанияПериода);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
ДанныеДляПроведения = ТаблицаДанныхОВремени();
Пока Выборка.Следующий() Цикл
ЗаписьТаблицы = ДанныеДляПроведения.Добавить();
ЗаписьТаблицы.Дата = Выборка.Дата;
ЗаписьТаблицы.Сотрудник = Выборка.Сотрудник;
ЗаписьТаблицы.Дней = Выборка.Дней;
ЗаписьТаблицы.Часов = Выборка.Часов;
ЗаписьТаблицы.ВЦеломЗаПериод = ЛОЖЬ;
Если Выборка.Условие = 0 Тогда
ЗаписьТаблицы.ВидВремени = Справочники.ВидыИспользованияРабочегоВремени.НайтиПоРеквизиту("БуквенныйКод", "РО0");
ИначеЕсли Выборка.Условие = 1 Тогда
ЗаписьТаблицы.ВидВремени = Справочники.ВидыИспользованияРабочегоВремени.НайтиПоРеквизиту("БуквенныйКод", "РО1");
Иначе
ЗаписьТаблицы.ВидВремени = Справочники.ВидыИспользованияРабочегоВремени.НайтиПоРеквизиту("БуквенныйКод", "РО2");
КонецЕсли;
ЗаписьТаблицы = ДанныеДляПроведения.Добавить();
ЗаписьТаблицы.Дата = Выборка.Дата;
ЗаписьТаблицы.Сотрудник = Выборка.Сотрудник;
ЗаписьТаблицы.Дней = Выборка.Дней;
ЗаписьТаблицы.Часов = Выборка.Часов;
ЗаписьТаблицы.ВЦеломЗаПериод = ЛОЖЬ;
ЗаписьТаблицы.ВидВремени = ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.Явка");
КонецЦикла;
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
УчетРабочегоВремени.ЗарегистрироватьДанныеТабеля(Движения, ДанныеДляПроведения);
КонецПроцедурыДобавлено (10.10.2014, 22:36)
---------------------------------------------
Отчет:
КодВЫБРАТЬ РАЗРЕШЕННЫЕ
НачисленияДанныеГрафика.ПериодДействия КАК Период,
НачисленияДанныеГрафика.Сотрудник КАК Сотрудник,
СУММА(НачисленияДанныеГрафика.ДополнительноеЗначениеФактическийПериодДействия) КАК ФактическиОтработаноДнейВОсобыхУсловиях,
СУММА(НачисленияДанныеГрафика.Результат) КАК НачисленоДоплаты
ПОМЕСТИТЬ ВТВсеНачисления
ИЗ
РегистрРасчета.Начисления.ДанныеГрафика(
ВидРасчета В (&ВидРасчета0, &ВидРасчета1, &ВидРасчета2)
И (ПериодДействия МЕЖДУ &НачалоПериода И &КонецПериода)) КАК НачисленияДанныеГрафика
ГДЕ
НачисленияДанныеГрафика.Активность = ИСТИНА
И НачисленияДанныеГрафика.Сторно = ЛОЖЬ
СГРУППИРОВАТЬ ПО
НачисленияДанныеГрафика.ПериодДействия,
НачисленияДанныеГрафика.Сотрудник
ИНДЕКСИРОВАТЬ ПО
Сотрудник
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТВсеНачисления.Период,
ВТВсеНачисления.Сотрудник
ПОМЕСТИТЬ ВТСотрудники
ИЗ
ВТВсеНачисления КАК ВТВсеНачисления
СГРУППИРОВАТЬ ПО
ВТВсеНачисления.Сотрудник,
ВТВсеНачисления.Период
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник,
ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность,
ВТСотрудники.Период
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников
ИЗ
ВТСотрудники КАК ВТСотрудники
ГДЕ
"ТолькоРазрешенные" = ИСТИНА
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТВсеНачисления.Период,
Представления_КадровыеДанныеСотрудников.Должность,
ВТВсеНачисления.Сотрудник,
ЕСТЬNULL(РаботаВОсобыхУсловияхОбороты.ДнейОборот, 0) КАК ЗапланированоДнейРаботВОсобыхУсловиях,
ВТВсеНачисления.ФактическиОтработаноДнейВОсобыхУсловиях,
ВТВсеНачисления.НачисленоДоплаты,
ВЫБОР
КОГДА ЕСТЬNULL(ВТВсеНачисления.ФактическиОтработаноДнейВОсобыхУсловиях, 0) = 0
ТОГДА 0
ИНАЧЕ ЕСТЬNULL(ВТВсеНачисления.НачисленоДоплаты, 0) / ВТВсеНачисления.ФактическиОтработаноДнейВОсобыхУсловиях
КОНЕЦ КАК СреднийРазмерДоплатыЗаОдинДеньРаботы
ИЗ
РегистрНакопления.РаботаВОсобыхУсловиях.Обороты(
&НачалоПериода,
&КонецПериода,
Месяц,
Сотрудник В
(ВЫБРАТЬ
ВТВсеНачисления.Сотрудник
ИЗ
ВТВсеНачисления КАК ВТВсеНачисления)) КАК РаботаВОсобыхУсловияхОбороты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТВсеНачисления КАК ВТВсеНачисления
ПО РаботаВОсобыхУсловияхОбороты.Период = ВТВсеНачисления.Период
И РаботаВОсобыхУсловияхОбороты.Сотрудник = ВТВсеНачисления.Сотрудник
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Представления_КадровыеДанныеСотрудников КАК Представления_КадровыеДанныеСотрудников
ПО РаботаВОсобыхУсловияхОбороты.Сотрудник = Представления_КадровыеДанныеСотрудников.Сотрудник
И РаботаВОсобыхУсловияхОбороты.Период = Представления_КадровыеДанныеСотрудников.Период
tank-kras:
3 вида расчета не самое лучшее решение. Сегодня сдал экзамен, билет был смесь первого со вторым, причем шкала процента состояла из пяти диапазонов. На экзамене надо по максимуму использовать типовые регистры(поставили оценку 4 как-раз из-за использования своего РС, надо было использовать типовой "ЗначенияПериодическихПоказателейРасчетаЗарплатыОрганизаций"). Все загрузки делать в документ ДанныеДляРасчетаЗарплаты, предварительно настроить "Шаблоны ввода исходных данных". На экзамене попалась косячный релиз, не смог создать шаблон для ввода средней температуры по дням по организации. Создал свой документ, показал преподу, что типовой механизм не работает.
В отчете фактические отработанные дни(часы), если есть возможность надо получать из реальной таблицы, а не из ДанныеГрафика()
Консоль запросов (отчетов) на ИТС почему-то не работала, пришлось запросы отлаживать через запуск предприятия, что сильно уменьшает время. Еще была клавиатура неудобная, и комп глючил))
demos:
tank-kras, Действительно, можно было обойтись 1 начислением, 1 видом времени.
1. ГрафикРаботыВОсобыхУсловиях 25 числа пишет в РН Рабочее время сотрудников как Индивидуальный График, время явка и время в особых условиях
2. ВводПоказанийУсловийСреды пишет в конце месяца, как табель, тоже явку и работу в особых условиях, и также пишет в РН ЗначенияОперативныхПоказателейРасчетаЗарплатыСотрудников значения вычисленных процентов, на каждую дату
3. А формула расчета начисления: Дневной тариф * суммупроцентов
Навигация
Перейти к полной версии