При ведении учета по нескольким фирмам в единой информационной базе 1С:Бухгалтерии 7.7 типовой отчет Кассовая книга может работать некорректно. Даже если в модуль отчета добавлен отбор документов по организации, табличная часть корректно выводит приходные и расходные ордера, но остатки на начало и конец дня продолжают суммироваться по всей базе целиком. Разберем причины такого поведения и рассмотрим технические способы разделения кассового учета.
Проанализируем структуру типового отчета Кассовая книга. Отчет формируется на основании двух независимых механизмов:
Запрос или метод ВыбратьДокументы(). Если разработчик добавляет фильтр по реквизиту организации в запрос, список документов ПКО и РКО отбирается правильно.БухгалтерскиеИтоги либо системные бухгалтерские функции (СНД(), СКД()). Если при расчете итогов не задан отбор по разделителю или аналитике организации, система возвращает суммарный остаток денег по всей кассе предприятия.В платформе 1С:Предприятие 7.7 предусмотрен встроенный механизм разделения бухгалтерских итогов. Для его задействования выполним следующие шаги:
Фирмы или Организации).КассоваяКнига добавим элемент диалога для выбора конкретной организации (реквизит диалога ВыбФирма).БухгалтерскиеИтоги и перед вызовом метода ВыполнитьЗапрос() или Рассчитать() установим фильтрацию по разделителю.Посмотрим на пример установки отбора в коде отчета:
БИ = СоздатьОбъект("БухгалтерскиеИтоги");
// Устанавливаем фильтрацию по выбранной организации
Если ПустоеЗначение(ВыбФирма) = 0 Тогда
БИ.ИспользоватьРазделительУчета(ВыбФирма);
КонецЕсли;
БИ.ВыполнитьЗапрос(НачДня(ВыбДата), КонДня(ВыбДата), "50.1",,,,, "С");
СальдоНач = БИ.СНД("50.1");
СальдоКон = БИ.СКД("50.1");
Обратите внимание: использование разделителя учета разделяет только бухгалтерские итоги и проводки. Документы, справочники и константы остаются общими.
Если разделитель учета в конфигурации не используется или задействован под другие задачи, можно разделить кассу через дополнительную аналитику:
50 (и субсчета 50.1, 50.2) добавим вид субконто Организации.ПриходныйКассовыйОрдер и РасходныйКассовыйОрдер обеспечим запись выбранной организации в соответствующее субконто проводки.Кассовая книга скорректируем расчет бухгалтерских итогов, задействовав метод ИспользоватьСубконто():
БИ = СоздатьОбъект("БухгалтерскиеИтоги");
Если ПустоеЗначение(ВыбОрганизация) = 0 Тогда
// Второй параметр 2 означает жесткий фильтр по конкретному значению
БИ.ИспользоватьСубконто(ВидыСубконто.Организации, ВыбОрганизация, 2);
КонецЕсли;
БИ.ВыполнитьЗапрос(НачДня(ВыбДата), КонДня(ВыбДата), "50.1");
СальдоНач = БИ.СНД("50.1");
СальдоКон = БИ.СКД("50.1");
Согласно правилам кассовой дисциплины, каждая организация должна вести собственную непрерывную нумерацию приходных и расходных кассовых ордеров. Создавать отдельные виды документов под каждую фирму не требуется — достаточно реализовать префиксы номеров.
Разберем по шагам настройку автонумерации:
Организации добавим текстовый реквизит ПрефиксНомера (длиной 2–3 символа, например, «А-», «Б-»).ПриУстановкеНовогоНомера():
Процедура ПриУстановкеНовогоНомера()
Если ПустоеЗначение(Организация) = 0 Тогда
Если ПустоеЗначение(Организация.ПрефиксНомера) = 0 Тогда
Префикс = СокрЛП(Организация.ПрефиксНомера);
УстановитьНовыйНомер(Префикс);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Стандартный отчет «Кассовая книга» выполняет предварительный расчет номера текущего листа нарастающим итогом с начала календарного года. В типовом коде этот алгоритм пробегает по всем документам кассы за год без учета фирм. Чтобы листы книги по каждой организации нумеровались строго по порядку (Лист 1, Лист 2 и т.д.), процедуру подсчета номеров листов перед формированием печатной формы также необходимо ограничить условием по текущей выбранной организации.
В типовой 1С:Бухгалтерии 7.7 сведения о руководителе, главном бухгалтере и кассире считываются из общих периодических констант информационной базы. При формировании книги для разных фирм эти реквизиты должны читаться из свойств выбранной организации или соответствующих периодических реквизитов справочника организаций.