Имя: Пароль:
1C
1С v8
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 Гб логов.
Так что будьте внимательны - места должно хватать и под логи, иначе вылетит.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс