7 г. назад
Релиз ЗуП 2.5.92.1
При попытке развернуть dt-шник в файл выдает ошибку:
Ошибка загрузки информационной базы. В информационную базу загружены не все данные
по причине:
Ошибка при выполнении операции над данными:
Устанавливаемое значение не помещается в поле таблицы ‘_REFERENCE110._FLD1765’
по причине:
Устанавливаемое значение не помещается в поле таблицы ‘_REFERENCE110._FLD1765’
Подскажите, как развернуть все-таки и в чем может быть причина данной ошибки?
в том что длину поля обрезали, например. попробовать в скуль развернуть, как вариант.
в оригинале база серверная, или файловая?
оригинальный .1cd в наличии?
(5) Да, скопировал с рабочей базы.
(6) ну, так исследуй его.
chdbfl, ТИИ
(7) ща попробую chdbfl на оригинальный .1cd натравить.
Что означают данные сообщения?
Во внутреннем файле значений полей неограниченной длины имеются потерянные блоки, не относящиеся к значениям полей или списку свободных блоков ‘FILES’
Повреждены данные таблицы ‘_REFERENCE110’
Обнаружено рассогласование между данными и индексами таблицы ‘_REFERENCE110’
Обнаружено рассогласование между данными и индексами таблицы ‘_INFORG8215’
Повреждена таблица размещения внутреннего файла <Индексы таблицы ‘_ACCUMRG9351’>
Сразу скажу что .1cd я копировал во время работы в ней пользователей, сейчас выгнать всех из нее проблематично.
выгнал всех, щас скопировал базу без подключенных пользователей, сделаю выгрузку через «выгрузить информационную базу»
Может версии платформы различаются
Короче, проверка с помощью chdbfl выдает
Во внутреннем файле значений полей неограниченной длины имеются потерянные блоки, не относящиеся к значениям полей или списку свободных блоков ‘FILES’
Повреждены данные таблицы ‘_REFERENCE110’
Обнаружено рассогласование между данными и индексами таблицы ‘_REFERENCE110’
Обнаружено рассогласование между данными и индексами таблицы ‘_INFORG8215’
Повреждена таблица размещения внутреннего файла <Индексы таблицы ‘_ACCUMRG9351’>
ТИИ со всеми галками выдает вот это
ну, и что в итоге? основные данные целые?
еще пишет что часть данных повреждена или утеряна
http://gyazo.com/c24fcc234f983b20aa21a56d36145a7f
(14) блин, да в этой базе работают. Я просто копию хотел сделать чтобы в ней поработать. И вот наткнулся.
Че делать то короче, посоветуйте. )
(16) вызвать специалиста…
(17) судя по всему, ты таковым не являешься, что ты делаешь в этой ветке?
(16) я тебя не понимаю.
давай сначала:
1. ты сделал копию файла .1cd
2. проделал на ней chdbfl и ТиИ
3. а теперь, внимание, вопрос: у тебя после этого база открывается нормально? что в ней с данными, насколько существенные потери?
(19) Не совсем он копию сделал, вгорячую скопировать — это никакой гарантии согласованности данных.
(20) нет, я скопировал выгнав всех.
После ТиИ копия открывается нормально, оценить потерю данных не могу, это расчетчик может точно сказать, а я ей еще не показывал. chdbfl я дела на копии .1cd без исправления ошибок.
Щас сделаю chdbfl прогон с исправлением ошибок на копии базы где я уже ТиИ сделал. И попрбоую открыть.
Выдал Повреждены данные таблицы ‘_REFERENCE110’. Восстановлено 583 из 586 записей.
(24) Посмотри хоть что это за таблица _REFERENCE110?
ПолучитьСтруктуруХраненияБазыДанных
Открыл базу с помощью Tool_1CD
Вот таблица _REFERENCE110
http://gyazo.com/5d053fbb21eeed28a6a7ea2e74b31dcd там где я закрыл квадратиком, фамилии были расчетчика и пользователя еще одного в базе.
(27) На квадратике написано Перезагрузить.
добрый Идун…Большое сердце….
(26) Можно развернутей, желательно на пальцах, как для даунов?
(30) Используя метод платформы ПолучитьСтруктуруХраненияБазыДанных() смотришь, какому объекту 1С соответствует твоя битая таблица. Потом в 1С смотришь пострадавший объект и оцениваешь ущерб.
ЗЫ. Если все вышенаписаное тебе незнакомо, лучше обратиться к специалисту. Будет проще, надежнее, быстрее и дешевле.
(30) вот здесь Восстановление работоспособности файловой базы есть готовые обработочки для исследования, в т.ч. там можно посмотреть и «человеческое» название для каждой из таблиц
(32) Ага, щас как раз вкуриваю.
28.02.13 — 06:54
При обновлении ЗУП, случился какой-то сбой. Сейчас не восстанавливается из архива база, пишет ошибку уже при восстановлении: Ошибка загрузки информационной базы. В информационную базу загружены не все данные
по причине:Ошибка при выполнении операции над данными:
Устанавливаемое значение не помещается в поле таблицы ‘_REFERENCE9178._CODE'» ПОМОГИТЕ!!!!
1 — 28.02.13 — 06:56
(0) нету фото нету мультиков
2 — 28.02.13 — 06:59
попробуйте загрузить в пустую
3 — 28.02.13 — 06:59
(1) А что ты планируешь сделать с ее фоткой?
4 — 28.02.13 — 07:03
(3) а что люди обычно делают с фото?
5 — 28.02.13 — 07:04
Из какого архива восстанавливаете?
6 — 28.02.13 — 07:24
из dt-шника
7 — 28.02.13 — 07:26
в пустую пробовала грузить. Может быть такое, что при недостатке физической памяти не полностью выгружает в дт-шник? при этом никаких ошибок при выгрузке не выдает!
8 — 28.02.13 — 07:31
что делать ума не приложу, последний нормальный дт-шник ноябрский.
9 — 28.02.13 — 07:39
(0) Грузите поди в файловую или под MS-SQL Express ?
10 — 28.02.13 — 07:41
в файловую
11 — 28.02.13 — 07:41
(9)+1
(0)Размер базы озвучте
12 — 28.02.13 — 07:43
(0) а вы грузите не из «архива» а из backup’а и все у вас получится.
Сколько раз уже говорили, что dt — это не backup.
Каждый раз в ответ только и слышишь, что «а у нас столько-то лет все работает».
Присоединяемся к армии вот этих:
http://yandex.ru/yandsearch?text=%ED%E5+%E7%E0%E3%F0%F3%E6%E0%E5%F2%F1%FF+dt&site=forum.mista.ru&lr=213
13 — 28.02.13 — 07:44
да все это уже прочитано, то есть восстановить невозможно?
14 — 28.02.13 — 07:44
А база-то вообще живая? Которая недообновилась?
Похоже лучше с ней поработать, чем с dt-шником.
15 — 28.02.13 — 07:46
сразу после обновления сделали выгрузку, эта база грузится, но при загрузке Предприятия выдает ошибку «Преобразование значения к типу Булево не может быть выполнено»
16 — 28.02.13 — 07:47
размер базы 800МБ
17 — 28.02.13 — 07:47
(15) тогда вам повезло. Исправьте ошибку преобразования и будет вам счастье.
18 — 28.02.13 — 07:47
(16) Ну тогда отладчик поможет.
19 — 28.02.13 — 07:48
(15) отладчиком её ;)…всё совсем не страшно
20 — 28.02.13 — 07:49
кто возьмется за восстановление и какие на это цены?
21 — 28.02.13 — 07:49
тестирование и исправление уже делали, не помогло.
22 — 28.02.13 — 07:51
(21) для вас быстрее и проще всего — обратиться в ближайший франч.
Тестирование и исправление тут не поможет.
23 — 28.02.13 — 07:52
(20) тут вопрос вообще не в восстановлении базы, а в исправлении ошибки в коде, которая пришла вам с обновлением.
24 — 28.02.13 — 07:52
уже связывалась, сказали много работы, заниматься не будут и вообще тут только ручками)))
25 — 28.02.13 — 07:52
релиз конфы не поменялся после обновления
26 — 28.02.13 — 07:55
скопируйте полное сообщение об ошибке сюда
27 — 28.02.13 — 07:55
(24) ну так начинай вбивать первичку
28 — 28.02.13 — 07:55
Если проблемный 1cd сжать, какой объем будет?
29 — 28.02.13 — 08:03
(28) сейчас попробую
30 — 28.02.13 — 08:07
загрузите в SQL больше чем уверен загрузится
31 — 28.02.13 — 08:08
И поясните если не трудно, мою не внимательность… грузите из dt ведь то что было до обновления? если нет то попробуйте загрузить что было до обновления. Загрузится ли она?
32 — 28.02.13 — 08:12
(29) в общем, пишите (мойник) @ yandex ru
33 — 28.02.13 — 08:16
(29) Да и по хорошему давайте базу на файлообменник.
34 — 28.02.13 — 08:19
(31) то что было до обновления в процессе загрузки дает ошибку:Устанавливаемое значение не помещается в поле таблицы ‘_REFERENCE9178._CODE'». То что после обновления в конфигураторе загружается без проблем, но при запуске 1 с предприятия ошибка:»Преобразование значения к типу Булево не может быть выполнено»
35 — 28.02.13 — 08:24
при сжатии проблемного cd получилось 184 МБ
36 — 28.02.13 — 08:29
Анна_Бо, (24) есть и другие франчи, не такие ленивые. Или у вас в городе он всего один?
37 — 28.02.13 — 08:31
(35) выкладывайте в сжатом виде на обменник
38 — 28.02.13 — 08:33
(0)
починю бесплатно
39 — 28.02.13 — 08:47
(36) у нас всего 1)))
40 — 28.02.13 — 08:49
(39) не верю, Уфа большой город!!!
41 — 28.02.13 — 08:52
а кто сказал, что я из Уфы?
42 — 28.02.13 — 08:53
(39) Нужно напрячь мышцы и открыть справочник организаций,
отдохнуть,
перевернуть несколько страниц,
отдохнуть,
взять трубку телефона,
отдохнуть,
потыкать на клавиши,
отдохнуть,
открыть рот и поговорить.
43 — 28.02.13 — 08:57
(42), я понимаю — вам смешно, а мне вот не до шуточек!!!
44 — 28.02.13 — 08:58
(37, 38) отправила письма на электронку.
45 — 28.02.13 — 08:58
(43) а бэкап только один? бэкап делался средствами 1С?
46 — 28.02.13 — 08:59
средствами 1 с делали выгрузку в dt. Есть только дт-шники!
47 — 28.02.13 — 09:00
дт-шников полно, только толку нет. Нормально восстанавливается аж ноябрьский!
48 — 28.02.13 — 09:03
(47) база файловая? ЗУП сильно изменён? Какая версия ЗУПа и какая версия платформы?
49 — 28.02.13 — 09:03
(44) Есть свободное время, могу тоже посмотреть…
50 — 28.02.13 — 09:11
Хм… автору, я так понимаю, нужен DT:Менеджер или тот, кто с ним умеет работать и согласится на предложение «бесплатно» :))
51 — 28.02.13 — 09:14
(50)
DT:Менеджер
автору не поможет.
последнии версии 1с с ним не работают
52 — 28.02.13 — 09:17
(48), файловая, не сильно, зУП 61, платформа 14
(50) можно и платно, если поможите
53 — 28.02.13 — 09:19
(52) ВАУ… 14-я??? Попробуйте поднять хотя бы на 15-й. На 14-й помнится были такого рода баги
54 — 28.02.13 — 09:19
(52) территориально Вы где?
55 — 28.02.13 — 09:21
уже и 15 и на 16 попробовала((( Башкирия, Салават
56 — 28.02.13 — 09:22
(47) Раз не хотите исправлять ошибку про «булево» (из каких-то непонятных соображений), то восстанавливайте ноябрьский и вбивайте данные заново.
57 — 28.02.13 — 09:29
если выгрузка 14 релиза, то дт менеджер может и поможет.
58 — 28.02.13 — 09:48
59 — 28.02.13 — 09:57
что-то не верится, что дт 184 метра разворачивается всего в 800 метров. Скорее всего автору нужно на SQL переходить
60 — 28.02.13 — 09:59
(7) Может.
Здесь поможет только специалист по 1С, без вариантов. Список 1с франчайзи в Уфе: http://www.1c.ru/rus/partners/franch-citylist.jsp?reg=&city=%D3%F4%E0
61 — 28.02.13 — 10:03
всем спасибо, мучаюсь дальше.
62 — 28.02.13 — 10:05
(61) да дайте доступ уже через тимвивер кому-нибудь, зачем мучаться
63 — 28.02.13 — 10:08
(15) Ну там же все должно быть написано — модуль, номер строки, где возникла ошибка. Откройте конфигуратор и посмотрите.
64 — 28.02.13 — 10:21
{ОбщийМодуль.УправлениеПользователями.Модуль(75)}: Преобразование значения к типу Булево не может быть выполнено
Если НЕ Константы.РазделятьЗадачиПоОрганизациям.Получить() Тогда
65 — 28.02.13 — 10:22
(63) модуль — номер строки и сама строка.
66 — 28.02.13 — 10:24
(64) Добавь перед этим строку Константы.РазделятьЗадачиПоОрганизациям.Установить(Ложь);
67 — 28.02.13 — 10:45
При помощи метода ПолучитьСтруктуруХраненияБазыДанных(), посмотрите что за справочник REFERENCE9178, потом поищите элемент данного справочника с косячным кодом, какой-нибудь спецсимвол наверно вбит
68 — 28.02.13 — 11:01
(67) >потом поищите элемент данного справочника с косячным кодом
База — файловая, база не восстанавливается из архива — как искать предлагаете?
69 — 28.02.13 — 11:40
(68)После того, как исправит ошибку при запуске Предприятия, видимо
70 — 28.02.13 — 12:27
(69) ошибка лезет не при запуске 1С Предприятия, а при попытке восстановления из архива «В информационную базу загружены не все данные по причине:Ошибка при выполнении операции над данными»
Т.е. если данные не восстановлены из архива, то где предлагается искать «косячный спецсимвол»?
71 — 28.02.13 — 14:56
(66) попробовала и так. при запуске предприятия выходит: ОШИБКА SDBL: поле Fld5493 таблицы Consts не может принимать значение NULL
72 — 28.02.13 — 15:30
ОГРОМНОЕ СПАСИБО МихаилМ за помощь!!!!!!
Serg_1960
73 — 28.02.13 — 16:08
Надеюсь виновник торжества раскроет секрет для благодарных потомков…
70 / 56 / 34 Регистрация: 28.04.2010 Сообщений: 192 |
|
1 |
|
Загрузка базы24.12.2022, 19:11. Показов 445. Ответов 3
Сабж. Пытаюсь загрузить копию базы из *.dt. Появляется ошибка: Ошибка загрузки информационной базы. В информационную базу загружены не все данные Есть идея. Попробовать её загрузить через SQL сервер. Если не поможет, какие еще есть варианты? Заранее спасибо.
0 |
1884 / 1289 / 460 Регистрация: 16.01.2015 Сообщений: 5,633 |
|
24.12.2022, 20:16 |
2 |
Сообщение было отмечено Maror как решение Решение
Есть идея. Попробовать её загрузить через SQL сервер Слишком большая одна из таблиц в данных. Больше 4Ггб. Видимо выгрузка была из клиент-серверной базы, а попытка восстановить в файловую. Указанный метод (цитата ТС) поможет, должна загрузиться
1 |
70 / 56 / 34 Регистрация: 28.04.2010 Сообщений: 192 |
|
24.12.2022, 20:55 [ТС] |
3 |
Если бы. Это была файловая база. Ее перед обновлением постоянно выгружали, и она работала дальше. Этот раз чо-то сделали, что она не обновилась как следует. А все копии — такие вот. Спасибо за ответ. Тогда другой вопрос. Если удастся загрузить базу в SQL, и оттуда потом опять выгрузить — она будет годиться для файлового варианта? Или надо обязательно найти эту таблицу, и убрать из нее что-нибудь?
0 |
371 / 175 / 74 Регистрация: 04.03.2020 Сообщений: 667 |
|
24.12.2022, 21:11 |
4 |
Слишком большая одна из таблиц в данных Да не похоже, сообщение другое.
1 |
В данной статье я свел воедино все, что на данный момент знаю о механизме XDTO. Материал носит достаточно ознакомительный характер, и предназначен в первую очередь для начинающих разработчиков. Рассмотрены основные составные части механизма XDTO, примеры использования XDTO и базовые приемы работы.
Содержание
Аббревиатура XDTO расшифровывается как XML Data Transfer Objects – и переводится как Объекты переноса данных XML. Это детище компании 1С, и нигде кроме экосистемы 1С данный механизм не используется. Предназначение XDTO – интеграция и обмен данными между 1С и другими системами в формате XML. Собственно, XDTO позволяет работать с xml в объектном стиле, “через точку”, не задумываясь об атрибутах, тегах, узлах и т.п.
Механизм XDTO включает в себя несколько объектов встроенного языка и объект конфигурации “XDTO-пакет”
XSD схемы и пакеты XDTO. Пространства имен
Объект метаданных XDTO-пакет предназначен для описания системы типов и значений для взаимодействия с внешними системами или обработки xml-данных. Для гарантированного обеспечения уникальности типов между различными пакетами, в свойствах XDTO-пакета задается пространство имен. Исторически сложилось, что пространство имен выглядит как url-адрес, но на деле это всего лишь строка, которая может быть абсолютно любой. Важно, чтобы в пределах конфигурации пространства имен в пакетах XDTO были уникальны.
XML схемы описывают структуру XML-документа на языке XSD – XML Schema Definition Language.
Схемы XSD предназначены для решения следующих задач:
- Перечисление элементов в документе XML и проверка наличия в документе только объявленных элементов.
- Объявление и определение атрибутов, модифицирующих элементы документа.
- Определение иерархических отношений между элементами – какой является родительским, а какой – дочерним.
- Определение состояний и моделей содержания для элементов и атрибутов.
- Задание типов данных.
- Установка значений по умолчанию.
- Поддержка использования пространств имен.
В свою очередь, XDTO пакеты помимо свойств, аналогичных свойствам XSD-схем, содержат еще ряд свойств, предназначенных для трансляции данных в объекты 1С и обратно. К этим свойствам относится, в частности свойство “Локальное имя”.
Стандартные пакеты XDTO
Даже если ни одного пакета XDTO в конфигураторе не создано, платформа будет предоставлять обширный список стандартных пакетов, описывающих все данные, предоставляемые платформой. Так, например, среди стандартных пакетов есть пакет для описания управляемого приложения, системы компоновки данных, двухфакторной аутентификации, и множество других. “Познакомиться” с ними можно, используя коллекцию глобальной фабрики XDTO “Пакеты”.
&НаСервере Процедура ВывестиВсеПакетыНаСервере() Для Каждого Пакет Из ФабрикаXDTO.Пакеты Цикл Сообщить(Пакет.URIПространстваИмен); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ВывестиВсеПакеты(Команда) ВывестиВсеПакетыНаСервере(); КонецПроцедуры
Создание, импорт и экспорт схем XSD
Пакеты XDTO можно экспортировать в XML-схемы в формате xsd, и наоборот – из xsd-файла можно импортировать пакет XDTO. Важно – не все схемы xsd успешно импортируются в пакеты XDTO, при том что сами схемы будут полностью валидны. Распространенная ошибка связана с отсутствием определения целевого пространства имен targetNamespace.
Кроме того, существует возможность выгрузить XML-схему данных конфигурации – в этом случае будет выгружена схема xml, соответствующая всем объектам конфигурации (кроме пакетов XDTO, созданных в дереве метаданных).
Также пакеты можно создавать средствами конфигуратора 1С, в специальном редакторе.
На первом уровне иерархии могут располагаться следующие элементы пакета:
-
Директивы импорта – перечень директив импорта – в них указываются внешние пространства имен, которые используются в данном пакете. При работе с данным пакетом XDTO средствами встроенного языка данный перечень директив импорта будет доступен в виде объекта КоллекцияПакетовXDTO, содержащегося в свойстве Зависимости пакета XDTO. Важно! Если указать пространство имен, не определенное в данной конфигурации (т.е. отсутствующее как среди стандартных пакетов, так и среди пакетов, созданных в конфигураторе), сохранить конфигурацию будет нельзя, т.к. платформа выдаст сообщение об ошибке: “Ошибка проверки модели XDTO: xdto-package-3.3 пакет: test
Импортируемый пакет типов ‘<тут имя пространства имен>’ не определен“
-
Типы значений – перечень типов значений XDTO, которые содержит пакет XDTO.
-
Типы объектов – перечень типов объектов XDTO, которые содержит пакет XDTO
-
Свойства – перечень свойств пакета XDTO. Представляет собой объявления объектов/значений, которые могут являться корневыми элементами документов XML, принадлежащих URI пространству имен пакета XDTO.
Типы значений XDTO
Объект ТипЗначенияXDTO используется для описания типов простых значений, в которых не могут быть выделены отдельные составляющие. Примерами простых значений являются разнообразные строки, числа, даты и т. п. Ссылки на объекты также относятся к простым значениям. Для указания ссылки в качестве типа значения XDTO следует указать базовый тип AnyRef (http://v8.1c.ru/8.1/data/enterprise), а также задать свойство “Вариант” – “Атомарный”.
Теперь разберем поподробнее свойства типа значений XDTO. Тип Значений XDTO соответствует типу symple type из схемы xml. Следовательно, и поля в редакторе пакета XDTO для типа значений во многом повторяют свойства symple type.
-
Имя – имя типа значения XDTO;
-
Базовый тип – базовый тип для данного типа значения XDTO. Базовые типы могут наследоваться от других типов значений XDTO, а самым верхним типом в иерархии наследования является тип anySimpleType
-
Вариант – вариант простого типа (атомарный тип, список, объединение).
-
Тип элемента – тип элемента списка в случае, когда тип значения XDTO определяется списком. При этом все фасеты и свойство Типы объединения должны быть пустыми;
-
Типы объединения – список типов, образующих объединение в случае, когда тип значения XDTO определяется объединением. Объединяться могут только типы значений XDTO. При этом все фасеты и свойство Тип Элемента должны быть пустыми;
-
Длина – фасет длины. Длина задается в единицах длины, которые зависят от типа значения. Для типа string и anyURI это будет количество символов в строке, а для двоичных данных (hexBinary и base64Binary) длина содержит количество байт.
-
Минимальная длина – фасет минимальной длины;
-
Максимальная длина – фасет максимальной длины;
-
Пробельные символы – фасет пробельных символов; позволяет описать ограничение – допустимы ли в строке любые пробельные символы, такие как неразрывный пробел, перенос строки, или табуляция;
-
Минимум, включающий границу – фасет минимума, включающего границу; Любое значение данного типа должно быть больше указанному значению;
-
Минимум, не включающий границу – фасет минимума, не включающего границу. Любое значение данного типа должно быть больше указанного значения;
-
Максимум, включающий границу – фасет максимума, включающего границу;
-
Максимум, не включающий границу – фасет максимума, не включающего границу;
-
Общее количество цифр – фасет общего количества цифр;
-
Количество цифр дробной части – фасет количества цифр дробной части.s
Фасеты – это набор значений, которые ограничивают множество допустимых значений по отношению к базовому типу. Соответственно, указывать их нужно только тогда, когда указан базовый тип. Список фасетов, которые можно указывать для того или иного типа, определяется по правилам XML Schema.
Типы объектов XDTO
В пакете XDTO тип объекта XDTO используется для описания типов сложных объектов, имеющих в составе набор свойств. Типы свойств таких объектов могут быть как типами значения XDTO, так и типами объектов XDTO. В частности, все прикладные объекты конфигурации, например, справочник “Номенклатура”, могут быть описаны как типы объектов XDTO.
Ввиду того, что типы объектов XDTO предназначены для описания самых различных структур данных, особое внимание следует уделить свойствам, а именно:
-
Открытый – признак, является ли тип объекта XDTO открытым. Данное свойство показывает, может ли экземпляр объекта XDTO содержать свойства, не определенные в его типе. Это соответствует реализации модели open content;
-
Абстрактный – признак, является ли тип объекта XDTO абстрактным; Абстрактные типы используются для реализации наследования и расширения дочерними типами;
-
Смешанный – показывает, имеет ли соответствующий объект XDTO смешанное содержание (mixed content в схеме XML). Если значение свойства Истина, то значение Последовательный обязательно равно Истина, так как смешанное содержание невозможно смоделировать без применения последовательности XDTO;
-
Упорядоченный – признак, является ли порядок следования элементов, представляющих значения свойств, строго соответствующим порядку следования свойств в типе объекта XDTO. Если Ложь, то на входе порядок следования элементов XML не контролируется, а на выходе определяется порядком следования свойств, если только свойство Последовательный не имеет значение Истина;
-
Последовательный – показывает, содержит ли экземпляр соответствующего объекта XDTO последовательность XDTO. Истина в тех случаях, когда порядок следования вложенных элементов XML не может однозначно определяться порядком следования свойств в типе или соответствующий объект XDTO имеет смешанное содержание. Последовательность XDTO позволяет задать в явном виде порядок следования элементов, как они будут представлены в документе XML. Для объектов типов, у которых свойство Ложь, порядок вложенных элементов соответствует порядку следования свойств.
Свойства XDTO
В редакторе пакета XDTO можно также настраивать свойства – как для всего пакета (т.н. корневые свойства), так и при описании типов объектов XDTO. Отдельно взятое свойство имеет следующие реквизиты:
-
Имя – имя свойства. Следует обеспечить уникальность имени свойства в пределах описания одного типа объекта XDTO.
-
Ссылка – ссылка на корневое определения свойств пакета
-
Тип – тип свойства. Может быть как типом значения XDTO, так и типом объекта XDTO;
-
Минимальное количество – минимальное количество значений свойства. Минимальное количество значений свойства может принимать значения <= 0;
-
Максимальное количество – свойство типа объекта XDTO может быть определено как содержащее одно или множество значений. Свойство считается содержащим одно значение, если Максимальное количество = 1. Для значений свойства > 1 считается, что свойство может принимать множество значений. Такое свойство в структуре объекта моделируется списком. Свойство Максимальное количество показывает максимальное количество значений свойства. Максимальное количество > 1 может быть задано только для свойств, представленных в виде элемента XML. Значение -1 соответствует unbounded в схеме XML, т.е. количество значений этого свойства может быть не ограниченным. Например, мы создаем свойство, описывающее табличную часть Товары. В этом случае мы можем указать максимальное количество -1, т.к. заранее не знаем, сколько строк будет в табличной части. Можно указать тип значения, соответствующий описанию содержимого одной строки ТЧ, либо создать описание типов (см. ниже)
-
Возможно пустое – показывает, может ли свойство принимать неопределенное значение. Истина может быть определено только для свойств с формой представления Элемент. Если Максимальное количество > 1, неопределенное значение является допустимым для элемента списка значений свойства;
-
Фиксированное – указывает, является ли значение свойства фиксированным. Истина – само фиксированное значение можно получить через свойство По умолчанию;
-
По умолчанию – значение свойства по умолчанию. Тип значения по умолчанию может быть только типом значения XDTO. При этом, данное значение должно быть совместимо с типом свойства (быть того же типа, что и тип свойства или же унаследованного типа). При создании объекта XDTO свойство, если оно допускает единственное значение, принимает значение по умолчанию. Для свойств с множеством значений список значения пуст, независимо от того, определено или нет значение по умолчанию;
-
Форма – форма представления свойства в XML. Это может быть Атрибут, Элемент или Текст. Если формой представления является Атрибут или Текст, то значение свойства Максимальное количество не может быть больше 1. Если свойство принимает значение Текст, то значение свойства Минимальное количество также должно быть равным 1. У одного типа только одно свойство может иметь форму представления Текст, при этом все остальные свойства должны иметь форму представления Атрибут;
-
Локальное имя – локальное имя, используемое для представления свойства. Для свойств с формой представления Текст – пустая строка.
Определения типов XDTO
Рассмотрим пример создания типа объекта XDTO, описывающего справочник Номенклатуры с реквизитами Наименование, Единица измерения (Справочник “Единицы измерения”)и Статья затрат (справочник “Статьи затрат”). В случае, если нам было бы достаточно ссылки на соответствующие справочники, мы могли бы создать два типа значения XDTO, например CatalogRef.ЕдиницыИзмерения и CatalogRef.СтатьиЗатрат.
Но предположим, мы хотим при выгрузке в XML получить не только ссылку, но и все содержимое, т.е. весь объект целиком. Сделать это можно двумя способами – создать отдельный тип объекта и указать его в качестве типа для свойства ЕдиницаИзмерения в объекте Номенклатура, либо создать описание типа непосредственно в свойстве. Описание типа может быть двух видов – для описания простых типов, и для описания комплексных типов. Отличить их можно по картинке-пиктограмме слева от текста “Определение типа”. Редактируются они таким же образом как самостоятельные типы объектов и типы значений. Выбор при этом может ввести в заблуждение (см. картинку)
Директивы импорта XDTO
В рамках создаваемого пакета XDTO (без использования директивы импорта) можно использовать:
- типы, определенные только в данном пакете (использующие текущее пространство имен)
- типы, стандартные для XML (пространство имен http://www.w3.org/2001/XMLSchema)
В случае, если нужно указать тип из другого пакета XDTO (из другого пространства имен) – необходимо его импортировать при помощи директивы импорта. Импортировать можно только существующие пакеты типов; кроме того, недопустимо делать циклические импорты – когда в импортируемом пакете есть директива импорта текущего пакета.
Фабрика XDTO и модель данных
Фабрика XDTO – это объект встроенного языка 1С, который позволяет создавать объекты XDTO нужного типа. Фабрика XDTO может создавать объекты только тех типов, которые входят в ее модель данных. Модель данных – это совокупность всех типов, которые можно записать в один XML документ. По сути, модель данных – это набор схем XML.
Существует единственная глобальная фабрика XDTO, доступная через свойство глобального контекста ФабрикаXDTO. Эта фабрика содержит в себе все встроенные пакеты XDTO, предоставляемые платформой; пакет “http://v8.1c.ru/8.1/data/enterprise/current-config”, описывающий метаданные текущей конфигурации; пакеты, созданные разработчиком в ветке Общие / XDTO-пакеты.
Кроме того, разработчик может средствами языка 1С создавать новые фабрики, включая в них только типы из нужных пакетов.
Простой пример создания документа XML
За основу возьмем пакет XDTO, рассмотренный выше, в разделе “Определения типов XDTO”. Для создания документа XML нам понадобится – создать нужные типы XDTO, далее на основе этих типов создать нужные объекты, и в завершение – сформировать XML средствами фабрики.
// Получим нужные типы данных XDTO ТипТестНоменклатура = ФабрикаXDTO.Тип("http://www.sample-package.org", "Номенклатура"); ТипТестЕдИзм = ФабрикаXDTO.Тип("http://www.sample-package.org", "ЕдиницаИзмерения"); // Обратите внимание, здесь мы получаем тип из определения типа для свойства СтатьяЗатрат ТипТестСтатья = ТипТестНоменклатура.Свойства.Получить("СтатьяЗатрат").Тип; //Сперва создаем объекты, которые затем поместим в свойства номенклатуры ЕдИзм = ФабрикаXDTO.Создать(ТипТестЕдИзм); ЕдИзм.Коэффициент = 1; ЕдИзм.Код = 123; ЕдИзм.Наименование = "Кг"; СтатьяЗатрат = ФабрикаXDTO.Создать(ТипТестСтатья); СтатьяЗатрат.Наименование = "Основная деятельность"; СтатьяЗатрат.СчетЗатрат = 26; Ном = ФабрикаXDTO.Создать(ТипТестНоменклатура); Ном.Наименование = "тестовая номенклатура"; //Помещаем в свойства соответствующие объекты XDTO Ном.ЕдиницаИзмерения = ЕдИзм; Ном.СтатьяЗатрат = СтатьяЗатрат; //Сформируем XML документ Запись = Новый ЗаписьXML; Запись.УстановитьСтроку(); ФабрикаXDTO.ЗаписатьXML(Запись, Ном); ДанныеXML = Запись.Закрыть(); Сообщить(ДанныеXML);
Пример создания фабрики XDTO c нужной моделью данных
Для создания своей собственной фабрики XDTO все равно придется воспользоваться глобальной фабрикой. В простейшем случае фабрика создается так: создаем модель данных XDTO, затем создаем массив нужных нам пакетов, и далее на основании модели и массива пакетов создаем конструктором новую фабрику.
Модель = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/xdto","Model")); СвояФабрика = Новый ФабрикаXDTO(Модель);
Полученная фабрика будет представлять собой объект XDTO, с которым можно работать так же как с любым аналогичным объектов. Но на деле такой подход используется редко. Гораздо чаще применяется формирование готовой модели, содержащей в себе нужные пакеты. Для этого используется метод фабрики ЭкспортМоделиXDTO.
Рассмотрим более сложный пример. Предположим, нашу модель мы должны передать из одной конфигурации в другую, и на ее основании создать фабрику во второй конфигурации. Реализовать это можно через файл, либо через веб- либо http-сервис, передав текст документа XML.
Сформируем текст XML, содержащий модель, в первой базе.
МассивПространствИмен = Новый Массив; МассивПространствИмен.Добавить("http://www.sample-package.org"); ВтораяМодель = ФабрикаXDTO.ЭкспортМоделиXDTO(МассивПространствИмен); Запись = Новый ЗаписьXML; Запись.УстановитьСтроку(); ФабрикаXDTO.ЗаписатьXML(Запись,ВтораяМодель,"Model","http://v8.1c.ru/8.1/xdto",,НазначениеТипаXML.Явное); МодельXML = Запись.Закрыть();
В базе-приемнике прочитаем модель из XML документа, и создадим фабрику:
ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(МодельXML); ОбъектModel = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); ВтораяФабрика = Новый ФабрикаXDTO(ОбъектModel);
В ней будет содержаться только один пакет, который мы указали при экспорте, и стандартный пакет “http://www.w3.org/2001/XMLSchema”. При этом не обязательно, чтобы в конфигурации-приемнике существовал данный пакет в дереве метаданных – все необходимое содержится в исходном XML документе, который мы прочитали.
Создание фабрики XDTO из схем XML
Схемы XML могут быть представлены в двух видах – в виде файлов XSD, либо в виде объекта НаборСхемXML. Сперва рассмотрим простой способ создания фабрики XDTO из набора схем.
МассивПространствИмен = Новый Массив; МассивПространствИмен.Добавить("http://www.sample-package.org"); НаборСхем = ФабрикаXDTO.ЭкспортСхемыXML(МассивПространствИмен); ТретьяФабрика = Новый ФабрикаXDTO(НаборСхем);
Часто при работе с XDTO разработчик получает от передающей стороны (например, веб-сервиса, внешнего приложения и др) готовый файл или несколько файлов с расширением .xsd. Но кроме того, можно написать выгрузку набора схем в набор xsd-файлов. За основу можно взять следующий код:
Для Счетчик = 0 по НаборСхем.Количество() - 1 Цикл Схема = НаборСхем.Получить(Счетчик); Схема.ОбновитьЭлементDOM(); ЗаписьDOM = Новый ЗаписьDOM; ЗаписьXMLСтрока = Новый ЗаписьXML; ЗаписьXMLСтрока.УстановитьСтроку(); ЗаписьXMLФайл = Новый ЗаписьXML; ЗаписьDOM.Записать(Схема.ДокументDOM, ЗаписьXMLСтрока); ЗаписьXMLФайл.ОткрытьФайл(ИмяФайла + "[" + Формат(Счетчик,"ЧЦ=10;ЧГ=0;ЧН=") + "].xsd"); ЗаписьXMLФайл.ЗаписатьБезОбработки(ЗаписьXMLСтрока.Закрыть()); ЗаписьXMLФайл.Закрыть(); КонецЦикла;
Вне зависимости от того, как были получены XSD схемы, для их чтения следует использовать метод СоздатьФабрикуXDTO.
Схемы = Новый Массив; Схемы.Добавить("d:testtest1.xsd"); Схемы.Добавить("d:testtest2.xsd"); ЧетвертаяФабрика = СоздатьФабрикуXDTO(Схемы);
XDTO сериализация
На основе механизмов XDTO платформа предоставляет средства для быстрой сериализации прикладных объектов (например, справочник ссылка или справочник объект) и объектов языка (например, структура или таблица значений). Рассмотрим несколько примеров:
//Простая сериализация в XML. Подходит только для загрузки в идентичную конфигурацию ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); ЗаписатьXML(ЗаписьXML, Номенклатура.ПолучитьОбъект()); ИтоговаяСтрока = ЗаписьXML.Закрыть(); Сообщить(ИтоговаяСтрока); //Сериализация через глобальный сериализатор. В этом случае мы получаем пространства имен ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Номенклатура.ПолучитьОбъект(), НазначениеТипаXML.Явное); ИтоговаяСтрока = ЗаписьXML.Закрыть(); Сообщить(ИтоговаяСтрока); //Десериализация через СериализаторXDTO ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(ИтоговаяСтрока); ОбъектНоменклатура = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
SOAP сервисы и XDTO
Разработка своего веб-сервиса
Данная статья не претендует на полный обзор технологии веб-сервисов, их разработки и публикации. SOAP-сервисы будут рассмотрены в контексте использования механизма XDTO.
При разработке web-сервиса типы параметров и возвращаемых значений Web-сервисов описываются с помощью типов объектов и типов значений XDTO. Подготовим пакет типов специально для нашего примера. У нас будет один тип значения для указания кода статьи затрат, один тип для описания списка строк, и один тип для описания строки.
Далее создадим Web-сервис. Укажем пространство имен (напомню, это вовсе не обязательно должно быть URL, строка может быть любой). Также укажем состав пакетов XDTO, типы из которых мы хотим использовать.
Создадим операцию с одним параметром – CostItem. Этот параметр отмечаем как входной, указываем тип значения. Также укажем тип возвращаемого значения. Обратите внимание – нам доступны только типы из тех пакетов XDTO, которые мы отметили, а также стандартные типы для XML:
Теперь осталось написать код для операции. Наш веб сервис будет получать остатки товаров запросом и формировать таблицу из трех колонок – Код, Наименование и Остаток. Т.к. мы делаем сервис, ориентированный на внешние системы, которые могут не поддерживать кириллицу, колонки назовем Code, Name и Quantity.
Функция goods(CostItem) ТипGoods = ФабрикаXDTO.Пакеты.Получить("http://www.sample-package.org").Получить("goods"); ТипgoodsRow = ФабрикаXDTO.Пакеты.Получить("http://www.sample-package.org").Получить("goodsRow"); Goods = ФабрикаXDTO.Создать(ТипGoods); Запрос = Новый Запрос("ВЫБРАТЬ | ОстаткиТоваровОстатки.Товар.Код КАК Code, | ОстаткиТоваровОстатки.Товар.Наименование КАК Name, | ОстаткиТоваровОстатки.КоличествоОстаток КАК Quantity |ИЗ | РегистрНакопления.ОстаткиТоваров.Остатки( | , | ВЫБОР | КОГДА &СтатьяЗатрат = НЕОПРЕДЕЛЕНО | ТОГДА ИСТИНА | ИНАЧЕ Товар.СтатьяЗатрат = &СтатьяЗатрат | КОНЕЦ) КАК ОстаткиТоваровОстатки"); НайденнаяСтатья = Справочники.СтатьиЗатрат.НайтиПоКоду("CostItem"); Если НайденнаяСтатья = Справочники.СтатьиЗатрат.ПустаяСсылка() Тогда НайденнаяСтатья = Неопределено; КонецЕсли; Запрос.УстановитьПараметр("СтатьяЗатрат", НайденнаяСтатья); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл goodsRow = ФабрикаXDTO.Создать(ТипgoodsRow); ЗаполнитьЗначенияСвойств(goodsRow, Выборка); Goods.goodsRow.Добавить(goodsRow); КонецЦикла; Возврат Goods; КонецФункции
Легко заметить, что код возвращает объект XDTO, а не готовый XML документ. В XML его преобразует сама платформа при возврате ответа web-сервиса. Т.е. по сути разработка операции для web-сервиса сводится к созданию и наполнению нужного объекта XDTO.
Веб сервис готов, и далее необходимо его опубликовать, чтобы внешние системы могли его использовать. После публикации проверим его работоспособность, написав несложный код.
// Получим WSОпределение WSОпределение = Новый WSОпределения("http://localhost/xdto/ws/ws1.1cws?wsdl"); // Создадим WSПрокси - специальный объект для вызова веб-сервиса // параметры конструктора можно посмотреть непосредственно в WSОпределение // там будут и списки сервисов с пространствами имен и названием самого сервиса, а также // имена точек подключения WSПроксиGoods = Новый WSПрокси(WSОпределение, "test", "ВыгрузкаНоменклатуры", "ВыгрузкаНоменклатурыSoap"); // вызовем операцию goods с параметром CostItem = "123" (это код элемента справочника Статьи затрат) ТаблицаОстатков = WSПроксиGoods.goods("123"); // Обойдем коллекцию строк, которую мы получили от сервиса, и выведем остатки Для Каждого СтрокаОстатка Из ТаблицаОстатков.goodsRow Цикл Сообщить(СтрШаблон("Код %1, Наименование %2, Остаток %3", СтрокаОстатка.Code, СтрокаОстатка.Name, СтрокаОстатка.Quantity)); КонецЦикла;
Использование внешних веб-сервисов через WS-ссылки
При работе с WS-ссылками, после загрузки WSDL схемы, в WS-ссылке становится доступной модель данных с теми пакетами, что содержатся в поставляемой схеме. Редактировать содержимое WS-ссылки нельзя, однако можно посмотреть структуру типов данных, доступных методов и их параметров.
Начнем с простого примера получения ответа от веб-сервиса. Сервис принимает на вход число, и конвертирует его в текст. Адрес WSDL схемы для создания WS-ссылки: https://www.dataaccess.com/webservicesserver/numberconversion.wso?WSDL
Прокси = WSСсылки.Converter.СоздатьWSПрокси("http://www.dataaccess.com/webservicesserver/", "NumberConversion", "NumberConversionSoap"); Результат = Прокси.NumberToWords(12345); Сообщить(Результат);
Теперь рассмотрим более сложный пример – получим курсы валют на дату, используя сервис ЦБР. Создадим WS-ссылку с адресом http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL
Как легко увидеть, и модель данных, и состав доступных операций у этого сервиса значительно больше:
В качестве примера используем операцию GetCursOnDate. У этой операции всего один параметр “parameters”, с типом значения GetCursOnDate (http://web.cbr.ru/). В составе модели данных есть корневое свойство GetCursOnDate, а в составе типов значений XDTO есть тип GetCursOnDate, с единственным свойством On_date. Зная все вышеперечисленное, напишем код получения ответа от веб-сервиса
//Создаем прокси для обращения к внешнему веб-сервису, // передаем в функцию URI пространства имен, имя сервиса, имя порта. Прокси = WSСсылки.WSСсылкаЦБР.СоздатьWSПрокси("http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap"); //Получаем тип параметра, который передается в метод GetCursOnDate. // Для этого получаем сперва пакет по имени URI, а затем тип по имени этого типа ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить("http://web.cbr.ru/").Получить("GetCursOnDate"); //Создаем параметр на основе типа и заполняем значение параметра On_Date. WSПараметр = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра); WSПараметр.On_Date= ТекущаяДата(); //Вызываем метод веб-сервиса, записываем результат в переменную КурсыВалют. КурсыВалют = Прокси.GetCursOnDate(WSПараметр);
Мы получили XDTO-объект КурсыВалют. Чтобы дальше знать, как нам его обработать, обратимся к отладчику. Сама таблица с курсами валют “закопана” достаточно глубоко:
КурсыВалют.GetCursOnDateResult.diffgram.ValuteData.ValuteCursOnDate. Пройдемся циклом по этому списку и выведем информацию о курсах валют:
Для Каждого Элемент Из КурсыВалют.GetCursOnDateResult.diffgram.ValuteData.ValuteCursOnDate Цикл Сообщить(СтрШаблон("Валюта %1; номинал %2; код %3; симв. код %4; курс %5", СокрЛП(Элемент.Vname) ,Элемент.Vnom, Элемент.Vcode, Элемент.VChCode, Элемент.Vcurs)); КонецЦикла;
Другие примеры использования XDTO
Помимо обменов данными в формате XML, а также использования в SOAP-сервисах, механизм XDTO имеет еще несколько интересных способов применения. Можно использовать сериализацию XDTO для изменения графических схем – тех самых, которые используются в бизнес-процессах. Графическая схема сериализуется в XDTO-объект со своим набором свойств, а дальше все в руках разработчика – можно добавлять элементы, менять описания, задавать связи, и т.д.
Аналогично можно программно управлять и многими другими объектами 1С, которые сериализуются в/из XDTO (об этом можно узнать из документации либо встроенной справки), например:
- Диаграммы
- Схемы компоновки данных
- Хранилища значений
и другие
При загрузке базы вываливается такая ошибка: Устанавливаемое значение не помещается в поле таблицы ‘_REFERENCE21._FLD5183 База в файловом варианте немногим более двух гигов. Работает нормально, выгружается тоже без проблем, но вот загрузить эту выгрузку не получается. Делать ТИИ и chdbfl без нормальной копии нежелательно. Может кто знает как с этим бороться?
Не пробовал. Свой недавно убил и пока руки не доходят восстановить. А клиент пока в файле работает — на лицензии копит… Сейчас попробую скуль поставить.
При загрузке в скульный вариант выдает такое сообщение: Ошибка СУБД: Microsoft OLE DB Provider for SQL Server: Could not allocate space for object ‘_AccumRegTurnovers4434’ in database ‘…’ because the ‘PRIMARY’ filegroup is full. по причине: Microsoft OLE DB Provider for SQL Server: Could not allocate space for object ‘_AccumRegTurnovers4434’ in database ‘…’ because the ‘PRIMARY’ filegroup is full.
Скопировал файлы БД и попробовал ТИИ. Получил ошибку выполнения операции над БД: «Файл _$NEW$_.1CD поврежден»…
ChDBFl.exe тоже не справился… Есть еще варианты восстановления БД ?
конфа туповая? Перекачка данных в пустую…
Древняя УТ переписаная, причем во многом с ошибками. Первое время только и занимался исправлением… Перекачать в пустую возможно. Если не найду других вариантов, то так и сделаю. Не знаю, тексты ошибок приведены, если по ним можно определить что за поле, был бы очень признателен. 3.5 Гб, файл выгрузки 200 Мб.
скажи,а для чего тебе нужно именно загрузить выгрузку?.. просто тупо скопировать без выгрузки нельзя?
Сейчас элементарно ТИИ непроходит. База хоть и работает, но надолго ли…
и как? не получается? Пробовал выгружать-загружать копии? Чтоб перекачивать меньше. Кстати, ТИИ на каком этапе валится?
Попробовал новой версией ChDBFl.exe проверить. В результате в таблице _REFERENCE21 были удалены две записи из 69 000 и все стало нормально. Остается вопрос, что это за таблица? Есть способ узнать, каким данным она соответствует?
перейти на 8.1 — там есть встроенные средства, которые вернут представление таблицы базы данных для объекта 1С.. а еще, можно «ручной» работой на SQL версии понять, что за таблица — хотя бы посмотрев содержимое таблицы.
мда, в 7 это все было проще…
в 7.7 я таблицы ручками правил)
Тэги:
Комментарии доступны только авторизированным пользователям