Ваша реклама могла бы быть тут...

Автор Тема: ЗУП 3.0 Программист Билет 1 ПОЕХАЛИ!!!  (Прочитано 40296 раз)

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

Tex

  • Пользователь
  • **
  • Сообщений: 11
  • ФИО: Андрей
ЗУП 3.0 Программист Билет 1 ПОЕХАЛИ!!!
« : Август 12, 2014, 01:12:02 pm »
Итак, всем здравствуйте.
 До ввода зупа 3.0 на экзамен осталось пару недель, потому готовиться на 2.5 смысла уже нет, а потому начинаем штудировать 3.0. Будем так сказать первопроходцами.
 Что мы имеем: решенных задач нет, методичек нет, лекций нет. Есть только 6 вопросов с официального сайта и то только со вторыми заданиями. За неимением лучшего будем прорешивать их.

 Первым делом устанавливаем зуп 3.0 и офигиваем(раньше только на 2.5 работал). Все ново, поначалу даже часовую тарифную ставку не нашел. Покапавшись, включил почасовую оплату в настройках - вуаля, появилось. Вообще теперь можно не включать неиспользуемые механизмы и они не будут зря маячить перед глазами.
 Далее, чтобы появились разряды, включаем штатное расписание. Теперь не надо дублировать должности для разрядников. На экзамене наверно кол за это могут отнять.
 Первым делом создаю регистр сведений УсловияСреды с одним лишь ресурсом УсловияСреды. Далее прям на форме списка задаю кнопку для заполнение последнего из файла. На клиенте открываю диалог выбора окна, читаю тхт и бац, таблицы значений запретили на клиенте. Значит писать будем в соответствие. Дату в ключ, условие в значение. Преобразование строк думаю ни у кого трудностей не составит. Далее кидаю это соответствие в функцию на сервере и заношу его содержимое в свой регистр.
 Вот результат: http://pikucha.ru/idp0d

 Добавлено (07.08.2014, 08:14)
 ---------------------------------------------
 Далее в штатном расписании создаем ставки слесарей с разным разрядом. После чего принимаем сотрудника.
 В начислениях указываем ОплатаПоЧасовомуТарифу. Также необходимо создать нашу надбавку.
 Создаем НадбавкаЗаОсобыеРаботы. Показателей схем мотивации теперь нет. Все данные и шкалы теперь хранятся в справочнике Показатели. Добавил показатель УсловияСреды и выставил занесение значения документом ввода данных.

 Создал документ для ввода графиков особых работ.

 И вот теперь встал на распутье. Регистра ПлановыеНачисленияСотрудникамОрганизаций больше нет. Есть регистр Плановыеначисления и он совсем другой.
 У меня два пути:
 Первый заключается в том , чтобы собрать из ГрафикаОсобых работ периоды, приправить их данным среды из моего регистра и запихать это все в ПлановыеНачисления. Что мне не нравится. Если человек будет работать через день?? 15 периодов на одно сотрудника ежемесячно? Так же будет выглядеть табличная часть в НачислениеЗарплаты.

 Второй вариант: это не трогать плановые начисления. Пусть там висит наша надбавка без цифр. Залезть в сам документ начисление зарплаты, чтобы при виде нашей надбавки он вытягивал количество дней особых работ по данному сотруднику, высчитывал средний коэффициет условий труда в эти дни и заполнял свою табличную часть одной строчкой. Результат - количество особых дней умноженная на ставку и умноженная на коэффициент.

 Ваше мнение - как лучше поступить??

Добавлено (12.08.2014, 13:12)
---------------------------------------------
В задании четко прописано, что в документе должны быть указаны периоды.
 Документ ГрафикиОсобыхРабот записывает в регистр сведений ОсновныеНачисления наши периоды и с нашем начислением. Далее в модуле расчета зарплаты при заполнении значений показателей подсунул заполнение ОсобыхУсловий, причем высчитывал среднее на весь период. После этого штатные механизмы все прекрасно считают.

 Запрос получился с заковыркой. Надбавка начисляет за уже отработанное время и в регистре расчета оплаченных дней 0! Пришлось доставать их из документа НачислениеЗарплаты. Должности достал из регистра регистра накопления ЗанятыеПозицииШтатногоРасписания.

 В итоге все получилось. Первый билет решен!!! После того как сдам, выложу готовое решение.

 Этот форум еще живой?? :)

« Последнее редактирование: Август 07, 2014, 08:22:51 am от Андрей »

kastrtroy2006

  • Новичок
  • *
  • Сообщений: 4
  • ФИО: Веряскин Артем
ЗУП 3.0 Программист Билет 1 ПОЕХАЛИ!!!
« Ответ #1 : Август 21, 2014, 04:47:57 pm »
Я не могу найти даже литературу по ЗУП 3.0. Кто-нибудь может подсказать, где купить или достать))

haer

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Антон
ЗУП 3.0 Программист Билет 1 ПОЕХАЛИ!!!
« Ответ #2 : Август 23, 2014, 08:18:22 pm »
kastrtroy2006, самая толковая книжка - Харитонов и Грянина, как всегда. Есть еще одна для консультантов и одна для совсем для начинающих. Навалом на Селезневке.
 Но это все по пользовательской части, по кунфугурежке токма курсы, по традиции.
П:  ЗУП 8, Торг 7.7, Платформа 8
 С:  ЗУП 8, Торг 7.7, Бух 7.5
 СК:ЗУП 8

malknatal

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Малкова Наталья
ЗУП 3.0 Программист Билет 1 ПОЕХАЛИ!!!
« Ответ #3 : Август 26, 2014, 10:45:16 am »
Тоже начала прорешивать задачи с сайта 1С - по первой задаче не совсем понятно, как сделать ввод графика работы. В задании сказано "25 числа каждого месяца в организации составляется график работ в особых условиях на следующий месяц, в котором для каждого работника указываются периоды работы в особых условиях (дата начала, дата окончания)." Т.е. данные должны вводиться по каждому периоду как два поля - дата начала и дата окончания? Или ввод можно сделать так же, как в задаче по 2.5 - по каждому дню месяца, а потом только хранить периодами?

nasurdinov

  • Новичок
  • *
  • Сообщений: 2
  • ФИО: Алмаз
ЗУП 3.0 Программист Билет 1 ПОЕХАЛИ!!!
« Ответ #4 : Август 29, 2014, 08:02:24 am »
Как я понял, нужно:
 1. Создать документ "График работы в особых условиях". ТЧ: Сотрудник, Дата начала периода, Дата окончания периода. Проведение по РН РабочееВремяСотрудников (по добавленному виду времени) - запись на каждый (указанный?) день, входящий в периоды в документе.

 2. Создать документ ввода данных о фактических условиях среды (мне кажется, что делать кнопку прямо на форме регистра небезопасно, т.к. в случае некорректных данных в файле можно потерять то, что есть) + регистр сведений, в котором хранить условия среды. ТЧ документа заполнять из файла, проводить по регистру.

 3. Создать начисление за работу в особых условиях. При этом нужно добавить свой способ расчета. Для этого необходимо добавить элементы в перечисления СпособыРасчетаНачислений и КатегорииНачисленийИНеоплаченногоВремени (т.к. на форме выбирается только категория, а она связана со способом расчета). Далее необходимо настроить связь Категории и Способа расчета (в модуле менеджера). И тут я не знаю, как вывести добавленную категорию в список выбора на форме.

 4. При расчете документа "Начисление зарплаты" заполняется РС ГрафикиРаботыПоВидамВремени на основе РН РабочееВремяСотрудников (скорее всего). Видимо, необходимо использовать эти данные по добавленному виду времени, но я пока не понял принципа заполнения.

 Мое предположение по расчету: соединить данные РС по виду времени ОсобыеРаботы с фактическим периодом работы сотрудника, далее соединить с РС "Условия среды", чтобы определить процент надбавки на каждый день. Далее, чтобы корректно рассчитать надбавку за день, необходимо знать количество отработанных часов в этот день.

 Не уверен, что в ТЧ документ начисления зарплаты необходимо писать несколько строк по надбавке, по-моему, можно указать одной строкой количество дней и часов в особых условиях. Количество дней понадобится в отчете, План из РН РабочееВремяСотрудников?

malknatal

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Малкова Наталья
ЗУП 3.0 Программист Билет 1 ПОЕХАЛИ!!!
« Ответ #5 : Август 29, 2014, 11:28:29 am »
Я сделала регистр Фактические условия работы, для загрузки данных - обработку с формой выбора файла(пока документ не стала создавать для проведения).
 А вот на табличной части Графика работы в особых условиях остановилась - т.к. если сделать ТЧ Сотрудник, Дата начала, Дата окончания - получится, что по сотруднику можно указать только один период (допустим с 1 по 7 число), а как тогда указать два периода (с 1 по 7 и с 21 по 28, например)?
 (В задаче по ЗУП 2.5 данные в график на форме вводились по каждому дню, поэтому там несколько периодов можно было ввести без проблем)

