При переходе с платформы 1С 8 на «классическую» 1С 7.7 программисты часто сталкиваются с неочевидным поведением системы при программном создании документов. Одной из самых распространенных проблем является ситуация, когда документ СтрокаВыпискиБанка успешно создается и проводится, движения по регистрам оперативного учета (Банк, Взаиморасчеты) появляются, а бухгалтерские проводки — нет. Рассмотрим подробно, почему это происходит и как обеспечить корректное формирование проводок в «Комплексной конфигурации» 7.7.
Для начала проанализируем, чем отличается «Комплексная конфигурация» (ТиС+Бух+ЗиК) от обычной «Бухгалтерии». В простой бухгалтерской конфигурации 7.7 проводки обычно жестко прописаны в модуле документа в процедуре ОбработкаПроведения. Однако в «Комплексной» реализована более сложная модель разделения учета на оперативный и бухгалтерский. Здесь проводки зачастую зависят не только от факта проведения документа, но и от заполнения специфических реквизитов, которые не всегда очевидны при программном заполнении объекта.
Как показывает практика и обсуждение в рассматриваемой теме, наиболее частой причиной отсутствия проводок является незаполненный реквизит СуммаВзаиморасчетов. В 1С 7.7 для документа СтрокаВыпискиБанка существует несколько полей для сумм:
Сумма — основная сумма документа в валюте выписки.СуммаУчета — сумма в валюте бухгалтерского учета (обычно рубли).СуммаВзаиморасчетов — сумма, на которую изменяется задолженность в регистрах и которая служит базой для формирования проводок по счетам 60, 62, 76.Если при создании документа программно мы заполняем только Сумма, алгоритм проведения может успешно обновить остатки на регистрах денежных средств, но «споткнуться» на формировании проводок, так как для бухгалтерского модуля база (сумма взаиморасчетов) будет равна нулю. Посмотрим на пример корректного заполнения документа в коде:
Док = СоздатьОбъект("Документ.СтрокаВыпискиБанка");
Док.Новый();
Док.ДатаДок = ВыбДата;
Док.СчетДанные = ВыбСчет;
// Заполнение аналитики
Док.Субконто1 = ВыбКонтрагент;
Док.Субконто2 = ВыбДоговор;
// Обязательные суммы
Док.Сумма = 10000;
Док.СуммаВзаиморасчетов = 10000;
Док.СуммаУчета = 10000;
// Установка вида операции (важно для проводок)
Док.ХозОперация = Справочник.ХозяйственныеОперации.НайтиПоКоду("ОплатаПоставщику");
Док.Записать();
Док.Провести();
Выясним еще одну важную деталь: в «Комплексной конфигурации» логика бухгалтерских счетов не зашита в код модуля «намертво». Она опирается на справочник Хозяйственные операции. В каждом документе СтрокаВыпискиБанка есть реквизит (часто называемый ХозОперация или ТипОперации), который указывает системе, какие именно счета дебета и кредита использовать.
Проанализируем ситуацию: если при программном создании этот реквизит не заполнен или заполнен неправильно, механизм формирования проводок «не понимает», как интерпретировать данное движение. Даже если документ проведен по регистрам, бухгалтерская операция останется пустой, так как система не нашла подходящего шаблона в справочнике для генерации проводок.
Разберем настройки самой системы, которые могут влиять на результат. В 1С 7.7 существует константа, определяющая режим формирования проводок. Найти её можно через меню: Сервис — Настройка параметров учета — Режимы.
Провести(). Если их нет — ищите ошибку в заполнении реквизитов (как в случае с СуммаВзаиморасчетов).Формирование проводок.Важно понимать, что если в базе включен отложенный режим, то программно созданный документ и не должен сразу генерировать проводки. Это нормальное поведение системы. Чтобы они появились, необходимо запустить регламентную обработку за соответствующий период.
Рассмотрим подробнее работу этой обработки. Многие пользователи ошибочно полагают, что её нужно запустить один раз в начале месяца, чтобы в дальнейшем проводки создавались автоматически. На самом деле алгоритм иной:
Операция на основе данных регистра.В некоторых случаях при программной разработке в 1С 7.7 требуется принудительно заставить систему создать проводки. Для этого можно использовать методы объекта Операция, который неразрывно связан с документом. Если стандартное проведение не помогает, программисты иногда прибегают к вызову процедур из глобального модуля или модуля самого документа, которые отвечают за актуализацию бухгалтерских данных.
Проанализируем программный метод: если вы используете Провести(), убедитесь, что в конфигурации не стоит запрет на формирование проводок для данного типа пользователя или через интерфейсные ограничения. Также проверьте, используется ли метод ИспользоватьПроводки(), который в коде 7.7 может включать или выключать бухгалтерский слой для конкретного экземпляра документа.
Подводя итог, если вы столкнулись с отсутствием проводок у программно созданной банковской выписки в 1С 7.7, выполните следующие шаги:
СуммаВзаиморасчетов, СуммаУчета и ХозОперация.Соблюдение этих правил позволит вам корректно автоматизировать ввод банковских документов и обеспечить целостность данных как в оперативном, так и в бухгалтерском учете системы 1С 7.7.