Базовый курс. Занятие №13

Первое занятие по 4-му блоку.

Необходимо изучить следующие главы.
Глава 1. Основные понятия расчета.
Глава 2. Постановка задачи.
Глава 3. План видов расчета.
Глава 4. Проектирование планов видов расчета.
Глава 5. Кадровый учет.
Глава 6. Графики работы.
Глава 7. Документы.
Глава 8. Регистры расчета.

Также нужно выполнить домашнее задание, текст которого доступен на странице.

Задание необходимо выполнять в ИБ после предыдущего ДЗ.

В этой же теме необходимо написать отчет о выполнении задания.

ps. Участники курса без доступа в мастер-группу отчитаться по домашним заданиям не получиться.

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

Если не активировали токен — посмотрите видео-инструкцию (видео N5)

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

комментариев 49 на “Базовый курс. Занятие №13”

  1. Задание выполнил. Несложное по реализации, но базовое для понимания всего расчета.
    Создал РегистрСведений, Обработку, которая его заполняет. Еще при просмотре было интересно, можно ли дополнительные измерения в этот регистр вносить, например “год”, внес, по нему дополнительно делаю отбор при заполнении регистра. Создал планы видов расчета, с соответствующими элементами предопределенными. И дополнительно создал регистры расчета с измерениями Сотрудник и Подразделение. Далее создал документы Начисление ЗП и Дополнительные начисления. Для разделения расчетов зп и премий.
    Вроде больше ничего не требовалось.

  2. ДЗ выполнил.

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

  4. Виктор Вахненко 31.03.2011 в 23:33

    Создал справочник ГрафикиРаботы и непериодический независимый регистр сведений с таким же названием.
    Создал обработку заполнения регистра для предопределенных графиков.
    Создал планы видов расчета с необходимыми предопределенными видами расчета.  Настроил базовые, вытесняющие и ведущие для существующих видов расчета.
    Создал два регистра расчета для каждого плана видов расчета. Определил необходимые измерения и ресурсы. В качестве параметра график для регистра расчета по основным начислениям указал регистр сведений ГрафикиРаботы.
    Создал документ НачислениеЗаработнойПлаты с  необходимыми реквизитами.

  5. 1.создал справочник “ТипыГрафиков” и 7 реквизитов(ДниНедели … Булево) и Регистр Сведений “ГрафикиРаботы” с измерениями: справочник “ТипыГрафиков” – “ТипГрафика” и “Дата” и ресурс  (РабочийДень – Булево)
    2.Создал Обработку “ЗаполнениеГрафика” с необходимыми реквизитами по условию, заполняю перебором дат регистр сведений использую наборЗаписей.
    3.Создал необходимые планы видов расчёта, с присущими им соответственными настройками расчета с предопределенными элементами.
    4.Создал Регистр Расчета “ОсновныеНачисления” определил необходимые реквизиты. связал с регистром сведений “ТипыГрафиков”
    5.Создал документ “НачислениеЗП” снеобходимыми реквизитами и задал поведение доступности реквизита “ГрафикРаботы”. Поиграл с вытеснением.

  6. Гуляев Алексей 30.03.2011 в 13:24

    Задание Выполнено!

  7. Задание выполнено.
    1. Создан регистр сведений для хранения графика (непериодический, независимый; измерения: “ТипГрафика”, “Дата”; ресурсы: “Значение” – число, 1 – рабочий, 0 – выходной). Создан справочник “ТипыГрафиков”, заведены 2 типа: пятидневка и шестидневка.
    2. Создана обработка для заполнения графика. Помимо периода и типа графика можно в табличной части указать даты выходных. Реализовано автоматическое заполнение выходных в табличной части для пяти- и шестидневки. Чтобы имеющиеся в регистре данные не удалялись, осуществляется выгрузка набора записей регистра в массив (колонка “Дата”, отбор по типу графика). Затем запускается цикл от даты начала периода по дату окончания (по дням); если текущая дата цикла имеется в массиве, то получаем индекс этой даты в массиве = индексу записи в наборе и изменяем значение ресурса; иначе добавляется новая запись с новой датой.
    3. Созданы 2 плана видов расчета с необходимыми видами расчета, а также 2 регистра расчета, для каждого плана.
    4. Создан документ “НачислениеЗаработнойПлаты” согласно заданию.

  8. Patio-5Element 27.03.2011 в 23:22

    Задание выполнено.
    1.Создан справочник «ТипыГрафиков». Создан рег. сведений «Графики работы» с измерениями «ТипГрафика», «Дата» и ресурсом «Значение».
    2.Добавлена обработка «Заполнение графика». На форму добавлены реквизиты «Начало периода», «Окончание периода», «тип графика» и список значений «Выходные дни». При открытии формы список заполняется значениями от 1 до 7. Обработка заполнения
    Набор = РегистрыСведений.ГрафикРаботы.СоздатьНаборЗаписей();
    Набор.Отбор.ТипГрафика.Установить(ТипГрафика);
    Набор.Прочитать();
    Таблица = Набор.Выгрузить();
    ТекДата = НачалоПериода;
    Пока ТекДата <= ОкончаниеПериода Цикл
    Запись = Таблица.Найти(ТекДата, “Дата”);
    Если Запись = Неопределено тогда
    Запись = Таблица.Добавить();
    Запись.ТипГрафика = ТипГрафика;
    Запись.Дата = ТекДата;
    КонецЕсли;
    Запись.Значение = Не ВыходныеДни.НайтиПоЗначению(ДеньНедели(ТекДата)).Пометка;
     
    ТекДата = ТекДата + 24*3600;
    КонецЦикла;
    Набор.Загрузить(Таблица);
    Набор.Записать();
    3.Созданы планы видов расчетов «Основные начисления» и «Дополнительные начисления». Для основных начислений установлена зависимость по периоду действия и зависимость от базы по периоду действия. Для доп. начислений установлена зависимость от базы.
    4.Созданы основные начисления «Оклад по дням», «Отпуск», «Прогул». Созданы доп. начисления «Премия квартальная».
    5.Созданы регистры расчета «Основные начисления» и «Дополнительные начисления». Добавлены измерения «Сотрудник», «Подразделение»; ресурс «Результат»; реквизит «размер», «ТипГрафика» (для основных начислений).
    6.Добавлен документ «Начисление заработной платы».

  9. 1) создан справочник типГрафиков и рс ГрафикиРаботы в соответствии с заданием. Создана обработка для заполнения регистра. Заполняла просто в цикле, путем добавления записей и записи набора  с параметром замещать.
    Праздники = ПраздничныеДни.ВыгрузитьКолонку(“Праздник”);
    Выходные = ВыходныеДни.ВыгрузитьКолонку(“Выходной”);

    НаборЗаписей = РегистрыСведений.ГрафикиРаботы.СоздатьНаборЗаписей();    
    ВысчитываемаяДата = НачалоДня(ПериодС);
    Пока НачалоДня(ПериодПо)>= ВысчитываемаяДата Цикл
    Запись = НаборЗаписей.Добавить();
    Запись.График = ТипГрафика;
    Запись.День = ВысчитываемаяДата;

    Если Праздники.Найти(ВысчитываемаяДата) <> Неопределено Тогда
    Запись.Значение = 0;
    Продолжить;
    КонецЕсли;

    Если Выходные.Найти(ДеньНедели(ВысчитываемаяДата)) <> Неопределено Тогда
    Запись.Значение = 0;
    Иначе
    Запись.Значение = 1;
    КонецЕсли;
    НаборЗаписей.Записать(Истина);

    ВысчитываемаяДата = НачалоДня(ВысчитываемаяДата + 86400);
    КонецЦикла;

    2) Созданы планы видов расчета и их предопределенные элементы, регистры расчета.
    3) Создала документ НачислениеЗарплаты.
     

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

  10. Елена 26.03.2011 в 22:02

    Задание выполнила. График заполняла используя запрос и таблицу значений. Остальные объекты добавляла и настраивала по видеоурокам.

  11. Извиняюсь, отлучался на неделю.
    Задание полностью выполнено.
    Пока отсутствовал – выложили решение этого задания. Я в обработке использовал выгрузку в таблицу значений, поиск даты, замену значения. И потом обратную загрузку в набор записей. Мне показалось это решение удобным по сравнению с представленным  решением.

  12. Как обычно, заполнение графика сначала показалось сделать легко, но все день просидел, думая как не затирать предыдущий год. Пробовал сделать отбор
     
              
    НаборЗаписей.Отбор.Дата.ВидСравнения = ВидСравнения.ИнтервалВключаяГраницы,

           
    но регистры сведений, как выяснилось, такое не поддерживают. Поэтому честно скажу – подглядел решение одного из участников с предварительной выгрузкой в ТабЗнач и ее обработкой. Сделал аналогично:
    &НаКлиенте
    Процедура Заполнить(Команда)
     ФормаЗаполнение = ПолучитьФорму(“РегистрСведений.ГрафикиРаботы.Форма.ФормаЗаполнение”);
     ФормаЗаполнение.Год = 2011;
     КодВозврата = ФормаЗаполнение.ОткрытьМодально();
     Если КодВозврата = КодВозвратаДиалога.ОК Тогда
      ТаблицаПраздников = ФормаЗаполнение.ТаблицаПраздников;
      ЗаполнитьНаСервере(ФормаЗаполнение.ВыбГрафик, ФормаЗаполнение.Год, ТаблицаПраздников); 
     КонецЕсли;
     Элементы.Список.Обновить();
    КонецПроцедуры
    &НаСервереБезКонтекста
    Процедура ЗаполнитьНаСервере(График, Год, ТаблицаПраздников)
     
     НачалоГода = Дата(Год, 1, 1);
     КонецГода = КонецГода(НачалоГода);
     
     НаборЗаписей = РегистрыСведений.ГрафикиРаботы.СоздатьНаборЗаписей();
     
     Запрос = Новый Запрос;
     Запрос.Текст = “ВЫБРАТЬ
                    | ГрафикиРаботы.ГрафикРаботы,
                    | ГрафикиРаботы.Дата,
                    | ГрафикиРаботы.Значение,
                    | ГОД(ГрафикиРаботы.Дата) КАК ДатаГод
                    |ИЗ
                    | РегистрСведений.ГрафикиРаботы КАК ГрафикиРаботы”;
          
     ТЗ = Запрос.Выполнить().Выгрузить();
     
     СтруктураОтбор = Новый Структура(“ДатаГод, ГрафикРаботы”, Год, График);
     МассСтрокТЗ_ВыбГод = ТЗ.НайтиСтроки(СтруктураОтбор);
     Для Каждого ТекСтрТЗ Из МассСтрокТЗ_ВыбГод Цикл
      ТЗ.Удалить(ТекСтрТЗ); 
     КонецЦикла;
     
     ТекДата = НачалоГода;
     Пока ТекДата <= КонецГода Цикл
      НовСтрТЗ = ТЗ.Добавить();
      НовСтрТЗ.Дата = ТекДата;
      НовСтрТЗ.ГрафикРаботы = График;
      
      ОтборПраздники = Новый Структура(“Дата”, НачалоДня(ТекДата));
      МассивПраздников = ТаблицаПраздников.НайтиСтроки(ОтборПраздники);
      Если (ДеньНедели(ТекДата) <= 5) И (МассивПраздников.Количество() = 0) Тогда
       НовСтрТЗ.Значение = 1;
      КонецЕсли;
        
      ТекДата = ТекДата + 24 * 3600;
     КонецЦикла;
     
     НаборЗаписей.Загрузить(ТЗ);     
     
     НаборЗаписей.Записать();
    КонецПроцедуры
    Форму для настроек года, праздников и типа графика сделал отдельную (ФормаЗаполнение) и открываю ее из ФормыСписка.

    В той форме (ФормаЗаполнение) сделал две кнопки ОК и ОТМЕНА а также реквизиты – ВыбГрафик, Год и ТаблицаПраздников (ТаблицаЗначений с колонкой типа дата). В обработчиках событий кнопок ОК и ОТМЕНА пишу:

          
    Закрыть(КодВозвратаДиалога.ОК)
           
    и 
           
    Закрыть(КодВозвратаДиалога.Отмена).
          

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

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

    И для Оклада по идее при вводе Отпуска или прогула произойдет вытеснение, следовательно Отпуск и Прогул должны быть ведущими для оклада! Но еще раз скажу – система не дала так сделать(((
    И зачем-то система попросила добавить Прогул в список ведущих для Отпуска…
    Думал еще, может ли прогул быть вытеснящим для отпуска. Решил что это не имеет смысла – если сотруднику ввели
    прогул, а он был в отпуске в это время, то у него “уважительная причина”, и отпускные он должен получить в полном объеме, а прогул и так не оплачивается, т.е. он ничего за прогул не получит.

                       
    В общем, по этой части я сильно сомневаюсь, – насколько я правильно настроил виды расчета…

    Создал два регистра расчета и документ “Начисление ЗП”. 

    • Евгений, а чтобы увидеть топик “Начало занятий продвинутого курса” – надо продвинутый токен активировать? С какой даты?

      • Проверьте, сейчас должно быть видно..

    • >Ну а как получить значение нажатой кнопки из другой формы и передать его и выбранные в другой форме значения реквизитов в исходную форму
      Может быть несколько вариантов решения этой задачи.
      1. Можно было прямо в открытой форме сделать модификацию данных регистра, и послать оповещение родительской форме о необходимости обновления.
      Для этого можно использовать метод ОповеститьОбИзменении().
      2. Можно было задействовать механизм оповещений. В дочерней форме шлем служебное оповещение с помощью метода Оповестить(). В родительской ловим его, создав специальный обработчик события.
      Оба метода обладают плюсами:
      1. Не нужно вызывать модальную форму.
      2. Более эффективно организовано клиент-серверное взаимодействие, чем в вашем примере.

      >Если можно было обойтись списком значений
      Под рукой нет конфигуратора. Но решение примерно следующее:
      нужно анализировать событие ПередНачаломДобавление в список и выполнять приведение типа к Дате.

  13. Задание выполнено
    Созданы справочник «ТипыГрафиков» и регистр сведений «ГрафикиРаботы» с измерениями Дата, График и ресурсом Значение.
    Создана обработка «ЗаполнениеГрафика». Реализовано заполнение регистра сведений «ГрафикиРаботы» .
    Созданы планы видов расчета ОсновныеНачисления и ДополнительныеНачисления, созданы предопределенные элементы по условию.
    Созданы регистры расчета «Основные начисления» и «ДополнительныеНачисления».
    Создан документ «НачислениеЗП» по условию.

  14. Задание выполнено.
    Создан справочник ТипыГрафиков и регистр сведений Графики, непериодический, реквизиты ТипГрафика, Дата, ресурс – Значение. В обработке заполнения в реквизитах кроме типа графика и дат начала/окончания периода заполнения для указания выходных дней создал 7 булевых реквизитов. Заполнение производится согласно включенным/выключенным флагам, соответствующим дням недели. Создал предопределенные типы графиков “Пятидневка” и “Шестидневка”, заполнил соответствующим образом.
    Созданы 2 ПВР. В первом (ОсновныеНачисления) проставлено использование периода действия, в него вошли Оклад, Отпуск, Прогул. Во второй (ДополнительныеНачисления) попал расчет ПремияКвартальная. Для обоих ПВР установлена зависимость от базы по периоду действия (для ОН только ОН, для ДН оба ПВР). Для Оклада вытесняющими явл. Отпуск и Прогул, для Отпуска – Прогул. База у Оклада и Прогула отсутствует, у Отпуска и Премии – Оклад и Отпуск.
    Также созданы 2 регистра расчета, соответствующие планам ВР. Для регистра ОсновныеНачисления заданы ресурсы Сотрудник, Пдразделение, ресурс Результат, реквизиты План и График, также настроена связь с регистром сведений Графики. У второго регистра почти так же, но нет связи с графиками и реквизита График.
    Документ НачислениеЗарплаты создан с необходимыми реквизитами. В качестве движений указаны оба регистра расчета. Проведение пока не делал.

  15. Задание выполнил параллельно с просмотром видеокурса.
    Создал РС ГрафикиРаботы с измерениями ТипГрафика и Дата, ресурс – РабочийДень.
    Создал обработку ЗаполнитьГрафик. Добавил Планы видов расчета. Добавил предопределенные виды расчета. Создал документ НачислениеЗаработнойПлаты. Создал регистры расчета ОсновныеНачисления, ДополнительныеНачисления, Удержания.
    Этот блок неожиданно для меня понравился больше всех.

  16. Задание выполнил.
    Созданы справочник “ТипыГрафика” с предопределенными элементами “Пятидневка” и “Шестидневка”, регистр сведений “Графики работы”. Этот регистр заполняется в обработке так:
    &НаКлиенте
    Процедура Заполнить(Команда)
    ОшибкиЗаполнения = Ложь;
    НачалоПериода = Объект.НачалоПериода;
    КонецПериода = Объект.КонецПериода;
    Если (НЕ ЗначениеЗаполнено(НачалоПериода)) Тогда
    ОшибкиЗаполнения = Истина;
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = “Начало периода не заполнено”;
    Сообщение.Поле = “Объект.НачалоПериода”;
    Сообщение.УстановитьДанные(Объект);
    Сообщение.Сообщить();    
    КонецЕсли;
    Если (НЕ ЗначениеЗаполнено(КонецПериода)) Тогда
    ОшибкиЗаполнения = Истина;
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = “Начало периода не заполнено”;
    Сообщение.Поле = “Объект.КонецПериода”;
    Сообщение.УстановитьДанные(Объект);
    Сообщение.Сообщить();    
    КонецЕсли;
    Если НЕ ОшибкиЗаполнения  Тогда
    Если НачалоПериода > КонецПериода Тогда
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = “Начало периода больше конца периода”;
    Сообщение.Поле = “Объект.НачалоПериода”;
    Сообщение.УстановитьДанные(Объект);
    Сообщение.Сообщить();    
    КонецЕсли;
    КонецЕсли;
    Если (НЕ ЗначениеЗаполнено(Объект.ТипГрафика)) Тогда
    ОшибкиЗаполнения = Истина;
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = “Не указан тип графика”;
    Сообщение.Поле = “Объект.ТипГрафика”;
    Сообщение.УстановитьДанные(Объект);
    Сообщение.Сообщить();    
    КонецЕсли;

    Если ОшибкиЗаполнения Тогда
    Возврат;    
    КонецЕсли;

    РабочиеДни = Объект.ДниНедели;
    ТипГрафика = Объект.ТипГрафика;
    ЗаполнитьДниСервер(НачалоПериода, КонецПериода, ТипГрафика, РабочиеДни);
    КонецПроцедуры

    &НаСервереБезКонтекста
    Процедура ЗаполнитьДниСервер(НачалоПериода, КонецПериода, ТипГрафика, РабочиеДни)
    Набор = РегистрыСведений.ГрафикРаботы.СоздатьНаборЗаписей();    
    Набор.Отбор.ТипГрафика.Установить(ТипГрафика);
    Набор.Прочитать();
    ДеньВСекундах = 24 * 3600;
    ТекущаяДата = НачалоПериода;
    Пока ТекущаяДата <= КонецПериода  Цикл
    НомерДняНедели = ДеньНедели(ТекущаяДата);       
    Запись = Набор.Добавить();
    Запись.ТипГрафика = ТипГрафика;
    Запись.Дата = ТекущаяДата;
    Запись.ТипГрафика = ТипГрафика;
    ПризнакРабочегоДня = Число(НЕ РабочиеДни[НомерДняНедели-1].ВыходнойДень);
    Запись.Значение = ПризнакРабочегоДня;
    ТекущаяДата = ТекущаяДата + ДеньВСекундах;
    КонецЦикла;
    Набор.Записать();    
    КонецПроцедуры // ЗаполнитьДниСервер(НачалоПериода, КонецПериода, РабочиеДни)()

    Созданы планы видов расчетов “Основные начисления”.
    Включает виды расчет
    “Отпуск”, Базовые – Оклад, Отпуск, Вытесняющие – нет , Ведущие – Оклад, Прогул, Отпуск, ПремияКвартальная
    “Оклад”, Базовые – нет, Вытесняющие – Отпуск, Прогул , Ведущие – Оклад, Прогул, Отпуск, ПремияКвартальная
    “Прогул”, Базовые – нет,  Вытесняющие – нет , Ведущие – нет
    План видов расчета “Дополнительные начисления”
    “ПремияКвартальная”, Базовые – Оклад, Отпуск, Вытесняющие – нет , Ведущие – Оклад, Прогул, Отпуск, ПремияКвартальная

  17. Обработка заполнения регистра ГрафикиРаботы.
    Для заполнения регистра сведений ГрафикиРаботы первоначально с помощью запроса считывал данные регистра по заданному типу графика в таблицу значений.
    Затем перезаполнял таблицу в требуемом диапазоне – с таблицей значений управляться легче, чем с набором записей, т.к. можно использовать метод Найти(). Далее добавляем строку или изменяем значение, соответствующее ресурсу.
    Далее создавал набор записей регистра с отбором по типу графика (точно, как в запросе), после чего загружал таблицу в набор записей регистра и выполнял запись набора с замещением.

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

    Решение, приведенное в видеоуроках, в таком случае не работает, т.к. в нем неявно предполагается, как минимум, однократное в течение месяца изменение состояния сотрудника.
    Кроме того, в видеоуроках используется следующее положение: интервал между соседними датами регистра ПлановыеНачисления целиком лежит в пределах некоторого интервала между соседними датами регистра РаботникиОрганизаций. Это, конечно же, так до тех пор, пока в регистре РаботникиОрганизаций есть только один ресурс Состояние, принимающий значения “Уволен” и “Работает”. Но как только мы добавили ресурс “ТипГрафика”, возможна ситуация, когда даты периодов разных регистров лежат вполне беспорядочно.

    Дополнительно хотелось бы, чтобы метод заполнения не зависел от особенностей проведения кадровых документов, в частности, чтобы не требовать при увольнении прописывать в регистр РаботникиОрганизаций предыдущее значение графика. Тем более, что более логично при увольнении прописывать в качестве значений регистров (кроме Состояния) пустые значения.

    Таким образом, получается такая задача: надо выполнить заполнение табличной части на основании данных двух регистров сведений, даты периодов которых, вообще говоря, не связаны друг с другом. Дополнительно должно быть учтено, что не должно быть никаких строк,
    соответствующих состоянию “Уволен” регистра РаботникиОрганизаций, и не должно быть строк по
    видам расчетов, соответствующих значению Размер = 0 регистра ПлановыеНачисления.

    Решая эту задачу, я опирался на видеоуроки, а также на соответствующую процедуру типовых
    решений 1С.

    Приходится отметить, что достаточно простого решения не получилось: с учетом того, что
    пришлось применить временные таблицы, запрос занял 230 строк (понятно, что его можно
    переписать без временных таблиц, но тогда существенно возрастет объем и трудность для
    понимания).

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

    Т.к. текст запроса достаточно длинный, то не буду приводить его здесь, постараюсь лишь описать
    его построение.

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

    Временная таблица ВТСписокРаботников.
    Содержит поля Сотрудник, Подразделение. Получается путем объединения среза последних
    регистра РаботникиОрганизаций на начало месяца с условием “НЕ уволен” и всех записей
    физической таблицы РаботникиОрганизаций в течение месяца.

    Временная таблица СписокДатИзменений.
    Содержит поле ДатаИзменения. Выбираются (через Union) даты периодов из физических таблиц
    обоих регистров, а также дата КонМесяца. Отбор сотрудников и подразделений – через внутреннее соединение с таблицей ВТСписокРаботников.

    Временная таблица ВТДвиженияРаботников.
    Содержит поля Период, НеУволен и ТипГрафика. Выбираются (через Union) данные среза последних таблицы РаботникиОрганизаций на начало месяца с условием “НЕ уволен” (в этом случае Период = НачМесяца, НеУволен = Истина) и сведения обо всех записях физической таблицы РаботникиОрганизаций в течение месяца. Отбор сотрудников и подразделений для виртуальной таблицы – через параметр-условие (Сотрудник, Подразделение) В ([Выборка из ВТСписокРаботников]), для физической таблицы – через внутреннее соединение с таблицей ВТСписокРаботников.

    Временная таблица ВТИнтервалыДвиженийРаботников.
    Содержит поля ДатаНачалаДвижения, ДатаИзменения. Получается путем внутреннего соединения таблицы СписокДатИзменений с таблицей ВТДвиженияРаботников. Условие соединения кроме равенства полей Сотрудник и Подразделение содержит неравенство:
    СписокДатИзменений.ДатаИзменения > ВТДвиженияРаботников.Период
    При этом выполняется группировка по полям Сотрудник, Подразделение и СписокДатИзменений.ДатаИзменения, а поле ДатаНачалаДвижения получается путем применения к полю ВТДвиженияРаботников.Период агрегатной функции МАКСИМУМ.

    Временные таблицы ВТНачисленияРаботников, ВТИнтервалыНачисленийРаботников.
    – Аналогичны двум предыдущим таблицам. Аналогия для условия “НЕ уволен”: “Размер <> 0”.
    Дополнительно в обоих таблицах выбирается поле ВидРасчета.

    Результирующая таблица.
    Содержит поля, соответствующие колонкам табличной части документа.
    Получается путем внутреннего соединения последних 4-х таблиц. Таблицы интервалов
    соединяются по равенству дат ДатаИзменения, а каждая из них со “своей” таблицей движений – по
    равенству дат “ДатаНачалаДвижения” и “Период” (для движений работников, аналогичные поля –
    для движений начислений, но ещё для этих таблиц – по равенству полей “ВидРасчета”). Кроме того, очевидно, все соединения – по равенству полей Сотрудник и Подразделение. Дополнительно
    накладываются условия на таблицы движений: “Не уволен” и “Размер <> 0”.
    Поле ДатаНачала получается как наибольшее из соответствующих полей ДатаНачалаДвижения.
    Поле ДатаОкончания получается из поля ДатаИзменения как конец дня для конца месяца, либо, в остальных случаях, путем вычитания одной секунды.

    Если после всего написанного сам текст запроса может представлять интерес, могу его прислать.

    Только в этом случае сообщите, куда лучше всего его прислать: в данные комментарии или по другому адресу.

    • Отличное решение!

    • Конечно, трудно проверить корректность решения полностью в него не погрузившись, но объем проделанной работы очень впечатляет :)

  18. Павел Конов 21.03.2011 в 18:58

    а мой отчет не потерялся?

  19. Задание выполнил.
    1. Создал регистр сведений графики работы. Создал форму списка и на нее поместил кнопку заполнить со след. обработчиком :
     
    <cod>

    &НаКлиенте
    Процедура Заполнить(Команда)

    Перем ВидГрафика, Период;

    Период = Новый СтандартныйПериод;

    Если Не ВвестиЗначение(ВидГрафика, “Выбор вида графика”, Тип(“СправочникСсылка.ВидыГрафиков”)) Тогда
    Возврат;
    КонецЕсли;

    ВвестиЗначение(Период.ДатаНачала, “Выбор дата начала”, Тип(“Дата”));

    Если Не ВвестиЗначение(Период.ДатаОкончания, “Выбор дата окончания”, Тип(“Дата”)) Тогда
    Возврат;
    КонецЕсли;

    ЗаполнитьНаСервере(Период, ВидГрафика);

    Элементы.Список.Обновить();

    КонецПроцедуры
     
    &НаСервереБезКонтекста
    Процедура ЗаполнитьНаСервере(Период, ВидГрафика)

    Если ВидГрафика.Пустая() Тогда

    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = “Не выбран вид графика!”;
    Сообщение.Сообщить();

    Возврат;

    КонецЕсли;

    ДатаНачала = Период.ДатаНачала;
    ДатаОкончания = НачалоДня(Период.ДатаОкончания);

    Если Не ЗначениеЗаполнено(ДатаОкончания) Тогда

    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = “Не выбран период!”;
    Сообщение.Сообщить();

    Возврат;

    КонецЕсли;

    ВыходныеДниНедели = Новый Массив;

    Если ВидГрафика = Справочники.ВидыГрафиков.Пятидневка Тогда
    ВыходныеДниНедели.Добавить(6);
    ВыходныеДниНедели.Добавить(7);
    ИначеЕсли ВидГрафика = Справочники.ВидыГрафиков.Шестидневка Тогда
    ВыходныеДниНедели.Добавить(7);
    Иначе
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = “Неизвестный вид графика”;
    Сообщение.Сообщить();
    Возврат;
    КонецЕсли;

    Набор = РегистрыСведений.ГрафикиРаботы.СоздатьНаборЗаписей();
    Набор.Отбор.ВидГрафика.Установить(ВидГрафика);
    Набор.Прочитать();

    Пока ДатаНачала<=ДатаОкончания Цикл

    НоваяЗапись = Набор.Добавить();
    НоваяЗапись.ВидГрафика = ВидГрафика;
    НоваяЗапись.Дата = ДатаНачала;

    // Проверяем является ли текущая дата выходным днем для выбр. графика
    Если ВыходныеДниНедели.Найти(ДеньНедели(ДатаНачала)) = Неопределено Тогда
    НоваяЗапись.Значение = 1;
    Иначе
    НоваяЗапись.Значение = 0;
    КонецЕсли;

    ДатаНачала = ДатаНачала + 24*60*60;

    КонецЦикла;

    Набор.Записать();
     
    КонецПроцедуры // ЗаполнитьНаСервере()
    </cod>

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

  20. Задание выполнено.
    Выбор выходных дней реализовал списком значений и созданием перечисления. Т.е. надо добавить дни из перечисления, которые являются выходными. Сломал голову на тему того, как получить свойство порядок из строки ссылки на перечисление. Реализовал запросом. Но, хотелось бы прямо из списка значений, в котором содержаться ссылки на перечисление. Евгений, подскажите пожалуйста, как обратится к свойству порядок.
    Остальное задание выполнено заведением элементов и простановкой галочек. Насколько правильно это было сделано удастся понять только после реализации алгоритмов расчета.

    • Для решения задачи без запроса следует обратить внимание на класс ПеречислениеМенеджер.
      В нем есть метод Индекс.
      Обращение будет примерно таким:
      Перечисления.ВыходныеДни(ЗначениеСписка.Значение)

  21. Павел Конов 21.03.2011 в 07:04

    Выполнено.
     
    Задание достаточно простое, единственный вопрос возник вот с этой строкой задания.
    В управляемой форме пользователь должен указывать тип графика, какие дни являются выходными
    Я создал справочник “Выходные дни”, который заполняется пользователем. А в обработке команды “Заполнить график” делаю простейщий запрос с выгрузкой результата в таблицу значений.

    Запрос.Текст =
    “ВЫБРАТЬ
    | ВыходныеДни.Выходной
    |ИЗ
    | Справочник.ВыходныеДни КАК ВыходныеДни”;

    Результат = Запрос.Выполнить();

    Таблица = Результат.Выгрузить();

    И делаю дополнительную проверку в том же месте где мы проверяем день недели.
    и Таблица.Найти(НачДата,”Выходной”)=Неопределено

    небольшое замечание по 4 блоку Block4-Chapter05-lesson08-main

    Почему мы не подставляем сразу то подразделение где работает соотрудник, а делаем проверку, заставляя пользователя угадывать ? А  если сотрудник работает в нескольких подразделениях, можно вывсети их сообщением.
     
    ps Сложный блок, за счет логики, изначально заложенной разработчиками системы. Мне помогла вот эта выжимка, одного из наших коллег http://infostart.ru/public/75702/
     


     
     


     

    • Спасибо за информацию.
      Block4-Chapter05-lesson08-main проанализируем несколько позже..

  22. В обработке “Заполнение графика” для выбора выходных дней используем реквизит формы – список значений дней недели. Тип графика и период – реквизиты обработки. Регистр сведений заполняем с помощью менеджера записи. (Возник вопрос – когда использовать реквизит обработки, а когда реквизит формы, в чем разница между ними?).
    Начисления:
    Оклад по дням. Вытесняющие – отпуск, прогул. Ведущие – все.
    Отпуск. Базовые – оклад, премия. Ведущие -все.
    Прогул – нет.
    Премия. Базовые – оклад, отпуск. Ведущие – все.
    Смущает, что все начисления являются ведущими друг для друга, в том числе сами для себя (кроме прогула).

    • Ничего страшного, это нормальная ситуация.

  23. respublica 20.03.2011 в 23:54

    Задание выполнено. При создание объектов конфигурации проблем не возникло. При заполнении графика, чтобы записи предыдущих периодов не затирались, прочитанный набор записей выгружаю в таблицу значений, в нее добавляю новые или меняю старые по дате записи, потом эту таблицу значений загружаю в набор записей. Оклад, отпуск и отгул – основные начисления, премия – доп. начисления.
    Возник вопрос: а почему в типовой ЗиУП отказались от разделения на основные и доп. виды расчета?

    • respublica 22.03.2011 в 16:00

      Хочу узнать, мой отчет о выполнении домашнего задания уже два дня в режиме модерации. Отчет отклонен?

      • С отчетом все ок. На вопрос по ЗУП с ходу не могу ответить, пожалуй скопирую его в мастер-группу.

  24. Задание выполнил.
    Все необходимые объекты(планы видов расчета, регистры расчета) созданы и подготовлены к расчету ЗП. В уроках все доступно рассказано.
    В спр-ке ТипыГрафиков создал реквизит РабочихДнейВНеделе, который понадобился в обработке ЗаполнениеГрафиков.
    Создал обработку ЗаполнениеГрафиков. Сначала хотел сделать через Отбор по Дата с видом сравнения ИнтервалВключаяГраницы, но потом обнаружил в справке что для набора записей регистра сведений отбор по измерению может быть только виду сравнения Равно. Поэтому, чтобы иметь отбор по году, в регистре сведений определил реквизит Год. Таким образом заполнение года не затирает другие года.
    Создал документ “Начисление заработной платы” как это требовалось в задании.

    • Не очень нравилось у себя решение с измерением Год в регистре сведений. Переделал на запрос с условием:
      <code>

      НЕ ((ГрафикиРаботы.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания)
      | И (ГрафикиРаботы.ТипГрафика = &ТипГрафика))
      </code>
      Затем загружаю результат запроса в набор записей и записываю. Таким образом перед заполнением  очищаются все записи только за расчитываемый год. Такой вариант показался более правильным.

  25. Задание выполнил.
    1. Создал справочник ТипыГрафиков и регистр сведений ГрафикиРаботы. РС непериодичский с измерениями ТипГрафика, Дата и ресурсом Значение.
    Создал обработку с реквизитами Период (стандартный период), ТипГрафика и Выходные (список дней недели с пометками). Чтобы не потерять данные, не входящие в заданный период получаю их запросом к БД. Создаю НЗ накладываю на него отбор по ТипГрафика, загружаю в него данные запроса и добавляю к ним значения из выбранного интервала дат.
    2. Начисления ОкладПоДням, Отпуск и Прогул добавил в ПВР ОсновныеНачисления. Премия в ДополнительныеНачисления. Настройка свойств ОкладПоДням: Вытесняющие и Ведущие – Отпуск и Прогул; Отпуск: Базовые – ОкладПоДням и ПремияКвартальная, Вытесняющих нет; ПремияКвартальная: Базовые – ОкладПоДням, Ведущие – ОкладПоДням,Отпуск и Прогул.
    3. Создал документ НачислениеЗП и определил два регистра расчета. Измерения – Сотрудник и Подразделение, Ресурс – Значение. Реквизиты для РР ОсновныеНачисления – ТипГрафика и Размер, для РР ДополнительныеНачисления только Размер.
    С определением свойства Ведущие для ПВР возникли проблемы.  Например, устанавливать ли для вида расчета Отпуск в качестве ведущих виды расчета Оклад и Премия или нет? С одной стороны Вытесняющих расчетов для Отпуска нет, с другой стороны размер начислений Отпуска зависит от Оклада и Премии. Из каких соображений выставляеть флаг Ведущие?

    • Флаг “Ведущее” можно ставить если между видами расчета есть хоть какая-то зависимость, даже не прямая.
      То есть в случае Отпуска можно указать Оклад и Премию.
      Однако важно понимать, что этот флаг влияет только на механизм необязательных перерасчетов. То есть в нашей конфигурации флаги никакого смысла иметь не будут.

  26. Задание выполнил.
    Добавил справочник «ТипГрафика», добавил регистр сведений «Графики работы» , измерения справочник «ТипГрафик» и дата  , ресурс «значение».
    РС не периодический и не подчинен регистратору. Добавил обработку для заполнения выбранных графиков за определенный период с учетом выходных.
    Обеспечил заполнение данных регистра сведений данными за указанный период. Добавил план видов расчета «ОсновныеНачсиления» с  нужными флажками, т.е. указание периода действия и указание зависимости от базы по периоду действия.
    Также добавил план видов расчета «ДополнительныеНачисления». Добавил предопределенные виды расчета и настроил их свойства. Добавил регистры расчета «ОсновныеНачисления» и «ДополнительныеНачисления». Измерения «Сторудник», «Подразделение» , ресурс «Результат» и  реквизит «ПоказательРасчета», также для связи с графиком добавил реквизит «ТипГрафика» тип справочникссылка «ТипГрафика».
    Регистр расчета «ОсновныеНачисления» связал с регистром сведений  «ГрафикРаботы». Добавил документ «Начисление заработной платы» с указанными в задании реквизитами.
    Как я понял , если вид расчета должен вытеснять другой вид расчета по периоду действия то он должен находится в том же плане видов расчета , я насчет отпуска , т.к. во время отпуска работник вряд ли будет получать за этот же период оклад.
    Исходя из этого, вид расчета отпуск я поместил в ПВР основные начисления, и настроил вытеснения по ВР.
    

  27. Задание выполнено.Необходимые объекты конфигурации сформированы. В связи с тем, что в бухучете организован учет в разрезе организаций возникает вопрос:”Нужно ли будет учитывать начисление зарплаты по организациям?” Сейчас в задании расчеты привязываются к сотруднику и подразделению.

    • >Нужно ли будет учитывать начисление зарплаты по организациям?
      Нет, этого не требуется.

  28. Taranov-SI 20.03.2011 в 15:11

    Задание выполнено.   По главам возникли вопросы: к примеру почему бы не создать единый регистрСведений по сотрудникам с необходимыми несколькими ресурсами?
    Какие аргументы в пользу нескольких отдельных регистров по отношению к единому? А также  все же в качестве примера приводить какую-нибудь типовую конфигурацию, типа  “В УПП” -принято такое-то решение, а в….другое.

    • Правильно я понял, что предлагаете объединить сотрудников с их начислениями и удержаниями?
      Почему было сделано разделение на несколько регистров:
      начисления могут меняться, добавляться, удаляться, при этом сотрудник будет продолжать работать.

      То есть по сути, данные о том, что сотрудник работает и его начисления это разные сущности. Они конечно связаны, но имеют определенную степень свободы.

      Например, сотрудника Иванов приняли на работу, оклад 20 000 руб., через месяц оклад подняли до 30 000 руб.

  29. respublica 19.03.2011 в 10:36

    Выложите, пожалуйста, материалы 4 модуля на сайте (если они, конечно, изменились по сравнению с записанными на диске).

  30. А для скачивания материалов 4 модуля не будет? Очень уж удобно читать без лишнего шума от дисковода.