Как эффективно учитывать химическое сырье в бочках с уникальными QR-кодами и переменным весом в 1С:ERP, сохраняя связь с 1С:LIMS?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет Промышленность, строительство и АПК
← На главную

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

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

Понимание проблемы: Конфликт группового и индивидуального учета

Основная сложность заключается в необходимости совместить два противоречивых требования к учету:

  1. Индивидуальный учет каждой бочки: Мы должны иметь информацию о весе каждой конкретной бочки, на каждую бочку должен печататься уникальный QR-код, считывая который, можно получить все данные из базы. Это подразумевает, что каждая бочка является отдельным объектом учета.
  2. Групповой учет по сериям поставщика: Сырье поставляется сериями, где несколько бочек (например, до 40) могут принадлежать к одной серии поставщика. Модуль 1С:LIMS привязывает результаты анализов, статус годности и паспорта качества именно к этой серии поставщика.

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

Таким образом, наша задача — найти решение, которое позволит одновременно и индивидуально отслеживать каждую бочку, и сохранять целостность учета по сериям поставщика для LIMS.

Двухуровневый серийный учет: Разделение понятий

Ключ к решению проблемы заключается в абстрагировании от синонимов и четком разграничении понятия "серия поставщика" от "серии учета" или "индивидуального идентификатора" в нашей системе. Мы будем использовать двухуровневый подход.

Использование "Группы серий" или логического разделения

Давайте рассмотрим концепцию, где серия поставщика выступает как групповой признак для целей LIMS и общего понимания партии, а внутренний идентификатор или "серия учета" — как серийный номер конкретного изделия (бочки). Мы можем провести аналогию с телевизором: есть партия выпуска (номенклатурная группа или серия поставщика) и есть серийный номер конкретного изделия (индивидуальная бочка).

Как это можно реализовать в 1С:ERP:

  1. Вариант 1: Вложенный идентификатор в поле "Серия"

    Этот подход предполагает объединение информации о серии поставщика и индивидуальном идентификаторе бочки в одном поле "Серия" объекта 1С. Мы можем создать уникальную строку серии, которая будет включать в себя оба идентификатора.

    • Механизм: При поступлении сырья, для каждой физической бочки генерируем уникальный идентификатор. Этот идентификатор затем объединяется с серией поставщика (которая является общей для всей партии) в одно строковое значение, которое и будет использоваться как "серия" в 1С:ERP. Например, если серия поставщика XYZ123, то индивидуальные серии бочек будут XYZ123/001, XYZ123/002, XYZ123/003 и так далее.
    • Преимущества:
      • Сохраняется серийный учет для каждой бочки, что позволяет привязать к ней уникальный QR-код.
      • В строке серии содержится вся необходимая информация для дальнейшей аналитики и отчетов (можно легко выделить серию поставщика и номер бочки).
      • Сотрудники склада будут работать с уникальными кодами, но смогут визуально определить принадлежность к общей серии.
    • Недостатки:
      • Табличные части документов все равно будут содержать множество строк (по одной на каждую бочку).
      • Требуется доработка логики для работы с LIMS, чтобы он мог "выделять" из объединенной строки серии только ту часть, которая относится к серии поставщика.
    • Пример использования:

      Предположим, у нас есть поле Номенклатура.Серия. Мы можем настроить его заполнение таким образом:

      
      // При поступлении товара
      // Предположим, у нас есть СерияПоставщика = "BATCH202301"
      // ИдентификаторБочки = 1, 2, 3...
                      
      Для Каждой Бочки Из Поставки Цикл
          УникальныйИдентификаторБочки = СформироватьУникальныйНомерБочки(); // Генерация, например, 001, 002
          СерияУчета = СерияПоставщика + "/" + УникальныйИдентификаторБочки;
                          
          // Записываем СерияУчета в поле Серия для данной бочки
          // Например, в табличную часть документа поступления
          // НоваяСтрокаТЧ.Серия = СерияУчета;
          // НоваяСтрокаТЧ.Количество = 1;
          // НоваяСтрокаТЧ.Вес = ФактическийВесБочки;
      КонецЦикла;
      

      При печати QR-кода на бочку мы будем использовать значение СерияУчета. При считывании QR-кода мы получим это значение и сможем извлечь как серию поставщика, так и индивидуальный номер бочки для получения всей информации.

  2. Вариант 2: Использование характеристик номенклатуры

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

    • Механизм: Мы можем использовать характеристики номенклатуры для указания, например, "Полная бочка" или "Неполная бочка". Однако, если нам нужно хранить уникальный вес для каждой конкретной неполной бочки, то количество характеристик быстро вырастет, что сделает учет громоздким. Например, нам придется создавать характеристики типа "Бочка 50 кг", "Бочка 75 кг" и т.д., что не решает задачу уникальной идентификации.
    • Недостатки:
      • Характеристики не обеспечивают уникального серийного номера для каждой бочки, необходимого для QR-кодов.
      • Плохо масштабируется для множества бочек с разными индивидуальными весами.
      • "Сумма" в 1С:ERP, как правило, используется для денежных сумм, а не для физического веса в килограммах. Поэтому предложение хранить килограммы в "сумме", а бочки в "количестве" не подходит для стандартного функционала.
  3. Вариант 3: Отдельный регистр или расширение объекта "Серия" (требует доработки)

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

    • Механизм:
      • Создать отдельный справочник или регистр сведений, который будет хранить уникальные идентификаторы каждой бочки (например, ИдентификаторБочки).
      • В этом справочнике (или регистре) мы сможем хранить всю необходимую информацию о каждой бочке: ее уникальный номер, фактический вес, ссылку на серию поставщика, статус LIMS и т.д.
      • Поле "Серия" стандартного объекта 1С может быть использовано для серии поставщика, а связь с уникальным идентификатором бочки будет осуществляться через дополнительный реквизит или регистр.
    • Преимущества:
      • Максимальная гибкость в хранении данных для каждой бочки.
      • Четкое разделение понятий "серия поставщика" и "индивидуальная бочка".
      • Может упростить работу LIMS, так как стандартные "серии" будут соответствовать сериям поставщика.
    • Недостатки:
      • Требует значительных доработок конфигурации 1С:ERP.
      • Необходимо будет перестраивать документы товародвижения для работы с новым механизмом учета бочек.

Исходя из требований, оптимальным представляется Вариант 1 (вложенный идентификатор в поле "Серия"), так как он использует стандартный механизм серийного учета, минимизируя глобальные доработки, но требует адаптации для LIMS и процессов ввода данных.

Учет переменного веса неполных бочек

Для учета фактического веса каждой бочки, которая может быть неполной, 1С:ERP предлагает гибкие механизмы:

В системе 1С:ERP поддерживается учет товаров с переменными размерами, такими как рулоны или отрезки. Эта функциональность может быть адаптирована и для бочек. В случае, если каждая бочка получает свою уникальную "серию" (как в Варианте 1: СерияПоставщика/ИдентификаторБочки), то в этой серии может храниться не только ее уникальный номер, но и фактический оставшийся вес или количество материала. Система позволяет настроить различные единицы измерения и упаковки, включая вложенные структуры, а также автоматический пересчет между ними.

  1. Серийный учет с фактическим весом

    Если мы выбираем подход с индивидуальной "серией" для каждой бочки (например, XYZ123/001), то именно в рамках этой серийной записи мы можем хранить фактический вес данной конкретной бочки. В 1С:ERP при партионном или серийном учете можно указывать количество в базовых единицах (например, штуки) и дополнительную информацию (вес, объем) в других единицах измерения, которые могут быть привязаны к серии.

    • Механизм:
      • При поступлении, для каждой бочки вводится ее индивидуальная "серия" (СерияПоставщика/ИдентификаторБочки).
      • Количество по этой серии устанавливается как "1 бочка" (в единице измерения "бочки").
      • Одновременно для этой же серии указывается ее фактический вес в килограммах.

      Таким образом, в системе будет четко зафиксировано: "Серия XYZ123/001: 1 бочка, вес 180 кг"; "Серия XYZ123/002: 1 бочка, вес 150 кг" и т.д.

    • Преимущества:
      • Точный учет каждой бочки и ее индивидуального веса.
      • Возможность печатать QR-код, содержащий серию и информацию о весе.
      • Поддержка стандартными механизмами 1С:ERP для учета по сериям.