nasurdinov

  • Новичок
  • *
  • Сообщений: 2
  • ФИО: Алмаз
ЗУП 3.0 Программист Билет 1 ПОЕХАЛИ!!!
« Ответ #6 : Август 29, 2014, 11:31:55 am »
Цитата: malknatal;35901
по сотруднику можно указать только один период


 А что мешает вводить несколько строк?

malknatal

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Малкова Наталья
ЗУП 3.0 Программист Билет 1 ПОЕХАЛИ!!!
« Ответ #7 : Август 29, 2014, 11:40:35 am »
Да, можно и так

demos

  • Новичок
  • *
  • Сообщений: 4
  • ФИО: demos
ЗУП 3.0 Программист Билет 1 ПОЕХАЛИ!!!
« Ответ #8 : Сентябрь 30, 2014, 10:44:39 am »
Алгоритм решения:
 1. Создаем РС УсловияСреды, периодический в пределах дня, с одним ресурсом "Условие". Добавляем возможность загрузки данных из текстового файла
 2. Создаем Начисление - "ЗаРаботуВОсобыхУсловиях": повременная оплата труда, ежемесячно, формула: ТарифнаяСтавкаЧасовая, учет времени: за работу полную смену, вид времени: "РаботаВОсобыхУсловиях".
 3. Создаем документ - "ГрафикРаботыВОсобыхУсловиях", который будет писать в РС - ПлановыеНачисления (с указанием действуетДО как конец месяца, чтобы начисление появлялось, в начислении зарплаты) и в РН - РабочееВремяСотрудников пишем Явку и РаботаВОсобыхУсловиях причем исключаем выходные через ВыборкаДанныхОВремени = Документы.ИндивидуальныйГрафик.ДанныеОВремениСотрудников(ЭтотОбъект);
 4. В модуле РасчетЗарплатыРасширенный процедура РассчитатьНачисленияОчередности
 создаем ВТЗаСложность, которая берет данные из ВТРабочееВремяПоДнямПоВидам и РС УсловияСреды и вычисляем Сумму процентов за сложность для строк начисления "ЗаРаботуВОсобыхУсловиях"
 5. в этой же процедуре после:
 РассчитатьСтрокуНачисления( ...
 ....
 добавляем:
     Если СтрокаРасчета.Начисление = ВидРасчетаЗаСложность Тогда
         ИсходныеДанные.Результат = ИсходныеДанные.Результат * Выборка.СуммаПроцентовЗаСложность / 100;
     КонецЕсли;

 6. Отчет через "Представления_"
 
Код
ВЫБРАТЬ
      НачисленияДанныеГрафика.ПериодДействия,
      НачисленияДанныеГрафика.ПериодДействияКонец,
      НачисленияДанныеГрафика.Сотрудник,
      НачисленияДанныеГрафика.Результат КАК Доплата,
      НачисленияДанныеГрафика.ОтработаноДней КАК Факт,
      НачисленияДанныеГрафика.ОсновноеЗначениеБазовыйПериод КАК План,
      ВЫРАЗИТЬ(НачисленияДанныеГрафика.Результат / НачисленияДанныеГрафика.ОтработаноДней КАК ЧИСЛО(12, 2)) КАК СреднийРазмер
 ПОМЕСТИТЬ ВТВсеНачисления
 ИЗ
      РегистрРасчета.Начисления.ДанныеГрафика(
              ПериодДействия МЕЖДУ &НачалоПериода И &КонецПериода
                  И ВидРасчета = &ВидРасчета
                  И Активность = ИСТИНА) КАК НачисленияДанныеГрафика
 ;

 ////////////////////////////////////////////////////////////////////////////////
 ВЫБРАТЬ
      ВТВсеНачисления.Сотрудник КАК Сотрудник,
      ВТВсеНачисления.ПериодДействияКонец КАК Период
 ПОМЕСТИТЬ ВТСотрудники
 ИЗ
      ВТВсеНачисления КАК ВТВсеНачисления

 СГРУППИРОВАТЬ ПО
      ВТВсеНачисления.Сотрудник,
      ВТВсеНачисления.ПериодДействияКонец
 ;

 ////////////////////////////////////////////////////////////////////////////////
 ВЫБРАТЬ РАЗРЕШЕННЫЕ
      ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник,
      ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность,
      ЗНАЧЕНИЕ(Справочник.РазрядыКатегорииДолжностей.ПустаяСсылка) КАК РазрядКатегория,
      ВТСотрудники.Период
 ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников
 ИЗ
      ВТСотрудники КАК ВТСотрудники
 ГДЕ
      "ТолькоРазрешенные" = ИСТИНА
 ;

 ////////////////////////////////////////////////////////////////////////////////
 ВЫБРАТЬ РАЗРЕШЕННЫЕ
      ВТВсеНачисления.ПериодДействия КАК Период,
      ВТВсеНачисления.Сотрудник КАК Сотрудник,
      Представления_КадровыеДанныеСотрудников.Должность КАК Должность,
      ВТВсеНачисления.План,
      ВТВсеНачисления.Факт,
      ВТВсеНачисления.Доплата,
      ВТВсеНачисления.СреднийРазмер
 ИЗ
      ВТВсеНачисления КАК ВТВсеНачисления
          ВНУТРЕННЕЕ СОЕДИНЕНИЕ Представления_КадровыеДанныеСотрудников КАК Представления_КадровыеДанныеСотрудников
          ПО ВТВсеНачисления.Сотрудник = Представления_КадровыеДанныеСотрудников.Сотрудник
              И ВТВсеНачисления.ПериодДействияКонец = Представления_КадровыеДанныеСотрудников.Период
« Последнее редактирование: Сентябрь 30, 2014, 03:54:12 pm от Дмитрий »

tank-kras

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Tank
ЗУП 3.0 Программист Билет 1 ПОЕХАЛИ!!!
« Ответ #9 : Октябрь 01, 2014, 11:07:26 pm »
Цитата: demos;36439
... и вычисляем Сумму процентов за сложность для строк начисления "ЗаРаботуВОсобыхУсловиях"...

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

 
Цитата: demos;36439
ИсходныеДанные.Результат = ИсходныеДанные.Результат * Выборка.СуммаПроцентовЗаСложность / 100;


 а где идет умножение на отработанные часы?

 Скажите, пожалуйста, сколько у вас получается строк для начисления "ЗаРаботуВОсобыхУсловиях"? Судя по тому, что в РС ПлановыеНачисления идет одна запись, то получается одна строка?

 Я не много не так делал.
 1) Создаем вид начисления "ЗаРаботуВОсобыхУсловиях", "Дополнительная оплата за уже оплаченное время", ставим формулу РасчетнаяБаза * ПроцентНадбавкиПоОсобымУсловиям /100, где РасчетнаяБаза - ставим "Оплата по часовому тарифу"(нужно если будет вытеснение больничным или иным видом начисления), да и к тому же в задании сказано, что это доплата. Созданный показатель ПроцентНадбавкиПоОсобымУсловиям, который зависит от другого показателя УсловияТруда, ставим тип показателя "Числовой, зависящий от другого показателя", вводим шкалу процентов в зависимости от условий труда. Наверное надо было как у вас, через РС сделать, что было бы гибче. Но в задании не сказано, что процент премии может меняться. И опять же увеличивается время на экзамене на обработку разных случаев, если допустим процент поменялся много раз за месяц.
 2) Создаем документ "ГрафикРабот_В_ОсобыхУсловиях" - пишем данные в РС ГрафикПоОсобымУсловиямРабот - нужен для отчета
 3) Создаем документ "ФактическиеУсловияТруда" - куда загружаем данные из файла, добавляем также ТЧ с сотрудниками. Документ добавляет строки периодами в РС Плановые начисления, для всех сотрудников из ТЧ, по тем дням которые регистрировались прибором. В ресурс "Размер" записывается значение условие труда. То есть фактически делается запись:

 10.01.2014 - 15.01.2014 1
 16.01.2014 - 18.01.2014 0
 20.01.2014 - 25.01.2014 2

 Т.к. формула у нас идет от РасчетБазы, то получается что, если сотрудник работал в определенный период месяца, а в другой период, допустим, болел, то будет начислена доплата за отработанный период.
 И в документе Начисление зарплаты будут разбиты на столько строк, сколько записей в РС Плановые начисление, и визуально можно будет посмотреть в какой период времени было условие труда
 Далее в процедуре "РассчитатьНачисленияОчередности" перед РассчитатьСтрокуНачисления( обращаемся к РС ПлановыеНачсиления, вытягиваем условие труда для строки расчета конкретного периода и подсовываем в структуру ИсходныеДанные.УсловияТруда наше значение, далее все рассчитается само собой.

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

 Про РН РабочееВремяСотрудников - документ "Начисление зарплаты" сам пишет данные по виду расчета ЗаРаботуВОсобыхУсловиях

 demos, у вас есть еще решенные билеты, хотелось бы свериться с альтернативным взглядом? я решил пока 3, остальные 3 решу в эти выходные. Сдаю экзамен 10.10.2014

demos

  • Новичок
  • *
  • Сообщений: 4
  • ФИО: demos
ЗУП 3.0 Программист Билет 1 ПОЕХАЛИ!!!
« Ответ #10 : Октябрь 02, 2014, 09:51:15 pm »
Цитата tank-kras ()
а зачем нам сумма процентов? нам нужен процент на каждый день (или период с одинаковым условием) умноженный на количество отработанных дней в этом условие и умноженный на тарифную ставку, если на следующий день условие поменялось, то и процент для этих отработанных дней тоже поменялся.
в условии задачи: "Размер доплаты в % от дневной тарифной ставки", получается дневная тарифная ставка - постоянная, проценты - разные. находим сумма процентов и умножаем на тарифную ставку, получим доплату за месяц.

 
Цитата tank-kras ()
а где идет умножение на отработанные часы?
в виртуальной таблице:
    
Код
|////////////////////////////////////////////////////////////////////////////////
       |ВЫБРАТЬ
       |    ВТРабочееВремяПоДнямПоВидам.ИдентификаторСтроки КАК ИдентификаторСтроки,
       |    СУММА(ВЫБОР
       |            КОГДА _УсловиСреды.Условие = 0
       |                ТОГДА 30 * ВТРабочееВремяПоДнямПоВидам.Часов
       |            КОГДА _УсловиСреды.Условие = 1
       |                ТОГДА 40 * ВТРабочееВремяПоДнямПоВидам.Часов
       |            КОГДА _УсловиСреды.Условие = 2
       |                ТОГДА 50 * ВТРабочееВремяПоДнямПоВидам.Часов
       |            ИНАЧЕ 0
       |        КОНЕЦ) КАК СуммаПроцентовЗаСложность
       |ПОМЕСТИТЬ ВТЗаСложность
       |ИЗ
       |    ВТРабочееВремяПоДнямПоВидам КАК ВТРабочееВремяПоДнямПоВидам
       |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений._УсловиСреды КАК _УсловиСреды
       |        ПО ВТРабочееВремяПоДнямПоВидам.Дата = _УсловиСреды.Период
       |ГДЕ
       |    ВТРабочееВремяПоДнямПоВидам.ВидРасчета = &ВидРасчетаЗаСложность
       |    И ВТРабочееВремяПоДнямПоВидам.ВидУчетаВремени = &ВидВремениЗаСложность
       |
       |СГРУППИРОВАТЬ ПО
       |    ВТРабочееВремяПоДнямПоВидам.ИдентификаторСтроки
       |;


 
Цитата tank-kras ()
Скажите, пожалуйста, сколько у вас получается строк для начисления "ЗаРаботуВОсобыхУсловиях"? Судя по тому, что в РС ПлановыеНачисления идет одна запись, то получается одна строка?
В РС Плановые начисления идет одна строка на полный месяц. Для начисления "ЗаРаботуВОсобыхУсловиях" тоже идет одна строка. Причем если в месяце сменилась должность или разряд, то идет две и больше строк.

 И еще получается документ "ФактическиеУсловияТруда" должен идти после документа
 "ГрафикРабот_В_ОсобыхУсловиях" ? Но ведь в задании расплывчатые условия "25 числа каждого месяца" и "в
 конце каждого месяца" поэтому не факт, что один будет идти за другим smile

 
Цитата tank-kras ()
demos, у вас есть еще решенные билеты, хотелось бы свериться с альтернативным взглядом? я решил пока 3, остальные 3 решу в эти выходные. Сдаю экзамен 10.10.2014
нет пока нету, буду рад увидеть хоть какие то чужие решения smile

 P.S. На экзамене наверно будут не эти задачи, а 10 задач из 2.5, немного измененных...
« Последнее редактирование: Октябрь 02, 2014, 10:25:45 pm от Дмитрий »

nasurdinov

  • Новичок
  • *
  • Сообщений: 2
  • ФИО: Алмаз
ЗУП 3.0 Программист Билет 1 ПОЕХАЛИ!!!
« Ответ #11 : Октябрь 08, 2014, 08:02:46 am »
Цитата: demos;36439
Алгоритм решения:

 В целом согласен, особенно по суммированию процентов, по сути ведь тарифная ставка одинаковая, а нас нужно знать только общую сумму за месяц.

 Смущает такой момент
 
Цитата: demos;36439
3. Создаем документ - "ГрафикРаботыВОсобыхУсловиях", который будет писать в РС - ПлановыеНачисления (с указанием действуетДО как конец месяца, чтобы начисление появлялось, в начислении зарплаты) и в РН - РабочееВремяСотрудников пишем Явку и РаботаВОсобыхУсловиях причем исключаем выходные через ВыборкаДанныхОВремени = Документы.ИндивидуальныйГрафик.ДанныеОВремениСотрудников(ЭтотОбъект);


 Получается, что если после ввода документа изменился график сотрудника, то нужно перепроводить? Может просто при расчете соединять РС с фактическим периодом работы?

 Добавлено (08.10.2014, 08:02)
 ---------------------------------------------
 Немного ошибся. Но проблема остается.

 Стал делать по аналогии с решением demos, но сначала получаю во временной таблице процент надбавки на каждый день, а потом пытаюсь соединить эту таблицу с фактическим периодом действия. Но ничего не выходит.
 А дело в том, что если при проведении документ ГрафикРаботыВОсобыхУсловиях писать в РН РабочееВремяСотрудников или РС ГрафикиРаботПоВидамВремени, то система считает, что это индивидуальный график сотрудника. В первом случае она за те дни, что мы указали, не считает оплату по тарифу (т.к. там стоит 0), во втором при проведении документа НачислениеЗарплаты индивидуальные графики не пишутся в тот же регистр сведений и тогда оплата по тарифу не считается совсем (т.к. тоже указывается 0 часов).

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

 Я застрял на этом месте. Может, я чего-то не понимаю?
« Последнее редактирование: Октябрь 08, 2014, 08:03:14 am от Алмаз »

demos

  • Новичок
  • *
  • Сообщений: 4
  • ФИО: demos
ЗУП 3.0 Программист Билет 1 ПОЕХАЛИ!!!
« Ответ #12 : Октябрь 10, 2014, 10:36:06 pm »
переделал 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

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Tank
ЗУП 3.0 Программист Билет 1 ПОЕХАЛИ!!!
« Ответ #13 : Октябрь 11, 2014, 12:00:40 am »
3 вида расчета не самое лучшее решение. Сегодня сдал экзамен, билет был смесь первого со вторым, причем шкала процента состояла из пяти диапазонов. На экзамене надо по максимуму использовать типовые регистры(поставили оценку 4 как-раз из-за использования своего РС, надо было использовать типовой "ЗначенияПериодическихПоказателейРасчетаЗарплатыОрганизаций"). Все загрузки делать в документ ДанныеДляРасчетаЗарплаты, предварительно настроить "Шаблоны ввода исходных данных". На экзамене попалась косячный релиз, не смог создать шаблон для ввода средней температуры по дням по организации. Создал свой документ, показал преподу, что типовой механизм не работает.

 В отчете фактические отработанные дни(часы), если есть возможность надо получать из реальной таблицы, а не из ДанныеГрафика()

 Консоль запросов (отчетов) на ИТС почему-то не работала, пришлось запросы отлаживать через запуск предприятия, что сильно уменьшает время. Еще была клавиатура неудобная, и комп глючил))

demos

  • Новичок
  • *
  • Сообщений: 4
  • ФИО: demos
ЗУП 3.0 Программист Билет 1 ПОЕХАЛИ!!!
« Ответ #14 : Октябрь 11, 2014, 10:22:37 pm »
tank-kras, Действительно, можно было обойтись 1 начислением, 1 видом времени.
  
 1. ГрафикРаботыВОсобыхУсловиях 25 числа пишет в РН Рабочее время сотрудников как Индивидуальный График, время явка и время в особых условиях
 2. ВводПоказанийУсловийСреды пишет в конце месяца, как табель, тоже явку и работу в особых условиях, и также пишет в РН ЗначенияОперативныхПоказателейРасчетаЗарплатыСотрудников значения вычисленных процентов, на каждую дату
 3. А формула расчета начисления: Дневной тариф * суммупроцентов

Самый клевый куфср по подготовке к аттестации по платформе 1С:Предприятие 8