Как организовать учет денежных средств в разрезе сотрудников или пользователей в 1С

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

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

Выбор типа данных для измерения регистра

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

Разберем, почему в профессиональной разработке чаще выбирают справочник Физические лица или Сотрудники:

  1. Юридическая значимость: Договор о материальной ответственности заключается с физическим лицом, а не с логином в базе данных.
  2. Смена учетных записей: Если сотрудник уволится и на его место придет другой, или если одному человеку создадут новую учетную запись, история движений по физическому лицу сохранится в неразрывном виде.
  3. Универсальность: Типовые механизмы 1С (например, расчеты с подотчетными лицами) всегда строятся на базе физических лиц.

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

Реализация механизма "личного остатка"

Рассмотрим ситуацию: сотрудник принял 1000 рублей, сдал их в центральную кассу, его личный баланс стал равен нулю. Позже выяснилось, что сумма в чеке была 1010 рублей. После исправления документа у сотрудника должен возникнуть долг в 10 рублей. Чтобы это работало корректно, мы должны использовать Регистр накопления (вид: Остатки).

Проанализируем структуру регистра:

Важный момент: чтобы остаток менялся только у создателя документа, нельзя определять "текущего пользователя" непосредственно в коде проведения через ПараметрыСеанса. Это распространенная ошибка. Если администратор или фоновое задание позже перепроведет документы, все движения "перепрыгнут" на администратора.

Правильный алгоритм:

  1. Добавляем в документ (например, ПКО) реквизит Ответственный.
  2. При создании нового документа заполняем его программно:
    
    Объект.Ответственный = Пользователи.ТекущийПользователь(); 
    // Или через поиск физического лица, связанного с пользователем
    
  3. В процедуре ОбработкаПроведения используем именно этот реквизит для записи в регистр.

Схема расчетов через экспедиторов (курьеров)

Рассмотрим подробнее сложную модель, которую часто называют "Расчеты через экспедиторов". В полевых условиях это работает так: экспедитор собирает выручку с 50 точек, сдает пачку денег кассиру, а документы — оператору. Оператор забивает данные, кассир считает наличность. Возникает временной разрыв и риск расхождений.

Чтобы поймать эту разницу, мы создаем регистр "Денежные средства у сотрудников". Рассмотрим по шагам:

  1. Приход: В момент создания документа оплаты экспедитором (или оператором по данным экспедитора) делается движение "Приход" по регистру с измерением Экспедитор.
  2. Расход: Когда экспедитор сдает деньги в кассу, оформляется документ "Поступление наличных", который делает "Расход" по регистру с тем же измерением Экспедитор и одновременно "Приход" в кассу предприятия.
  3. Результат: Конечный остаток по регистру в разрезе экспедитора покажет, кто еще не сдал деньги или у кого возникла недостача из-за исправлений "задним числом".

Технические приемы работы с ответственными лицами

Выясним, как упростить жизнь пользователю. Чтобы каждый сотрудник видел только свои остатки, не обязательно создавать сложные фильтры в отчетах вручную. Можно использовать механизм RLS (Record Level Security). Настроив ограничение доступа к регистру накопления по измерению ОтветственноеЛицо, мы добьемся того, что кассир Иванов при открытии любого отчета увидит только свои 10 рублей долга, а кассир Петров — свои.

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

Однако для задач материальной ответственности регистр остатков предпочтительнее, так как он позволяет:

Резюме для разработчика

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


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

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

← На главную