Доброго времени суток. Столкнулся с проблемой, которая пока-что за гранью моей области знаний, а именно XML.
История вкратце такова: Есть 3 информационных базы с идентичными конфигурациями (Бухгалтерия для Украины, редакция 2.0. (2.0.16.1)). на платформе 8.3.11.3034
В 2-х из них ведется учет по "Организации_1" и "Организации_2" соответственно, а в третьей по "Организации_3". В неё нужно выгружать данные из этих двух, но подменять "Организацию_1" и "Организацию_2" на "Организацию_3". Зачем - не спрашивайте, такова задумка начальства в сговоре с бухгалтерами и мне она не понятна, да и понимать не хочу.
Показалось что задача выполнима: нашел обычную внешнюю обработку обмена данными через XML и допилил её в разделе "Загрузка" проверкой получаемых данных:
Пока Сериализатор.ВозможностьЧтенияXML(ЧтениеXML) Цикл
Попытка
ЗаписанноеЗначение = Сериализатор.ПрочитатьXML(ЧтениеXML);
#Область Обработка_входящих_данных
// Нашли Справочник Организации и поместим в него вместо прочитанной нашу организацию по умолчанию
Если ТипЗнч(ЗаписанноеЗначение) = Тип("СправочникОбъект.Организации") Тогда
ЗаписанноеЗначение = Справочники.Организации.НайтиПоКоду("00-000001").ПолучитьОбъект();
КонецЕсли;
// Справочник ПодразделенияОрганизаций иерархически подчинен справочнику Организации, поэтому у него замещаем значение реквизита Владелец
Если ТипЗнч(ЗаписанноеЗначение) = Тип("СправочникОбъект.ПодразделенияОрганизаций") Тогда
ЗаписанноеЗначение.Владелец = Справочники.Организации.НайтиПоКоду("00-000001")
КонецЕсли;
// Если Объект имеет реквизит Организация то заменим этот реквизит на организацию по умолчанию
Если ЗаписанноеЗначение.Метаданные().Реквизиты.Найти("Организация") <> Неопределено Тогда
ЗаписанноеЗначение.Организация = Справочники.Организации.НайтиПоКоду("00-000001")
КонецЕсли;
// У справочника Сотрудники принадлежность сотрудника к организации в реквизите ГоловнаяОрганизация
Если ЗаписанноеЗначение.Метаданные().Реквизиты.Найти("ГоловнаяОрганизация") <> Неопределено Тогда
ЗаписанноеЗначение.ГоловнаяОрганизация = Справочники.Организации.НайтиПоКоду("00-000001")
КонецЕсли;
...
Для начала нужно понять что происходило с базами до начала возникновения проблемы.
Может было аварийное завершение сервера с рабочей базой, обновление релизов, обновление платформы и прочее.
1. Если было что, то попробуйте сначала почистить кеш.
Довольно часто кеш решает проблемы типа "Ничего не делалось с базами, но по какой-то причине одна стала работать не так".
2. Выполнить на копии "тестирование и исправление" у проблемной базы. Может там что поломалось.
3. Возможно ошибка таки в структуре данных (отсутствуют какие-то реквизиты или поля разных типов), база приемник получает нечто что не может преобразовать для корректной загрузки.
Вы утверждаете что базы идентичны. Я лично работаю по принципу "все врут". Пока сам не удостоверюсь в этом - считать что это именно так не буду.
Поэтому если 100% уверены в идентичности баз, то хорошо. Если Вы просто так думаете, потому что Вам кто-то сказал, то проверьте эту идентичность ещё раз.
4. Ну и отладчик никто не отменял. Встаньте на ошибке и посмотрите на чем валится.
Подумал, что надо менять организации штатными средствами с помощью регистра соответствий объектов обмена.
Batchir @ Сегодня, 8:56
,
Спасибо за советы. Попробую все.
С базами действительно были изменения, а именно:
1. Все 3 обновились с 2.0.15.1. на 2.0.16.1
2. У одной базы-источника в документе ПоступлениеТоваровУслуг (он участвует в обмене) добавлен реквизит, остальные (база-источник и база-приёмник) на поддержке.
upd: Кэш вычистил (использовал никогда не подводившую утилитку 1Tools._v1.0.4.41) - не помогло, снятую с поддержки базу поставил на поддержку (т.е теперю все 3 конфы АБСОЛЮТНО ИДЕНТИЧНЫ, даже сравнил .cf-ку приёмника с обеими источниками), выгрузил заново и снова та же ситуёвина, только теперь ругается на ТабЧасть Товары документа РеализацияТоваровУслуг
Отладчик сыпется на последней строке этого кода:
Пока Сериализатор.ВозможностьЧтенияXML(ЧтениеXML) Цикл
Попытка
ЗаписанноеЗначение = Сериализатор.ПрочитатьXML(ЧтениеXML);
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua