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