Каждый практикующий бухгалтер или специалист 1С рано или поздно сталкивается с ситуацией, когда автоматические алгоритмы программы начинают вести себя непредсказуемо. Один из типичных примеров в 1С:Бухгалтерия 3.0 — некорректное поведение документа Списание с расчетного счета при оплате поставщику. Вместо того чтобы отразить аванс по дебету счета 60.02, система настойчиво формирует проводку по дебету счета 60.01, автоматически подставляя в качестве документов расчетов старые, давно закрытые и оплаченные накладные.
В этой статье мы подробно разберем, почему возникает эта техническая проблема, как провести ее глубокую диагностику и какими методами можно вернуть программу в штатный режим работы.
---
Для начала проанализируем, как платформа 1С определяет наличие задолженности перед поставщиком в момент проведения платежного поручения. Программа не сканирует всю историю проводок с самого начала ведения учета — это заняло бы слишком много времени. Вместо этого система обращается к специальным виртуальным таблицам остатков регистра бухгалтерии Хозрасчетный.
Ниже представлен классический запрос, который выполняется конфигурацией «под капотом» для анализа структуры задолженности по контрагенту:
ВЫБРАТЬ
ВложенныйЗапрос.СчетРасчетов КАК СчетРасчетов,
ВложенныйЗапрос.Контрагент КАК Контрагент,
ВложенныйЗапрос.ДоговорКонтрагента КАК ДоговорКонтрагента,
ВложенныйЗапрос.ДокументРасчетов КАК ДокументРасчетов,
ВложенныйЗапрос.Валюта КАК Валюта,
ВложенныйЗапрос.Подразделение КАК Подразделение,
ВложенныйЗапрос.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов,
ВложенныйЗапрос.СуммаВзаиморасчетов КАК ОстатокВзаиморасчетов,
ВложенныйЗапрос.СуммаБУ КАК СуммаБУ,
ВложенныйЗапрос.СуммаНУ КАК СуммаНУ
ИЗ
(ВЫБРАТЬ
Остатки.Счет КАК СчетРасчетов,
Остатки.Субконто1 КАК Контрагент,
Остатки.Субконто2 КАК ДоговорКонтрагента,
Остатки.Субконто3 КАК ДокументРасчетов,
ЕСТЬNULL(Остатки.Валюта, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) КАК Валюта,
ЕСТЬNULL(Остатки.Подразделение, &ПустоеПодразделение) КАК Подразделение,
ВЫБОР
КОГДА Остатки.Счет.Валютный
ТОГДА Остатки.ВалютнаяСуммаОстаток * &Множитель
ИНАЧЕ Остатки.СуммаОстаток * &Множитель
КОНЕЦ КАК СуммаВзаиморасчетов,
Остатки.СуммаОстаток * &Множитель КАК СуммаБУ,
ЕСТЬNULL(Остатки.СуммаНУОстаток, 0) * &Множитель КАК СуммаНУ
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(
&МоментВремениОстатков,
Счет В (&СчетаРасчетовПоДокументам),
&ВидыСубконтоРасчетов,
Организация = &Организация
И Субконто1 В (&Контрагенты)
И Субконто2 В (&Договоры)) КАК Остатки
ГДЕ
ВЫБОР
КОГДА Остатки.Счет.Валютный
ТОГДА Остатки.ВалютнаяСуммаОстаток * &Множитель
ИНАЧЕ Остатки.СуммаОстаток * &Множитель
КОНЕЦ > 0
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Остатки.Счет,
Остатки.Субконто1,
Остатки.Субконто2,
НЕОПРЕДЕЛЕНО,
ЕСТЬNULL(Остатки.Валюта, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)),
ЕСТЬNULL(Остатки.Подразделение, &ПустоеПодразделение),
ВЫБОР
КОГДА Остатки.Счет.Валютный
ТОГДА Остатки.ВалютнаяСуммаОстаток * &Множитель
ИНАЧЕ Остатки.СуммаОстаток * &Множитель
КОНЕЦ,
Остатки.СуммаОстаток * &Множитель,
ЕСТЬNULL(Остатки.СуммаНУОстаток, 0) * &Множитель
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(
&МоментВремениОстатков,
Счет В (&СчетаКонтрагентыДоговоры),
&ВидыСубконтоКонтрагентыДоговоры,
Организация = &Организация
И Субконто1 В (&Контрагенты)
И Субконто2 В (&Договоры)) КАК Остатки
ГДЕ
ВЫБОР
КОГДА Остатки.Счет.Валютный
ТОГДА Остатки.ВалютнаяСуммаОстаток * &Множитель
ИНАЧЕ Остатки.СуммаОстаток * &Множитель
КОНЕЦ > 0) КАК ВложенныйЗапрос
Этот запрос извлекает остатки по счету расчетов (в нашем случае это группа счетов 60) в разрезе контрагентов, договоров и документов расчетов (третье субконто). Если в базе данных происходит сбой, реальные движения документов могут разойтись со служебными таблицами физических итогов 1С. В результате программа начинает видеть так называемые «фантомные остатки». Физически долга нет, все проводки закрыты, но в таблице итогов за прошлые периоды зависла запись, сообщающая о наличии кредиторской задолженности. Запрос возвращает эту запись, и алгоритм проведения считает, что мы гасим старый долг.
---
Прежде чем приступать к исправлению, нам необходимо убедиться, что дело действительно в расхождении итогов, а не в банальной невнимательности пользователя при заполнении документов. Для этого выполним простой запрос к таблице остатков регистра бухгалтерии по проблемному контрагенту. Вы можете запустить его через любую консоль запросов:
ВЫБРАТЬ
Остатки.Субконто1 КАК Контрагент,
Остатки.Субконто2 КАК Договор,
Остатки.Субконто3 КАК ДокументРасчетов,
Остатки.СуммаОстаток КАК СуммаБУ
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, , Субконто1 = &Контрагент) КАК Остатки
Анализируем результат: если запрос возвращает ненулевые остатки (СуммаБУ) по документам расчетов, которые вы точно знаете, что закрыли (например, по ним была полная оплата и встречное поступление), значит, мы имеем дело с нарушением целостности таблиц итогов СУБД или платформы.
---
Поскольку источником ложных данных являются поврежденные таблицы физических итогов регистра, ручные корректировки документов здесь бессильны. Требуется принудительно заставить систему пересчитать эти таблицы с нуля, опираясь исключительно на первичные проводки документов. Для этого мы можем применить два основных способа.
Если у вас нет прямого доступа к Конфигуратору или база работает в облачном сервисе (например, 1С:Фреш), мы можем воспользоваться стандартным интерфейсом управления итогами:
Хозрасчетный.После выполнения пересчета проверьте проблемный документ Списание с расчетного счета. Перепроведите его — теперь программа должна правильно распределить оплату: закрыть реальный долг по счету 60.01 (если он есть на текущий момент) либо отнести всю сумму на аванс по счету 60.02.
---
Если после полного пересчета итогов проблема не решилась или возникает снова при создании новых документов, нам следует проверить другие методологические и пользовательские ошибки, которые приводят к схожему результату.
Проанализируем ключевую системную настройку проведения расчетов в программе. Перейдем по пути: Администрирование — Настройки программы — Проведение документов.
Обратите внимание на переключатель «Расчеты выполняются»:
60.01 без заполнения аналитики документов расчетов. Верные проводки по счету 60.02 появятся только после запуска регламентной операции «Закрытие месяца».Проанализируем ситуацию: в один и тот же день бухгалтер оформляет поступление товаров и оплату. Если документ оплаты (списание с р/с) имеет время проведения 12:00:00, а поступление товаров — 14:00:00, то на момент проведения оплаты долга в системе еще не существовало. Соответственно, оплата должна была уйти на счет 60.02 (аванс), а последующее поступление — зачесть его.
Если документы перепроводились хаотично, последовательность расчетов сбивается. Для исправления этой проблемы запустите групповое перепроведение документов за месяц через меню Операции — Сервис — Групповое перепроведение документов.
Заглянем в карточку договора с поставщиком, по которому возникли расхождения. В разделе «Взаиморасчеты» обратите внимание на параметр «Способ расчетов»:
60.02 и кредиту счета 60.01.Если в цепочке расчетов хотя бы в одном документе (например, в Поступлении (акт, накладная, УПД)) была включена галочка «Ручная корректировка (разрешает редактирование движений документа)», автоматический механизм зачета авансов для последующих связанных документов ломается. Программа перестает доверять автоматическим регистрам и "не видит" связь между ручными проводками и системными регистрами расчетов.
Рекомендуется избегать ручных корректировок. Вместо этого используйте стандартные документы исправления (например, Корректировка поступления). Для быстрого поиска таких документов в базе можно использовать отчет для контроля ручных корректировок проводок.
---
Для предотвращения подобных ситуаций в будущем и своевременного обнаружения расхождений по счетам 60.01 и 60.02, мы рекомендуем регулярно использовать встроенные аналитические отчеты 1С.
Самым эффективным инструментом является отчет «Анализ субконто» по субконто «Контрагенты». В настройках отчета обязательно выберите группировку по трем уровням аналитики:
Если при формировании отчета вы увидите по одному и тому же договору одинаковые суммы в колонках «Дебет» и «Кредит» (то есть «развернутое сальдо»), это прямой сигнал к тому, что по контрагенту нарушена последовательность проведения документов либо произошел сбой итогов, требующий нашего вмешательства. Для автоматизации выявления и исправления таких ситуаций подойдёт обработка для поиска ошибок во взаиморасчетах и зачета авансов.