Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Хранение значений

v7: Хранение значений
Я
   Sima42
 
06.06.21 - 23:23
Добрый день. Возникла проблема у меня есть справочник у его есть подчинённый справочник. Я пытаюсь записать с документа 5000 строк (2 поля (число и строка 70 символов)), а это происходит ооооочень медленно. Структура такая меня устраивает но скорость просто ужас. Как это можно организовать не через справочник?
 
 Партнерская программа EFSOL Oblako
   Смотрящий
 
1 - 06.06.21 - 23:35
(0) Код покаж
   Злопчинский
 
2 - 07.06.21 - 01:22
(1) Автор застеснялся...
   victuan1
 
3 - 07.06.21 - 07:12
(0) НачатьТранзакцию()
ЗафиксироватьТранзакцию()

Через каждые, допустим, 500 элементов.
   ДенисЧ
 
4 - 07.06.21 - 07:40
(3) На скуле это не очень помогает
   Sima42
 
5 - 07.06.21 - 07:49
Процедура ЗагрузкаВСправочник()   
    ХранилищеКодов=СоздатьОбъект("Справочник.ХранилищеКодов"); 
    ХранилищеКодов.ИспользоватьВладельца(Наименование);
    ВыбратьСтроки();
    Пока ПолучитьСтроку()=1 цикл
        ХранилищеКодов.Новый();
        ХранилищеКодов.КодМ=КодыМ;
        ХранилищеКодов.Состояние=0; 
        ХранилищеКодов.Записать();
    КонецЦикла;
КонецПроцедуры
   trdm
 
6 - 07.06.21 - 07:50
(4) Прекрасно помогает.
   acanta
 
7 - 07.06.21 - 07:51
На семёрке был в инструкции рекомендуемый лимит на количество строк в документе.
   Андрей_Андреич
 
8 - 07.06.21 - 07:53
Процедура ЗагрузкаВСправочник()   
Счетчик=0;
НачатьТранзакцию();
    ХранилищеКодов=СоздатьОбъект("Справочник.ХранилищеКодов"); 
    ХранилищеКодов.ИспользоватьВладельца(Наименование);
    ВыбратьСтроки();
    Пока ПолучитьСтроку()=1 цикл
        ХранилищеКодов.Новый();
        ХранилищеКодов.КодМ=КодыМ;
        ХранилищеКодов.Состояние=0; 
        ХранилищеКодов.Записать();
Счетчик=Счетчик+1;
Если Счетчик >=500 Тогда
Счетчик=0;
ЗафиксироватьТранзакцию();
НачатьТранзакцию();
    КонецЦикла;
ЗафиксироватьТранзакцию();
КонецПроцедуры
   Андрей_Андреич
 
9 - 07.06.21 - 07:54
(8) Забыл КонецЕсли вставить
   acanta
 
10 - 07.06.21 - 07:54
А почему не оставить документ в покое если в нем все есть и при помощи адо получать из документа все что надо.
   Mikeware
 
11 - 07.06.21 - 07:56
(7) (10)  вы - бот?
вроде сообщения и "в контексте", но совершенно не в тему...
   acanta
 
12 - 07.06.21 - 07:58
Мне непонятно зачем нужны два справочника. Уточняю.
   Sima42
 
13 - 07.06.21 - 07:59
(8) Спасибо! Другое дело)
   Mikeware
 
14 - 07.06.21 - 08:00
(12) но причем тут лимит на количество строк в документе, и причем тут адо?
   Смотрящий
 
15 - 07.06.21 - 08:00
(13) ХранилищеКодов.ИспользоватьВладельца(Наименование); можешь убрать
после
ХранилищеКодов.Новый();
вставь
ХранилищеКодов.Владелец = Номенклатура;
   ДенисЧ
 
16 - 07.06.21 - 08:02
(15) Ага. И слови "код не уникальный" ))
   acanta
 
17 - 07.06.21 - 08:03
Код можно сделать длина 0 и забыть о нём.
   Смотрящий
 