Интеграция с 1С:LIMS и автоматизация

Одной из ключевых сложностей является необходимость интеграции нового подхода с модулем 1С:LIMS, который уже настроен на работу с "сериями поставщика".

Сохранение логики 1С:LIMS

Мы должны сохранить текущий механизм привязки LIMS к серии поставщика. Это позволит модулю 1С:LIMS продолжать работать с результатами анализов, статусом годности и паспортами партии для группы бочек, как он это делал ранее. Если LIMS настроен на работу с серией поставщика (например, XYZ123), то эта связь может быть сохранена, а индивидуальный учет бочек (XYZ123/001) будет дополнением к ней.

Подход: Продолжаем хранить паспорта и статусы годности, привязанные к "серии поставщика". Это означает, что для LIMS серия XYZ123 является единицей контроля качества.

Автоматизация процессов для LIMS

Сотруднику лаборатории будет сложно устанавливать статус и прикреплять паспорт на все 40 бочек одной партии, если каждая из них имеет свой уникальный внутренний идентификатор. Здесь нам потребуется доработка для оптимизации их работы.

  1. Разработка обработки для LIMS

    Решение: Разработайте специальную обработку (инструмент), которая будет использоваться сотрудником лаборатории. Эта обработка позволит ему работать с "серией поставщика" (например, XYZ123) как с единым объектом, но при этом автоматически применять все действия (установка статуса "годен/негоден", прикрепление паспорта) ко всем индивидуальным "бочковым" сериям (XYZ123/001, XYZ123/002 и т.д.), которые относятся к этой серии поставщика.

    • Функционал обработки:
      • Сотрудник выбирает "серию поставщика".
      • Обработка автоматически находит все индивидуальные "бочковые" серии, относящиеся к данной серии поставщика (например, путем парсинга строки серии XYZ123/001).
      • При установке статуса годности или прикреплении паспорта, обработка программно обновляет соответствующие поля или создает необходимые документы для каждой из найденных индивидуальных бочковых серий.
    • Использование программных возможностей 1С:

      Мы можем использовать запросы для получения списка индивидуальных серий, связанных с одной серией поставщика. Затем для каждой найденной серии можно программно изменить реквизиты или создать нужные документы.

      
      // Примерный псевдокод для обработки
      Функция ПолучитьИндивидуальныеСерииПоСерииПоставщика(СерияПоставщика)
          // Запрос к регистру накопления или справочнику серий
          // для получения всех серий, начинающихся с СерияПоставщика + "/"
          Запрос = Новый Запрос;
          Запрос.Текст = 
              "ВЫБРАТЬ
              |    СерииНоменклатуры.Ссылка КАК Серия
              |ИЗ
              |    Справочник.СерииНоменклатуры КАК СерииНоменклатуры
              |ГДЕ
              |    НачалоСтроки(СерииНоменклатуры.Наименование, &СерияПоставщикаНачало)";
          Запрос.УстановитьПараметр("СерияПоставщикаНачало", СерияПоставщика + "/");
                          
          Результат = Запрос.Выполнить().Выгрузить();
                          
          Возврат Результат;
      КонецФункции;
                      
      // В обработке по нажатию кнопки "Установить статус"
      СерияПоставщикаДляРаботы = "XYZ123"; // Получаем от пользователя
      СписокИндивидуальныхСерий = ПолучитьИндивидуальныеСерииПоСерииПоставщика(СерияПоставщикаДляРаботы);
                      
      Для Каждой СтрокиСерии Из СписокИндивидуальныхСерий Цикл
          ТекущаяСерия = СтрокаСерии.Серия;
          // Здесь вызываем методы LIMS или изменяем реквизиты СерииНоменклатуры
          // Например, УстановитьСтатусГодности(ТекущаяСерия, "Годен");
          // ПрикрепитьПаспорт(ТекущаяСерия, ПутьКПаспорту);
      КонецЦикла;
      

      Также можно настроить печатные формы паспортов, чтобы они агрегировали информацию по серии поставщика, но при необходимости могли выводить детализацию по каждой отдельной бочке.

  2. Оптимизация ввода данных при поступлении

    Ручной ввод 100 индивидуальных серий для каждой поставки будет крайне трудозатратным и подвержен ошибкам. Процесс создания индивидуальных серий для каждой бочки необходимо автоматизировать.

    • Решение: Разработайте обработку для автоматического создания индивидуальных серий при поступлении товара.
      • При поступлении новой партии сырья (одной "серии поставщика") оператор указывает общую информацию: номенклатуру, серию поставщика, общее количество бочек и, возможно, общий или средний вес.
      • Обработка автоматически генерирует уникальные идентификаторы для каждой бочки (например, последовательные номера 001, 002, ...).
      • Формирует полные "серии учета" (СерияПоставщика/001, СерияПоставщика/002 и т.д.).
      • Автоматически заполняет табличную часть документа поступления, создавая по одной строке на каждую бочку с ее уникальной серией и предполагаемым весом (который затем может быть скорректирован по факту взвешивания).
    • Использование программных возможностей 1С:

      Мы будем работать с табличной частью документа поступления товаров, программно создавая новые строки и заполняя поля Номенклатура, Количество (1 бочка), ЕдиницаИзмерения (бочка/шт), Серия (СерияПоставщика/ИдентификаторБочки) и Вес.

      
      // Примерный псевдокод для обработки поступления
      // В обработке по нажатию кнопки "Заполнить серии бочек"
      ДокументПоступления = Объект.Ссылка; // Текущий документ поступления
      НоменклатураПоставки = ...; // Выбираем номенклатуру
      СерияПоставщика = ...;     // Вводим серию поставщика
      КоличествоБочек = ...;     // Вводим общее количество бочек
                      
      Для Инд = 1 По КоличествоБочек Цикл
          НоваяСтрока = ДокументПоступления.Товары.Добавить();
          НоваяСтрока.Номенклатура = НоменклатураПоставки;
          НоваяСтрока.Количество = 1; // Одна бочка
          // НоваяСтрока.ЕдиницаИзмерения = ПолучитьЕдиницуИзмеренияБочка();
                          
          УникальныйНомерБочки = Формат(Инд, "ЧЦ=3; ЧВН=; ЧГ=0"); // Например, 001, 002
          НоваяСтрока.Серия = СерияПоставщика + "/" + УникальныйНомерБочки;
                          
          // Предполагаемый или средний вес, который затем можно скорректировать
          // НоваяСтрока.Вес = СреднийВесБочки; 
      КонецЦикла;
      // ДокументПоступления.Записать();
      

Отражение в документах и отчетности

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

  1. Оптимизация табличных частей и печатных форм

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

    • Настройка отчетов:
      • В отчетах по остаткам и движению можно выводить общую сумму килограммов и общее количество бочек для каждой "серии поставщика".
      • Пользователь сможет "развернуть" данные по серии поставщика, чтобы увидеть детализацию по каждой конкретной бочке с ее уникальным QR-кодом и точным весом.
    • Настройка печатных форм:
      • Печатные формы могут быть разработаны таким образом, чтобы по умолчанию показывать агрегированные данные (например, "Серия XYZ123: 40 бочек, общий вес 7200 кг").
      • При необходимости, можно предусмотреть опцию вывода детальной информации по каждой бочке в составе этой серии (например, отдельный список бочек с их весом и QR-кодами).

Заключительные мысли: Выбор решения и доработки

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

Критически важно определить, какая "серия" для вашей организации является первичной для оперативного учета и отслеживания физических остатков (индивидуальная бочка), а какая — для целей контроля качества и документации (серия поставщика для LIMS).

Как показывает практика, в аналогичных случаях (например, учет пленки в рулонах) часто приходится идти по пути доработок конфигурации. Это может включать:

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

← На главную