Содержание
При организации обмена данными в рамках распределенной информационной базы могут возникать различные ситуации, приводящие к сообщениям об ошибках. Однако не все подобные ситуации являются ошибками в чистом виде: некоторые из них могут быть отнесены к штатным ситуациям, соответствующим протоколу обмена данными, некоторые — к неадаптированности конфигурации для работы в рамках распределенной информационной базе.
Общие ошибки, возникающие при работе с XML
Сообщение обмена данными является документом XML, поэтому имеет смысл описать возможные ошибки, которые могут возникнуть во время чтения/записи сообщений обмена данными при использовании средств чтения/записи данных XML, предоставляемых платформой "1С:Предприятие 8". При работе с данными в формате XML может возникать множество различных ситуаций, однако в данной статье будут рассмотрены только те, которые так или иначе имеют отношение к обмену данными в рамках распределенной информационной базы.
Сообщение об ошибке | Описание ошибки |
Возможные пути исправления ошибки | |
Не установлен MS XML Core Services 4.0 | На компьютере не установлен Microsoft XML Core Services 4.0, используемый "1С:Предприятием 8" для работы с XML |
Установить Microsoft XML Core Services 4.0. При установке "1С:Предприятия 8" Microsoft XML Core Services 4.0 устанавливается автоматически | |
Ошибка разбора XML | Ошибка, возникающая при синтаксическом анализе данных XML в процессе чтения. Все ошибки, определенные в SAX2, трансформируются в данную ошибку, генерируемую платформой "1С:Предприятие 8" |
Проверить правильность оформления и синтаксис данных XML (см. http://www.w3.org/TR/REC-xml). | |
Ошибочный порядок записи XML | Методы записи содержимого документа XML вызываются в неправильном порядке. Например, запись атрибута вызывается после записи текста элемента. |
Выявить и исправить места некорректного порядка вызова методов | |
Текст XML содержит недопустимые символы | Записываемый текст XML содержит недопустимые символы. |
Текст XML должен соответствовать требованиям, изложенным в главе 2.2 рекомендации XML (см. http://www.w3.org/TR/REC-xml#charsets) | |
Недопустимое имя XML | Записываемое имя XML содержит недопустимые символы. |
Имя XML должно соответствовать требованиям, изложенным в главе 2.3 рекомендации XML (см. http://www.w3.org/TR/REC-xml#NT-Name) | |
Пустое значение URI допустимо только для пространства имен по умолчанию | Производится попытка записать соответствие пространства имен, в котором URI пространства имен, представленному пустой строкой, соответствует непустой префикс. |
Значение URI пространства имен должно соответствовать рекомендации Namespaces in XML (см. http://www.w3.org/TR/REC-xml-names)
При чтении данных XML платформой производится автоматическое определение типа получаемых данных, кроме случаев, когда тип данных указан при вызове операции чтения. Если структура данных XML не соответствует структуре данных, определяемых типом, то будет сгенерировано данное сообщение об ошибке.
Производится попытка записи в XML значения, для типа которого не определена процедура записи в XML. Или производится попытка чтения из XML значения неизвестного типа или типа, для которого не определена процедура чтения из XML.
Например, чтение существующего элемента справочника: если элемент справочника является группой, а было прочитано то, что является элементом, будет сгенерирована данная ошибка.
При обмене данными в рамках распределенной информационной базы используются штатные механизмы записи/чтения XML — ситуации, связанные с передачей некорректных данных, могут возникать только вследствие искажения сообщения обмена данными. В таком случае необходимо получить новое сообщение обмена данными от информационной базы — источника сообщения.
Если же сообщение содержит корректные данные и ошибка возникает в процессе считывания данных из базы данных (для последующего изменения их данными из сообщения обмена), то необходимо проверить наличие прав пользователя, от имени которого производится чтения сообщения обмена.
Также необходимо удостовериться, что в процессе чтения сообщения не возникает блокировки данных (например, чтение производится в рамках транзакции, а данные заблокированы другим пользователем), можно предпринять попытку чтения сообщения в монопольном режиме доступа к информационной базе.
Если вышеперечисленные способы не привели к устранению ошибки, то необходимо проверить целостность данных информационной базы
Ситуации, возникающие при обмене данными в рамках распределенной информационной базы
В случае чтения сообщения обмена данными от подчиненного узла в главном узле данная ситуация является штатной и означает наличие изменений конфигурации, которые еще не были получены в подчиненном узле — источнике сообщения.
Если же чтение сообщения от главного узла производится в подчиненном узле, то данная ситуация является следствием изменения конфигурации в подчиненном узле. Необходимо удостовериться, что обмен производится в правильно настроенной распределенной информационной базе (создание подчиненных узлов производилось при помощи рекомендованных способов) и в процессе работы не производилось изменения конфигурации подчиненной информационной базы (изменение в штатном режиме невозможно). Изменения конфигурации подчиненного узла может быть осуществлено только после отключения информационной базы от распределенной информационной базы — установка значения главного узла в Неопределено . В случае несанкционированного изменения конфигурации в подчиненном узле необходимо восстановить соответствие конфигураций путем полной загрузки конфигурации из главного узла
Необходимо выполнить обновление конфигурации базы данных.
Обновление может быть выполнено в режиме Конфигуратор
При чтении сообщения обмена производится автоматическая запись полученных изменений данных в информационную базу. Если в процессе записи данных происходит ошибка, то процесс чтения сообщения прерывается. Для определения в процедурах записи элементов данных (объектов и наборов записей) режима записи после загрузки из сообщения обмена существует свойство Загрузка . Для корректной работы в рамках распределенной информационной базы процедуры записи элементов данных должны быть написаны с учетом произвольного порядка загрузки данных из сообщений обмена (например, не должны выполняться проверки связанной с записываемым элементом данных информации.
Иногда пользователи 1С встречаются с ошибкой: «Поле объекта не обнаружено».
Причины возникновения ошибки
Эта проблема может возникнуть в различных случаях:
— при входе в программу;
— при заполнении форм или перед внесением данных в шаблоны;
— при выполнении обработчика — «Перед Записью» по причине «ОбщийМодуль Пользователи (АутентификацияOpenID).
Варианты могут быть разные. Случается, что в режиме отладки конфигуратора 1С все функции работают правильно, а при запуске в программу возникает такая ошибка.
Причиной возникновения ошибки является то, что разработанные ранее программные механизмы не учитывают данных конфигураций, а внесенные данные в программном коде не проходят обработку. Т.е. идет обращение в атрибуту которого нет.
Такая ситуация может существовать при установке нового релиза или в работе с программой 1С на старой платформе.
Метод исправления ошибки
Чтобы исправить ошибку «Поле объекта не обнаружено», нужно переустановить или обновить программу на более новую версию. Актуальный вариант платформы можно скачать на официальном сайте компании или на других соответствующих ресурсах.
В альтернативном случае, можно сделать откат на предыдущую версию, но рекомендуется регулярно создавать резервные копии.
Статья носит справочный характер. Предназначена для начинающих программистов.
Получить массив реквизитов объекта можно при помощи самого объекта:
Получив массив реквизитов, можно организовать Цикл для просмотра имен реквизитов:
Для того, чтобы получить значения реквизитов объекта вообще говоря надо обратиться с запросом к БД, типа:
В запрос надо передать ссылку на объект и имя реквизита. Запрос вернет таблицу или выборку со значением реквизита.
Удобнее конечно для поиска значений реквизитов воспользоваться готовыми решениями, например фунцией ПолучитьЗначенияРеквизитов() общего модуля ОбщегоНазначения .
Значение реквизитов в этой функции получено через запрос к БД. Возвращаемое значение — структура (ключ-значение). Пример использования:
Поскольку в функцию ПолучитьЗначенияРеквизитов() во второй параметр надо передать структуру, то мы создали структуру и организовали Цикл ее инициализации данными из массива имен реквизитов объекта. Возвращает функция так же структуру (ключ-значение), с которой удобно работать. Для просмотра этой структуры можно воспользоваться циклом, либо вызвать функцию СканПростойСтруктуры(), которой передать структуру для просмотра.
Если исследуемый объект использует так же еще и общие реквизиты, и их необходимо найти, то можно воспользоваться функцией МассивИменРеквизитовОбъекта(), которая находит не только реквизиты объекта но и общие и даже стандартные реквизиты, которые использует объект:
Тогда программа будет выглядеть так:
Иногда необязательно получать значения всего массива реквизитов. Программист как правило знает имя реквизита, значение которого необходимо получить. К отдельному реквизиту объекта можно обратиться просто по его имени:
Получить значение этого реквизита можно так же через запрос, написанный специально для этого реквизита. Но можно воспользоваться все той же функцией ПолучитьЗначенияРеквизитов(). Цикл для настройки структуры в этом случае не нужен, так как нам надо найти значение всего одного элемента:
Обратите внимание что здесь реквизит который необходимо найти преобразовывается к типу Строка, потому, что в структуру настроек надо передать именно строку.
Функция определяет есть ли реквизит в таб части документа:
Сообщить имя реквизитов таб части:
Чтобы найти значения всех реквизитов всех табличных частей объекта через запрос воспользуемся функцией
Результат для документа "Реализация товаров услуг":
Имя таб части: Товары
///Функция ПоказатьТаблицу///
0 ЕдиницаИзмерения: шт
1 ЕдиницаИзмеренияМест:
2 Качество: Новый
3 Количество: 1
4 КоличествоМест: 0
5 Коэффициент: 1
6 Номенклатура: Вентилятор настольный
7 ПроцентСкидкиНаценки: 0
8 СерияНоменклатуры: Н-908, С-890 от 01.01.2003
9 СпособСписанияОстаткаТоваров: Со склада
10 СтавкаНДС: Без НДС
11 Сумма: 445,5
12 СуммаНДС: 0
13 ХарактеристикаНоменклатуры:
14 Цена: 450
15 Склад: Магазин "Бытовая техника"
16 ПроцентАвтоматическихСкидок: 1
17 УсловиеАвтоматическойСкидки: По виду дисконтных карт
18 ЗначениеУсловияАвтоматическойСкидки: Серебряная карта
19 КлючСтроки: 3
20 КлючСвязи: 0
21 ЗаказПокупателя: Заказ покупателя ТД000000001 от 08.06.2008 12:00:00
0 ЕдиницаИзмерения: шт
1 ЕдиницаИзмеренияМест:
2 Качество: Новый
3 Количество: 1
4 КоличествоМест: 0
5 Коэффициент: 1
6 Номенклатура: Набор вентиляторов
7 ПроцентСкидкиНаценки: 0
8 СерияНоменклатуры:
9 СпособСписанияОстаткаТоваров: Со склада
10 СтавкаНДС: Без НДС
11 Сумма: 1948,32
12 СуммаНДС: 0
13 ХарактеристикаНоменклатуры:
14 Цена: 1968
15 Склад: Магазин "Бытовая техника"
16 ПроцентАвтоматическихСкидок: 1
17 УсловиеАвтоматическойСкидки: По виду дисконтных карт
18 ЗначениеУсловияАвтоматическойСкидки: Серебряная карта
19 КлючСтроки: 4
20 КлючСвязи: 0
21 ЗаказПокупателя: Заказ покупателя ТД000000001 от 08.06.2008 12:00:00
///Конец Функция ПоказатьТаблицу///
Имя таб части: ВозвратнаяТара
///Функция ПоказатьТаблицу///
///Конец Функция ПоказатьТаблицу///
Имя таб части: Услуги
///Функция ПоказатьТаблицу///
///Конец Функция ПоказатьТаблицу///
Имя таб части: СоставНабора
///Функция ПоказатьТаблицу///
0 Номенклатура: Вентилятор BINATONE ALPINE 160вт, напольный ,
1 ХарактеристикаНоменклатуры:
2 СерияНоменклатуры: 01234/11020/7654321, БОЛГАРИЯ
3 Количество: 1
4 ЕдиницаИзмерения: шт
5 Склад: Магазин "Бытовая техника"
6 Качество: Новый
7 СпособСписанияОстаткаТоваров: Со склада
8 КлючСтроки: 4
9 Цена: 1068
10 КлючСвязи: 0
0 Номенклатура: Вентилятор JIPONIC (Тайв.),
1 ХарактеристикаНоменклатуры:
2 СерияНоменклатуры: 11234/11020/7654321, ТАЙВАНЬ (КИТАЙ)
3 Количество: 1
4 ЕдиницаИзмерения: шт
5 Склад: Магазин "Бытовая техника"
6 Качество: Новый
7 СпособСписанияОстаткаТоваров: Со склада
8 КлючСтроки: 4
9 Цена: 900
10 КлючСвязи: 0
///Конец Функция ПоказатьТаблицу///
Имя таб части: СерийныеНомера
///Функция ПоказатьТаблицу///
///Конец Функция ПоказатьТаблицу///
Имя таб части: СерийныеНомераСоставНабора
///Функция ПоказатьТаблицу///
///Конец Функция ПоказатьТаблицу///
Имя таб части: ДокументыРасчетовСКонтрагентом
///Функция ПоказатьТаблицу///
///Конец Функция ПоказатьТаблицу///