Базовый курс. Домашнее задание №15

Последнее домашнее задание 4-го блока.

Для выполнения рекомендуется изучить следующие главы 4-го блока.

Глава 13. Разработка отчетов.
Глава 14. Универсальные алгоритмы.
Глава 15. Сторнирование записей регистров расчета.

К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь. Если Вы оплачивали курс, у Вас активирован токен доступа, Вы залогинены, но Вы видите эту запись — напишите нам на e-mail поддержки.

комментария 44 на “Базовый курс. Домашнее задание №15”

  1. Антон К. 14.02.2011 в 12:50

    Добрый день, вот наконец-то и я сделал последнее ДЗ.
    Сложностей не возникло. Но, столкнулся со следующим нюансом, который после ряда попыток осознать / объяснить, так и не смог понять.
    Ситуация следующая: начисляю ежемесячную премию сотруднику – к примеру за декабрь 2010 г.
    Начисление осуществляется корректно. Но не знаю зачем, я ввел начисление по окладу второй раз за декабрь, т.е. если оклад = 10 т.р., то я дважды начислил сотруднику за декабрь по 10 т.р. (итого 20 т.р.). И вот тут началось необъяснимое – при обращении к виртуальной таблице БазаРегистрОсновныхНачислений я получил задвоенную базу, т.е. база не 20 т.р., а 40 т.р.
    написал запрос, чтобы посмотреть результат выборки в отладчике:

    Запрос.Текст = “ВЫБРАТЬ
    | База.Сотрудник,
    | ЕСТЬNULL(База.НачислениеБаза, 0) КАК НачислениеБаза,
    | База.Регистратор,
    | База.ВидРасчета,
    | База.ПериодДействияНачало,
    | База.ПериодДействияКонец,
    | База.Начисление
    |ИЗ
    | РегистрРасчета.РегистрОсновныхНачислений.БазаРегистрОсновныхНачислений(&Измерения, &Измерения, &Разрезы, ПериодДействия МЕЖДУ &Дата1 И &Дата2) КАК База”;
    ВЫБРАТЬ
    База.Сотрудник, ЕСТЬNULL(База.НачислениеБаза, 0) КАК НачислениеБаза, База.Регистратор, База.ВидРасчета, База.ПериодДействияНачало, База.ПериодДействияКонец, База.Начисление ИЗ РегистрРасчета.РегистрОсновныхНачислений.БазаРегистрОсновныхНачислений(&Измерения, &Измерения, &Разрезы, ПериодДействия МЕЖДУ &Дата1 И &Дата2) КАК База

    В отладчике получил следующую картину: по 1-му регистратору НачислениеБаза = 20 т.р., и по второму регистратору НачислениеБаза = 20 т. р. (в сумме 40 т.р., а не 20 т.р.)
    При этом, если я снимаю с проведения один из документов начисления ЗП этому сотруднику, то запрос выдает корректное значение НачислениеБаза = 10 т.р.

    • Антон К. 14.02.2011 в 12:58

      Отзыв в целом по блоку:
      блок для меня полностью новый, я даже с такими задачами не сталкивался.
      Пока смотришь видео, теория понятна. Когда начинаешь делать, начинаешь путаться.
      Основная сложность – это получение базы + постоянно возникают мысли о том, что если изменилось базовое начисление, то надо каким-то образом пересчитать зависимые начисления.
       
      ===============================
      Скажите, а финальное ДЗ надо делать вместе со следующим курсом? Поясните, пожалуйста, ситуацию с финальным ДЗ (для моего случая ;-)

      • >Скажите, а финальное ДЗ надо делать вместе со следующим курсом?
        Да, финальное ДЗ будет другим. Соответственно нужно набраться терпения и подождать финала текущего потока.

        • Антон К. 16.02.2011 в 15:02

          Евгений, добрый день,
          а вы сможете прокомментировать ситуацию, описанную мной выше:
          “…Но, столкнулся со следующим нюансом, который после ряда попыток осознать / объяснить, так и не смог понять.
          Ситуация следующая: начисляю ежемесячную премию сотруднику – к примеру за декабрь 2010 г.
          Начисление осуществляется корректно. Но не знаю зачем, я ввел начисление по окладу второй раз за декабрь, т.е. если оклад = 10 т.р., то я дважды начислил сотруднику за декабрь по 10 т.р. (итого 20 т.р.). И вот тут началось необъяснимое – при обращении к виртуальной таблице БазаРегистрОсновныхНачислений я получил задвоенную базу, т.е. база не 20 т.р., а 40 т.р….”

          • Полученное поведение можно объяснить.
            Вся проблема в запросе.

            В регистре есть записи (упрощенно)

            Регистратор №1. Иванов. С 01 по 31 декабря – 10000 руб.
            Регистратор №2. Иванов. С 01 по 31 декабря – 10000 руб.

            Если получить базу по регистратору №1 она будет равна 20 тыс. руб. Тоже самое для второго документа.
            Если получать базу без фильтра по регистратору, то как раз получить 40 тыс.

  2. Выполнила последнее ДЗ :)
    Основной алгоритм взяла с уроков, немного модифицировав под задание. Добавила способы(ПоОтработанномуВремени, Процентом,ПоСреднему,НулеваяСумма,КомпенсацияПоДням,ПроцентомРуководителю) и категории расчетов, функция ПолучитьСтруктуруНеобходимыхДанных возвращает структуру (“ДанныеГрафика, База,Сотрудник”-ложь только для расчета НадбавкаРуководителяОтдела). Виды расчетов:
    Основные начисления
    ОкладПоДням – сп:ПоОтработанномуВремени, стр:(“График”), кат:0
    Отпуск- сп:ПоСреднему,стр:(“График,База”), кат:0
    Прогул – сп:НулеваяСумма, кат:0
    КомпенсацияЗаОбеды – сп:КомпенсацияПоДням, стр:(“График”), кат:0
    Дополнительные начисления
    ПремияКвартальная – сп:Процентом, стр:(“База”), кат:0
    ПремияПоИтогамГода – сп:Процентом, стр:(“База”), кат:0
    ПремияЕжемесячная – сп:Процентом, стр:(“База”), кат:1
    НадбавкаРуководителюОтдела – сп:ПроцентомРуководителю, стр:(“База”), кат:2
    К сожалению в расчете НадбавкаРуководителюОтдела  не смогла исключить премию самого руководителя, т.к. беру данные виртуальных таблиц просто по отделу, без разреза сотрудники. В запросе по Основным начислениям добавила получение ЗначениеБазовыйПериод – необходим для отпуска. И еще в уроках мне кажется есть неточность в запросе по Дополнительным начислениям, у вас используется внутренние соединение для РегистрРасчета.ДополнительныеНачисления.БазаОсновныеНачисления, а надо левое. Не могла сразу сообразить, почему у меня запрос при вычислении 2 категории не возвращал данных, хотя база была, только отладкой нашла ошибку в запросе :).
    С отчетом проблем не возникло.

  3. Вячеслав Вязигин 20.01.2011 в 18:08

    Задание НЕ выполнено. Нифига не успел досмотереть материал. Повесли себе в список задачек сразу после книжки Хрусталевой про СКД :)

  4. Задание выполнено.
    Обратная связь:
    1. Нового достаточно много, несмотря на то, что с типовой ЗУП работал. Наибольший интерес вызвала тема “Универсальные алгоритмы” (как в текущем блоке, так и в целом по курсу).
    2. Все затруднения, которые были, решались очень легко (благо есть эталонное решение).
    3. Интересны живые примеры применения расчетных механизмов платформы не для расчета зарплаты. Есть ли такие?

    • >Есть ли такие?
      Я встречал только расчет платы за аренду помещений.
      В любом случае механизмы очень узкие и применяются в основном для расчета зарплаты.

      • Можно немного дополню. В электроэнергетике при расчётах потребления промсектора удобно  использовать “регистры расчёта”: там тоже некоторые виды расчётов производятся по графикам и по календарям(по заявленой мощности, по графикам работы групп токоприёмников (например уличное освещение) и т.д.), кроме того удобно с использованием “регистра расчётов” считать минусы (счётчик одного потребителя включен из под счётчика другого потребителя), потери в трансформаторе (для расчёта по формуле нужен такой показатель как средний ток) и т.д., порядок расчётов тоже должен быть строго определённым (сначало потребление, отом потери и т.д.)  как будто электроэнергетику промсектора придумали под компоненту “расчёт”!

        • Интересная область применения, спасибо!

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

  6. iporozhnyakov 19.01.2011 в 17:46

    С видами расчета к сожалению немного туго, поэтому оптимизацию документа “Начисление ЗП” проводил совместно с решением данного задания от Евгения.

  7. Здравствуйте:-) ДЗ № 15 выполнила.

    … ну как выполнила… сколько могла шла параллельно урокам, потом мучалась сама, заканчивала задание глядя в эталонное решение.

    Обратная связь:
    1. Всё, всё, всё новое!
    2. Весь раздел одно сплошное затруднение. Очень помогает повторное просматривание уроков, особенно когда идею расчета раскладывают до элементарных составляющих на примерах, но дело главным образом в переизбытке информации на финише курса.

  8. Manase940N 18.01.2011 в 16:08

    Задание выполнено, наконец-то закончил расчетный блок!
    Самое тяжкое задание за весь базовый курс, т.к. раньше с расчетами не сталкивался.
    Надбавку руководителю высчитал, понизив категорию расчета ежемесячной премии самого руководителя. Решение пока не смотрел, думаю, что этот вариант неоптимальный – пришлось ввести реквизит Категория в РегистрРасчета.
    Обратная связь.
    Отличный курс, можно прямо сказать. Самое главное – подробно изложены  базовые вещи. Лично мне этого очень не хватало.
     

  9. Задание выполнил. Долго промучился с начислением процента руководителю. Думал как то обойтись алгоритмом написанным раньше, но пришлось все таки добавлять новое перечисления и видоизменять немного алгоритм, т.к &Измерение пришлось делать не просто через Сотрудников и Подразделение, а только через подразделение.
    Отзыв:
    1) Очень хотелось бы поподробнее чтобы было расписана структура ведущих видов расчета. Хотелось бы чтобы было объяснено что может произойти если поставить ту или иную галку.
    2)Хотелось так же чтобы хотя бы вскользь было рассказано про механизм перерасчетов. Я понимаю что это материал продвинутого курса, но без этого мне кажется полностью регистры расчета не поймешь.  Тем более ведущие расчеты относятся как я понимаю именно к этому механизму.
    А так курс супер. Начало все укладываться по полкам как работает 1с :)

    • Механизм ведущих видов расчета и перерасчетов действительно изучается в продвинутом.
      И без них как раз проще понять расчетные механизмы.

  10. Наконец-то последнее ДЗ выполнено!
    Сам принцип функционирования расчетных регистров я понял еще из прошлого задания, но ввиду полного отсутвия практики приходилось периодически обращаться к просмотру эталонного решения, правда это скорее для подстраховки :)  т.к. общие идеи у меня были правильными, в т.ч. и по расчету надбавки руководителю.
    Обратная связь:
    1) Как уже многие писали,  для меня также новым является практически все, поэтому взгляды поменялись диаметрально :)
    2) Реализация алгоритмов проведения и расчета показалась несколько трудоемкой, особенно по сравнению с управленческими задачами на регистрах накопления, но и преимущества, которые дает “расчетная компонента” тоже стали очевидными.
    Да и …преодолевать затруднения хорошо помогал просмотр эталонного решения :)
    3) По поводу темы мастер-группы. Было бы интересно узнать, какие еще задачи на практике (кроме расчета з/п) и каким образом решаются с помощью данных объектов.
    Наконец-то последнее ДЗ выполнено!
    Сам принцип функционирования расчетных регистров я понял еще из прошлого задания, но ввиду полного отсутвия практики приходилось периодически обращаться к просмотру эталонного решения, правда это скорее для подстраховки :)  т.к. общие идеи у меня были правильными, в т.ч. и по расчету надбавки руководителю. 
    Обратная связь:
    1) Как уже многие писали,  для меня также новым является практически все, поэтому взгляды поменялись диаметрально :) 
    2) Реализация алгоритмов проведения и расчета показалась несколько трудоемкой, особенно по сравнению с управленческими задачами на регистрах накопления, но и преимущества, которые дает “расчетная компонента” тоже стали очевидными.
    Да и …преодолевать затруднения хорошо помогал просмотр эталонного решения :)
    3) По поводу темы мастер-группы. Было бы интересно узнать, какие еще задачи на практике (кроме расчета з/п) и каким образом решаются с помощью данных объектов.

    • >Было бы интересно узнать, какие еще задачи на практике
      Я видел типовое решение, где расчетные механизмы использовались для начисления арендной платы.
      Но в любом случае, в 99% случаев расчет применяется для заработной платы.

  11. Евгений Шилов 17.01.2011 в 23:33

    Самое тяжкое задание. Вроде и в урок смотришь, а универсальность какая-та не универсальная получается. Универсальность особенно видна при расчете “Надбавки руководителю” – сделал доп запрос, который отдельно считает ежемесячную премию руководителя отдела, а уж потом-то можно и надбавку просчитать :)
    Возник вопрос – если периодичность регистра расчета “Месяц”, то получить данные скажем за 10 дней нельзя? Я имею ввиду фактически отработанное количество дней.
    Обратная связь:
    1) познакомился в первом приближении с расчетом, сложно, но можно :0)
    2) Наибольшие сложности – организация универсальности.
    3) Тем на мастер группу нет, нужно много времени на переваривание
     

    • > Я имею ввиду фактически отработанное количество дней.
      Можно. Для этого достаточно ввести запись расчета с соответствующим периодом действия и получить запросом ее фактический период.

  12. Задание выполнил.
    Модификацию алгоритмов расчета произвел по схеме, представленной в учебном материале.
    Возникли проблемы с видом расчета «Надбавка руководителю отдела» – было  не понятно как исключать из базы премию самого руководителя. А так же, при настройке вида расчета «Премия ежемесячная» не учел, что базу нужно брать по периоду регистрации а не по периоду действия.
     
    Обратная связь:

    Практически весь материал был для меня новым.
    Достаточно сложными были  главы о реализации универсального алгоритма расчета.
    На данный момент информации достаточно.

  13. Задание выполнил. За основу взял универсальный алгоритм расчета описаный в 4 блоке. Добавил необходимые изменения в процедуры алгоритма. В план видов расчета Дополнительные Начисления  добавил реквизит КоличествоМесяцевБазы чтобы рассчитывать базовый период для Годовой, квартальной, месячной премий и использовать один способ расчета Процентом. Компенсация за обеды: добавил новый способ расчета в перечисление, новое условие для расчета. Надбавка руководителю отдела: добавил новый способ расчета в перечисление, расчет выполнятся как для способа Процентом. В процедуру формирования запрос добавил условий для формирования текста запроса. Основная суть такая, Базы для расчета определяется как разность всех премий по подразделению  минус премии сотрудника(начальника).  Для этого в запросе соединяю два раза ВТБазы Дополнительные начисления. Первый раз в параметр Измерения входит только подразделение второй раз в параметр входит подразделение и сотрудник и база=как результатбазы1 – результатбазы2 . Отчет формируется к объединение всех физ таблиц  регистров сам отчет сделал конструктором  в виде  таблицы.
    Обратная связь
    Все что узнал новое.
    Трудности вызвали понятия: Период действия, период регистрации, базовый период. Решения ДЗ прояснили ситуацию.
    Несовсем разобрался  с алгоритмом вытеснения, если периоды регистрации основного и вытесняющего расчета не равны то они не вытисняют друг друга. Вот как если на примере базы  блока 4 ,есть Оклад период действия весь прошлый месяц, период регистрации прошлый месяц. Есть Невыход  вытесняет   Оклад. Невыход  не рассчитывается а оклад не изменяется после перепроводки  если  Период  Регистрации оклада < Периода регистрации Невыхода Хотя периоды действия у них совпадают.
    Так в общем по курсу. Очень хороший курс благодаря наглядному объяснению, обилию примеров, пояснению нюансов  я очень хорошо продвинулся в понимание того какие объекты для чего нужны , как их использовать и где их применять.

    • >если периоды регистрации основного и вытесняющего расчета не равны то они не вытисняют друг друга
      Именно так.
      Кроме этого, на вытеснение влияют измерения, что логично.
      Ведь прогул Иванова, не должен сказаться на окладе Петрова.

  14. ДЗ выполнил. Со всем справился кроме надбавки руководителю – пришлось посмотреть в решении. 
    По поводу обратной связи:
    1. Новое все т.к. с расчетом в 8-ке вообще не работал.
    2. Весь материал не простой – но правда ожидал что расчетная часть будет сложнее, а так после просмотра курса оказалось что не так уж и страшно…
    3. Ну наверное рассмотрение настройки каких-нибудь более сложных случаев расчета. Типа как с надбавкой руководителю – до нее все было понятно как делать а чуть шаг в сторону возникли затруднения….
    Спасибо за курс. Классно. Это еще до мастер групп руки не дошли…. Кстати чисто организационный вопрос – сейчас не стал ввязываться в продвинутый, т.к. то что прошел еще не все уложилось да и мастер группы даже не смотрел (а очень хочется) -скидку, которую вы давали на продвинутый при покупке базового может несколько продлить а то есть такое подозрение что уже на следующий поток продвинутого она сгорит по времени или я что то не так посчитал…

    • Спасибо за эмоции :)

      Скидка успеете применить на следующий поток продвинутого (но не далее), даже если будут возникать накладки, срок действия скидки продлим.

  15. Задание выполнил.
    Создал перечисление СпособыРасчета со значениями :
    ПоОтработаномуВремени (Оклад по дням)
    ПоСреднему (Отпуск)
    БезОплаты (Прогул и Обеды)
    Процент ( для всех премии)
    НадбавкаРуководителю (Надбавка руководителю отдлела ).
    Добавил реквизиты СпособыРасчета и КатегорияРасчета в ПВР ОсновныеНачисления и ДополнительныеНачисления.  Настроил виды расчета в планах расчета.
    Процедуры РасчетОсновныхНачислени и ДополнительныхНачислений изменил с учитывая КатегориюРасчета и СпособРасчета, все делал согласно главе 14.
    С отчетами проблем не было.
    Посмотрев решение преподавателя многое переделал.
    Обратная связь :
    1  Вообще нечего не знал по этой теме, это для меня открытие.
    2 Тема для меня новая и много затруднений когда делаешь ДЗ.
    3 Определение базовых и ведущих видов расчета.
    П.С.
    Курс  очень хороший, даже не ожидал. Спасибо Вам!
     

  16. MashkaRomashkina 16.01.2011 в 00:53

    Задание выполнила.
    В планы видов расчета добавила категорию – число и способ расчета – перечисление с значениями: ОтОтработанногоВремени, Процентом, ПоСреднему и Неоплачиваемый.
    На данный момент категория всех расчетов 0.
    В процедурах по расчету результата заменила зависимость от видов расчетов на зависимость от способов расчета.
    Предполагаю, что категории будут не только нулевые и для того, чтобы расчеты по категориям с более низким порядковым номером проводились раньше, чем имеющие более высокий порядковый номер, в обработке проведения добавляю цикл по категориям видов расчета документа. Категории получаю запросом по физическим таблицам регистра расчета с отбором по документу и упорядочиванием по возрастанию категории.
    Затем в цикле по выборке запроса вызываю процедуры расчета.
    Добавила вид расчета «Премия по итогам года» в дополнительные начисления. Этот вид расчета аналогичен «Премии квартальной» + в базовые виды расчетов входит «Премия квартальная».
    Премия ежемесячная имеет категорию 1 и зависит от базы по периоду регистрации, следовательно, для ее отражения создается отдельный план видов расчета и регистр расчета.
    В модуль объекта добавила проведение по новому регистру.
    Компенсация за обеды имеет способ расчета ОтОтработанногоВремени и т.к. имеет протяженность во времени, относится к основным начислениям.
    С реализацией надбавки руководителя возникли сложности – реализацию посмотрела в решении.
    Отчет создала с использованием СКД. Запрос организовала объединением физических таблиц регистров расчетов.

    • MashkaRomashkina 16.01.2011 в 01:06

      Обратная связь:
      1. Компонента расчет для меня совершенно новая.  Не бралась за ее изучение ввиду кажущейся ее сложности. Материал курса показал, что все гораздо проще и логичнее, чем я думала.
      2. Основные затруднения были с определением свойств планов видов расчетов. После выполнения домашних заданий все немного прояснилось.

  17. Добила таки последнее ДЗ! Хоть и с опозданием .:) Правда после просмотра решения, пришлось, как обычно :),  немного переделать свое решение, так как не хватает еще навыков в написании оптимального кода. Пришлось много времени убить на реализацию надбавки руководителю отдела, если честно ни как не могла сообразить, что этот вид расчета зависит от периода регистрации, а не действия.
    Обратная связь:
    1. Новое опять же все! Но особо могу отметить, что разложилось по полкам, из каких таблиц регистра расчетов какие-данные можно получать. Правила записи в регистр расчетов.  Поразило, в очередной раз :) , возможность быстрого составления отчетов!
    2. Сложности были при определении базовых и ведущих видов расчета, в какой-то момент теряю нить, что от чего зависит. Но в общем, смысл понятен,и  с практикой думаю все еще больше прояснится :)
     

  18. Задание выполнил

  19. Всех с прошедшими празниками!
    Задание выполнил, начал выполнять не просмотрев 14 главу( в общем-то сейчас сижу досматриваю),  названия способов расчёта забавные получились…
    сделал ледующее:
    заменил в процедуре расчёта строку
    <code>Для Каждого Запись Из Движения.ОсновныеНачисления Цикл
    </code>
    на строки
    <code>ЗаписиСорт = новый Массив;
    ЗаписиСорт = Движения.ДополнительныеНачисления.Выгрузить(,”Сотрудник, Подразделение, ВидРасчета, ПлановыйРазмер, График”);
    ЗаписиСорт.Колонки.Добавить(“ПорядокРасчета”);
    Для Каждого Запись из ЗаписиСорт Цикл
    Запись.ПорядокРасчета=Запись.ВидРасчета.ПорядокРасчета;
    КонецЦикла;    
    ЗаписиСорт.Сортировать(“ПорядокРасчета”);
    Тек_порядок=0; Рассчитано = Ложь;
    Для Каждого Запись Из ЗаписиСорт Цикл
    Если Запись.ПорядокРасчета <> тек_порядок Тогда
    Если Рассчитано Тогда
    Движения.ДополнительныеНачисления.Записать(,Истина);    
    КонецЕсли;
    Тек_порядок=Запись.ПорядокРасчета;
    Рассчитано = Ложь;
    КонецЕсли;    </code>
     
    Как-бы всё нормально работает.
    Насчёт ограничения выборки по видам расчёта не догадался, внёс изменения позже…
    Расчёт базы премии руководителю решил реализовать отдельным запросом (хотя как-бы лишний запрос не совсем хорошо), т.к. этот расчёт будет использоваться не чаще 1 раза в месяц (? квартал), а если и это учесть в основном расчёте – расчёт значительно утяжелится, что тоже не есть хорошо.
    По обратной связи:
    1.Материал весь для меня новый, поэтому ново всё, практически ни какие взгляды не поменялись,  т.к. их не было… Очень хорошее задание – сделать свою микрозарплату (пусть без удержаний, вычетов, налогов, фондов)… Особо выделю “технологию работы с регистрами” и СКД!
    2.Даже не вопросы, а фраза в самом начале, про простоту ЗП встряхнула очень сильно… лет 5-7  назад работал с ЗИК на 7.7 .  А в целом конечно пока мне несколько затруднительно из-за малой практики запросы и отчёты на базе СКД (СКД – вообще принципиально другой подход к отчётам, хотя что-то подобное только текстовое и настраиваемое (не до такой степени) не было редкостью в первой половине 90-х).
    3.По самому курсу доп. вопросов пока нет, видимо ещё не переварил. Есть по учебному курсу вопрос: можно как-то взять если не ту конфигурацию на которой показан учебный курс, то хотя-бы мегадокумент “Сторно”?

    • “технологию работы с регистрами” = “технологию работы с регистрами расчётов и их окружением (планы и т.п.)”

      • опять поторопился… конечно помимо этого ещё сделал привязку к способу расчёта а не к виду.

    • >заменил в процедуре расчёта строку
      В главе об универсальных алгоритмах приводится решение задачи оптимизации с использованием запросов.
      Этот вариант является более читабельным и оптимальным.
      Но, то что вы изобрели свой способ это хорошо :)
      >т.к. этот расчёт будет использоваться не чаще 1 раза в месяц
      А какая разница? Алгоритм должен анализировать наличие некоторого способа в текущем документе и если он есть, то и получать нужные данные.
      >можно как-то взять если не ту конфигурацию на которой показан учебный курс
      Конфигурации выкладываются по каждому блоку. Но вот, к сожалению, документ Сторно безвозвратно утерян. Восстановим, но это будет позже.

      • Досмотрел – способ с пострением большого запроса с последующим его делением на части и комбинированием всё-же лучше – есть универсальность, читабельность и модульность самого расчёта (управляющая процедура и вызываемые её подпрограммы)  и добавлять что-то принципиально новое действительно много проще… если-бы сначало всё просмотрел – тоже делал точно так-же…

  20. Поздравляю всех участников данного проекта с прошедшим праздником! Удачи и благополучия Вам и Вашим близким в наступившем году.
    Наконец-то после праздников  доделал задание.
    Перевел алгоритмы расчета ЗП в универсальный вид. Для этого в обоих ПВР ввел реквизиты СпособРасчета, КатегорияРасчета.
    Создал перечисление СпособыРасчета со значениями:
    ПоОтработаннымДням(оклад), ФиксированнойСуммойЗаДень(прогулы, обеды), Процентом(премии), Усреднением(отпуск), ПроцентомОтБазы(надбавка руководителю).
    Заполнил вновь введенные реквизиты в пользовательском режиме и присвоил категории:
    ежемесячным премиям – 1, т.к. вычисляются по всем начислениям в текущем месяце, надбавке руководителю – 2, т.к. вычисляются по ежемесячным премиям, остальным – 0.
    Для способов расчета Процентом и Усреднением ввел понятие База. Для этого в ПВР ввел еще один реквизит База(перечисление ВеличинаБазы – месяц,квартал,год).
    Скорректировал проведение документа НачислениеЗП. Для способов расчета Процентом и Усреднением обеспечил заполнение базового периода записи в зависимости от величины базы.
    Заменил прежние процедуры общим модулем РасчетЗП. Т.к. алгоритм универсален, то все отличия от алгоритма,приведенного в главе 14, сводятся к обработке условий “Если Выборка.Способ = Перечисления.СпособыРасчета.<Значение> Тогда Запись.Результат = ..”.
    Единственное серьезное отличие – это расчет надбавки руководителя.Она получается запросом к физическим таблицам ДополнительныеНачисления
    “ВЫБРАТЬ ЕСТЬNULL(СУММА(ОбщаяБаза.Результат) – БазаПользователя.Результат, 0) КАК Результат”
    с наложенным условием по регистратору, способу расчета Процентом,  Категории = 1 и сотруднику для второй таблицы.
    Выполнил проверку расчета ЗП по новому алгоритму и убедился, что для прежних видов расчета результаты совпали. Для вновь введенных – проконтролировал правильность их расчета.
    Сформировал отчет по начислениям.Это таблица с группировкой по строкам – Подразделение, Сотрудник и по колонкам – Период, ВидРасчета.

    Обратная связь.
    1.Как всегда, узнал море нового. Курс – супер, как начальный этап профессионального программирования в 1С – маст хэв.
    2.В целом затруднений нет, но есть некоторая неясность с ведущими видами расчетов, т.к. нет наглядного отображения того, как один вид расчетов влияет на другой. И в случае достаточно большого
    количества видов расчета может произойти закольцовывание ведущих и поиск ошибки может занять некоторое время.
    Еще была проблема с тем, что та консоль запросов, которую вы выкладывали, не принимает массивы в качестве параметров.
    Исправил, для этого в форме обработки консоли в поле Значение добавил СписокЗначений в ТипЗначения и ТипЗначенияСписка – строка.
    3.Хотелось бы увидеть, как производятся настройки ведущих видов расчетов в более сложных и запутанных ситуациях и, самое главное, как при этом не запутаться.

  21. Обратная связь:
    1. Наиболее интересной для меня была глава 14, т.к. в принципе в работе с ЗУП сталкивался уже не раз, но не было ясности в общей схеме расчетов. Теперь все стало понятно, еще раз пройдусь по этой главе на праздниках. Ну и еще сторнировка, никогда не делал, казалось, что “страшный зверь”. Оказалось, что казалось :)
    2. Затруднений не было, все очень хорошо разжевано.
    3. Подробнее хотелось бы раскрыть вот какой момент. В курсе подробно описывается, как рассчитать записи, но все это делается в “черном ящике” и пользователь конечных результат может увидеть только в движениях. Отредактировать их в документе возможности нет. Между тем, в ЗУП общепринят подход, когда данные рассчитываются и помещаются в ТЧ документа. Их можно отредактировать и затем провести документ с изменениями. Я так понимаю, для того, чтобы это реализовать, нужно в документе сделать кнопку “Рассчитать”, затем рассчитанные наборы загружать в табличную часть документа и очищать движения, а уже при нажатии на кнопку “Провести и закрыть” сохранять движения. В общем ход мыслей верный?
    P.s. Мои поздравления с наступающим праздником! Успехов в новом году!!! :)))

    • Ход мыслей совершенно верный. Главное не забыть все это делать в транзакции.

  22. Задание выполнено.
    Создал перечисление СпособыРасчета со  следующими значениями:
    – Повременно (оклад по дням);
    – ПоСреднему (отпуск);
    – ФиксированнаяСумма (Обеды и прогулы);
    – ПроцентОтСуммы (все премии кроме премии руководителей);
    – ПроцентОтПремий (премия начальника отдела).
    Создал перечисление КатегорииРасчета:
    – Первичное (оклад, прогул, обед);
    – ЗависимоеПервогоУровня (премии);
    – ЗависимоеВторогоУровня (отпуск и премия начальника отдела).
    Добавил реквизиты СпособРасчета и Категория в ПВР ОсновныеНачисления и  ДополнительныеНачисления.
    Обеспечил обязательность их заполнения. Создал и настроил новые виды расчетов. В  пользовательском режиме заполнил новые реквизиты.
    Модификацию алгоритмов выполнял в соответствии с уроками темы “Универсальные алгоритмы”. По моему в ЗУП точно такой же подход к реализации расчетов. Пока смотрел видео-уроки разобрался до конца.
    Создал общий серверный модуль РасчетЗП, установил флаг Привелигированный, чтобы не было лишних проверок прав доступа. В этом модуле определил процедуру РассчитатьРР, которой в качестве параметра передается набор записей. В процедуре запрос из набора вытаскивает категории и способы расчетов, для видов  расчетов, которые есть в наборе. Запрос  “составной”, имя регистра определяю по метаданным переданного набора. Результат запроса помещаю в иерархическую выборку по группировкам по категориям. В цикле вызывается функция ПолучитьДанныеДляРасчета(), которой в качестве параметров передаются способы расчета
    (их получаю через функцию ПолучитьСтруктуруНеобходимыхДанных()), имя регистра, ссылка на документ-регистратор и текущая категория расчета. В этой функции строится динамический запрос, который получает
    все необходимые данные для расчета. Эти данные в свою очередь передаются функции  РассчитатьЗаписьРР(), где и происходит расчет. В конце рассчитанный набор записывается (без пересчета фактического периода действия). В модуле документа НачислениеЗП заменил старый код на вызов серверной процедуры общего  модуля. В общем всю схему решения слизал с видео-уроков. С отчетом затруднений не возникло, набросал за 5 минут в СКД.
    Нюансы: когда получал базу для расчета надбавки руководителя, в измерения передавал только один разрез – по подразделениям. Надбавку  руководителя посчитал взяв процент от разницы базы по подразделению и базы по руководителю.
    Евгений, пока делал ДЗ, не раз в голове всплывал вопрос, не влепят ли два балла штрафа за запросы в цикле при решении задачи на сертификации по платформе? По сути же чем больше категорий, тем больше итераций цикла и вызовов функций со сложными запросами. Но по другому никак и не сделать наверно, линейный код экзаменатора также врядли обрадует…

    • >Евгений, пока делал ДЗ, не раз в голове всплывал вопрос, не влепят ли два балла штрафа за запросы в цикле при решении задачи на сертификации по платформе
      Цикл циклу рознь.
      В данном случае запрос в цикле совершенно обоснован.
      Плохо было бы, если в запросе выбирались записи регистра расчета, и каждая запись отдельно рассчитывалась. Это действительно неоптимальный подход.
      В нашем случае количество итераций всегда ограничено количеством категорий, их обычно немного.
      Более того, линейный алгоритм потребовал бы столько же ресурсов, выигрыша не было бы..
      >линейный код экзаменатора также врядли обрадует…
      Насколько я помню на экзамене вполне нормально написать линейный код, если для вас это проще..

  23. За основу работы взял общий модуль для расчета, разработанный в главе «Универсальные алгоритмы». В планы видов расчета добавил реквизит «Категория расчета». Создал перечисление Способы расчета, со следующими значениями:

    «По отработанному времени» для ВР «Оклад по дням»;
    «Фиксированной суммой» для ВР «Прогул» и «Компенсация за обеды»;
    «По среднему за год» для ВР «Отпуск»;
    «Процентом» для всех премий;
    «Надбавка руководителю» для ВР «Надбавка руководителя отдела».

    Добавил реквизит «Способ расчета» типа созданного ранее перемещения в планы видов расчета. Для премий алгоритм расчета одинаков, а период базы разный, поэтому дополнительно в ПВР «Дополнительные начисления» создал реквизит «Период базы», тип перечисление ПериодыБазы (значения: Год, Квартал, Месяц) для правильного заполнения периода базы при проведении документа «Начисление зарплаты». Реализовал проверку обязательности его заполнения, если для ВР указан способ расчета «Процентом». В режиме предприятия заполнил реквизиты «Категория расчета» и «Способ расчета» у существующих ВР, категории у всех 0. Изменил состав базовых ПВР для ПВРа «Дополнительные начисления» добавил этот же ПВР поскольку ежемесячная база является базой для надбавки руководителю. Новые ВР добавил в ПВР «Дополнительные начисления», указав для них соответствующие способы расчета и категорию 0 для всех кроме ВР «Надбавка руководителю», для него категория 1, поскольку он должен рассчитываться после ежемесячной премии.
    В документ «Начисление зарплаты», добавил еще одну ТЧ «Начисления дополнительные» с типом реквизита «Вид расчета» ПВР «Дополнительные начисления», изменил тип реквизита «Вид расчета» указав вместо любого ПВР, конкретные ПВР «Основные начисления».  Модифицировал процедуру его проведения, добавил перебор строк ТЧ «Начисления дополнительные» и запись в РР «Дополнительные начисления», сделал проверку не по ВР, а по способу расчета и реализовал различные варианты записи базового периода в зависимости от реквизита «Период базы» ПВР «Дополнительные начисления».
    Доработал процедуру общего модуля «ПолучитьСтруктуруНеобходимыхДаных», данные графика нужны для способов расчета «По отработанному времени» и «По среднему за год», данные базы для  – «По среднему за год» и «Процентом». Для надбавки руководителю база будет рассчитываться особым образом поэтому для нее запрос напишу далее. Также доработал процедуру «РассчитатьЗаписиРегистраРасчета» реализовав нужные способы расчета.
    Перепровел старые документы все рассчиталось правильно, создал по сотруднику «Иванов» несколько начислений за 2009 год, проверил расчет годовой премии в январе 2010.
    Для расчета «Надбавки руководителя» необходимо определить не базу отдельного сотрудника, а базу подразделения и из нее вычесть базу сотрудника, а с получившейся суммы взять процент. Для получения базы за подразделение в структуру «Параметры» добавил еще один элемент «БазаПодразделения», модифицировал процедуру «ПолучитьданныеДляРасчета» левым соединением добавил ВТ с базами, причем в качестве параметров измерений для этих таблиц использовал массив с одним измерением «Подразделение», в выходные поля добавил результат базы из данных ВТ полю присвоил псевдоним БазаПодразделения. При расчете результата в процедуре «РассчитатьЗаписиРегистраРасчета»  для расчета базы для надбавки я имея значения базы за подразделение и за конкретного сотрудника уже рассчитал надбавку. Причем не важно как производится начисление базы, т.е. ежемесячной премии одним документом или несколькими все рассчитывается правильно, система берет все эти моменты на себя.
    Завершающим этапом стало формирование отчета по начислениям, сложностей здесь нет никаких, объединением двух запросов по двум ФТ РР получаю необходимые данные и настраиваю отчет, выбирая  тип отчета таблица. Этот отчет очень похож на отчет «Расчетная ведомость» из главы об отчетах, только проще.
    Обратная связь:
    Нового для меня было многое, поскольку с расчетными механизмами платформы 8-ки работать ранее не приходилось. Затруднений не возникло, все понятно. Один из лучших курсов который я проходил, приятно учиться у мастеров, уж не сочтите за лесть это от чистого сердца. Поздравляю всех с Новым Годом. Я успел выполнить все задания в этом году, праздники уйдут на более глубокую проработку отдельных тем мастер групп и бонусов. Вопрос в чем будет заключаться финал  и когда можно продолжить занятия на Продвинутом курсе?

    • >Вопрос в чем будет заключаться финал и когда можно продолжить занятия на Продвинутом курсе?
      Финал заключается в выполнении финального домашнего задания.
      Хороший темп держите, коллега!

      Поздравляю с Новым Годом, желаю успехов! :)