18 - 07.06.21 - 08:04
(16) У него и та кне уникальные коды, судя по КодМ
Отключить код
   Sima42
 
19 - 07.06.21 - 08:07
(16) Мне код вообще не нужен
   acanta
 
20 - 07.06.21 - 08:12
(14) запись и проведение документа это транзакция, в которой нет возможности поделить по 500 строк. Можно замерить просто запись документа от 500 до 5000 и забыть о том для чего вообще нужна была транзакция (по частям хвостик рубить).
   acanta
 
21 - 07.06.21 - 08:16
Если sql есть, создать длп.индекс на поля и пилить запрос в sql к таб.части документа.
   МимохожийОднако
 
22 - 07.06.21 - 08:34
(0) Как вариант, создать несколько документов по 500 строк
   МимохожийОднако
 
23 - 07.06.21 - 08:36
Только не понятно, зачем из документа записывать данные в справочник. Или документ оставить в покое, беря информацию из него, или сразу писать в справочник данные, которые записаны в документ.
   Bigbro
 
24 - 07.06.21 - 08:38
поддержу (23)
зачем дублировать информацию в базе?
   acanta
 
25 - 07.06.21 - 08:40
А интерфейс с подчиненными справочниками в виде адо запросов это последний писк моды)
   MWWRuza
 
26 - 07.06.21 - 09:37
(8)
Если Счетчик >=500 Тогда
Счетчик=0;

А я обычно так делаю, в одно действие:
Если Счетчик%500 = 0 Тогда
   1Сергей
 
27 - 07.06.21 - 10:00
(23) (24) Это импровизированный РС :)
   Bigbro
 
28 - 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с это байт-код....
   Mikeware
 
33 - 07.06.21 - 16:37
(28) строки документа ты не проиндексируешь. со справочником попроще.
   ДенисЧ
 
34 - 07.06.21 - 16:38
(33) А что, с сегодняшнего дня доступ к скулю запрещён под угрозой расстрела?
   Bigbro
 
35 - 08.06.21 - 04:34
(33) зачем мне индексировать строки?
я получаю запросом сразу то что мне нужно по условию и все.
регулярная запись по 5000 элементов не предполагает перебор этих элементов - должны быть реквизиты по которым можно сделать отбор необходимых данных.
   acanta
 
36 - 08.06.21 - 04:44
Логично будет два справочника - владелец вместо шапки документа и подчиненный вместо табличной части. Тогда транзакция в любых объемах и проведение простая запись реквизита владельца. Любые индексы. И все бакапы sql.
   acanta
 
37 - 08.06.21 - 04:47
А пользователи в каком нибудь сайте или екселе пусть работают, документ 1с не работает в режиме запись построчно.
   acanta
 
38 - 08.06.21 - 04:54
Как это в sap/аксапте/фузине/дбф надо смотреть.
   acanta
 
39 - 08.06.21 - 05:02
Или независимый регистр сведений.
   acanta
 
40 - 08.06.21 - 05:28
А еще можно сделать редактирование независимого регистра сведений в форме документа. И пусть проводится без каких либо движений.
В любом случае, смысла заключать в транзакцию 5000 строк нет.
   Bigbro
 
41 - 08.06.21 - 07:29
какие в пень регистры сведений на 7ке
   Mikeware
 
42 - 08.06.21 - 09:18
(34) "день сегодня обычный, скоромный"©Жеглов
но те, кто может добавить индексы - обычно не задают таких вопросов, правда?
(35) затем, что запрос "в индексе" работает быстрее, чем запрос без индекса.
(41) эмуляция на справочниках.
   Злопчинский
 
43 - 08.06.21 - 12:06
регистры сведений в т.ч. эмулируются и на обычных регистрах без измерений, только с реквизитами
   victuan1
 
44 - 09.06.21 - 04:19
(43) Но нужно для них иметь какой-то док-регистратор. Один док на всю братию пойдет?


Список тем форума
 
Ошибка? Это не ошибка, это системная функция.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.