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