Просматривая на сайте KWORK заявки на разработку программного обеспечения, я нашел интересный запрос, по видимому от самозанятого или предпринимателя, у которого есть своё небольшое производство: нужна простая программа для анализа рентабельности производственного процесса, по сути – учет затрачиваемых материалов и сравнение с прибылью, получаемой от реализации готовой продукции. Конечно, для полного анализа необходимо также учитывать расходы на электроэнергию, аренду помещения, амортизацию оборудования, налоги и т.д., но в некоторых случаях достаточно контролировать только материалы и готовую продукцию.

Несмотря на большое количество программ учёта, в том числе бесплатных, люди ищут то, что подходит именно им. И когда таблички в MS Excell перестают их устраивать, а покупать 1C или платить ежемесячную мзду за онлайн сервисы они не готовы, то у разработчиков платформы My Visual Database появляется шанс предложить им оптимальное решение.

Теория

Когда речь заходит об учете прибыли, первым делом встаёт методика расчета себестоимости. Задача была бы тривиальная в случае, когда цена используемых материалов не меняется, а производство не имеет брака. Но в реальности всё сложней: цены закупки постоянно меняются, а технологии производства дают сбои, в результате которых часть сырья, а порой и готовой продукции, приходится списывать.

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

Партия товара – это товар определенной номенклатуры с определенной ценой закупки.

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

  • Остатки на складе
  • Объемы производства
  • Объемы закупок/продаж
  • Прибыль/убыток

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

Схема данных

Обозначим перечень сущностей, необходимых для реализации проекта.

  • Тип номенклатуры –itemType
  • Номенклатура – item
  • Комплектующие – productItem
  • Партия материала/товара – pItem
  • Тип контрагента – contrType
  • Контрагент – contr
  • Тип документа – docType
  • Документ – operDoc
  • Бухгалтерская операция (детализация документа) – oper

Справочники docType и contrType являются служебными – в этих таблицах значение поля ID используется в логике работы программы. Поэтому они заполняются автоматически при первом запуске приложения и не редактируются. Остальные таблицы являются пользовательскими и для каждой из них имеется форма табличного представления и форма редактирования. Рассмотрим их подробней.

itemType

Тип номенклатуры добавлен для двух целей:

  1. Разделить материалы (isProduct = 0) и готовую продукцию (isProduct = 1)
  2. Фильтровать и группировать номенклатуру для удобства поиска и анализа

item

Номенклатура относится к определенному типу (id_itemType), имеет обязательное название (name) и необязательный артикул (code)

productItem

Состав продукции – это перечень номенклатурных единиц (id_item1), которые входят в состав данной продукции (id_item) с указанием количества (qty). Данный справочник не является обязательным, но помогает создавать документы для списания материалов на производство – он как содержит нормативные требования и облегчает планирование производства. Его можно использовать для оценки материальных запасов на предмет количества продукции, которое можно из них произвести. Но планирование производства – это отдельная тема, которая в данном проекте раскрываться не будет.

pItem

Партия позволяет объединять различные действия в единый процесс. Это звучит как политический лозунг, то на самом деле это способ облегчить формирование SQL-запроса для осуществления некоторых действий: определение цены закупки/производства, контроль остатков, подсчет прибыли/убытка.

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

operDoc

Документ включает традиционные обязательные поля: тип документа (id_docType), дата (docDate), номер (docNum), откуда (id_contr) и куда (id_contr1) движутся материалы или товар. Также имеется необязательное поле для комментария (comment).

oper

Детализация документа (бухгалтерская операция) содержит связь с документом (id_operDoc), ссылку на партию (pItem), а также сведения о количестве (qty) и сумме (amount). При необходимости сведения о цене будут вычисляться по формуле: <Цена> = <Сумма> / <Количество>

contr

Контрагентом могут быть поставщики, покупатели, а также склады и производственные цеха предприятия. Контрагентов может быть много (если требуется аналитика по разным контрагентам), а может быть по одному каждого типа (id_contrType). Так как программа служит только для учета производства, то у контрагентов только одно поле с реквизитами – название (name).

Используем наработки

Ранее в нескольких статьях разбирались различные технические приёмы, которые хотелось бы использовать и в других проектах, в частности в данной программе. Для этого я скопирую все папки проекта ClassExplorer, кроме папки Extras, в папку проекта Production. После чего создам в Notepad++ папку нового проекта и наполню его файлами из скопированных папок. Для этого используем пункт всплывающего меню “Добавить файлы из директории..”

После чего выполнить последовательно следующие действия

Удалить из проекта:

  • script.dcu
  • script.pas

Удалить из проекта и папок на диске:

  • Все файлы в папке Forms, кроме Forms.pas и Main.pas
  • Вложенные папки в папке Tools, кроме DBG (отладчик)

Откорректировать файлы, приведя в соответствие секции uses, перечни переменных и констант, а также удалив ненужные процедуры и функции:

  • ConstVar.pas
  • UserApp.pas
  • Forms\Forms.pas
  • Forms\Main.pas
  • Tools\Tools.pas
На самом деле чистка кода оказалась кропотливым и долгим занятием, а всё потому, что компилятор в режиме использования модулей в некоторых случаях не может точно показать место, в котором находится ошибка. Это один из главных недостатков использования модулей, который может свести с ума. Поэтому я буду перекраивать модули до тех пор, пока не выработается простая, чёткая и ясная последовательность действий, позволяющая переносить скрипты из одного проекта в другой.

После обновления сведений о названии проекта и его версии, я заменил файлы логотипов на более подходящие по тематике. В результате программа-заготовка готова для наращивания функциональности.

Главная форма и форма “О программе” со стилем AquaLightSlate

Продолжение следует.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *