При работе в устаревших конфигурациях 1С (таких как Управление производственным предприятием 1.3, Зарплата и Управление Персоналом 2.5, Бухгалтерия предприятия 2.0 или Бюджетное учреждение 1.0) пользователи часто сталкиваются со сбоями при попытке обновить адресный классификатор КЛАДР. Одна из самых распространенных и неприятных проблем выражается в виде ошибки: «Ошибка метода при вызове метода контекста (Записать): Запись не верна! Значение поля не соответствует установленному отбору: Адресный классификатор...».
В этой статье мы подробно разберем техническую природу этой ошибки, выясним, почему стандартные методы загрузки дают сбой, и рассмотрим пошаговые инструкции по устранению данной проблемы.
Давайте проанализируем, почему платформа блокирует запись. Ошибка возникает при записи данных в независимый регистр сведений АдресныйКлассификатор. В коде стандартной обработки загрузки КЛАДР алгоритм устроен следующим образом: программа считывает исходные файлы .dbf по выбранному региону (например, регион 01 — Адыгея). Для записи этих данных создается объект типа РегистрСведенийНаборЗаписей, на который накладывается жесткий фильтр:
НаборЗаписей = РегистрыСведений.АдресныйКлассификатор.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.КодРегионаВКоде.Установить(КодВыбранногоРегиона);
Однако в процессе чтения файлов (в частности, глобального файла KLADR.dbf) обработчик натыкается на записи, относящиеся к региону 99 (Байконур или «Иные территории»). Когда программа пытается поместить запись с кодом региона 99 в набор записей, у которого установлен отбор, например, по региону 01, СУБД и платформа 1С блокируют транзакцию. Возникает конфликт несоответствия записываемых данных установленному отбору.
Рассмотрим пошагово все возможные варианты решения этой проблемы.
Самая распространенная причина сбоя — использование файлов КЛАДР, выгруженных из сторонних программ (например, «Налогоплательщик ЮЛ») или скачанных из непроверенных интернет-источников. В таких файлах структура таблиц DBF или состав служебных записей региона 99 часто не соответствуют ожиданиям платформы 1С.
Для решения проблемы выполним следующие действия:
KLADR.dbf, STREET.dbf, DOMA.dbf, FLAT.dbf.Попытка загрузить «скопом» всю Российскую Федерацию часто перегружает оперативную память и приводит к логическим ошибкам сопоставления регионов. Рассмотрим, как правильно разделить процесс импорта:
Иногда простая очистка адресного классификатора через стандартный интерфейс не решает проблему, так как в файловой базе данных (файл .1CD) могут быть физически повреждены индексы таблицы регистра. Выполним полное обслуживание базы данных по шагам:
1Cv8.1CD или выгрузим .dt).chdbfl.exe (она находится в каталоге установки платформы C:\Program Files\1cv8\[ВерсияПлатформы]\bin\). Отметим флаг «Исправлять обнаруженные ошибки» и запустим проверку.Если требуется полностью очистить регистр АдресныйКлассификатор программно, можно воспользоваться внешней обработкой со следующим кодом:
Набор = РегистрыСведений.АдресныйКлассификатор.СоздатьНаборЗаписей();
// Записываем пустой набор без установки отборов для полной очистки таблицы
Набор.Записать(Истина);
После очистки и восстановления индексов повторим загрузку КЛАДР из корректного источника.
Иногда сдвиг колонок при чтении DBF происходит из-за несовместимости кодировок и форматов файлов. В процессе настройки загрузки обратим внимание на следующие параметры:
DOMA.dbf и STREET.dbf. Отсутствие файла домов при наличии ссылок на него в файле улиц может искажать логику построения отборов.KLADR.dbf через любой сторонний редактор DBF (например, DBF Viewer) и принудительно пересохраним их в формате dBase IV (кодировка DOS / OEM). Это гарантирует, что внутренний объект 1С XBase считает структуру колонок без сдвигов.КЛАДР является устаревшим форматом представления адресных сведений. На смену ему пришли ФИАС и Государственный адресный реестр (ГАР). Чтобы навсегда избавиться от необходимости скачивать тяжелые DBF-файлы, бороться с кодировками и чистить регистры в базе данных, перейдем на использование облачного веб-сервиса:
После включения этой опции программа будет мгновенно получать актуальные адреса напрямую с серверов фирмы «1С» в режиме реального времени. Это полностью решит проблему с локальными ошибками записи в регистр АдресныйКлассификатор.