Как добавить субсчет 50.05 в отчет «Кассовая книга» в 1С:Бухгалтерия предприятия 3.0?

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

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

Почему отчет не видит субсчет 50.05 по умолчанию?

Разберем причину такого поведения системы. В типовой конфигурации «Бухгалтерия предприятия 3.0» отчет «Кассовая книга» построен на достаточно жестких алгоритмах формирования данных. В программном коде модуля менеджера отчета прописан массив счетов, которые система считает «кассовыми». По умолчанию туда входят только предопределенные счета 50.01 и 50.21.

Важно учитывать методологический нюанс: в стандартном плане счетов 1С счет 50.05 зарезервирован под «Денежные документы». Операции по ним учитываются отдельно от наличных денег и выводятся в другой отчет — «Журнал учета денежных документов». Если вы создали свой субсчет 50.05 для учета обычной наличности в режиме «1С:Предприятие», отчет его не «подхватит», так как он не входит в зашитый в коде список субсчетов основной кассы.

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

Давайте проанализируем, где именно в коде происходит определение счетов кассы. Основная логика сосредоточена в модуле менеджера отчета КассоваяКнига в процедуре СформироватьЛистыКассовойКниги. Рассмотрим фрагмент кода, отвечающий за выборку счетов:


Если ПараметрыОтчета.ПлатежныйАгент Тогда
    СчетаКассы = БухгалтерскийУчетПовтИсп.СчетаВИерархии(ПланыСчетов.Хозрасчетный.КассаПлатежногоАгента);
Иначе
    ПредопределенныеСчетаКассы = Новый Массив;
    ПредопределенныеСчетаКассы.Добавить(ПланыСчетов.Хозрасчетный.КассаОрганизации); // Это наш 50.01
    ПредопределенныеСчетаКассы.Добавить(ПланыСчетов.Хозрасчетный.КассаОрганизацииВал); // Это наш 50.21
    
    // Сюда необходимо добавить наш новый счет
    СчетаКассы = БухгалтерскийУчет.СформироватьМассивСубсчетов(ПредопределенныеСчетаКассы);
КонецЕсли;

Как мы видим, массив ПредопределенныеСчетаКассы наполняется только двумя значениями. Наша задача — расширить этот список.

Вариант 1: Использование расширения конфигурации (Рекомендуемый)

Чтобы не снимать конфигурацию с поддержки и сохранить возможность легкого обновления, лучше всего использовать Расширение. Этот метод позволяет переопределить поведение процедуры, добавив в нее свои изменения.

Выполним следующие шаги:

  1. Создадим новое расширение в конфигураторе.
  2. Добавим в расширение отчет КассоваяКнига.
  3. Перейдем в модуль менеджера отчета в расширении и создадим процедуру-обертку с аннотацией &Вместо("СформироватьЛистыКассовойКниги").
  4. Скопируем оригинальный текст процедуры из основной конфигурации и внесем правки в блок формирования массива счетов.

Важный момент: Если ваш счет 50.05 был создан в режиме «1С:Предприятие», вы не сможете обратиться к нему через точку как к предопределенному объекту (ПланыСчетов.Хозрасчетный.НазваниеСчета). В этом случае мы должны использовать метод НайтиПоКоду.

Посмотрим на пример кода, который мы внедрим в расширение:


&Вместо("СформироватьЛистыКассовойКниги")
Процедура ИЗМ_СформироватьЛистыКассовойКниги(ПараметрыОтчета, ДатыЛистовСОшибками, ПоказатьОповещениеОНумерации)
    // ... (весь исходный код процедуры до момента формирования массива счетов)
    
    ПредопределенныеСчетаКассы = Новый Массив;
    ПредопределенныеСчетаКассы.Добавить(ПланыСчетов.Хозрасчетный.КассаОрганизации);
    ПредопределенныеСчетаКассы.Добавить(ПланыСчетов.Хозрасчетный.КассаОрганизацииВал);
    
    // Ищем наш пользовательский счет 50.05
    Счет50_05 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("50.05");
    Если Не Счет50_05.Пустая() Тогда
        ПредопределенныеСчетаКассы.Добавить(Счет50_05);
    КонецЕсли;
    
    СчетаКассы = БухгалтерскийУчет.СформироватьМассивСубсчетов(ПредопределенныеСчетаКассы);
    
    // ... (дальнейший код процедуры)
КонецПроцедуры

Вариант 2: Создание внешнего отчета

Если по каким-то причинам использование расширений невозможно, мы можем создать внешний отчет на базе типового. Однако здесь есть техническая сложность: вся логика типового отчета находится в модуле менеджера, а у внешних отчетов (файлов .erf) модуль менеджера не используется платформой для вызова процедур формирования.

Разберем алгоритм создания внешнего отчета:

  1. Сохраним типовой отчет КассоваяКнига как внешний файл.
  2. Откроем модуль объекта внешнего отчета.
  3. Скопируем все содержимое Модуля менеджера оригинального отчета и вставим его в Модуль объекта внешнего отчета.
  4. Проанализируем вызовы процедур. Если в коде встречаются обращения вида Отчеты.КассоваяКнига.КакаяТоПроцедура(), их нужно заменить на локальные вызовы, так как теперь этот код находится внутри объекта.
  5. Внесем изменения в массив счетов (как показано в примере выше), используя НайтиПоКоду("50.05").

Этот способ более трудоемкий в поддержке, так как при обновлении конфигурации 1С изменения в типовом отчете не попадут в ваш внешний отчет автоматически.

Дополнительные проверки: регистры и проведение документов

Проанализируем ситуацию глубже. Даже если мы добавим счет в отчет, данные могут не появиться, если документы «Приходный кассовый ордер» (ПКО) и «Расходный кассовый ордер» (РКО) не делают соответствующих записей.

Типовой отчет «Кассовая книга» часто опирается не только на бухгалтерские проводки, но и на данные регистра сведений НомераЛистовКассовойКниги. Когда вы проводите ПКО по счету 50.01, система понимает, что это кассовая операция, и регистрирует ее. При использовании счета 50.05 (особенно если он создан вручную) типовые механизмы проведения могут не сработать.

Что нужно проверить:

Резюме

Для добавления счета 50.05 в Кассовую книгу мы рекомендуем использовать расширение конфигурации. Это наиболее безопасный и современный способ. Ключевым моментом является поиск счета через НайтиПоКоду, так как пользовательские счета не являются предопределенными элементами в метаданных.

Не забудьте после внесения изменений сформировать отчет за период, в котором уже были движения по счету 50.05, и убедиться, что обороты и остатки корректно попадают в печатную форму и соответствуют данным Оборотно-сальдовой ведомости.

← На главную