При разработке собственных документов в конфигурации «1С:Бухгалтерия предприятия 3.0» (БП 3.0) программисты часто сталкиваются с ситуацией, когда проводки физически существуют в базе, их можно увидеть в журнале проводок или в специализированных отчетах, но они таинственным образом исчезают из общей Оборотно-сальдовой ведомости (ОСВ) или Карточки счета. Рассмотрим детально, почему так происходит, проанализируем внутренние механизмы платформы и выясним, как правильно формировать движения по регистру бухгалтерии, чтобы избежать подобных ошибок.
Представим ситуацию: вы создали новый документ, который делает записи в регистр бухгалтерии Хозрасчетный. Вы открываете ОСВ по счету и видите там свои цифры — обороты и конечное сальдо верны. Однако, открыв общую ОСВ, вы обнаруживаете, что по данному счету пустота или данные не соответствуют ожидаемым. Даже полная перегенерация итогов и Тестирование и исправление (ТИИ) не приносят результата. Проанализируем ситуацию: если данные видны в одном отчете, но скрыты в другом, проблема кроется не в физическом отсутствии записей в таблице движений, а в логических фильтрах или особенностях работы виртуальных таблиц.
Как показывает практика, наиболее частой причиной такого поведения является пропущенное измерение Организация в наборе записей регистра. В типовых конфигурациях на платформе «1С:Предприятие 8.3» это измерение является балансовым, и его незаполнение ведет к непредсказуемым последствиям для стандартных отчетов.
Выясним причину, по которой «Оборотно-сальдовая ведомость по счету» оказывается более «всеядной», чем общая ОСВ. Разберем это по шагам:
ОстаткиИОбороты. Платформа в этом случае оптимизирует запрос под конкретную аналитику. Общая же ОСВ сканирует весь план счетов. Если измерение Организация не заполнено, система может просто не включить такие записи в общую выборку, так как нарушается целостность данных в разрезе балансового измерения.ГДЕ Организация В (&ДоступныеОрганизации). Так как значение ПустаяСсылка (или NULL) обычно не входит в список разрешенных организаций, записи с пустой организацией отсекаются платформой «молча», даже если у пользователя полные права, но механизмы RLS активированы.Посмотрим на пример того, как возникает ошибка. Рассмотрим фрагмент кода в процедуре ОбработкаПроведения, где программист забывает указать организацию:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.Хозрасчетный.Записывать = Истина;
Для Каждого СтрокаТЧ Из Товары Цикл
Движение = Движения.Хозрасчетный.Добавить();
Движение.Регистратор = Ссылка;
Движение.Период = Дата;
// ОШИБКА: Забыли заполнить Движение.Организация = Организация;
Движение.СчетДт = ПланыСчетов.Хозрасчетный.ТоварыНаСкладах;
Движение.СчетКт = ПланыСчетов.Хозрасчетный.Вспомогательный;
Движение.Сумма = СтрокаТЧ.Сумма;
// Заполнение аналитики...
КонецЦикла;
КонецПроцедуры
В данном примере, несмотря на то что в документе есть реквизит Организация, в саму проводку (в регистр) значение не передается. При записи набора записей платформа может не выдать ошибку «Поле не заполнено», если программная запись выполняется без явного вызова метода ПроверитьЗаполнение(). В итоге в таблице _AccReg (физическая таблица регистра в SQL) в колонке организации окажется 0x00000000000000000000000000000000 (пустая ссылка), что и приведет к конфликту в отчетах.
Разберем алгоритм действий для исправления данных и предотвращения ошибки в будущем:
Организация заполняется из реквизита документа или константы.
Движение.Организация = ЭтотОбъект.Организация;
ВЫБРАТЬ
Хозрасчетный.Регистратор,
Хозрасчетный.НомерСтроки
ИЗ
РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
ГДЕ
Хозрасчетный.Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)
Проанализируем, почему Организация критически важна. В 1С:Предприятии регистр бухгалтерии поддерживает принцип двойной записи. Измерение Организация обычно имеет свойство Балансовое. Это означает, что остатки рассчитываются не просто «вообще», а строго внутри каждой организации. Сумма по дебету организации «А» не может быть погашена кредитом организации «Б». Когда вы записываете пустую организацию, вы фактически создаете «черную дыру» в балансе — данные есть, но они не принадлежат ни одному субъекту учета. Отчеты, ориентированные на формирование баланса (как общая ОСВ), игнорируют такие записи, чтобы не вносить хаос в итоговые показатели.
Для надежной работы системы придерживайтесь следующих правил:
Подразделение, если в настройках программы включен учет по подразделениям, но в коде документа заполнение этого поля пропущено.Таким образом, мы выяснили, что разное поведение отчетов ОСВ и ОСВ по счету — это не баг платформы, а следствие нарушения логической целостности данных. Соблюдение правил заполнения измерений регистра гарантирует корректность отображения данных во всех стандартных бухгалтерских отчетах.