Как выполнить инвентаризацию забалансовых счетов в 1С:Бухгалтерия 3.0?

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

Инвентаризация имущества, находящегося в эксплуатации и учитываемого на забалансовых счетах, — регулярная задача для многих коммерческих и производственных организаций. Наиболее часто проверке подвергаются счета группы МЦ, такие как МЦ.04 («Инвентарь и хозяйственные принадлежности в эксплуатации») и МЦ.02 («Спецодежда в эксплуатации»).

Долгое время в типовой конфигурации «1С:Бухгалтерия предприятия» (БП) не было простого и интуитивного механизма для выполнения этой операции, из-за чего пользователям приходилось скачивать сторонние обработки или разрабатывать собственные расширения. В этой статье мы подробно разберем, как решить эту задачу штатными средствами программы, а также рассмотрим, как программисту написать собственное расширение или обработку заполнения, если базового функционала окажется недостаточно.


Способ 1. Использование встроенного штатного функционала 1С:Бухгалтерии

Начнем с хорошей новости. Начиная с версии программы 3.0.85, разработчики фирмы «1С» добавили встроенный механизм, позволяющий проводить инвентаризацию ТМЦ за пределами баланса без использования стороннего кода. Давайте разберем этот процесс по шагам.

Основной секрет успешного заполнения кроется в правильной комбинации реквизитов шапки документа инвентаризации. Рассмотрим этот алгоритм подробнее:

  1. Перейдем в раздел «Склад», выберем пункт «Инвентаризация товаров» и создадим новый документ.
  2. Критически важный шаг: Оставьте поле Склад в шапке документа абсолютно пустым. Если там будет указан конкретный склад, программа будет искать остатки только на балансовых счетах учета (например, на 10 счете).
  3. В поле Ответственное лицо укажите конкретного сотрудника (МОЛ), за которым закреплены забалансовые ценности в эксплуатации.
  4. Перейдите на вкладку «Товары» и нажмите кнопку «Заполнить» — «Заполнить по остаткам на складе».

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

Важное условие для работы штатного заполнения:

Данные попадут в документ только в том случае, если при передаче материалов сотруднику (например, через документ «Расход материалов») в поле способа использования было выбрано положение «Расход и остатки». Если бухгалтер выбрал вариант «Только расход», программа спишет стоимость и количество в расходы сразу, не сохранив забалансовый след для инвентаризации.


Способ 2. Ограничения типового функционала и когда нужна кастомная разработка

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


Способ 3. Создание собственной обработки заполнения через Расширение

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

Рассмотрим пример программного кода, который решает задачу выборки остатков со счета МЦ.04 по выбранному сотруднику и заполнения табличной части документа.

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


// Функция получает таблицу остатков по забалансовому счету МЦ.04
Функция ПолучитьОстаткиЗабаланса(ОтветственноеЛицо, ПериодГраница) Экспорт

    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
        |	ХозрасчетныйОстатки.КоличествоОстаток КАК Количество,
        |	ХозрасчетныйОстатки.СуммаОстаток КАК Стоимость
        |ИЗ
        |	РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &СчетМЦ, &ВидыСубконто, ) КАК ХозрасчетныйОстатки
        |ГДЕ
        |	ХозрасчетныйОстатки.Субконто2 = &МОЛ";

    // Задаем параметры запроса
    Запрос.УстановитьПараметр("Период", ПериодГраница);
    Запрос.УстановитьПараметр("СчетМЦ", ПланыСчетов.Хозрасчетный.МЦ04);
    
    // Определяем массив видов субконто для правильной индексации
    МассивСубконто = Новый Массив;
    МассивСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура);
    МассивСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.РаботникиОрганизаций);
    Запрос.УстановитьПараметр("ВидыСубконто", МассивСубконто);
    
    Запрос.УстановитьПараметр("МОЛ", ОтветственноеЛицо);

    Возврат Запрос.Выполнить().Выгрузить();

КонецФункции

Разберем этот код подробнее. Мы обращаемся к регистру бухгалтерии, передавая в параметры виртуальной таблицы границу периода и целевой забалансовый счет (в данном случае ПланыСчетов.Хозрасчетный.МЦ04). В секции ГДЕ мы фильтруем результат по второму субконто — это физическое лицо (работник организации), за которым числится малоценка.

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


Процедура ЗаполнитьТабличнуюЧастьДокумента(ДокументОбъект) Экспорт

    // Проверяем заполнение обязательного реквизита в шапке
    Если Не ЗначениеЗаполнено(ДокументОбъект.ОтветственноеЛицо) Тогда
        ВызватьИсключение "Для заполнения забаланса необходимо указать Ответственное лицо!";
    КонецЕсли;

    ПериодГраница = Новый Граница(ДокументОбъект.Дата, ВидГраницы.Включая);
    ТаблицаОстатков = ПолучитьОстаткиЗабаланса(ДокументОбъект.ОтветственноеЛицо, ПериодГраница);

    ДокументОбъект.Товары.Очистить();

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

КонецПроцедуры

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


Резюме и рекомендации

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

Разработка собственного расширения или покупка сторонней обработки на базе БСП (Библиотеки Стандартных Подсистем) оправдана только в тех случаях, когда вашей организации требуется автоматизировать сложный массовый учет, выполнять групповое формирование документов по всем сотрудникам сразу или выводить специфические печатные формы, отличные от типовой ИНВ-3.

← На главную