При настройке обмена данными между информационными базами на платформе 1С:Предприятие 8.3 специалисты часто сталкиваются со скрытыми системными механизмами, которые блокируют запись настроек. Одной из таких неприятных проблем является внезапное всплывающее окно с ошибкой: «Поле "Код" не заполнено!». При этом на форме настройки правил отправки данных пользователь визуально не видит никаких пустых полей с названием «Код».
В этой статье мы подробно разберем природу возникновения данной ошибки в конфигурации 1С:Управление торговлей 11.4 (и других современных конфигурациях на базе Библиотеки стандартных подсистем), проанализируем причины ее появления и рассмотрим пошаговые методы устранения — от простых административных манипуляций до программного изменения реквизитов.
С технической точки зрения любая синхронизация данных в 1С строится на объектах метаданных, которые называются Планы обмена. Каждый узел плана обмена (который представляет собой текущую или стороннюю базу-корреспондента) обязан иметь два ключевых уникальных идентификатора: Наименование и Код. Роль кода узла обычно выполняет префикс информационной базы.
Ошибка «Поле "Код" не заполнено» возникает в следующих ситуациях:
Код на управляемых формах настроек синхронизации, чтобы пользователи случайно не нарушили логику регистрации изменений. Из-за этого при возникновении ошибки пользователь не может напрямую заполнить пустое поле на форме.Рассмотрим детальные сценарии решения этой проблемы.
Это самый простой и правильный административный способ. Прежде чем создавать любые новые подключения, необходимо убедиться, что система имеет четкие идентификаторы.
Выполним следующие шаги в обеих базах (источнике и приемнике):
УТ для Управления торговлей, БП для Бухгалтерии предприятия или РТ для Розницы). Префикс должен состоять из двух символов (букв или цифр).После установки префиксов в обеих базах попробуем заново пройти мастер настройки синхронизации данных. Система автоматически подставит новые префиксы в качестве кодов узлов, и ошибка исчезнет. Для последующей автоматизации регулярной синхронизации без участия пользователя применяется автоматический регулярный обмен данными между базами 1С по расписанию.
Если ошибка возникает из-за того, что в уже созданном узле обмена поле заблокировано или не выведено на экран, мы можем принудительно изменить форму настройки.
Выполним перенастройку формы по шагам:
Теперь скрытое поле появится на форме. В управляемых формах 1С при попытке редактирования системных полей программа может выдать предупреждение: «Редактирование кода узла может привести к рассинхронизации. Продолжить?». Соглашаемся с предупреждением, вводим необходимый код (префикс базы-корреспондента) и нажимаем кнопку Записать и закрыть.
Если интерактивно отредактировать код на форме не удается из-за жестких платформенных ограничений («Только чтение»), воспользуемся универсальным инструментом администратора.
Рассмотрим этот алгоритм подробнее:
Синхронизация данных через универсальный формат.После выполнения обработки служебное поле запишется напрямую в базу данных, минуя интерфейсные проверки формы синхронизации.
Если стандартная обработка группового изменения не справляется из-за ограничений на запись объектов планов обмена, мы можем применить короткий программный код. Запустим внешнюю обработку или воспользуемся встроенной консолью кода (групповым изменением в режиме произвольного алгоритма).
Проанализируем пример кода, который принудительно находит нужный узел обмена, устанавливает ему корректный код и записывает его в режиме отключения стандартных проверок:
// Выберем узел плана обмена по известному наименованию или пустой ссылке
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка КАК Узел
|ИЗ
| ПланОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат
|ГДЕ
| Код = """""; // ищем узлы с пустым кодом
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
УзелОбъект = Выборка.Узел.ПолучитьОбъект();
// Присваиваем корректный двухсимвольный код
УзелОбъект.Код = "УТ";
// Включаем режим загрузки, чтобы обойти системные проверки БСП
УзелОбъект.ОбменДанными.Загрузка = Истина;
Попытка
УзелОбъект.Записать();
Сообщить("Код узла успешно изменен на: " + УзелОбъект.Код);
Исключение
Сообщить("Ошибка при записи узла: " + ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
Использование свойства ОбменДанными.Загрузка = Истина — это проверенный и самый надежный способ обойти любые интерфейсные преграды платформы при восстановлении битых или незаполненных элементов обмена.
Часто пользователи пытаются настроить прямое подключение между двумя базами 1С (через COM-соединение или веб-сервисы), работающими в пределах одного сервера или терминального сервера. Несмотря на кажущееся удобство (отсутствие промежуточных файлов), такое подключение очень чувствительно к версиям платформ, разрядности клиентов и правам доступа Windows.
Если при прямом подключении возникают регулярные ошибки записи правил или инициализации COM-соединения, мы настоятельно рекомендуем переключить обмен на использование промежуточных файлов через общий сетевой каталог или FTP-ресурс. Данный метод работает стабильнее, легче поддается логированию и минимизирует риски возникновения блокировок при записи узлов.
После успешного устранения ошибки с полем «Код» и настройки синхронизации, пользователи розничных и оптовых конфигураций часто сталкиваются со следующей проблемой: при синхронизации документов Чек ККМ после закрытия кассовой смены чеки в одной базе (где была закрыта смена) архивируются или удаляются, а в других базах — продолжают «висеть» в неизменном виде.
Выясним причину такого поведения и определим правила корректной настройки:
Чек ККМ являются оперативными и временными. Они предназначены исключительно для фиксации продаж в течение дня локально на рабочем месте кассира.Чек ККМ вообще не должны участвовать в постоянной синхронизации между распределенными базами. В центральный офис (или базу-приемник) должен передаваться исключительно сводный документ Отчет о розничных продажах в конце дня.Придерживаясь этих правил администрирования планов обмена и методологии учета розничных продаж, мы сможем гарантировать бесперебойную работу синхронизации данных в 1С без критических ошибок блокировки данных.