Что описано в приложенном файле:
1. Показан наглядный пример технического описания написанного кода. Часто подобные описания можно встретить напрямую в коде. Не буду скрывать, частично приложенный документ составлен благодаря наличию комментариев в коде. Это показывает, что комментировать код нужно обязательно! На сколько подробно - вопрос дискуссионный.
2. Описание структурировано. Разбито на отдельные функции. Функцией является какой-то алгоритм, который выполняет преобразование данных или заполнение объектов. Процедуры и функции одного алгоритма могут находиться в разных модулях.
3. Описание каждой функции содержит следующие разделы:
- Общее описание функции
- Требования к настройке/режиму выполнения
- Входные данные
- Выходные данные
- Описание алгоритмов выполнения и обработки
- Описание используемых объектов метаданных
- Используемые объекты НСИ
- Способ проверки работоспособности результата
- Ролевая модель.
По описанному примеру можно составить описание своих задач. Если у Вас сбор документации как-то автоматизирован, то публикация поможет структурировать информацию о доработках.
Сразу напишу чего в приложенном файле нет:
1. Ролевая модель для моей задачи не актуальна и не описывалась. Причина в том, что для каждого нового объекта создавались 2 роли, одна на чтение, вторая на запись.
2. Не описана структура метаданных, т.к. она раскрывает некоторые аспекты деятельности автоматизируемой организации. Она описана в отдельном файле. В приложенном файле описывается именно код.
Суть задачи кратко: "Расчет зарплаты водителей по путевым листам".
Как видно из названия, задача очень популярна везде, где много водителей. Это и транспортные компании, логистические, автобусные парки по всей стране, собственные службы доставки, как в магните, большой транспортный цех на крупных производственных площадках и т.д. Именно по этой причине решил, что данное описание и, в целом идея реализации такой задачи, может быть интересна.
Раскроем немного суть задачи. Разобьём её на этапы:
1. Учет путевых листов где-то в транспортном блоке. Если это на 1С, то конфигурация УАТ. Где-то используют самописные системы, часть организаций работает в SAP.
2. Консолидация данных для учета времени и расчета зарплаты по путевым листам на стороне ЗУП.
3. Учет отработанного времени по путевым листам.
4. Расчет зарплаты и взносов по путевым листам.
5. Отражение затрат по путевым листам.
6. Передача данных о начисленной зарплате, налогах и взносах в бухгалтерскую учетную систему.
Исходно компанией использовался SAP для учета по всем блокам. На стороне SAP были следующие глобальные проблемы:
-- Процесс преобразования данных путевых листов в отработанное время был ежедневным и занимал всю ночь. Т.е. создавалась чрезмерная нагрузка на обычные действия. Эта проблема полностью устранена. Процесс формирования табелей занимает считанные минуты 2 раза в месяц.
-- Расчет зарплаты также занимал довольно длительное время, т.к. рассчитывался каждый путевой лист в отдельности. Этот этап на текущий момент и остался проблемным. Это связано с не оптимальностью кода обработки "Менеджер данных учета времени". Т.к. строк в табличной части много, на каждую строку получаются данные графиков и отсутствий. Этот процесс можно было бы организовать по другому. Не важно сколько по сотруднику строк, данные можно получить за 1 раз.
-- Неоптимальная структура вспомогательных таблиц в SAP. Для получения вида времени, вида начисления и тарифа использовались 2 настроечные таблицы, в которых суммарно более 50 тыс строк. Такие таблицы и администрировать сложно и время получения данных они увеличивают в разы. Эта проблема была решена более грамотной архитектурой. Весь объём настроек был распределен по разным объектам метаданных, часть перенесено в код через предопределенные элементы.
Теперь кратко опишу решения по каждому блоку:
1. В моём случае первоисточником данных по путевым листам является УАТ. Данные из УАТ приходят 2 раза в месяц. Данные по увольняемым сотрудникам приходят дополнительно в день увольнения.
2. Для консолидации данных по путевым листам создан документ "Реестр путевых листов". Его задача - собрать данные по путевым листам в разрезе подразделений и положить данные в регистр сведений, на основании которого далее решаются задачи с отработанным временем.
3. Для учета и обработки данных отработанного времени по путевым листам создан дополнительно документ "Управленческий табель". Его задачи следующие:
-- Преобразование данных путевых листов в отработанные часы по видам времени.
-- Заполнение данных об условиях труда и классах условий труда.
-- Получение показателей отработанного времени для расчета доплат.
-- Отражение отработанного времени сотрудников, которые перешли временно в другое подразделение без кадрового перевода.
-- Объединение сотрудников, работающих по путевым листам с сотрудниками, работающими на повременной системе оплат труда.
На основании управленческого табеля формируется регламентированный табель. Его заполнение полностью автоматизировано. При этом регламентированный табель остаётся полностью типовым.
4. Для обеспечения расчета зарплаты по путевым листам была доработана обработка "Менеджер расчета зарплаты". Доработаны следующие функции:
-- Получение данных об отработанном времени и показателях расчета зарплаты по путевым листам.
-- Разбивка начислений, выполняемых если введены вид времени, по дням и путевым листам.
-- Разбивка начислений, выполняемых если введено значение показателя по дням и путевым листам.
-- Подмена отработанного времени в те даты, когда в один день несколько путевых листов.
-- Подмена подразделений по сотрудникам, которые работали в другом подразделении без кадрового перевода.
-- Получение тарифа начислений в зависимости от вида выполняемой работы.
5. Для отражения затрат по путевым листам были приняты следующие технические решения:
-- К каждому способу отражения привязывается через новый реквизит путевой лист. Это позволяет не менять механизм передачи данных в бухгалтерскую систему.
-- Начисление зарплаты разбивается по путевым листам благодаря использованию типового реквизита "Документ основание". Это позволяет разбить начисления по путевым листам и не протягивать через все модули новую аналитику.
-- Благодаря первым двум решениям, с помощью минимальных изменений в коде выполняется подмена способа отражения, заполненного типовым способом на способ отражения связанный с путевым листом через "Документ основание".
6. Все описанные выше решения позволили заполнить документ "Отражение зарплаты в бухучете" полностью типовым способом без единой строки кода!
Подведем итоги...
Решение имеет следующие плюсы:
1. За счет использования типовых объектов удалось сократить количество доработок.
2. При переходе с SAP на 1С:ЗУП 3 удалось сильно сократить время обработки данных об отработанном времени.
3. Настройки получения видов времени, видов начислений и размера тарифов распределены по разным этапам.
Но и ложка дёгтя также есть: за счет того, что строки начислений разбиваются по дням и путевым листам, время расчета существенно увеличивается. Причина в том, что алгоритм получения отработанного времени в типовой обработке "Менеджер данных учета времени" реализован не оптимально. В целом задача требует участия эксперта по технологическим вопросам.
Полезные публикации на технические темы:
Работа с контактной информацией.
Универсальный шаблон для загрузки данных из Excel и подбора ссылок в любой конфигурации.
Пример работы с файлами odt в клиент-серверной модели работы
Проверено на следующих конфигурациях и релизах:
- Зарплата и управление персоналом КОРП, редакция 3.1, релизы 3.1.29.78