Имя: Пароль:
1C
 
Предварительное чтение 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 синоним записать (в ваше терминологии затереть) данные в базу.

ИМХО совершенно разные события.
AdBlock убивает бесплатный контент. 1Сергей