В практике работы с программами 1С, особенно при использовании синхронизации между «1С:Управление торговлей» и «1С:Бухгалтерия», часто возникает неприятная ситуация: контрагент в базе дублируется, и в документы закрытого периода попадает «битая» связка. Например, в документе выбран Контрагент_2, но в поле Договор подставлен договор, владельцем которого является Контрагент_1. Это приводит к тому, что в оборотно-сальдовой ведомости (например, по счету 60 или 62) задолженность «разваливается» на две строки, хотя визуально контрагент может называться одинаково. Для быстрого обнаружения подобных расхождений на счетах учета можно задействовать отчет для поиска ошибок в расчетах с поставщиками и покупателями.
Ситуация осложняется тем, что период уже закрыт для редактирования, отчетность сдана, и просто перевыбрать значения в документах невозможно. Рассмотрим подробно, как выйти из этой ситуации несколькими способами, от стандартных инструментов до технологических хитростей.
Прежде всего, проанализируем ситуацию: почему система вообще позволила выбрать «чужой» договор? Чаще всего это происходит в момент синхронизации данных. Программный код обмена записывает данные напрямую в базу, обходя стандартные проверки форм, которые мы видим в пользовательском интерфейсе. Если в двух базах у одного и того же контрагента различаются уникальные идентификаторы (GUID), система создает дубль. В итоге один документ может ссылаться на одну карточку контрагента, а его договор — на другую.
Это самый «чистый» и эффективный метод с точки зрения платформы 1С. Рассмотрим по шагам, как это работает:
Контрагенты. В правилах поиска выберем проверку по ИНН и КПП.Важный нюанс: Платформа 1С при выполнении этой операции заменяет ссылки во всех таблицах базы данных, включая документы в закрытых периодах. При этом замена происходит на уровне записей СУБД, что позволяет «схлопнуть» аналитику без перепроведения документов. После этой процедуры «кривой» договор автоматически станет принадлежать правильному контрагенту, так как ссылка на владельца в самом договоре тоже обновится.
Если нам нужно точечно исправить только определенные документы, не объединяя карточки контрагентов (например, если они не являются полными дублями), воспользуемся обработкой «Групповое изменение реквизитов». Разберем этот алгоритм:
Стандартно программа не даст вам выбрать договор, не принадлежащий контрагенту. Однако этот запрет можно обойти:
Поступление (акты, накладные, УПД)) и настроим отбор по конкретным документам.Контрагент и установим правильное значение. Затем найдем Договор и выберем нужный.Режим «Обмена данными» (ОбменДанными.Загрузка = Истина) отключает прикладные проверки в коде конфигурации. Программа просто запишет указанные ссылки в документ, даже если они кажутся ей логически неверными. Это позволит восстановить целостность аналитики без открытия периода.
Если политика компании категорически запрещает вносить изменения в закрытый период даже программными средствами, проанализируем ситуацию с точки зрения бухгалтерского учета. Мы можем сделать исправительные записи в текущем открытом периоде.
Воспользуемся документом Корректировка долга с видом операции «Перенос задолженности»:
Контрагента_2 (на котором висит ошибка).Контрагента_1 и его корректный договор.Тонкость: Если форма документа сопротивляется выбору «чужого» договора даже здесь, можно воспользоваться приемом «копирования ссылки». В некоторых случаях помогает программное заполнение документа через Консоль кода или обработку, которая просто подставит нужные значения в регистры Хозрасчетный.
Рассмотрим метод «транзита», который часто применяют опытные бухгалтеры. Если сторно не срабатывает из-за жестких отборов в формах, мы можем использовать операцию, введенную вручную:
Создадим документ Операция (бухгалтерский и налоговый учет):
// Шаг 1: Списываем остаток с неверной аналитики
Дт 60.01 (Контрагент_2, Неверный_Договор) — Кт 000 (Вспомогательный счет)
// Шаг 2: Приходуем остаток на верную аналитику
Дт 000 (Вспомогательный счет) — Кт 60.01 (Контрагент_1, Верный_Договор)
В ручной операции проверки соответствия владельца договора обычно отключены или работают в режиме предупреждения. Использование счета 000 или 76.09 в качестве транзитного позволяет технически «переложить» сумму с одной аналитики на другую, не затрагивая обороты по другим счетам.
Посмотрим на ситуацию шире: если мы просто исправим документы в Бухгалтерии, при следующей выгрузке из УТ проблема может вернуться. Чтобы этого не случилось, нужно выполнить следующие действия:
Контрагент_А из УТ соответствует Контрагенту_Б из БП.Если вы обладаете навыками программирования, самый быстрый способ — написать небольшую обработку, которая выполнит запись объекта без проверок. Посмотрим на пример кода:
ОбъектДок = СсылкаНаДокумент.ПолучитьОбъект();
// Отключаем проверки
ОбъектДок.ОбменДанными.Загрузка = Истина;
// Устанавливаем верные значения напрямую в реквизиты или табличные части
ОбъектДок.Контрагент = СсылкаНаНужногоКонтрагента;
ОбъектДок.ДоговорКонтрагента = СсылкаНаНужныйДоговор;
// Записываем без проведения, так как движения по регистрам мы поправим отдельно
// или они уже верны по ссылкам
ОбъектДок.Записать(РежимЗаписиДокумента.Запись);
Важно: При таком подходе не забудьте также проверить записи в регистре бухгалтерии Хозрасчетный. Если документ уже проведен, его движения по счетам содержат старые ссылки. Вам может потребоваться либо перепровести документ (что в закрытом периоде нежелательно), либо аналогичным образом программно скорректировать записи регистра.
Мы проанализировали ситуацию с перепутанными договорами и выяснили, что наиболее безопасным способом является удаление дублей. Оно позволяет автоматически вычистить ссылки во всей базе. Если же дублей нет, а есть просто ошибочная привязка, используйте групповое изменение реквизитов в режиме обмена данными. Это сэкономит время и сохранит неизменность данных для налоговой отчетности. Также для быстрого исправления связей без перепроведения документов можно использовать обработку поиска и замены значений в базе данных.