В процессе разработки или доработки типовых конфигураций "1С:Бухгалтерия предприятия 3.0" программисты часто сталкиваются с ситуацией, когда программно созданные движения (проводки) по регистру бухгалтерии Хозрасчетный ведут себя странно. Записи физически существуют в базе данных, они прекрасно видны в общем журнале проводок, но при открытии формы "Движения документа" (кнопка Дт/Кт) закладка с журналом проводок пуста или вовсе отсутствует. Разберем детально, почему это происходит и как исправить данную проблему.
Прежде чем приступать к правке программного кода, нам необходимо исключить самые простые и часто встречающиеся причины. Проанализируем состояние записей в регистре бухгалтерии:
Активность = Истина. Если записи неактивны, они не будут отображаться во многих стандартных отчетах и формах, хотя в базе данных будут присутствовать.Дт/Кт часто установлены жесткие фильтры. Проверим, совпадает ли Организация в проводках с Организацией, указанной в шапке документа. Если в проводках это поле пустое или содержит другое значение, динамический список на форме их "отфильтрует".Если с данными все в порядке, но закладка все равно не видна, переходим к анализу программных механизмов конфигурации.
В современных конфигурациях на базе БСП (Библиотеки стандартных подсистем), таких как БП 3.0, за отображение движений отвечает общая форма и связанная с ней обработка КорректировкаДвижений. Проанализируем, как система формирует список регистров для показа пользователю.
Ключевым моментом является процедура ПроверитьНаличиеДвижений. В ней система обходит все регистры, для которых данный документ может быть регистратором, и проверяет фактическое наличие записей. Рассмотрим пример кода, который может стать причиной проблемы:
Процедура ПроверитьНаличиеДвижений(РегистрыТребующиеОчистки)
// Получаем список имен проверяемых регистров
ИменаПроверяемыхРегистров = РегистрыТребующиеОчистки.ПроверяемыеРегистры;
// Внимание: критический участок кода
Попытка
ИменаПроверяемыхРегистров.Удалить(4);
Исключение
// Ошибка может быть подавлена
КонецПопытки;
// Дальнейшая логика проверки...
КонецПроцедуры
В данном примере мы видим, что из коллекции проверяемых регистров принудительно удаляется элемент с индексом 4. В определенных условиях (в зависимости от состава метаданных) под этим индексом может находиться именно регистр бухгалтерии Хозрасчетный. Если его исключить из этого списка, обработка посчитает, что движений по нему нет или их не нужно показывать, и закладка в форме Дт/Кт исчезнет.
Для того чтобы стандартная обработка "увидела" ваши движения, необходимо убедиться, что документ правильно зарегистрирован в системе как источник этих движений. Проанализируем настройки в конфигураторе:
Хозрасчетный.Дт/Кт может игнорировать такие записи, так как считает их "чужеродными".В типовых решениях 1С:Бухгалтерия 3.0 существует важный механизм РучнаяКорректировка. Это булев реквизит документа. Рассмотрим, как он влияет на нашу ситуацию:
Если вы создаете движения программно (например, в модуле объекта в обработке проведения), но не включаете флаг РучнаяКорректировка, то при каждом переоткрытии или перепроведении система может пытаться "перезатереть" ваши движения своими алгоритмами. Если же алгоритм типового документа не предполагает формирования проводок в данной ситуации, он может просто очистить ваш набор движений при нажатии кнопки Дт/Кт.
Если ваши проводки являются "нестандартными" (самописными), рекомендуется устанавливать значение реквизита:
ОбъектДокумент.РучнаяКорректировка = Истина;
Это просигнализирует системе, что движения документа изменять автоматически нельзя, и они должны отображаться в том виде, в котором записаны в БД.
Если вы столкнулись с тем, что в БП 3.0 не показываются определенные регистры (особенно в самописных документах), проанализируем модуль менеджера документа. В некоторых версиях БСП состав отображаемых закладок определяется через переопределение процедур настройки.
Найдем или создадим в модуле менеджера процедуру:
Процедура НастроитьВыводДвижений(Параметры) Экспорт
// Здесь можно явно указать, какие регистры должны отображаться
Параметры.ВыводитьРегистрБухгалтерии = Истина;
// Либо добавить конкретный регистр накопления/сведений
Параметры.СписокРегистров.Добавить("Хозрасчетный");
КонецПроцедуры
Выяснив причину проблемы, можно сделать вывод: в 90% случаев отсутствие проводок в форме Дт/Кт при их наличии в журнале связано с программными фильтрами в процедурах БСП или несоответствием метаданных регистратора.
Для успешного решения задачи пройдите по следующим шагам:
ПроверитьНаличиеДвижений через отладчик.Такой системный подход позволит быстро локализовать "невидимые" движения и вернуть пользователям возможность удобного контроля проводок в интерфейсе программы.