|
v8: Есть плохая идея. Что скажете? | ☑ | ||
---|---|---|---|---|
0
ТутЯ
09.09.13
✎
11:19
|
1с8.2 Управляемые формы. Самописанная конфигурация.
Есть справочник "Работы". Есть большая таблица значений 2,5 млн записей(группы и элементы). Задача: загрузить таблицу значений в справочник. Проблема: Средствами 1с очень долго. Вопросы: Какие есть решения проблемы? Можно ли грузить прямо в СКЛ таблицы? Смотрю ПолучитьСтруктуруХраненияБазыДанных - все понятно. Смотрю на таблицы - не понятно как формируется код ссылки. |
|||
1
Maxus43
09.09.13
✎
11:21
|
Да, идея плохая + нарушение лиц соглашения.
Грузи так, одноразовая операция же, на ночь поставил и всё |
|||
2
ТутЯ
09.09.13
✎
11:22
|
Ночи не хватает
|
|||
3
Славен
09.09.13
✎
11:22
|
Выходные
|
|||
4
Maxus43
09.09.13
✎
11:22
|
(2) в одной транзакции поди делаешь ещё?
|
|||
5
kortun
09.09.13
✎
11:23
|
(2) должно хватать, 2.5 млн. записей это не так много
|
|||
6
Славен
09.09.13
✎
11:23
|
3-5 фоновых заданий и в путь
|
|||
7
ТутЯ
09.09.13
✎
11:23
|
пробовала и транзакции резать и с перерывами ее делать
|
|||
8
Базис
naïve
09.09.13
✎
11:23
|
Программист нужен, видимо.
|
|||
9
Maxus43
09.09.13
✎
11:23
|
(7) без транзакций делай вобще, это ж справочник
|
|||
10
ТутЯ
09.09.13
✎
11:24
|
про фоновые задания не поняла что-то... подскажи,
плиз |
|||
11
ТутЯ
09.09.13
✎
11:24
|
и без транзакций пробовала. Этот вариант мне больше понравился.
|
|||
12
Базис
naïve
09.09.13
✎
11:25
|
А формировать ТЗ кусками пробовала?
100К записей за какое время грузится? Все Сообщить() убирай, они тормозят вывод - достаточно Состояние() каждые тыщу строк. |
|||
13
ТутЯ
09.09.13
✎
11:25
|
(5) возможно нужно еще пару часов, но пользователи не могут работать, сервер перегружен. Это если я в тестовую гружу.
|
|||
14
Maxus43
09.09.13
✎
11:26
|
Код в студию
|
|||
15
ТутЯ
09.09.13
✎
11:26
|
(12)да, пробовала
100К- не поняла это что? "Сообщить" нет все убрала. |
|||
16
Maxus43
09.09.13
✎
11:26
|
В пердЗаписью, ПриЗаписи в справочнике есть что? ОбменДанными.Загрузка = Истина добавь
|
|||
17
fisher
09.09.13
✎
11:26
|
(0) Надеюсь, ТЗ - не реквизит формы?
|
|||
18
Базис
naïve
09.09.13
✎
11:27
|
Фотка есть, можешь теперь код выкладывать.
Но я уехал на обед. |
|||
19
le_
09.09.13
✎
11:28
|
(0) А ТЗ откуда берется?
|
|||
20
ТутЯ
09.09.13
✎
11:28
|
(17) нет не реквизиты. ТЗ собирается из кучи текстовых файлов. Это каталоги Ельза по запчастям...может кто пользовался и грузил?
|
|||
21
пипец
09.09.13
✎
11:28
|
тз на УФ ? мдя ...
|
|||
22
ТутЯ
09.09.13
✎
11:28
|
(16 ) попробую, спасибо
|
|||
23
ТутЯ
09.09.13
✎
11:29
|
(21) нучи как правильно, плиз
|
|||
24
mistеr
09.09.13
✎
11:29
|
(0) А в чем проблема грузить ночью по частям? И почему обязательно из ТЗ. Обычная загрузка из таб. документа справится.
|
|||
25
Maxus43
09.09.13
✎
11:29
|
(22) хотя самописка, я не знаю что в этих процедурах у вас, короче при загрузке надо отключать оттуда код исполняемый
|
|||
26
le_
09.09.13
✎
11:30
|
(20) Можно же по частям их грузить. Определенное количество файлов в сутки...
|
|||
27
fisher
09.09.13
✎
11:31
|
(20) Собирай их в ТЗ на сервере, а не на клиенте. Чтобы в алгоритме загрузки данных в справочник клиент вообще практически не участвовал. Ессно надо чтобы файлы были доступны с сервера.
|
|||
28
ТутЯ
09.09.13
✎
11:31
|
(26) да, но если процедуру выполнять раз в месяц, то хотелось бы все на автомате
|
|||
29
ТутЯ
09.09.13
✎
11:33
|
(27) на сервере собирается
|
|||
30
NcSteel
09.09.13
✎
11:33
|
(0) Грузил миллионы записей и обходилось все часами... Что то у вас в коде подурацки.
|
|||
31
ТутЯ
09.09.13
✎
11:34
|
Давайте посмотрим на код дурацкий, плиз. Щас скину. Скажите что именно дурь
|
|||
32
le_
09.09.13
✎
11:36
|
(28) Имя последнего загруженного в сесии файла (или индекс какой-нибудь в списке файлов) можно сохранять куда-нибудь и в след. раз начинать со следующего. Вполне можно автоматизировать. Регламентное задание можно сделать.
|
|||
33
fisher
09.09.13
✎
11:36
|
(29) Хм... Если запись порционными транзакциями не помогает, значит или тебе не помочь (упираешься в скорость записи) из 1С или есть бока (типа заполнения каких-то данных через точку, что равноценно запросу в цикле).
|
|||
34
fisher
09.09.13
✎
11:36
|
"(упираешься в скорость записи из 1С)"
|
|||
35
Жан Пердежон
09.09.13
✎
11:37
|
подписки по возможности отключи на время загрузки, если подписки свои - добавь в них проверку на ОбменДанными.Загрузка.
Индексы грохни, если есть. |
|||
36
fisher
09.09.13
✎
11:37
|
Элементарный замер производительности должен показать, где корень зла.
|
|||
37
NcSteel
09.09.13
✎
11:37
|
я уверен, что там шняга в цикле .... поэтому и тормозит.
|
|||
38
NcSteel
09.09.13
✎
11:38
|
(36) +100500
|
|||
39
ТутЯ
09.09.13
✎
11:38
|
Есть процедура в которой создается массив, в массиве таблицы значений. Эти типа таким образом разбила большую таблицу значений.
Процедура ОбработатьМассивДанныхAPOS(МассивДанных) ...обработка текстовых файлов МассивБольшой = Новый Массив; ...заполняем таблицы значений этого большого массива Для Каждого СтрокаМассива Из МассивБольшой Цикл ТаблицаРезультат = СтрокаМассива; ТаблицаРезультат.Свернуть("nn,code,ncode,Name,fullname,counts,grp, |isgroup,codeХ,ncodeХ,NameХ,fullnameХ,countsХ,grpХ,isgroupХ,КоличествоХ",""); ТаблицаРезультат.Сортировать("nn Возр"); ПеренестиСерверРаботыЕльза(ТаблицаРезультат); КонецЦикла; КонецПроцедуры &НаСервере Процедура ПеренестиСерверРаботыЕльза(МассивДанных) //СоответствиеГрупп = Новый Соответствие; Ном = 0; НачатьТранзакцию(); Счетчик = 0; Для Каждого СтрокаМассива Из МассивДанных Цикл Ном = Ном +1; //Родитель = СоответствиеГрупп.Получить(СтрокаМассива.grp); Родитель = Неопределено; НайденнаяСтрока = ТаблицаГрупп.НайтиСтроки(Новый Структура("grp",СтрокаМассива.grp)); Если НайденнаяСтрока.Количество()>0 Тогда Родитель = НайденнаяСтрока[0].grpСсылка.Ссылка; КонецЕсли; Запрос = Новый Запрос(); ТекстЗапроса = "ВЫБРАТЬ | ГруппыРабот.Ссылка |ИЗ | Справочник.Работы КАК ГруппыРабот |ГДЕ | ГруппыРабот.Родитель = &Родитель | И ГруппыРабот.Наименование = &Наименование | И ГруппыРабот.ЭтоГруппа = &ПризнакГруппы | И ГруппыРабот.КодСервиса = &Код |АВТОУПОРЯДОЧИВАНИЕ"; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("Родитель", Родитель); Запрос.УстановитьПараметр("Наименование", СтрокаМассива.name); Запрос.УстановитьПараметр("Код", СтрокаМассива.code); Если СтрокаМассива.isgroup=1 Тогда Запрос.УстановитьПараметр("ПризнакГруппы", Истина); Результат = Запрос.Выполнить().Выбрать(); Если Результат.Следующий() Тогда НовыйЭлемент = Результат.Ссылка; Иначе НовыйЭлемент = Справочники.Работы.СоздатьГруппу(); НовыйЭлемент.КодСервиса = СтрокаМассива.code; НовыйЭлемент.Наименование = СтрокаМассива.name; НовыйЭлемент.Родитель = Родитель; НовыйЭлемент.Записать(); КонецЕсли; //СоответствиеГрупп.Вставить(СтрокаМассива.code, НовыйЭлемент.Ссылка); НоваяСтрока = ТаблицаГрупп.Добавить(); НоваяСтрока.grp = СтрокаМассива.code; НоваяСтрока.grpСсылка = НовыйЭлемент.Ссылка; Иначе Запрос.УстановитьПараметр("ПризнакГруппы", Ложь); Результат = Запрос.Выполнить().Выбрать(); Если Результат.Следующий() Тогда НовыйЭлемент = Результат.Ссылка.ПолучитьОбъект(); Иначе НовыйЭлемент = Справочники.Работы.СоздатьЭлемент(); НовыйЭлемент.КодСервиса = СтрокаМассива.code; НовыйЭлемент.Наименование = СтрокаМассива.fullname; НовыйЭлемент.КодПроизводителя= СтрокаМассива.ncode; НовыйЭлемент.КоличествоНЧ= СтрокаМассива.counts; НовыйЭлемент.Родитель = Родитель; КонецЕсли; Попытка Вложение = СтрокаМассива.codeХ; Исключение Вложение = Неопределено; КонецПопытки; Если НЕ Вложение = Неопределено И ЗначениеЗаполнено(Вложение)Тогда //Родитель = СоответствиеГрупп.Получить(СтрокаМассива.grpХ); РодительХ = Неопределено; //НайденнаяСтрока = ТаблицаГрупп.Найти(СтрокаМассива.grpХ,"grp"); НайденнаяСтрока = ТаблицаГрупп.НайтиСтроки(Новый Структура("grp",СтрокаМассива.grpХ)); Если НайденнаяСтрока.Количество()>0 Тогда РодительХ = НайденнаяСтрока[0].grpСсылка.Ссылка; КонецЕсли; Запрос2 = Новый Запрос(); Запрос2.Текст = ТекстЗапроса; Запрос2.УстановитьПараметр("Родитель", РодительХ); Запрос2.УстановитьПараметр("Наименование", СтрокаМассива.fullnameХ); Запрос2.УстановитьПараметр("Код", СтрокаМассива.codeХ); Запрос2.УстановитьПараметр("ПризнакГруппы", Ложь); Результат2 = Запрос2.Выполнить().Выбрать(); Если Результат2.Следующий() Тогда НовыйВложенный = Результат2.Ссылка; Иначе НовыйВложенный = Справочники.Работы.СоздатьЭлемент(); НовыйВложенный.КодСервиса = СтрокаМассива.codeХ; НовыйВложенный.Наименование = СтрокаМассива.fullnameХ; НовыйВложенный.КодПроизводителя = СтрокаМассива.ncodeХ; НовыйВложенный.КоличествоНЧ = СтрокаМассива.countsХ; НовыйВложенный.Родитель = РодительХ; НовыйВложенный.Записать(); КонецЕсли; НоваяСтрока = НовыйЭлемент.Работы.Добавить(); НоваяСтрока.Работа = НовыйВложенный.Ссылка; НоваяСтрока.ДополнительноКТО = Истина; НоваяСтрока.Количество = СтрокаМассива.КоличествоХ; КонецЕсли; НовыйЭлемент.Записать(); КонецЕсли; Счетчик=Счетчик+1; Если Счетчик=100 Тогда ЗафиксироватьТранзакцию(); Для Ии=1 по 1000000 цикл КонецЦикла; НачатьТранзакцию(); Счетчик=0 КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию(); КонецПроцедуры |
|||
40
rotting
09.09.13
✎
11:39
|
убери запрос из цикла
|
|||
41
ТутЯ
09.09.13
✎
11:40
|
(40) уберу
|
|||
42
NcSteel
09.09.13
✎
11:41
|
В общем и запросы в цикле и
НайденнаяСтрока = ТаблицаГрупп.НайтиСтроки(Новый Структура("grp",СтрокаМассива.grpХ)); Не радует. |
|||
43
ТутЯ
09.09.13
✎
11:41
|
(36) именно в процессе записи в справочник тормозит
|
|||
44
ТутЯ
09.09.13
✎
11:42
|
(42) какой вариант по группам тогда?
|
|||
45
rotting
09.09.13
✎
11:43
|
(43) показывай процедуру ПриЗаписи()
|
|||
46
NcSteel
09.09.13
✎
11:43
|
(44) Непонятно что эта за таблица и очему в ней надо что то искать. Так же есть ли в ней индекс.
|
|||
47
NcSteel
09.09.13
✎
11:44
|
Так же нет ОбменДанными.Загрузка = Истина
|
|||
48
fisher
09.09.13
✎
11:44
|
(43) Что, вот прямо показывает 95% на "НовыйЭлемент.Записать()", ежели без транзакций?
|
|||
49
ТутЯ
09.09.13
✎
11:44
|
(46) это таблица соответствий для родителей
|
|||
50
ТутЯ
09.09.13
✎
11:45
|
(45) Нашла только вот это:
Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка=Истина Тогда Возврат; КонецЕсли; Если Не ЭтоГруппа И ЗначениеЗаполнено(Ссылка) И ВыбранныеРаботыПодбиратьВЗаказНаряд<> Ссылка.ВыбранныеРаботыПодбиратьВЗаказНаряд Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПРЕДСТАВЛЕНИЕ(РаботыРаботы.Ссылка) КАК Владелец |ИЗ | Справочник.Работы.Работы КАК РаботыРаботы |ГДЕ | РаботыРаботы.Работа = &Работа"; Запрос.УстановитьПараметр("Работа", Ссылка); Результат = Запрос.Выполнить(); Если не Результат.Пустой() Тогда Отказ = Истина; Сообщить("Данная работа входит в состав комплектов:"); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщить(ВыборкаДетальныеЗаписи.Владелец); КонецЦикла; КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
51
fisher
09.09.13
✎
11:46
|
(50) Гы! Ну, воткни НовыйЭлемент.ОбменДанными.Загрузка = Истина. Или уже предлагали?
|
|||
52
ТутЯ
09.09.13
✎
11:47
|
(48) да, только 50%
|
|||
53
ТутЯ
09.09.13
✎
11:47
|
Да, тоже думаю что так, но куда прикрутить подскажите.
|
|||
54
ТутЯ
09.09.13
✎
11:48
|
(51) Не поняла где такое обращение
|
|||
55
NcSteel
09.09.13
✎
11:49
|
(54) у тебя его нет, а надо создать.
|
|||
56
ТутЯ
09.09.13
✎
11:49
|
(51) Дошло. Спасибо
|
|||
57
ТутЯ
09.09.13
✎
11:49
|
Щас попробую. Может сегодня самолет полетит...Сообщу)))
|
|||
58
M0narch
09.09.13
✎
11:49
|
(54) перед НовыйЭлемент.Записать();
|
|||
59
ТутЯ
09.09.13
✎
11:50
|
Да да. Спасибки
|
|||
60
fisher
09.09.13
✎
11:51
|
(52) На большом количестве итераций 50% кроме записи - многовато.
|
|||
61
Maxus43
09.09.13
✎
11:52
|
(60) там запросы в цикле и т.д., код вобще перегружен имхо, упростить надо всё
|
|||
62
Chin
09.09.13
✎
11:55
|
(0) Грузи пачками
|
|||
63
SanGvin
09.09.13
✎
11:56
|
такое надо на сервере, а не на клиенте запускать.
и еще я сталкивался с багом, что если писать ОбменДанными.Загрузка = Истина на больших объемах _иногда_ сжирает память на серваке. |
|||
64
ТутЯ
09.09.13
✎
11:56
|
(61) а есть вариант разгрузить? Подскажите, пожалуйста.
|
|||
65
ТутЯ
09.09.13
✎
11:56
|
(63) на сервере конечно
|
|||
66
ТутЯ
09.09.13
✎
11:57
|
(63) она и так сжигается капитально
|
|||
67
Жан Пердежон
09.09.13
✎
11:57
|
чего фотка с мистой делает...
|
|||
68
ТутЯ
09.09.13
✎
12:00
|
(61) упросить код- это подготовить родителей. Каким образом?
|
|||
69
Maxus43
09.09.13
✎
12:04
|
НайденнаяСтрока = ТаблицаГрупп.НайтиСтроки(Новый Структура("grp",СтрокаМассива.grp));
НайтиСтроки по одному столбцу - не имеет смысла, всё равно первый берёшь. ТаблицаГрупп.найти(СтрокаМассива.grp, "имя столбца"); используй |
|||
70
ТутЯ
09.09.13
✎
12:07
|
(69) так и было изначально, но 1с ругается
|
|||
71
ТутЯ
09.09.13
✎
12:09
|
(69) чего-то не догоняю, а почему первый. Все верно находит
|
|||
72
ТутЯ
09.09.13
✎
12:09
|
я же часть данных загруженных вижу и родители все верно встали
|
|||
73
Maxus43
09.09.13
✎
12:31
|
(70) как ругается то?
|
|||
74
ТутЯ
09.09.13
✎
12:34
|
(73) уже не помню. ТаблицаГрупп- реквизит формы
|
|||
75
ТутЯ
09.09.13
✎
12:34
|
она не большая получается
|
|||
76
Лефмихалыч
модератор
09.09.13
✎
12:52
|
(0) есть хорошая идея - не грузить 2.5 млн записей в справочник
|
|||
77
ТутЯ
09.09.13
✎
12:57
|
(76) А продолжение идеи есть?
|
|||
78
Reaper_1c
09.09.13
✎
12:58
|
(77) Зацепить как внешний источник.
|
|||
79
Лефмихалыч
модератор
09.09.13
✎
12:59
|
(77) ну, не делать и всё. Выбрать только нужное и эти самые полторы сотни записей и загрузить, а остальное пусть себе гниет
|
|||
80
ТутЯ
09.09.13
✎
13:00
|
как я узнаю нужные?))))
|
|||
81
ТутЯ
09.09.13
✎
13:02
|
(78) и (79) не подходит
|
|||
82
Лефмихалыч
модератор
09.09.13
✎
13:03
|
(80) исходя из задачи - где-то в ней закопано то, зачем это все нужно и вот на основании этого "зачем" и можно принять решение, что нужно, а что нет.
|
|||
83
ТутЯ
09.09.13
✎
13:04
|
выясняю у заказчика...минуту)))
|
|||
84
ТутЯ
09.09.13
✎
13:05
|
меня поставили перед фактом...пришел аудит такой-то сякой и в такой-то день каталог должен быть в 1с...Щас уточную можно его оставить не в 1с...)))
|
|||
85
Лефмихалыч
модератор
09.09.13
✎
13:05
|
если заказчик скажет: "мне нужен каждый элемент из этих 2.5млн каждый день 24/7", знай - он врёт. Не бывает людей, которым нужны справочники по 2.5 млн записей.
|
|||
86
ТутЯ
09.09.13
✎
13:06
|
да это все понятно. Нужно уточнить на сколько жесткие требования. Пока не стала грузить не поняла проблему...
|
|||
87
Enders
09.09.13
✎
13:08
|
Особенно радует сообщение (28)
" да, но если процедуру выполнять раз в месяц, то хотелось бы все на автомате" Это получается что каждый месяц вы будете добавлять в справочник по 2 млн записей?Оо |
|||
88
ТутЯ
09.09.13
✎
13:08
|
не, обновление данных, там еще цифры есть...
|
|||
89
ТутЯ
09.09.13
✎
13:09
|
это не щас...главное придумать как загрузить, или не грузить, но использовать откуда-то
|
|||
90
ТутЯ
09.09.13
✎
13:10
|
заказчик пока молчит...жду...
|
|||
91
Enders
09.09.13
✎
13:11
|
Смотря что надо.
Если просто информационно и нигде не будет использоваться. И надо каждый раз очищать и загружать заново, то имхо, в регистр. Хотя всё равно.... |
|||
92
ТутЯ
09.09.13
✎
13:11
|
нет...точно будет использоваться...
|
|||
93
Odavid
09.09.13
✎
13:11
|
(0) >>Средствами 1с очень долго.
а других в 1С нет. Про SQL забудьте - в 8-ке он только для сервера 1С, а не для программистов. Грузите через DBF - очень быстро выгружается и загружается. |
|||
94
ТутЯ
09.09.13
✎
13:14
|
Требования жесткие. "Каталог должен быть в 1с!"
|
|||
95
Odavid
09.09.13
✎
13:14
|
(20)1C очень долго читает стандартными средствами текстовые файлы.
Используйте не то, что 1с рекомендует, а ЧтениеТекста. А лучше - откажитесь от обработки текста в 1С вообще, и слейте все текстовые файлы где-нибудь на стороне в одну DBF. |
|||
96
Odavid
09.09.13
✎
13:15
|
(94) ну так и грузите.
Но не средствами "1С:Специалист". |
|||
97
ТутЯ
09.09.13
✎
13:16
|
(93) Проблем нет вытащить в 1с. Проблема записать в справочник. Самый простой код ".Записать()" - вот в чем проблема. Написала процедуру записи в справочник. Вот тут и нужно перекопать и увеличить скорость.
|
|||
98
M0narch
09.09.13
✎
13:19
|
(97) на время загрузки изменить процедуру при записи и перед записью в конфе
|
|||
99
Odavid
09.09.13
✎
13:21
|
(97)>>Написала процедуру записи в справочник
тут нет вариантов. Код платформы закрыт, и, вам остается либо всем восхищаться (как делает большинство) и дальше читать агитки 1С, либо молча "кушать какутус". Единственно - загрузите частями ("Смотрите, вот он, справочник!"). Ведь никто не будет счиать, сколько там записей - 1 или 2 млн. А потом подгрузите остальное. |
|||
100
ТутЯ
09.09.13
✎
13:21
|
(98) сейчас запустила на тестирование с учетом ОбменДанными.Загрузка = Истина
Жду. |
|||
101
Simod
09.09.13
✎
13:21
|
А вот это что за шняга:
Для Ии=1 по 1000000 цикл КонецЦикла; ?? |
|||
102
ТутЯ
09.09.13
✎
13:22
|
(99)да, мне останется такой вариант
|
|||
103
Odavid
09.09.13
✎
13:23
|
(98) на что изменить? На "запиши все по-быстрому"??
Я уже рекомендовал 1С такую команду в нулевых, 1С только фыркнула в ответ. |
|||
104
ТутЯ
09.09.13
✎
13:23
|
(101) можете на эту шнягу не смотреть - это пауза чтобы пользователи могли хоть что-то сделать со справочником работ. Иначе давала ошибки транзакции. Этот код уже закрыла и выгрузку делаю в тестовую.
|
|||
105
Odavid
09.09.13
✎
13:23
|
(101) это тестовый код имитации, если кто не понял.
|
|||
106
Odavid
09.09.13
✎
13:24
|
(104) а как пересекаются справочники Номенклатура и Работ??
|
|||
107
maxile
09.09.13
✎
13:26
|
Надо просто сертифицировать и найти потом сбыт иначе все труды напрасно. Все созданное должно иметь свою реализацию в конце концов. Иначе это просто фикция и ненужня трата энергии.
|
|||
108
ТутЯ
09.09.13
✎
13:26
|
(106) прошу прощения, что вопросом на вопрос...Я где-то опечаталась и написала Номенклатура?
|
|||
109
ТутЯ
09.09.13
✎
13:28
|
(106) Грузим в "Работы". "Номенклатура" завязана, но не в этот раз.
|
|||
110
ТутЯ
09.09.13
✎
13:33
|
(99) Справочник для аудита есть(ночью что-то загрузилось), но задача должна быть выполнена.
1. Загрузить что есть любым путем. 2. Раскрутить скорость и автоматом чтобы каждый месяц. |
|||
111
mikeA
09.09.13
✎
13:36
|
Попробуй в транзакции записывать хотя бы тысяч по пять или десять элементов.
|
|||
112
Odavid
09.09.13
✎
13:37
|
(100)>> сейчас запустила на тестирование с учетом ОбменДанными.Загрузка = Истина
это на скорость записи не влияет, только на реагирование на ошибки создания и заполнения. |
|||
113
ТутЯ
09.09.13
✎
13:37
|
(111) Отказалась от транзакции вообще.
На коде "НачалоТранзакции()" виснет на боевой базе. Кто знает причину? |
|||
114
ТутЯ
09.09.13
✎
13:38
|
(112)а что значит на реагирование?
|
|||
115
Odavid
09.09.13
✎
13:39
|
(108)>>Я где-то опечаталась и написала Номенклатура?
>>Это каталоги Ельза по запчастям Тогда - что за запчасти как "работа"? |
|||
116
Odavid
09.09.13
✎
13:40
|
(109) 2,5 млн - это два с половиной миллиона работ??
|
|||
117
Odavid
09.09.13
✎
13:42
|
(110)>>2. Раскрутить скорость и автоматом чтобы каждый месяц.
грузите каждую ночь по 100 тыс наименований. |
|||
118
ТутЯ
09.09.13
✎
13:42
|
(115) там так и есть...Даны позиции номенклатуры в одном файле, в другом файле нормо-часы, в другом файде модели авто, в другом файле группы, в другом связки....бред...еще полно всего...
Короче в итоге в 1с у меня получаются работы с нормо-часами. |
|||
119
ТутЯ
09.09.13
✎
13:42
|
(116) работы и группы работ
|
|||
120
Odavid
09.09.13
✎
13:43
|
(111) >>Попробуй в транзакции записывать хотя бы тысяч по пять или десять элементов.
на скорость записи это тоже не влияет. Лишь на объем занимаемой памяти и вылеты при загрузке. |
|||
121
ТутЯ
09.09.13
✎
13:43
|
(120) однозначно транзакции не будет и только ночная загрузка
|
|||
122
Odavid
09.09.13
✎
13:44
|
(118) я бы на DBF все соединил сначала (да хоть через 1С), а потом уже грузил один получившийся кусок.
|
|||
123
ТутЯ
09.09.13
✎
13:45
|
(112)мысль обдумываю, незнаю результата
|
|||
124
Odavid
09.09.13
✎
13:45
|
(121) "транзакция по 10 тыс" здесь абсолютно ни при чем.
Просто народ не понимает, зачем транзакции в 1С. |
|||
125
ТутЯ
09.09.13
✎
13:45
|
как быстро открыть текстовый файл в дбф?
|
|||
126
Odavid
09.09.13
✎
13:46
|
(125) DBF быстро обрабатывается, чтение в 1С ТЕКСТОВОГО файла - весьма трудоемко.
А если еще и по рекомендациям 1С - то вообще конца не увидите. |
|||
127
ТутЯ
09.09.13
✎
13:47
|
у меня текстовый в массивы, массив на сервер, на сервере в таблицы значений с индексами, из них собираются данные. Процесс по времени меня устраивает. Подскажите, если есть что лучше, пожалуйста.
|
|||
128
ТутЯ
09.09.13
✎
13:47
|
проблема не в чтении текстового
|
|||
129
Odavid
09.09.13
✎
13:48
|
(125) 1. Рекомендую обработать текстовики не в 1С.
2. Если (1 ) невозможно - обрабатывать тектсовики "в фоне", чтобы потом вечерком их автоматом перекидывать в 1С. 3. "В лоб" читать текстовики в 1С, обрабатывать и ждать, когда 1С соизволит все обработать. И при этом не отключится в забытье. |
|||
130
ТутЯ
09.09.13
✎
13:49
|
вот смотрите...допустим я потрачу время чтобы 1с прочитала текст и создала дбф, потом буду дбф крутить и получу что-то похожее на то что у меня есть. И опять 10 часов не хватит чтобы записать...
|
|||
131
Odavid
09.09.13
✎
13:49
|
(128) с записью - только частями. Постоянно кидать части данных в свободное время сервера.
|
|||
132
ТутЯ
09.09.13
✎
13:49
|
Некому обработать текстовые. Надо кнопка старта и результат утром.
|
|||
133
Odavid
09.09.13
✎
13:50
|
(130) именно, тут вариантов нет. Либо вы сами разбиваете эти 10 часов на часы, либо - 1С "зависает" на все это время сама.
|
|||
134
Odavid
09.09.13
✎
13:51
|
(132) ну так загрузите все сначала, а потом будете делать поиск по базе и подгрузку отсутствующих данных.
|
|||
135
Odavid
09.09.13
✎
13:52
|
*загрузите сначала весь объем в 2,5 млн записей в 1С.
|
|||
136
z0001
09.09.13
✎
13:52
|
(0)какую-то ахунею тут понаписали...
1. то что у тебя в таблице значений помещаешь в таблицы скуля подключением чрез скуль его же средствами 2.апдейтишь из скуля свой справочник быстрее способа нет, скуль просто ничтожно малое время занимает по сравнению с этими циклами всякими |
|||
137
z0001
09.09.13
✎
13:54
|
если времени больше чем охренеть а данных меньше чем охренеть тогда можно втащить их порционно куда-нибудь в левую специально созданную структуру типа регистра сведений в 1С а потом уже обрабатывать
|
|||
138
Odavid
09.09.13
✎
13:54
|
(136) вы 1С-ой когда-нибудь занимались?
|
|||
139
ТутЯ
09.09.13
✎
13:54
|
(136) я человек простой и смысла-то не понимаю написанного
|
|||
140
Odavid
09.09.13
✎
13:55
|
(137)>>структуру типа регистра сведений в 1С
обращу внимание - даже РС не есть единая таблица в SQL. |
|||
141
ТутЯ
09.09.13
✎
13:56
|
Я чего-то так думаю... я, наверно, подготовлю внешние готовые битые таблицы с элементами групп. И первоначально подгружу только группы, а потом частями по регламенту остальное...
|
|||
142
Odavid
09.09.13
✎
13:58
|
(141) вам в первом десятке ответов рекомендовали подгрузить сначала только сверхнужные данные. А потом и остальное.
|
|||
143
ТутЯ
09.09.13
✎
14:00
|
(142) Нужность не поняла сначала
|
|||
144
ТутЯ
09.09.13
✎
14:03
|
(142) да да, взяла все сказанное на заметку. Спасибо)))...
|
|||
145
z0001
09.09.13
✎
14:13
|
(138)да. ))) и кстати забыл написать что ссылки следует создавать средствами 1С а реквизиты (включая ссылочного типа) апдейтить скулем
|
|||
146
Sj
09.09.13
✎
14:16
|
(141) да, да. Делайте именно так, как и написали. И счастье будете тягать мешками.
|
|||
147
z0001
09.09.13
✎
14:28
|
(141)"готовые битые таблицы " прочел как битовые и крепко думал, прочитал верно и задумался ещё крепче )))
|
|||
148
z0001
09.09.13
✎
14:30
|
(141)не забудь реквизит синхронизации гарантированно уникальный найти или создать и чтобы поиск по нему адекватно работал т.е. лучше искать запросами чем методами короче
|
|||
149
Loki Evil
09.09.13
✎
14:31
|
Что можно сделать:
1) Убрать все что делалось при записи и перед записью 2) Посмотреть что все время, на 99% занимает Записать() 3) Убрать из ввода по строке Наименование, Код - это индексированные столбцы, возможно серверу будет проще не поддерживать эти индексы при добавлении элементов - вернуть на место после загрузки, чтобы обсчитал 1 раз. Больше что-то на ум ничего не идет. |
|||
150
z0001
09.09.13
✎
14:33
|
(149)при загрузке нужно проверять существование т.е. искать и не найденные создавать, как будет поиск отрабатывать без индексов? )))
|
|||
151
z0001
09.09.13
✎
14:36
|
прочел ветку и не понял откуда берется таблица значений(0)
|
|||
152
Odavid
09.09.13
✎
14:44
|
(151) потому что опыть применения других систем хранения в 1С абсолютно неприменим ))
Поэтому я и написал утвердительно - вы не занимаетесь 1С )) (149) Все, что делает Записать() - это записывает в базу. Если и есть какие-то "связанные" события, на которые вы намекаете (подписки, ПриЗаписи и т.д.) - это только влияет на ошибки при записи, но не на скорость самой записи "строки" в базу. |
|||
153
ТутЯ
09.09.13
✎
14:45
|
(151) Таблица значений формируется в 1с.
|
|||
154
Odavid
09.09.13
✎
14:45
|
(145) создание ссылки в 1С - это и есть создание объекта в базе.
Без объекта - нет ссылки. Точнее, это не будет ссылка, а "мусор", не имеющий никакого значения для базы 1С. |
|||
155
ТутЯ
09.09.13
✎
14:46
|
(153) после установки ОбменДанными.Загрузка = Истина получаем не 50%, а 30%.
Поиск групп занимает 18% и запросы 18% |
|||
156
Odavid
09.09.13
✎
14:46
|
(153) он, как и многие до него "сгоряча", наложил опыт применения "нормальных" СУБД на 1С.
Поэтому и ТЗ у него - это таблица в СУБД уже. |
|||
157
ТутЯ
09.09.13
✎
14:47
|
попробую сначала группы все создать и связки хранить в индексированной таблице
|
|||
158
Odavid
09.09.13
✎
14:49
|
(155) чего 30%? При записи или вообще при загрузке?
И потом, после устанровки "обхода" проверок - вы дадите гарантию, что справочники правильно создались, без битой ссылочности, внутренних противоречий (с кодами, другими справочниками и т.д.), и со всеми необходимыми полями? |
|||
159
ТутЯ
09.09.13
✎
14:51
|
(155)так показывает замер производительности в цикле процедуры ПеренестиСерверРаботыЕльза
|
|||
160
Odavid
09.09.13
✎
14:53
|
(159) ну т.е. "общего" переноса, а не конкретно при ЭлементСправочника.Записать(), как вы настаивали.
О чем и толкую Вам. |
|||
161
Odavid
09.09.13
✎
14:54
|
(157)>>и связки хранить в индексированной таблице
это как и где? |
|||
162
ТутЯ
09.09.13
✎
14:57
|
вот и думаю и как и где...
таблицу групп хотела грузить сразу, поэтому получить отдельно таблицу значений только для групп, выполнить запись в справочник работ и сразу привязать к ссылкам записи тз. Где-то сохранить внешними данными...незнаю...значение в строку и положить туда ссылку...Когда запускать регламент открывать эти данные и опять в Тз и проиндексировать и только после этого начинать грузить таблицы элементов... |
|||
163
Odavid
09.09.13
✎
15:07
|
(162) я ж говорю вам - вы в любом случае упретесь в тормоза/невозможность 1С быстро/правильно/корректно (подчеркните нужное) работать с СУБД при ОГРОМНЫХ объемах данных, начинающихся от 100-200 тыс записей/транзакция.
Я в этом убежден, с чем не согласны большинство здесь на форуме. Поищите - постоянно пишут о "миллионах обрабатываемых записей" (это, в основном, начальники-руководители и прочая, кто хочет видеть и видит лишь отчеты с агитками), и тут же - либо невозможность (по причине переполнения чего-нибудь - буфера 1С-сервера, памяти, темпового диска, очереди ввода-вывода и т.д.), либо долгие <годы> часы ожидания завершения обработки данных. |
|||
164
ТутЯ
09.09.13
✎
15:11
|
(163) так какой выход?
|
|||
165
Odavid
09.09.13
✎
15:12
|
(164) (131 ) + ( 142)
Т.е. анализ данных перед загрузкой - 99% успеха загрузки в 1С. |
|||
166
ТутЯ
09.09.13
✎
15:14
|
ну так я этим сейчас и занимаюсь)
|
|||
167
ТутЯ
09.09.13
✎
15:16
|
(162) не очень большая таблица групп, но чтобы уменьшить время загрузки элементов групп можно сохранить именно готовые ссылки самих групп
|
|||
168
Odavid
09.09.13
✎
15:19
|
(167) вы че-то запутались.
Если эти группы уже есть в базе - вам остается только найти их посиком. Если нет - создавать новые. Какие еще "ссылки" и на что (и по какой базе) вы собрались сохранять перед загрузкой?? |
|||
169
ТутЯ
09.09.13
✎
15:19
|
(167) да и это уже не надо)
|
|||
170
ТутЯ
09.09.13
✎
15:20
|
запуталась, да, уже распуталась)
|
|||
171
ТутЯ
09.09.13
✎
15:20
|
(168) больше никаких
|
|||
172
z0001
09.09.13
✎
15:23
|
(170)алгоритм составь и закодь потом под замером производительности смотри как он работает и поймешь как быстрее а (168) с тобой скорее заигрывает чем вопрос решает )))
|
|||
173
ТутЯ
11.09.13
✎
13:41
|
Вопрос полностью закрыт. Записей оказалось не 2,5 а 11 млн и пришлось отказаться от загрузки в справочник. Придумалась структура из 2 рег сведений и дополнительной обработкой получилась загрузка на час. УРА! Спасибо, что подсказали как быть в случае когда много записей, буду иметь ввиду))).
|
|||
174
Odavid
13.09.13
✎
11:42
|
(172) ну что, только про троллей знаем, и больше ничего? развелось вас немеряно последние года....
(173) вот тут v8: Резко упала производительность 1С ЗУП я отписался именно о записи в справочник миллиона элементов - идет часами. 500 тыс - писало свыше 7 часов (почти 8). Миллион - пишет за 20 часов. Именно в SQL-варианте. В файловой DBF все идет совсем по-дургому. это не показатель... |
|||
175
badboychik
13.09.13
✎
12:04
|
Хранение больших объемов во внешней базе вполне нормальный вариант, почему нет? На прошлой работе в Firebird хранились данные о пластиковых окнах, замерах и т.д., данные формировала другая программа, а 1С читала и модифицировала некоторые поля, причем для пользователя выглядело как обычные справочники и документы
|
|||
176
Odavid
13.09.13
✎
12:27
|
(175)>>причем для пользователя выглядело как обычные справочники и документы
значит, все, что они так видели - хранилось и в 1С. |
|||
177
Odavid
13.09.13
✎
12:37
|
У кого-то миллион пишет за 14 часов.
Видимо, зависит от мощности серверов и космического излечения. Но это все - огромные временные периоды, совершенно недопустимые в промышленной БД. |
|||
178
Odavid
15.09.13
✎
10:26
|
Продолжаем тест.
Поиск среди 1 млн записей: прогонка 100 тыс записей - за 5-6 минут. Молодец SQL, и 1С, что не додумалась хотя б в поиск сунуть свои вездесущие "ноу-хау" (точнее, они есть в Справочник.НайтиПо<...>, но результат производительности, как видим, еще приемлем, - конечно, в критериях работы 1С, - хотя и тут находится на грани разумного). Запись 1 млн элементов - стала 16 часов. Видимо, SQL "дали возможность" определить "узкие" места, и начал работать SQL оптимизатор - кроме теста, на SQL ничего не запущено. |
|||
179
Odavid
16.09.13
✎
10:00
|
+ 1С сервер за сутки (пока гонял миллион туда-сюда) понаписал 50 Гб логов.
Так что будьте внимательны - места должно хватать и под логи, иначе вылетит. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |