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