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