Имя: Пароль:
1C
 
OLE ТЗ 77 в ТЗ 8 - как быстро?
0 dk
 
01.08.17
14:11
Как быстро перегнать большую OLE таблицу значений 77 в таблицу значений 8?
Сейчас 100 тыс строк * 30 колонок около 10 минут перегоняет
-----
В принципе можно и без ТЗ 8 - сразу во временные таблицы 1с 8 для дальнейшей обработки в запросе 8
1 Sserj
 
01.08.17
14:12
Быстро это наверно лучше в какую нибуть внешню БД из 77 а из нее прочитать в 8
2 dk
 
01.08.17
14:13
(1) через внешние данные? но там же структура вроде фиксированная - не заводить же внешние данные под каждый запрос
3 МихаилМ
 
01.08.17
14:13
записать в дбф в 77, прочитать в 8
4 1dvd
 
01.08.17
14:14
(1) +1
Быстро, это сегодня до конца дня или чтобы за доли секунды выполнялось?
5 Sserj
 
01.08.17
14:14
(2) Да не обязательно, можно даже через тривиальный dbf.
6 aka AMIGO
 
01.08.17
14:14
10 минут - это (для такой-то таблицы) всего 10 минут.
7 aka AMIGO
 
01.08.17
14:17
У нас отчеты по зарплате для 2-х с полтиной тысяч человек запускались в ночь, утром были готовы.. а тут.. 10минут невтерпёж :)
8 dk
 
01.08.17
14:17
(6) это ж все в оперативке - для оперативки это много
----
через dbf попробую, спасибо
в 7-ке тоже вроде с большими ТЗ подобная проблема была
9 aka AMIGO
 
01.08.17
14:18
(8) Да. Удачи тебе.
10 dk
 
01.08.17
14:18
(7) 100 тыс - это маленькая таблица - бывают миллионы и десятки миллионов записей
11 dk
 
03.08.17
12:53
попробовал сохранение dbf - лажа какая то - еще медленнее
12 Рэйв
 
03.08.17
13:39
(0) Присоединись к 8 по COM, создай через нее восьмерочную тз и заполняй сразу ее.
13 Рэйв
 
03.08.17
13:45
или если наоброт , присоединен к 77 по оле, то создавай тз в 8 и отправляй заполнять ее в 7.7
14 Вафель
 
03.08.17
13:46
(13) скорее всего результат какой то функции
15 Ёпрст
 
гуру
03.08.17
14:05
(0) проще во временные таблички в скуле или в базу сульлайта, или прямым запросом в дбф.
16 dk
 
03.08.17
15:22
(12) не вариант
(15) дык как эти данные потом в 8-ку то загрузить быстро?
17 ptiz
 
03.08.17
15:30
(0) Покажи код. И где тормозит - при записи или чтении?
18 dk
 
03.08.17
15:32

    ТЗ.ВыбратьСтроки();
    
    Пока ТЗ.ПолучитьСтроку() = 1 Цикл
        СтрокаТаблицыЗначений = Номенклатура77.Добавить();
        СтрокаТаблицыЗначений.УИД0           = ТЗ.УИД0;
        СтрокаТаблицыЗначений.Код0           = СокрЛП(ТЗ.Код0);
        СтрокаТаблицыЗначений.Наименование0  = СокрЛП(ТЗ.Наименование0);
        СтрокаТаблицыЗначений.Код1           = СокрЛП(ТЗ.Код1);
        СтрокаТаблицыЗначений.УИД1           = ?(СокрЛП(ТЗ.УИД1) = "", СокрЛП(ТЗ.УИД1), ТЗ.УИД1);
        СтрокаТаблицыЗначений.Наименование1  = СокрЛП(ТЗ.Наименование1);
        СтрокаТаблицыЗначений.Код2           = СокрЛП(ТЗ.Код2);
        СтрокаТаблицыЗначений.УИД2           = ?(СокрЛП(ТЗ.УИД2) = "", СокрЛП(ТЗ.УИД2), ТЗ.УИД2);
        СтрокаТаблицыЗначений.Наименование2  = СокрЛП(ТЗ.Наименование2);
        СтрокаТаблицыЗначений.Код3           = СокрЛП(ТЗ.Код3);
        СтрокаТаблицыЗначений.УИД3           = ?(СокрЛП(ТЗ.УИД3) = "", СокрЛП(ТЗ.УИД3), ТЗ.УИД3);
        СтрокаТаблицыЗначений.Наименование3  = СокрЛП(ТЗ.Наименование3);
        СтрокаТаблицыЗначений.Страна         = СокрЛП(ТЗ.Страна);
        СтрокаТаблицыЗначений.ШтрихКод       = СокрЛП(ТЗ.ШтрихКод);
        СтрокаТаблицыЗначений.СтавкаНДС      = СтавкиНДС[ТЗ.СтавкаНДС];
        СтрокаТаблицыЗначений.Цена           = ТЗ.Цена;
    КонецЦикла;
19 dk
 
03.08.17
15:33

    Номенклатура77 = Новый ТаблицаЗначений;
    Номенклатура77.Колонки.Добавить("УИД0",           Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(10)));
    Номенклатура77.Колонки.Добавить("Код0",           Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(11)));
    Номенклатура77.Колонки.Добавить("Наименование0",  Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100)));
    Номенклатура77.Колонки.Добавить("Код1",           Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(11)));
    Номенклатура77.Колонки.Добавить("УИД1",           Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(10)));
    Номенклатура77.Колонки.Добавить("Наименование1",  Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100)));
    Номенклатура77.Колонки.Добавить("Код2",           Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(11)));
    Номенклатура77.Колонки.Добавить("УИД2",           Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(10)));
    Номенклатура77.Колонки.Добавить("Наименование2",  Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100)));
    Номенклатура77.Колонки.Добавить("Код3",           Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(11)));
    Номенклатура77.Колонки.Добавить("УИД3",           Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(10)));
    Номенклатура77.Колонки.Добавить("Наименование3",  Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100)));
    Номенклатура77.Колонки.Добавить("Страна",         Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(30)));
    Номенклатура77.Колонки.Добавить("ШтрихКод",       Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(13)));
    Номенклатура77.Колонки.Добавить("СтавкаНДС",      Новый ОписаниеТипов("ПеречислениеСсылка.СтавкиНДС"));
    Номенклатура77.Колонки.Добавить("Цена",           Новый ОписаниеТипов("Число", , Новый КвалификаторыЧисла(15, 2)));
    
    СтавкиНДС = Перечисления.СтавкиНДС;

20 Ёпрст
 
гуру
03.08.17
16:16
(16) запросом по адо
21 ptiz
 
03.08.17
16:26
(18) Ах вон оно что. Построчно через OLE - это тормоза. Надо общение через OLE сводить к минимуму.
Напиши в 7.7 функцию, которая будет делать всё что нужно и писать в файл. А через OLE - только вызывать эту функцию и получать из неё имя файла.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн