Почему проводки документа видны в ОСВ по счету, но отсутствуют в общей ОСВ и Карточке счета?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

При разработке собственных документов в конфигурации «1С:Бухгалтерия предприятия 3.0» (БП 3.0) программисты часто сталкиваются с ситуацией, когда проводки физически существуют в базе, их можно увидеть в журнале проводок или в специализированных отчетах, но они таинственным образом исчезают из общей Оборотно-сальдовой ведомости (ОСВ) или Карточки счета. Рассмотрим детально, почему так происходит, проанализируем внутренние механизмы платформы и выясним, как правильно формировать движения по регистру бухгалтерии, чтобы избежать подобных ошибок.

Суть проблемы и первичная диагностика

Представим ситуацию: вы создали новый документ, который делает записи в регистр бухгалтерии Хозрасчетный. Вы открываете ОСВ по счету и видите там свои цифры — обороты и конечное сальдо верны. Однако, открыв общую ОСВ, вы обнаруживаете, что по данному счету пустота или данные не соответствуют ожидаемым. Даже полная перегенерация итогов и Тестирование и исправление (ТИИ) не приносят результата. Проанализируем ситуацию: если данные видны в одном отчете, но скрыты в другом, проблема кроется не в физическом отсутствии записей в таблице движений, а в логических фильтрах или особенностях работы виртуальных таблиц.

Как показывает практика, наиболее частой причиной такого поведения является пропущенное измерение Организация в наборе записей регистра. В типовых конфигурациях на платформе «1С:Предприятие 8.3» это измерение является балансовым, и его незаполнение ведет к непредсказуемым последствиям для стандартных отчетов.

Разбор технических причин: почему отчеты ведут себя по-разному?

Выясним причину, по которой «Оборотно-сальдовая ведомость по счету» оказывается более «всеядной», чем общая ОСВ. Разберем это по шагам:

  1. Различия в запросах виртуальных таблиц. Отчет «ОСВ по счету» обычно строится с жестким фильтром по конкретному счету в параметрах виртуальной таблицы ОстаткиИОбороты. Платформа в этом случае оптимизирует запрос под конкретную аналитику. Общая же ОСВ сканирует весь план счетов. Если измерение Организация не заполнено, система может просто не включить такие записи в общую выборку, так как нарушается целостность данных в разрезе балансового измерения.
  2. Механизм RLS (Разграничение прав на уровне записей). В конфигурациях уровня КОРП активно используются профили групп доступа. Система 1С на уровне SQL-запроса неявно добавляет условие ГДЕ Организация В (&ДоступныеОрганизации). Так как значение ПустаяСсылка (или NULL) обычно не входит в список разрешенных организаций, записи с пустой организацией отсекаются платформой «молча», даже если у пользователя полные права, но механизмы RLS активированы.
  3. Специфика Системы компоновки данных (СКД). Стандартная ОСВ — это сложный отчет на СКД с массой программных доработок в модуле объекта. В ней часто присутствуют скрытые отборы по умолчанию. Если в базе ведется учет по организациям (а в БП 3.0 этот признак в метаданных всегда включен), СКД при инициализации может накладывать фильтр, исключающий пустые ссылки в измерениях, считая их ошибочными.

Анализ программного кода формирования проводок

Посмотрим на пример того, как возникает ошибка. Рассмотрим фрагмент кода в процедуре ОбработкаПроведения, где программист забывает указать организацию:


Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    
    Движения.Хозрасчетный.Записывать = Истина;
    
    Для Каждого СтрокаТЧ Из Товары Цикл
        Движение = Движения.Хозрасчетный.Добавить();
        Движение.Регистратор = Ссылка;
        Движение.Период = Дата;
        
        // ОШИБКА: Забыли заполнить Движение.Организация = Организация;
        
        Движение.СчетДт = ПланыСчетов.Хозрасчетный.ТоварыНаСкладах;
        Движение.СчетКт = ПланыСчетов.Хозрасчетный.Вспомогательный;
        Движение.Сумма = СтрокаТЧ.Сумма;
        
        // Заполнение аналитики...
    КонецЦикла;
    
КонецПроцедуры

В данном примере, несмотря на то что в документе есть реквизит Организация, в саму проводку (в регистр) значение не передается. При записи набора записей платформа может не выдать ошибку «Поле не заполнено», если программная запись выполняется без явного вызова метода ПроверитьЗаполнение(). В итоге в таблице _AccReg (физическая таблица регистра в SQL) в колонке организации окажется 0x00000000000000000000000000000000 (пустая ссылка), что и приведет к конфликту в отчетах.

Как правильно исправить ситуацию?

Разберем алгоритм действий для исправления данных и предотвращения ошибки в будущем:

  1. Корректировка кода проведения. Обязательно убедитесь, что во всех процедурах формирования движений измерение Организация заполняется из реквизита документа или константы. Движение.Организация = ЭтотОбъект.Организация;
  2. Использование консоли запросов. Для проверки существующих ошибок напишите простой запрос к реальной таблице регистра (не к виртуальной таблице остатков, а именно к движениям):
    
    ВЫБРАТЬ
        Хозрасчетный.Регистратор,
        Хозрасчетный.НомерСтроки
    ИЗ
        РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
    ГДЕ
        Хозрасчетный.Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)
    
    Это позволит быстро найти все «битые» документы.
  3. Групповое перепроведение. После исправления кода необходимо перепровести проблемные документы. Простого «пересчета итогов» недостаточно, так как нужно физически обновить значения в основной таблице движений регистра.

Важность балансовых измерений

Проанализируем, почему Организация критически важна. В 1С:Предприятии регистр бухгалтерии поддерживает принцип двойной записи. Измерение Организация обычно имеет свойство Балансовое. Это означает, что остатки рассчитываются не просто «вообще», а строго внутри каждой организации. Сумма по дебету организации «А» не может быть погашена кредитом организации «Б». Когда вы записываете пустую организацию, вы фактически создаете «черную дыру» в балансе — данные есть, но они не принадлежат ни одному субъекту учета. Отчеты, ориентированные на формирование баланса (как общая ОСВ), игнорируют такие записи, чтобы не вносить хаос в итоговые показатели.

Рекомендации для разработчиков

Для надежной работы системы придерживайтесь следующих правил:

Таким образом, мы выяснили, что разное поведение отчетов ОСВ и ОСВ по счету — это не баг платформы, а следствие нарушения логической целостности данных. Соблюдение правил заполнения измерений регистра гарантирует корректность отображения данных во всех стандартных бухгалтерских отчетах.

← На главную