|
v8: Есть плохая идея. Что скажете? | ☑ | ||
---|---|---|---|---|
0
ТутЯ
09.09.13
✎
11:19
|
1с8.2 Управляемые формы. Самописанная конфигурация.
Есть справочник "Работы". Есть большая таблица значений 2,5 млн записей(группы и элементы). Задача: загрузить таблицу значений в справочник. Проблема: Средствами 1с очень долго. Вопросы: Какие есть решения проблемы? Можно ли грузить прямо в СКЛ таблицы? Смотрю ПолучитьСтруктуруХраненияБазыДанных - все понятно. Смотрю на таблицы - не понятно как формируется код ссылки. |
|||
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 Гб логов.
Так что будьте внимательны - места должно хватать и под логи, иначе вылетит. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |