|
Предварительное чтение XML | ☑ | ||
---|---|---|---|---|
0
Вася Теркин
05.05.15
✎
07:21
|
Есть стандартный код Загрузки выгрузки.
Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл Попытка ЗаписанноеЗначение = ПрочитатьXML(ЧтениеXML); Исключение ВосстановитьИспользованиеИтогов(); ВызватьИсключение; КонецПопытки; Мне нужно загружать только те документы, которых ещё в базе нет. Как предварительно прочитать номер дока и дату чтобы потом его найти или не найти. И только после этого сделать ПрочитатьXML. ПрочитатьXML сразу затирает старый экземпляр документа в базе. |
|||
1
ДенисЧ
05.05.15
✎
07:24
|
Дыу зайди в функцию эту. И посмотри, что там.
|
|||
2
Славен
05.05.15
✎
07:26
|
Читать построчно по узлам
|
|||
3
ЧеловекДуши
05.05.15
✎
08:13
|
(0) Василий, а ты попробуй предварительно прочитать 20 Тб текстового формату XML файла :)
|
|||
4
ЧеловекДуши
05.05.15
✎
08:13
|
(2) Это слишком просто, Василию нужна одна кнопка :)
|
|||
5
ЧеловекДуши
05.05.15
✎
08:14
|
(3) Сори 20 Гб :)
|
|||
6
Вася Теркин
05.05.15
✎
08:33
|
(2) Я думаю сделаю Отказ в Подписке на событие ПриЗаписи. Добавлю новый параметр сеанса и в обработке буду флаг ставить что это запись от обработки. И если документ не новый то Отказ.
|
|||
7
Вася Теркин
05.05.15
✎
08:33
|
Сейчас попробую...
|
|||
8
Вася Теркин
05.05.15
✎
08:34
|
В любом случае попытка лучше чем построчное чтение. Желательно так сделать.
Читать из базы быстрее чем предварительно читать из файла как учит нас великий 5-7 |
|||
9
ЧеловекДуши
05.05.15
✎
08:51
|
(8) Ты будешь удивлен, но Обмен организованный на формате DBF работает куда быстрее и компактней, чем XML :)
Вообще желательно заранее отсеивать такие документы до попадания их в файл обменов :) |
|||
10
Вася Теркин
06.05.15
✎
05:46
|
(9) Жаль только жить в эту пору прекрасную не будет даже великий кормчий Нуралиев
|
|||
11
rphosts
06.05.15
✎
06:04
|
(9) тогда уж JSON - наше всё
|
|||
12
sanfoto
06.05.15
✎
07:14
|
ЧеловекДуши (9) Ты будеш удивлен но... еще быстрей и компактней "ЗначениеВСтрокуВнутр"
---------------------------------------------- // В исходной Базе ТекстДляОбменаИзБазыИсходныхДанных = ЗначениеВСтрокуВнутр(НекаяТаблицаЗначений); /////// в Принимающей Базе ТаблицаЗначенийПринятаяВ_ДругуюБазу = ЗначениеИзСтрокиВнутр(ТекстДляОбменаИзБазыИсходныхДанных); --------------------- Одно НО ---- работает ТОЛЬКО между 1С-ками + скажем так близкими по платформе, например: 8.1 и 8.3 (+ надо учитывать объекты существующие в движках... ТЗ точно есть во всех) |
|||
13
Вася Теркин
06.05.15
✎
07:34
|
Процедура ПередЗаписьюВсеДокументыПередЗаписью(Источник, Отказ) Экспорт
Если ПараметрыСеанса.МоментЗагрузки = '00010101000000' Тогда //Ничего ИначеЕсли ТекущаяДата() - ПараметрыСеанса.МоментЗагрузки < 10 Тогда //Идет загрузка обработкой Отказ = НЕ Источник.ЭтоНовый(); ПолныеПрава.УстановитьПараметрМоментЗагрузки(); Иначе //Ничего, обычное проведение. Видимо при прошлой загрузке система неожидано обрушилась. //Такого вообще быть не должно, поэтому просто обнулим. ПолныеПрава.УстановитьПараметрМоментЗагрузки(); КонецЕсли; КонецПроцедуры |
|||
14
Вася Теркин
06.05.15
✎
07:34
|
Вот такая подписка перед записью.
|
|||
15
Вася Теркин
06.05.15
✎
07:36
|
Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл
Попытка ПолныеПрава.УстановитьПараметрМоментЗагрузки(ТекущаяДата()); ЗаписанноеЗначение = ПрочитатьXML(ЧтениеXML); Исключение ВызватьИсключение; КонецПопытки; |
|||
16
Вася Теркин
06.05.15
✎
07:37
|
Обмануть таки можно
|
|||
17
Вася Теркин
06.05.15
✎
07:38
|
(4) привед!
|
|||
18
dmpl
06.05.15
✎
07:48
|
(0) Через DOM можно прочитать сразу весь файл и получить структурированные данные, обработать их и записать новый XML, который уже и скормить штатному методу. Одна проблема - памяти надо раз в 20 больше чем размер исходного файла.
|
|||
19
dvva
06.05.15
✎
07:58
|
извините ТС, почему у вас прочитать данные из XML синоним записать (в ваше терминологии затереть) данные в базу.
ИМХО совершенно разные события. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |