При работе в распределенной информационной базе (РИБ) пользователи 1С:Бухгалтерия предприятия 3.0 нередко сталкиваются с критической ошибкой: «Ошибка чтения файла сообщения обмена: Запись не верна!». Эта ситуация осложняется тем, что система не всегда выдает подробности о том, какой именно объект или запись вызвали сбой. Проблема часто локализуется в движениях регистра бухгалтерии (Хозрасчетный), так как при исключении проводок из состава обмена загрузка проходит успешно. Рассмотрим подробно, как проанализировать ситуацию и устранить ошибку.
Первым делом нам необходимо понять, на каком именно документе или записи регистра «спотыкается» загрузка. Поскольку стандартный журнал регистрации не всегда дает детальную расшифровку, воспользуемся инструментами разработчика. Проанализируем ситуацию по шагам:
В момент возникновения ошибки система автоматически переключит нас в Конфигуратор и подсветит строку кода, на которой произошел сбой. Как правило, это будет метод ПрочитатьXML() или Записать(). В этот момент мы можем воспользоваться «Табло» или нажать Shift+F9, чтобы вычислить значение переменной Объект. Это позволит увидеть тип объекта (например, ДокументОбъект.РеализацияТоваровУслуг) и его уникальный идентификатор, что даст нам «виновника» торжества.
Разберем ситуацию, почему регистр бухгалтерии является самым уязвимым местом. Ошибка «Запись не верна» часто возникает из-за расхождения метаданных или логических ограничений на уровне записей. Проверим следующие моменты:
Хозрасчетный есть обязательные поля (Организация, Счет и т.д.). Если в подчиненной базе по какой-то причине сформировалась проводка с пустым счетом или незаполненной организацией, при попытке загрузки в главную базу сработает проверка целостности.Если логический анализ не дал результатов, проанализируем состояние файлов базы данных (для файлового варианта) или таблиц SQL (для клиент-серверного). Для этого выполним техническое обслуживание:
Для файловой базы воспользуемся утилитой chdbfl.exe, которая находится в папке bin установленной платформы. Она позволяет исправить ошибки на уровне файловой структуры .1CD.
Для клиент-серверного варианта можно использовать SQL-скрипт для проверки целостности:
USE [Имя_Вашей_Базы]
GO
ALTER DATABASE [Имя_Вашей_Базы] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
DBCC CHECKDB ('Имя_Вашей_Базы', REPAIR_REBUILD)
GO
ALTER DATABASE [Имя_Вашей_Базы] SET MULTI_USER
GO
После физической проверки обязательно выполним Тестирование и исправление в самой 1С (Администрирование — Обслуживание — Тестирование и исправление), выбрав пункты «Проверка логической целостности» и «Реиндексация таблиц».
Иногда ошибка кроется в одном конкретном «битом» сообщении. Посмотрим на пример того, как можно локализовать проблему, используя стандартную обработку «Регистрация изменений для обмена данными»:
РегистрБухгалтерии.Хозрасчетный.Рассмотрим пример кода, который помогает программно проанализировать записи регистра перед отправкой, если мы хотим найти записи с пустыми значениями:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Хозрасчетный.Регистратор,
| Хозрасчетный.НомерСтроки
|ИЗ
| РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
|ГДЕ
| Хозрасчетный.Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка)";
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить("Найдена ошибка в регистраторе: " + Выборка.Регистратор);
КонецЦикла;
КонецЕсли;
Проанализируем техническую сторону вопроса. В версиях платформы 8.3.22 и 8.3.23 были зафиксированы ошибки, связанные с механизмом сериализации данных в XML при использовании РИБ. Эти ошибки приводили к некорректному формированию файла обмена, из-за чего принимающая сторона не могла распознать структуру записи.
Практическое решение: Как показывает опыт, обновление платформы до стабильных сборок (например, 8.3.23.1997 и выше) и обновление конфигурации Бухгалтерия предприятия до актуального релиза часто устраняет проблему автоматически. Это связано с тем, что разработчики 1С выпускают патчи, исправляющие некорректную запись наборов записей регистров при обмене.
Выясним еще одну возможную причину — рассогласование таблиц итогов. При загрузке проводок система пересчитывает итоги по счетам. Если таблицы итогов повреждены, запись набора проводок может завершиться ошибкой «Запись не верна».
Рекомендуется выполнить следующие действия в базе-приемнике:
Подводя итог, отметим: если вы столкнулись с этой ошибкой, начните с отладки для поиска конкретного объекта, проверьте целостность базы и, если это не помогло, планируйте обновление платформы до последней стабильной версии.