При работе в 1С:Бухгалтерия предприятия 3.0 пользователи часто сталкиваются с необходимостью выделения денежных потоков на отдельные субсчета. Типовой план счетов уже содержит основные счета кассы, такие как 50.01 (Касса организации) и 50.21 (Касса организации в валюте). Однако, если в организации заведен дополнительный субсчет, например 50.05, для учета специфических кассовых операций, стандартный отчет «Кассовая книга» его попросту проигнорирует. В этой статье мы подробно разберем, почему так происходит и как технически грамотно решить эту задачу.
Разберем причину такого поведения системы. В типовой конфигурации «Бухгалтерия предприятия 3.0» отчет «Кассовая книга» построен на достаточно жестких алгоритмах формирования данных. В программном коде модуля менеджера отчета прописан массив счетов, которые система считает «кассовыми». По умолчанию туда входят только предопределенные счета 50.01 и 50.21.
Важно учитывать методологический нюанс: в стандартном плане счетов 1С счет 50.05 зарезервирован под «Денежные документы». Операции по ним учитываются отдельно от наличных денег и выводятся в другой отчет — «Журнал учета денежных документов». Если вы создали свой субсчет 50.05 для учета обычной наличности в режиме «1С:Предприятие», отчет его не «подхватит», так как он не входит в зашитый в коде список субсчетов основной кассы.
Давайте проанализируем, где именно в коде происходит определение счетов кассы. Основная логика сосредоточена в модуле менеджера отчета КассоваяКнига в процедуре СформироватьЛистыКассовойКниги. Рассмотрим фрагмент кода, отвечающий за выборку счетов:
Если ПараметрыОтчета.ПлатежныйАгент Тогда
СчетаКассы = БухгалтерскийУчетПовтИсп.СчетаВИерархии(ПланыСчетов.Хозрасчетный.КассаПлатежногоАгента);
Иначе
ПредопределенныеСчетаКассы = Новый Массив;
ПредопределенныеСчетаКассы.Добавить(ПланыСчетов.Хозрасчетный.КассаОрганизации); // Это наш 50.01
ПредопределенныеСчетаКассы.Добавить(ПланыСчетов.Хозрасчетный.КассаОрганизацииВал); // Это наш 50.21
// Сюда необходимо добавить наш новый счет
СчетаКассы = БухгалтерскийУчет.СформироватьМассивСубсчетов(ПредопределенныеСчетаКассы);
КонецЕсли;
Как мы видим, массив ПредопределенныеСчетаКассы наполняется только двумя значениями. Наша задача — расширить этот список.
Чтобы не снимать конфигурацию с поддержки и сохранить возможность легкого обновления, лучше всего использовать Расширение. Этот метод позволяет переопределить поведение процедуры, добавив в нее свои изменения.
Выполним следующие шаги:
КассоваяКнига.&Вместо("СформироватьЛистыКассовойКниги").Важный момент: Если ваш счет 50.05 был создан в режиме «1С:Предприятие», вы не сможете обратиться к нему через точку как к предопределенному объекту (ПланыСчетов.Хозрасчетный.НазваниеСчета). В этом случае мы должны использовать метод НайтиПоКоду.
Посмотрим на пример кода, который мы внедрим в расширение:
&Вместо("СформироватьЛистыКассовойКниги")
Процедура ИЗМ_СформироватьЛистыКассовойКниги(ПараметрыОтчета, ДатыЛистовСОшибками, ПоказатьОповещениеОНумерации)
// ... (весь исходный код процедуры до момента формирования массива счетов)
ПредопределенныеСчетаКассы = Новый Массив;
ПредопределенныеСчетаКассы.Добавить(ПланыСчетов.Хозрасчетный.КассаОрганизации);
ПредопределенныеСчетаКассы.Добавить(ПланыСчетов.Хозрасчетный.КассаОрганизацииВал);
// Ищем наш пользовательский счет 50.05
Счет50_05 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("50.05");
Если Не Счет50_05.Пустая() Тогда
ПредопределенныеСчетаКассы.Добавить(Счет50_05);
КонецЕсли;
СчетаКассы = БухгалтерскийУчет.СформироватьМассивСубсчетов(ПредопределенныеСчетаКассы);
// ... (дальнейший код процедуры)
КонецПроцедуры
Если по каким-то причинам использование расширений невозможно, мы можем создать внешний отчет на базе типового. Однако здесь есть техническая сложность: вся логика типового отчета находится в модуле менеджера, а у внешних отчетов (файлов .erf) модуль менеджера не используется платформой для вызова процедур формирования.
Разберем алгоритм создания внешнего отчета:
КассоваяКнига как внешний файл.Отчеты.КассоваяКнига.КакаяТоПроцедура(), их нужно заменить на локальные вызовы, так как теперь этот код находится внутри объекта.НайтиПоКоду("50.05").Этот способ более трудоемкий в поддержке, так как при обновлении конфигурации 1С изменения в типовом отчете не попадут в ваш внешний отчет автоматически.
Проанализируем ситуацию глубже. Даже если мы добавим счет в отчет, данные могут не появиться, если документы «Приходный кассовый ордер» (ПКО) и «Расходный кассовый ордер» (РКО) не делают соответствующих записей.
Типовой отчет «Кассовая книга» часто опирается не только на бухгалтерские проводки, но и на данные регистра сведений НомераЛистовКассовойКниги. Когда вы проводите ПКО по счету 50.01, система понимает, что это кассовая операция, и регистрирует ее. При использовании счета 50.05 (особенно если он создан вручную) типовые механизмы проведения могут не сработать.
Что нужно проверить:
50.05.ПриЗаписи или модуля проведения документов, чтобы они «видели» ваш счет как кассовый.Для добавления счета 50.05 в Кассовую книгу мы рекомендуем использовать расширение конфигурации. Это наиболее безопасный и современный способ. Ключевым моментом является поиск счета через НайтиПоКоду, так как пользовательские счета не являются предопределенными элементами в метаданных.
Не забудьте после внесения изменений сформировать отчет за период, в котором уже были движения по счету 50.05, и убедиться, что обороты и остатки корректно попадают в печатную форму и соответствуют данным Оборотно-сальдовой ведомости.