Изменение аналитического учета на стандартных счетах — задача, требующая предельной осторожности. Счет 10.01 (Сырье и материалы) является одним из ключевых в типовых конфигурациях, и любые манипуляции с его субконто могут привести к серьезным последствиям для бухгалтерского и налогового учета. В данной статье мы подробно разберем, почему программное изменение может не срабатывать, как исправить типичные ошибки разработчика и какие альтернативные способы настройки существуют в 1С:Бухгалтерии предприятия 3.0.
Рассмотрим ситуацию, когда программист пытается программно удалить субконто, используя следующий код:
ПланыСчетов.Хозрасчетный.СырьеИМатериалы.ПолучитьОбъект().ВидыСубконто.Удалить(2);
ПланыСчетов.Хозрасчетный.СырьеИМатериалы.ПолучитьОбъект().Записать();
Проанализируем этот фрагмент и выясним причину неудачи. Основная проблема здесь заключается в непонимании механизмов работы с объектами в памяти. Каждый раз, когда мы вызываем метод ПолучитьОбъект(), система создает новый экземпляр объекта счета в оперативной памяти. Таким образом, в первой строке мы получаем один объект, удаляем в нем строку субконто, но никуда его не сохраняем. Во второй строке мы получаем еще один экземпляр того же счета в его исходном (неизмененном) состоянии и пытаемся его записать. В итоге изменения из первой строки просто теряются.
Правильный алгоритм работы с объектом счета должен выглядеть следующим образом:
// Получаем объект один раз в переменную
СчетОбъект = ПланыСчетов.Хозрасчетный.СырьеИМатериалы.ПолучитьОбъект();
// Производим манипуляции с полученным объектом
СчетОбъект.ВидыСубконто.Удалить(2);
// Записываем именно тот объект, который изменяли
СчетОбъект.Записать();
Разберем еще один важный нюанс. Использование прямого обращения по индексу, например Удалить(2), является крайне рискованным методом. Индексы в коллекции ВидыСубконто могут меняться в зависимости от настроек конфигурации (включен ли учет по партиям, складам или подразделениям). Если в какой-то момент состав субконто изменится, ваш код удалит не ту аналитику, которую вы планировали, что приведет к повреждению данных в регистре бухгалтерии.
Проанализируем более безопасный способ поиска и удаления субконто. Вместо использования индекса, мы будем искать конкретный вид характеристики. Рассмотрим пример кода:
СчетОбъект = ПланыСчетов.Хозрасчетный.СырьеИМатериалы.ПолучитьОбъект();
// Определяем, какое именно субконто мы хотим удалить
НужноеСубконто = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.НоменклатурныеГруппы;
// Ищем строку в табличной части по значению вида субконто
СтрокаСубконто = СчетОбъект.ВидыСубконто.Найти(НужноеСубконто, "ВидСубконто");
Если СтрокаСубконто <> Неопределено Тогда
СчетОбъект.ВидыСубконто.Удалить(СтрокаСубконто);
СчетОбъект.Записать();
Сообщить("Субконто успешно удалено");
КонецЕсли;
Такой подход гарантирует, что вы удалите именно НоменклатурныеГруппы, независимо от того, каким по счету это субконто стоит в списке.
Важно понимать, что в современных конфигурациях на базе 1С:Предприятие 8.3 состав субконто на счетах учета ТМЦ (10, 41, 43 сч.) часто управляется динамически через общие настройки. Если ваша цель — добавить субконто Склады, то программный код может вообще не потребоваться.
Выясним, как это реализовано в типовой БП 3.0. Зайдем в раздел Администрирование — Параметры учета — Настройки плана счетов — Учет запасов. Установка галочки «По складам (местам хранения)» автоматически добавит субконто Склады на все соответствующие счета учета, включая 10.01.
Почему это важно: Если вы добавите субконто программно, в обход этих настроек, вы можете столкнуться с тем, что стандартные документы (Поступление товаров, Требование-накладная) не будут «видеть» это субконто при проведении, так как их логика завязана на функциональные опции программы. Кроме того, при обновлении конфигурации или изменении настроек параметров учета, ваши ручные изменения в плане счетов могут быть перезаписаны системой.
Перед тем как вносить любые изменения в состав субконто счета 10.01, необходимо осознать риски. Проанализируем последствия удаления вида субконто:
ВидСубконто и выполняете метод Записать(), система очищает значения этого субконто во всех существующих проводках по данному счету в РегистреБухгалтерии. Если на счете были остатки в разрезе номенклатурных групп, они станут «пустыми».10.01 является системным. Алгоритмы закрытия месяца, расчета себестоимости и формирования деклараций ожидают стандартную структуру аналитики. Появление нетипичного субконто (например, Номенклатурной группы) или отсутствие ожидаемого (Склады) может привести к фатальным ошибкам при закрытии периода.Подводя итог, выделим правильную последовательность действий для изменения аналитики на счете 10.01:
ПланыВидовХарактеристик, а не по индексу.Помните, что счет 10.01 — это фундамент учета материалов. Рассмотрим альтернативный вариант: если вам действительно нужна специфическая аналитика, возможно, стоит создать новый субсчет (например, 10.15), где вы будете вольны настраивать субконто так, как того требует бизнес-задача, не нарушая логику типового решения.