В конфигурации 1С:Управление торговлей 10.3 пользователи часто сталкиваются с ситуацией, когда при попытке провести документ отгрузки система выдает ошибку: «Допустимое число дней задолженности: X, дата самой старой задолженности: [дата из далекого прошлого], превышение: Y дней». Это происходит даже в тех случаях, когда база была официально свернута, а реальная текущая задолженность контрагента находится в пределах нормы или вовсе отсутствует. Рассмотрим подробно, почему возникает эта проблема и как ее устранить.
Для начала разберем, как программа понимает, что задолженность просрочена. В типовом решении УправлениеТорговлей версии 10.3 за этот функционал отвечает запрос к регистру накопления ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов. Проанализируем фрагмент кода, который система использует для получения данных о самой старой сделке:
ВЫБРАТЬ
МИНИМУМ(ДокументРасчетовСКонтрагентом.Дата) КАК ДатаПервогоДокумента,
ДоговорКонтрагента
ИЗ
РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(,
ДоговорКонтрагента = &ДоговорКонтрагента)
ГДЕ
СуммаВзаиморасчетовОстаток > 0
И ДоговорКонтрагента.КонтролироватьЧислоДнейЗадолженности
СГРУППИРОВАТЬ ПО ДоговорКонтрагента
Проблема заключается в том, что виртуальная таблица Остатки возвращает данные в разрезе измерений. Если в договоре включен флаг «Вести по документам расчетов с контрагентами», то программа хранит остаток по каждой конкретной накладной или платежу. Выясним причину: при некорректно выполненной свертке базы старые документы (например, за 2012 год) могут быть помечены на удаление, но записи по ним в регистре остаются «зависшими». Это происходит из-за того, что документ Корректировка записей регистров, созданный при свертке, продолжает ссылаться на эти старые объекты в качестве аналитики ДокументРасчетовСКонтрагентом.
Часто пользователи замечают, что «раньше все работало», а после обновления конфигурации (например, до версии 10.3.43 и выше) внезапно посыпались ошибки. Рассмотрим причины этого явления:
ДокументРасчетовСКонтрагентом.ЧислоРабочихДней. Если после обновления или в начале нового года не был заполнен Производственный календарь за старые периоды (те самые 2012–2013 годы), функция может возвращать некорректные значения, что приводит к странным цифрам в сообщении о превышении (например, 149 дней вместо фактических нескольких лет).Проанализируем типовой алгоритм расчета просрочки:
Если Константы.СпособКонтроляДнейЗадолженности.Получить() = Перечисления.СпособыКонтроляДнейЗадолженности.ПоКалендарнымДням Тогда
РазницаДатВСекундах = (ДатаТекущейСделки - Выборка.ДатаПервогоДокумента);
РазницаДней = Цел(РазницаДатВСекундах/(24 * 60 * 60));
Иначе
РазницаДней = ЗаполнениеДокументов.ЧислоРабочихДней(Выборка.ДатаПервогоДокумента, ДатаТекущейСделки);
КонецЕсли;
Это самый правильный с точки зрения чистоты данных метод. Нам необходимо найти документы Корректировка записей регистров, которые были сформированы в момент свертки базы (обычно это 31 декабря года, предшествующего началу работы в новой базе). Проанализируем ситуацию по шагам:
Корректировка записей регистров.Взаиморасчеты с контрагентами по документам расчетов заменим старые ссылки на документы 2012 года на сам документ корректировки или на специально созданный пустой документ Документ расчетов с контрагентом (ручной учет), датированный днем свертки.Важно: После такой замены «точкой отсчета» для системы станет дата свертки, и старая задолженность перестанет считаться просроченной относительно 2012 года.
Если контрагентов с такой проблемой слишком много и ручная правка корректировок трудозатратна, рассмотрим альтернативный вариант:
Корректировка долга (операция «Перенос задолженности»).Это позволит «обнулить» историю взаиморасчетов в разрезе документов, сохранив при этом общую сумму долга клиента перед организацией.
Если вы видите, что расчет дней ведется некорректно (число дней превышения не соответствует разнице дат), обязательно проверьте Производственный календарь. Рассмотрим алгоритм действий:
ЧислоРабочихДней.Таким образом, мы выяснили, что ошибка «Превышено допустимое число дней задолженности» чаще всего является следствием «грязных» данных в регистре ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов. Использование прямых корректировок регистра или перенос задолженности на новые аналитические разрезы (договоры/документы расчетов) полностью решает данную проблему.