При работе с распределенными информационными базами (РИБ) в конфигурации 1С:Розница 2.2 системные администраторы и программисты часто сталкиваются с критической ошибкой на этапе создания начального образа подчиненного узла. Ошибка выглядит следующим образом: Невосстановимая ошибка Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm: по причине: Ошибка SDBL: Ожидается имя таблицы (pos=48). Рассмотрим подробнее, что это за ошибка, почему стандартные методы тестирования базы не помогают и как гарантированно решить проблему.
Для начала разберем, что именно сообщает нам платформа. SDBL (Simplified Database Language) — это внутренний язык запросов платформы 1С, который служит прослойкой между кодом на языке 1С и SQL-запросами к конкретной СУБД (или файловой таблице .1CD). Числовой маркер pos=48 указывает на конкретную позицию во внутреннем дереве запроса, где парсер ожидал встретить идентификатор таблицы, но обнаружил пустую строку или некорректный символ.
В контексте создания РИБ по магазину это означает, что при формировании состава выгружаемых данных система обращается к объекту метаданных, который либо поврежден в структуре базы данных, либо имеет логические несоответствия. Часто это связано с тем, что механизм фильтрации данных по магазину (префиксы, настройки синхронизации) пытается сослаться на таблицу, которой физически не существует в текущем сеансе, или чье описание в справочнике Идентификаторы объектов метаданных рассинхронизировано с реальной структурой БД.
Как показывает практика, «Тестирование и исправление» (ТиИС) через Конфигуратор часто оказывается бесполезным в данной ситуации. Это происходит потому, что ТиИС проверяет логическую целостность ссылок и физическую сохранность таблиц, но не всегда способен выявить «фантомные» записи в системных таблицах 1С, которые не видны на уровне прикладных объектов. Очистка кеша также не решает проблему, так как корень ошибки лежит в структуре самого файла базы данных .1CD или в данных регистров, управляющих обменом.
Проанализируем наиболее эффективный метод, который помог пользователям справиться с данной проблемой. Суть метода заключается в полной «пересборке» базы данных. Разберем этот процесс по шагам:
.cf (Конфигурация -> Сохранить конфигурацию в файл)..cf. Это гарантирует нам создание идеально чистой структуры таблиц без накопленного «мусора».ВыгрузкаЗагрузкаДанныхXML83.epf (она входит в состав инструментов разработчика, поставляемых на диске ИТС). В отличие от выгрузки через .dt, этот инструмент переносит объекты на уровне XML-сериализации, что позволяет исключить ошибки физического уровня базы данных.pos=48 исчезает, так как структура таблиц была пересоздана платформой с нуля.Выясним еще одну возможную причину. Иногда ошибка SDBL возникает из-за конфликта платформы с индексом полнотекстового поиска (ППД) при массовом чтении данных для РИБ. Посмотрим, как это устранить:
Перейдем в раздел Администрирование -> Поддержка и обслуживание -> Полнотекстовый поиск. Нажмем кнопку «Очистить индекс», а затем полностью снимем галочку «Полнотекстовый поиск данных». После этого рекомендуется выполнить перезапуск базы в монопольном режиме и повторить попытку создания узла.
В конфигурации «Розница 2.2» при создании РИБ по магазину система автоматически генерирует документ ВводНачальныхОстатковУзла. Это сложная операция, выполняемая внутри транзакции. Рассмотрим пример логики, которая может приводить к сбою:
// Пример упрощенной логики, вызывающей ошибку при пустых значениях
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ * ИЗ РегистрНакопления.ТоварыНаСкладах ГДЕ Магазин = &Магазин";
Запрос.УстановитьПараметр("Магазин", ВыбранныйМагазин);
// Если ВыбранныйМагазин не определен или имеет битую ссылку,
// внутренний генератор SDBL может сформировать некорректный запрос к таблице.
Если в базе имеются записи об остатках с «пустым» магазином или складом, алгоритм формирования остатков для нового узла может дать сбой. Проанализируем состояние регистров Товары на складах и Товары организаций на предмет пустых или некорректных значений перед запуском обмена.
Важно обратить внимание на версию используемой платформы. В ветках 8.3.13 и 8.3.14 были существенно переработаны механизмы работы с временными таблицами в файловом режиме. Если вы используете версию 8.3.13.1644, попробуйте выполнить операцию на более стабильных сборках (например, последних релизах 8.3.18 или 8.3.22), предварительно сделав резервную копию. Иногда ошибка является чисто платформенным багом, который исправлен в новых патчах.
Перед тем как приступать к сложному переносу через XML, обязательно выполните проверку физической целостности файла базы данных. Закройте все сеансы 1С и запустите утилиту chdbfl.exe (она находится в папке bin установленной платформы). Установите флаг «Исправлять обнаруженные ошибки». В отличие от конфигуратора, эта утилита работает с файлом .1CD напрямую и способна восстановить заголовки таблиц, отсутствие которых часто и вызывает Ожидается имя таблицы (pos=48).
Подводя итог, можно сказать: если стандартные методы очистки и проверки не помогают, использование обработки ВыгрузкаЗагрузкаДанныхXML83.epf для «переезда» в чистую базу является самым надежным способом решения проблемы в 1С:Розница 2.2.