В типовой конфигурации «1С:Бухгалтерия предприятия 3.0» (БП 3.0) при передаче материалов в эксплуатацию (например, спецодежды или инвентаря) программа автоматически формирует проводки по забалансовым счетам серии МЦ. По умолчанию для большинства материалов используется счет МЦ.04 (Инвентарь и хозяйственные принадлежности в эксплуатации). Однако возникают ситуации, когда для определенных категорий ТМЦ, таких как автомобильные шины, требуется использование счета МЦ.05 (Особое оборудование, переданное в эксплуатацию) или иного специализированного счета.
В этой статье мы подробно разберем, как реализовать такую логику, не нарушая целостность типовой конфигурации, используя как возможности пользовательского интерфейса, так и программные методы разработки.
Прежде чем приступать к написанию кода, проанализируем, как система определяет счет учета. В 1С:БП 3.0 счет МЦ не зашит в программный код жестко. Он подтягивается из справочника НазначенияИспользования. Этот справочник привязан к конкретной номенклатуре в табличной части документа ПередачаМатериаловВЭксплуатацию.
Рассмотрим пошагово, как настроить систему:
МЦ.05 вместо стандартного МЦ.04.При проведении документа система проанализирует выбранное НазначениеИспользования и автоматически сформирует проводку в дебет счета МЦ.05. Это самый правильный и безопасный метод, рекомендуемый фирмой «1С».
Если специфика бизнеса такова, что назначений использования слишком много или требуется автоматизировать процесс выбора счета в зависимости от группы номенклатуры, воспользуемся советом с форума и создадим Подписку на событие. Этот метод позволяет перехватить движения документа в момент их записи в базу данных.
Разберем алгоритм создания подписки:
ПодпискаНаСобытие.РегистрБухгалтерииНаборЗаписей.Хозрасчетный.ПередЗаписью.Проанализируем пример кода, который нужно разместить в обработчике:
Процедура ПриЗаписиХозрасчетныйПередЗаписью(Источник, Отказ, Замещение) Экспорт
// Проверяем, что записи принадлежат интересующему нас документу
Если ТипЗнч(Источник.Отбор.Регистратор.Значение) = Тип("ДокументСсылка.ПередачаМатериаловВЭксплуатацию") Тогда
// Перебираем все проводки, которые сформировал документ
Для Каждого Запись Из Источник Цикл
// Нас интересует только дебет счета МЦ.04
Если Запись.СчетДт = ПланыСчетов.Хозрасчетный.МЦ04 Тогда
// Получаем номенклатуру из Субконто1 (обычно это Номенклатура)
НоменклатураСсылка = Запись.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура];
// Проверяем, входит ли номенклатура в группу "Шины"
// Для этого можно использовать проверку родителя или доп. реквизит
Если НоменклатураСсылка.Родитель.Наименование = "Шины" Тогда
// Меняем счет на МЦ.05
Запись.СчетДт = ПланыСчетов.Хозрасчетный.МЦ05;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Важное примечание: При смене счета программным способом необходимо убедиться, что состав субконто (аналитики) на счетах МЦ.04 и МЦ.05 совпадает. В БП 3.0 они идентичны (Номенклатура, Партия, Физ. лицо), поэтому проблем с потерей данных не возникнет.
В современных реалиях 1С вместо подписок на события часто используют Расширения конфигурации. Это позволяет точечно перехватывать логику формирования таблицы движений еще до момента ее записи в регистр. Рассмотрим, как это сделать через аннотацию &После для процедуры проведения.
Выясним причину, почему это удобно: мы можем вмешаться в процесс формирования таблицы Движения непосредственно в модуле документа, используя механизм перехвата.
&После("ОбработкаПроведения")
Процедура Расш_ОбработкаПроведения(Отказ, РежимПроведения)
// Получаем набор записей регистра бухгалтерии из текущего объекта
Проводки = ЭтотОбъект.Движения.Хозрасчетный;
// Если проводки еще не прочитаны, прочитаем их
Если Проводки.Количество() = 0 Тогда
Проводки.Прочитать();
КонецЕсли;
Модифицировано = Ложь;
Для Каждого Проводка Из Проводки Цикл
// Проверяем условие для шин
Если Проводка.СчетДт = ПланыСчетов.Хозрасчетный.МЦ04
И Проводка.СубконтоДт.Номенклатура.Наименование ПОДОБНО "%Шина%" Тогда
Проводка.СчетДт = ПланыСчетов.Хозрасчетный.МЦ05;
Модифицировано = Истина;
КонецЕсли;
КонецЦикла;
// Если были изменения, записываем набор
Если Модифицировано Тогда
Проводки.Записать();
КонецЕсли;
КонецПроцедуры
При написании кода крайне не рекомендуется завязываться на строковые наименования номенклатуры (например, "Шина"), так как пользователи могут изменить название товара. Рассмотрим более надежные способы идентификации:
НоменклатураСсылка.ПринадлежитЭлементу(ГруппаШиныСсылка).Посмотрим на ситуацию с точки зрения налогового учета (НУ). Забалансовые счета серии МЦ предназначены для оперативного контроля имущества, стоимость которого уже списана в расходы в бухгалтерском и налоговом учете. Следовательно, счета МЦ обычно не имеют признака налогового учета. Однако всегда проверяйте в Плане счетов, не установлены ли для выбранного вами счета специфические признаки, требующие заполнения ресурсов СуммаНУ_Дт или СуммаНУ_Кт. В типовой БП 3.0 для счетов МЦ.04 и МЦ.05 это не требуется, так как учет ведется только в количественном и суммовом выражении по БУ на забалансе.
Подведем итог: если вам нужно разовое или простое решение — используйте справочник Назначения использования. Если же требуется масштабная автоматизация для большого объема номенклатуры — используйте Подписки на события или Расширения, следуя приведенным выше примерам кода.