|
v7: Хранение значений | ☑ | ||
---|---|---|---|---|
0
Sima42
06.06.21
✎
23:23
|
Добрый день. Возникла проблема у меня есть справочник у его есть подчинённый справочник. Я пытаюсь записать с документа 5000 строк (2 поля (число и строка 70 символов)), а это происходит ооооочень медленно. Структура такая меня устраивает но скорость просто ужас. Как это можно организовать не через справочник?
|
|||
1
Смотрящий
06.06.21
✎
23:35
|
(0) Код покаж
|
|||
2
Злопчинский
07.06.21
✎
01:22
|
(1) Автор застеснялся...
|
|||
3
victuan1
07.06.21
✎
07:12
|
(0) НачатьТранзакцию()
ЗафиксироватьТранзакцию() Через каждые, допустим, 500 элементов. |
|||
4
ДенисЧ
07.06.21
✎
07:40
|
(3) На скуле это не очень помогает
|
|||
5
Sima42
07.06.21
✎
07:49
|
Процедура ЗагрузкаВСправочник()
ХранилищеКодов=СоздатьОбъект("Справочник.ХранилищеКодов"); ХранилищеКодов.ИспользоватьВладельца(Наименование); ВыбратьСтроки(); Пока ПолучитьСтроку()=1 цикл ХранилищеКодов.Новый(); ХранилищеКодов.КодМ=КодыМ; ХранилищеКодов.Состояние=0; ХранилищеКодов.Записать(); КонецЦикла; КонецПроцедуры |
|||
6
trdm
07.06.21
✎
07:50
|
(4) Прекрасно помогает.
|
|||
7
acanta
07.06.21
✎
07:51
|
На семёрке был в инструкции рекомендуемый лимит на количество строк в документе.
|
|||
8
Андрей_Андреич
naïve
07.06.21
✎
07:53
|
Процедура ЗагрузкаВСправочник()
Счетчик=0; НачатьТранзакцию(); ХранилищеКодов=СоздатьОбъект("Справочник.ХранилищеКодов"); ХранилищеКодов.ИспользоватьВладельца(Наименование); ВыбратьСтроки(); Пока ПолучитьСтроку()=1 цикл ХранилищеКодов.Новый(); ХранилищеКодов.КодМ=КодыМ; ХранилищеКодов.Состояние=0; ХранилищеКодов.Записать(); Счетчик=Счетчик+1; Если Счетчик >=500 Тогда Счетчик=0; ЗафиксироватьТранзакцию(); НачатьТранзакцию(); КонецЦикла; ЗафиксироватьТранзакцию(); КонецПроцедуры |
|||
9
Андрей_Андреич
naïve
07.06.21
✎
07:54
|
(8) Забыл КонецЕсли вставить
|
|||
10
acanta
07.06.21
✎
07:54
|
А почему не оставить документ в покое если в нем все есть и при помощи адо получать из документа все что надо.
|
|||
11
Mikeware
07.06.21
✎
07:56
|
(7) (10) вы - бот?
вроде сообщения и "в контексте", но совершенно не в тему... |
|||
12
acanta
07.06.21
✎
07:58
|
Мне непонятно зачем нужны два справочника. Уточняю.
|
|||
13
Sima42
07.06.21
✎
07:59
|
(8) Спасибо! Другое дело)
|
|||
14
Mikeware
07.06.21
✎
08:00
|
(12) но причем тут лимит на количество строк в документе, и причем тут адо?
|
|||
15
Смотрящий
07.06.21
✎
08:00
|
(13) ХранилищеКодов.ИспользоватьВладельца(Наименование); можешь убрать
после ХранилищеКодов.Новый(); вставь ХранилищеКодов.Владелец = Номенклатура; |
|||
16
ДенисЧ
07.06.21
✎
08:02
|
(15) Ага. И слови "код не уникальный" ))
|
|||
17
acanta
07.06.21
✎
08:03
|
Код можно сделать длина 0 и забыть о нём.
|
|||
18
Смотрящий
07.06.21
✎
08:04
|
(16) У него и та кне уникальные коды, судя по КодМ
Отключить код |
|||
19
Sima42
07.06.21
✎
08:07
|
(16) Мне код вообще не нужен
|
|||
20
acanta
07.06.21
✎
08:12
|
(14) запись и проведение документа это транзакция, в которой нет возможности поделить по 500 строк. Можно замерить просто запись документа от 500 до 5000 и забыть о том для чего вообще нужна была транзакция (по частям хвостик рубить).
|
|||
21
acanta
07.06.21
✎
08:16
|
Если sql есть, создать длп.индекс на поля и пилить запрос в sql к таб.части документа.
|
|||
22
Мимохожий Однако
07.06.21
✎
08:34
|
(0) Как вариант, создать несколько документов по 500 строк
|
|||
23
Мимохожий Однако
07.06.21
✎
08:36
|
Только не понятно, зачем из документа записывать данные в справочник. Или документ оставить в покое, беря информацию из него, или сразу писать в справочник данные, которые записаны в документ.
|
|||
24
Bigbro
07.06.21
✎
08:38
|
поддержу (23)
зачем дублировать информацию в базе? |
|||
25
acanta
07.06.21
✎
08:40
|
А интерфейс с подчиненными справочниками в виде адо запросов это последний писк моды)
|
|||
26
MWWRuza
гуру
07.06.21
✎
09:37
|
(8)
Если Счетчик >=500 Тогда Счетчик=0; А я обычно так делаю, в одно действие: Если Счетчик%500 = 0 Тогда |
|||
27
1Сергей
07.06.21
✎
10:00
|
(23) (24) Это импровизированный РС :)
|
|||
28
Bigbro
07.06.21
✎
10:26
|
я не уверен что от копирования информации из строк документа в справочник будет выгода.
если запросами строки документа дергать конечно. |
|||
29
Злопчинский
07.06.21
✎
13:24
|
(26) "Счетчик%500" - очень ресурсожрущая операция. когда объектов немного - то несущественно. если объектов много - то сравнение на пороговое значение дает ощутимый выигрыш
|
|||
30
ДедМорроз
07.06.21
✎
13:32
|
(29) просто,те кто имеют представление о работе процессора,помнят,что целочисленное деление - это одна команда процессора,но все забывают,что числа в 1с хранятся в достаточно странном виде,и все операции с ними идут через специальную библиотеку,а не напрямую.
Сравнение,кстати,тоже будет занимать не одну инструкцию процессора,но с ним проще. А на Си действительно Aint % Bint это одна команда процессора. |
|||
31
Злопчинский
07.06.21
✎
13:36
|
ну и попутно (ранее писал) массовые операции с периодическими значениями при использовании объекта "периодический" дают не менее 25% выигрыша
|
|||
32
Смотрящий
07.06.21
✎
15:06
|
(31) Все верно. Только 1с это байт-код....
|
|||
33
Mikeware
07.06.21
✎
16:37
|
(28) строки документа ты не проиндексируешь. со справочником попроще.
|
|||
34
ДенисЧ
07.06.21
✎
16:38
|
(33) А что, с сегодняшнего дня доступ к скулю запрещён под угрозой расстрела?
|
|||
35
Bigbro
08.06.21
✎
04:34
|
(33) зачем мне индексировать строки?
я получаю запросом сразу то что мне нужно по условию и все. регулярная запись по 5000 элементов не предполагает перебор этих элементов - должны быть реквизиты по которым можно сделать отбор необходимых данных. |
|||
36
acanta
08.06.21
✎
04:44
|
Логично будет два справочника - владелец вместо шапки документа и подчиненный вместо табличной части. Тогда транзакция в любых объемах и проведение простая запись реквизита владельца. Любые индексы. И все бакапы sql.
|
|||
37
acanta
08.06.21
✎
04:47
|
А пользователи в каком нибудь сайте или екселе пусть работают, документ 1с не работает в режиме запись построчно.
|
|||
38
acanta
08.06.21
✎
04:54
|
Как это в sap/аксапте/фузине/дбф надо смотреть.
|
|||
39
acanta
08.06.21
✎
05:02
|
Или независимый регистр сведений.
|
|||
40
acanta
08.06.21
✎
05:28
|
А еще можно сделать редактирование независимого регистра сведений в форме документа. И пусть проводится без каких либо движений.
В любом случае, смысла заключать в транзакцию 5000 строк нет. |
|||
41
Bigbro
08.06.21
✎
07:29
|
какие в пень регистры сведений на 7ке
|
|||
42
Mikeware
08.06.21
✎
09:18
|
(34) "день сегодня обычный, скоромный"©Жеглов
но те, кто может добавить индексы - обычно не задают таких вопросов, правда? (35) затем, что запрос "в индексе" работает быстрее, чем запрос без индекса. (41) эмуляция на справочниках. |
|||
43
Злопчинский
08.06.21
✎
12:06
|
регистры сведений в т.ч. эмулируются и на обычных регистрах без измерений, только с реквизитами
|
|||
44
victuan1
09.06.21
✎
04:19
|
(43) Но нужно для них иметь какой-то док-регистратор. Один док на всю братию пойдет?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |