При автоматизации торговых и складских операций нередко возникает задача: весовой товар поступает от поставщика общей массой в килограммах (например, сахар 100 кг), затем расфасовывается в потребительские пакеты различной емкости (1 кг, 2 кг, 5 кг) и отгружается клиентам поштучно. При этом складскому персоналу необходим строгий количественный учет остатков по каждой отдельной упаковке, а бухгалтерия требует отражения всех движений и остатков исключительно в килограммах по единой весовой позиции.
Разберем, почему добавление дублирующих регистров остатков не является оптимальным решением на платформе 1С 7.7, проанализируем типовые механизмы единиц измерения и рассмотрим по шагам наиболее эффективный способ реализации задачи с минимальными доработками конфигурации.
Первая идея, которая часто возникает у разработчиков — создать параллельный регистр для хранения остатков в килограммах или добавить новые измерения в существующий регистр ОстаткиТМЦ. Рассмотрим, почему этого делать не следует:
RG*.DBF). В формате DBF действует строгое ограничение на максимальный размер файла в 2 ГБ, превышение которого приводит к повреждению информационной базы.Проанализируем базовый функционал конфигурации. В типовой «Торговля и Склад 7.7» для одной номенклатурной позиции можно создать несколько единиц измерения в подчиненном справочнике Единицы:
Ограничение метода: Данный подход идеален, если на складе не требуется вести раздельный учет доступных остатков конкретных упаковок. Однако если на складе лежит 30 пакетов по 1 кг и 10 пакетов по 5 кг, система будет видеть общий остаток в 80 кг. Если клиент закажет 80 пакетов по 1 кг, типовой контроль остатков пропустит проведение документа, хотя физически мелких упаковок на складе нет.
Наиболее надежным и простым в реализации решением является создание отдельных элементов справочника для каждого вида фасовки с привязкой к родительскому весовому товару через специальный реквизит. Это позволяет вести точный штучный учет на складе, оформлять операции фасовки документом КомплектацияТМЦ и прозрачно консолидировать данные при выгрузке в бухгалтерию.
Разберем по шагам реализацию данного механизма:
Номенклатура и добавляем новый реквизит ОбъединеннаяКарточка с типом Справочник.Номенклатура.ОбъединеннаяКарточка должен ссылаться на сам текущий элемент. Для фасованных товаров («Сахар 1 кг», «Сахар 5 кг») в этом реквизите указываем ссылку на базовый «Сахар-песок весовой». Базовой единицей для всех позиций устанавливаем «кг».
спр = СоздатьОбъект("Справочник.Номенклатура");
спр.ВыбратьЭлементы();
Пока спр.ПолучитьЭлемент() = 1 Цикл
Если спр.ЭтоГруппа() = 0 Тогда
Если ПустоеЗначение(спр.ОбъединеннаяКарточка) = 1 Тогда
спр.ОбъединеннаяКарточка = спр.ТекущийЭлемент();
спр.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
Посмотрим, как быстро модифицировать отчеты (например, «Ведомость по остаткам ТМЦ» или «Анализ продаж») для сверки остатков с бухгалтерией. В платформе 1С 7.7 встроенный язык запросов («черный запрос») позволяет группировать данные по реквизитам объектов через точку.
В тексте запроса отчета заменяем обращение к измерению регистра:
// Исходный фрагмент запроса:
// |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
// Измененный фрагмент для консолидации:
|Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура.ОбъединеннаяКарточка;
|Группировка Номенклатура без групп;
При таком подходе отчет автоматически свернет все фасовки («Сахар 1 кг», «Сахар 2 кг», «Сахар 5 кг») в одну строку «Сахар-песок весовой», просуммировав их вес в килограммах.
Рассмотрим важные нюансы, которые необходимо учесть при синхронизации с бухгалтерской информационной базой:
Номенклатура.ОбъединеннаяКарточка вместо Номенклатура, а количество передавать в базовых единицах (кг).КомплектацияТМЦ. Это позволит не только списать исходный вес сырья и оприходовать готовые пакеты, но и включить в себестоимость фасовки упаковочные материалы (пакеты, этикетки).