|   |   | 
| 
 | 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) Но нужно для них иметь какой-то док-регистратор. Один док на всю братию пойдет?     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |