Как правильно организовать учет количества оборудования в 1С?

Программист 1С v8.3 (Управляемые формы) Управленческий учет IT и автоматизация бизнеса
← На главную

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

Почему хранение остатков в справочнике — это плохая идея?

Рассмотрим причины, по которым профессионалы никогда не используют справочники для хранения количественных данных:

  1. Блокировки базы данных. Если несколько пользователей одновременно проводят документы поступления, система будет пытаться обновить одну и ту же запись в справочнике. Это создает конкуренцию за доступ к строке таблицы, что приводит к блокировкам и ощутимым «тормозам» в работе всей учетной системы.
  2. Проблемы с целостностью данных. Что произойдет, если документ будет распроведен или удален? Вам придется писать сложную логику отмены операций. При использовании специальных объектов 1С — Регистров накопления — платформа берет эти задачи на себя, автоматически пересчитывая остатки при изменении движений документа.
  3. Отсутствие аналитики. В справочнике вы видите только «сухой остаток» на текущий момент. Вы не сможете ответить на вопросы: «Кто именно привез это оборудование?», «Каким документом оно поступило?», «Каков был остаток месяц назад?».

Как реализовать количественный учет правильно?

Для решения подобных задач в платформе 1С предусмотрен специальный объект — Регистр накопления с видом Остатки. Давайте рассмотрим пошаговый алгоритм реализации.

Шаг 1. Создание регистра накопления

Сначала создадим Регистр накопления, назовем его, например, ОстаткиОборудования. В него мы добавим:

Шаг 2. Настройка проведения документа

Теперь нам нужно научить наш документ Поступление делать записи в этот регистр. Перейдем в Модуль объекта документа в процедуру ОбработкаПроведения. Именно здесь мы опишем логику движений:


Процедура ОбработкаПроведения(Отказ, Режим)
    // Создаем набор записей для регистра
    Движения.ОстаткиОборудования.Записывать = Истина;
    
    // Перебираем товары в табличной части документа
    Для Каждого Стр Из Оборудование Цикл
        Движение = Движения.ОстаткиОборудования.Добавить();
        Движение.Период = Дата;
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Оборудование = Стр.Оборудование;
        Движение.Количество = Стр.Количество;
    КонецЦикла;
КонецПроцедуры

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

Шаг 3. Как посмотреть остатки?

Раз мы договорились не хранить количество в справочнике, возникает вопрос: как пользователю увидеть, сколько оборудования у него на руках? Для этого существует два основных способа:

  1. Отчеты на базе СКД (Система Компоновки Данных). Это самый правильный инструмент. Создайте отчет, который обращается к виртуальной таблице Остатки вашего регистра. Это позволит пользователю формировать отчеты на любую дату и в любых разрезах.
  2. Динамический список. Если очень хочется видеть остатки прямо в форме списка справочника, не нужно менять структуру справочника. В форме списка можно использовать Динамический список с произвольным запросом, который будет соединять справочник с виртуальной таблицей регистра.

Пример запроса для Динамического списка:


ВЫБРАТЬ
    Спр.Ссылка,
    Спр.Наименование,
    ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК КоличествоНаСкладе
ИЗ
    Справочник.Оборудование КАК Спр
ЛЕВОЕ СОЕДИНЕНИЕ
    РегистрНакопления.ОстаткиОборудования.Остатки(&Период, ) КАК Остатки
ПО
    Спр.Ссылка = Остатки.Оборудование

Подведем итоги

Использование Регистров накопления — это фундамент профессиональной разработки в 1С. Такой подход позволяет системе работать быстро, исключает конфликты при многопользовательской работе и дает возможность строить любую сложную аналитику. Старайтесь избегать соблазна «упростить» архитектуру, так как это всегда приводит к проблемам при масштабировании данных и росте количества операций. Опираясь на механизмы платформы, вы создадите надежное и масштабируемое решение.

← На главную