При работе с регламентированной отчетностью в различных конфигурациях 1С (будь то старая «Бухгалтерия предприятия 1.6» или современные «ERP 2.4» и «Комплексная автоматизация») пользователи и разработчики часто сталкиваются с ошибкой «Не определен счет [КодСчета] в соответствии счетов». Эта проблема блокирует возможность автоматического заполнения отчета и, как правило, связана с тем, что программный алгоритм не может сопоставить конкретный счет из плана счетов с внутренними правилами сбора данных для строк баланса или других форм.
В этой статье мы разберем причины возникновения данной ошибки в разных поколениях систем 1С и рассмотрим пошаговые алгоритмы их устранения.
В конфигурациях на обычных формах, таких как БП 1.6, при попытке использовать формы отчетности, заимствованные из более новых редакций (например, перенесенные из БП 2.0), возникает конфликт архитектуры. Проанализируем ситуацию: в БП 2.0 используется специальный объект Соответствие (карта), который хранит связи между кодами строк и объектами плана счетов. В БП 1.6 этот механизм реализован иначе или отсутствует в нужном отчету виде.
Чаще всего ошибка проявляется в функции Счет(КодСчета), когда программа пытается обратиться к переменной мСчет. Разберем типичный фрагмент кода, вызывающий сбой:
Функция Счет(КодСчета)
НайденныйСчет = мСчет[КодСчета];
Если НайденныйСчет = Неопределено Тогда
Предупреждение("Ошибка. Не определен счет " + КодСчета + " в соответствии счетов");
КонецЕсли;
Возврат НайденныйСчет;
КонецФункции
Если в таблице мСчет отсутствует ключ "70" (или любой другой), функция возвращает Неопределено, что в дальнейшем приводит к ошибке «Значение не является значением объектного типа (ВидыСубконто)» при попытке обратиться к аналитике счета.
Рассмотрим два способа исправления кода в конфигураторе для старых систем:
СчетРасчетовСПерсоналом = Счет("70");
СчетРасчетовСПерсоналом = ПланыСчетов.Хозрасчетный.РасчетыСПерсоналомПоОплатеТруда;
ЗаполнитьСоответствиеСчетов(СоответствиеСчетов) в форме отчета. Проанализируем её структуру и добавим недостающие счета вручную:
Процедура ЗаполнитьСоответствиеСчетов(СоответствиеСчетов)
// Существующий код...
СоответствиеСчетов.Вставить("70", ПланыСчетов.Хозрасчетный.РасчетыСПерсоналомПоОплатеТруда);
СоответствиеСчетов.Вставить("68.01", ПланыСчетов.Хозрасчетный.НДФЛ);
// Для счетов, которых нет в вашей конфигурации, можно вставить пустую ссылку
// СоответствиеСчетов.Вставить("НесуществующийСчет", ПланыСчетов.Хозрасчетный.ПустаяСсылка());
КонецПроцедуры
В современных системах на управляемых формах логика заполнения отчетности вынесена в общие модули. Например, ошибка с кодом счета 68.52 в ERP 2.4 часто связана с тем, что разработчики добавили новый предопределенный счет в план счетов, но не успели обновить алгоритмы в модуле сбора итогов.
Рассмотрим, как это работает: программа обращается к общему модулю ЗаполнениеБухгалтерскойОтчетностиИтоги. В нем реализована функция, которая по строковому коду возвращает ссылку на счет. Если код счета (например, "68.52") не найден в ветках Если ... ИначеЕсли, срабатывает исключение Иначе, выдающее пользователю сообщение об ошибке.
Посмотрим на доступные варианты решения для актуальных конфигураций:
ЗаполнениеБухгалтерскойОтчетностиПереопределяемый и добавить туда логику обработки «проблемного» счета.
&После("ЗаполнитьСоответствиеСчетов")
Процедура Расш_ЗаполнитьСоответствиеСчетов(СоответствиеСчетов)
Если СоответствиеСчетов.Получить("68.52") = Неопределено Тогда
СоответствиеСчетов.Вставить("68.52", ПланыСчетов.Хозрасчетный.НалогНаПрибыльПриИсполненииОбязанностейНалоговогоАгента);
КонецЕсли;
КонецПроцедуры
Выясним, какие еще факторы могут влиять на появление данной ошибки:
Анализ Субконто: Обратите внимание на сообщение №4 из обсуждения. Часто ошибка возникает из-за того, что состав ВидыСубконто на счете в вашей базе отличается от того, который ожидает отчет. Например, на 70 счете в версии 2.0 субконто называется РаботникиОрганизаций, а в модифицированной 1.6 оно может называться иначе или отсутствовать. Проверьте План счетов и убедитесь, что аналитика соответствует требованиям алгоритма заполнения.
Кэш и настройки: Иногда программа пытается заполнить отчет, используя старые сохраненные настройки. Попробуйте создать совершенно новый экземпляр регламентированного отчета, не копируя старый, и нажмите кнопку «Заполнить».
Проверка предопределенных элементов: Если бухгалтер вручную создал счет с кодом, который совпадает с системным, но не является предопределенным, функция ПланыСчетов.Хозрасчетный.ИмяСчета может работать некорректно. Всегда проверяйте наличие «желтого шарика» (признака предопределенности) в списке счетов.
Подводя итог, можно сказать, что ошибка «Не определен счет в соответствии счетов» — это всегда сигнал о рассинхронизации между программным кодом отчета и физическим наполнением Плана счетов. В старых системах это лечится ручной правкой модуля отчета, в новых — своевременным обновлением или точечным использованием расширений.