Нередко при сопровождении конфигураций на платформе 1С:Предприятие 7.7 возникает ситуация: бухгалтер вводит проводки по счету 01 «Основные средства» документом «Операция», проводки успешно проводятся и видны в оборотно-сальдовой ведомости, однако сам объект не попадает в инвентаризационную опись (ИНВ-1), в карточке основного средства нет сведений о вводе в эксплуатацию, а история реквизитов остается пустой. Проанализируем, почему так происходит, как устроена работа с данными ОС на уровне платформы и какими способами можно исправить ситуацию.
Главная причина кроется в фундаментальном разделении учетных механизмов в 1С 7.7. Бухгалтерский план счетов и справочники объектов работают изолированно друг от друга:
Типовой документ Операция (ручные проводки) регистрирует исключительно бухгалтерские проводки. Он платформенно не умеет автоматически вносить записи в историю периодических реквизитов справочников. Когда пользователь выбирает объект ОС в субконто ручной проводки, ссылка на справочник лишь указывает аналитику для бухгалтерского регистра, но сама карточка ОС в базе данных не обновляется.
Большинство регламентированных и внутренних отчетов по учету основных средств (включая инвентаризационную опись ИНВ-1) формируют выборку не просто по дебетовому остатку на счете 01. Алгоритм отчета накладывает обязательный фильтр на периодический реквизит Состояние.
Если для объекта ОС не установлено состояние «Введено в эксплуатацию» на дату формирования ведомости, отчет считает данный объект неготовым к инвентаризации и полностью исключает его из печатной формы. Аналогично происходит отбор по подразделению и МОЛ: отчет пытается прочитать эти значения из периодических реквизитов самого справочника, а не из субконто проводки. Если в карточке пусто — данные не выводятся.
Если пользователи утверждают, что «до определенного месяца всё работало через операции», выясним возможные скрытые причины такого сбоя:
Операция нередко встраивают обработчик, который при наличии проводок по счету 01 автоматически находит элемент справочника и заполняет его реквизиты. При накатывании очередного типового релиза (например, полугодового) без объединения модулей этот код мог быть стерт.Разберем, как восстановить корректный учет и какие варианты исправления существуют.
Самый надежный и методически правильный способ — ввести все объекты специализированным документом, предусмотренным конфигурацией: ВводВЭксплуатациюОС (или ВводОстатковОС). Этот документ одновременно делает проводки по счетам учета и записывает все необходимые периодические реквизиты в историю справочника «Основные средства». Рекомендуется создать копию базы данных, ввести документ штатным образом и продемонстрировать бухгалтерии корректное формирование отчетов.
Если проводки уже введены вручную и перепроводить документы не планируется, периодические реквизиты необходимо ввести напрямую в карточке каждого основного средства:
Когда объектов ОС много, ручной ввод займет слишком много времени. Напишем внешнюю обработку (ERT), которая автоматически заполнит периодические реквизиты через объект Периодический на дату проводки:
// Пример программной записи периодического реквизита в 1С 7.7
Пери = СоздатьОбъект("Периодический");
Пери.ИспользоватьОбъект("Состояние", ВыбОС);
Пери.ДатаЗнач = ДатаВвода;
Пери.Значение = Перечисление.СостоянияОС.ВведеноВЭксплуатацию;
Пери.Записать();
Этот код найдет нужный элемент справочника ВыбОС и корректно запишет историю реквизита Состояние, после чего объект сразу начнет попадать в инвентаризационную ведомость и отчеты по амортизации.
Если бухгалтерия категорически отказывается менять привычный порядок работы, можно доработать документ Операция в конфигураторе. Для этого в процедуру ПриЗаписи() модуля документа внедряется алгоритм, анализирующий строки проводок:
// Фрагмент проверки проводок при записи документа "Операция"
ВыбратьПроводки();
Пока ПолучитьПроводку() = 1 Цикл
Если СчетДт = СчетПоКоду("01.1") Тогда
// Получаем ОС из субконто дебета
ОбъектОС = СубконтоДт(1);
Если ПустоеЗначение(ОбъектОС) = 0 Тогда
Пери = СоздатьОбъект("Периодический");
Пери.ИспользоватьОбъект("Состояние", ОбъектОС);
Пери.ДатаЗнач = ДатаДок;
Пери.Значение = Перечисление.СостоянияОС.ВведеноВЭксплуатацию;
Пери.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
Такой подход позволит сохранить привычный для пользователей ввод данных, исключив при этом пропадание основных средств из отчетов и карточек аналитики.