Переключение на Главную Страницу Страницы: [1] 2 3 4 ОтправитьПечать
Очень популярная тема (более 25 ответов) Массовый ввод элементов справочников?? (число прочтений - 17173 )
Programmer_1c
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 21. Декабря 2006
Массовый ввод элементов справочников??
21. Декабря 2006 :: 07:29
Печать  
Такой вопрос, есть задача по массовому вводу сведений в справочники, можно ускорить такую задачу с помощью 1срр? Сейчас ввод порядка 9500 тысяч записей занимает около часа ;-((((

Тут на форуме прочитал, что можно выборку делать быстро, а про ввод сведений вроде нет ничего

Спасибо за внимание
  
Наверх
 
IP записан
 
Programmer_1c
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 21. Декабря 2006
Re: Массовый ввод элементов справочников??
Ответ #1 - 21. Декабря 2006 :: 07:45
Печать  
то ли вопрос неправильно задал, то ли такое невозможно?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Массовый ввод элементов справочников??
Ответ #2 - 21. Декабря 2006 :: 07:59
Печать  
почитай в доке про SQLLock
  

1&&2&&3
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Массовый ввод элементов справочников??
Ответ #3 - 21. Декабря 2006 :: 08:05
Печать  
Я бы вообще не стал такое делать прямыми запросами, мне кажется можно наступить на очень большие грабли.
Понимаю, когда надо, например, обновить реквизиты, которые нигде больше не используются (счета, регистры...)
Конечно, может я ещё очень слаб в этом деле, но это моё ИМХО и оно таково: "лучше подожду часочек"
  
Наверх
 
IP записан
 
Programmer_1c
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 21. Декабря 2006
Re: Массовый ввод элементов справочников??
Ответ #4 - 21. Декабря 2006 :: 08:21
Печать  
JohnyDeath писал(а) 21. Декабря 2006 :: 08:05:
Я бы вообще не стал такое делать прямыми запросами, мне кажется можно наступить на очень большие грабли.
Понимаю, когда надо, например, обновить реквизиты, которые нигде больше не используются (счета, регистры...)
Конечно, может я ещё очень слаб в этом деле, но это моё ИМХО и оно таково: "лучше подожду часочек"


ну часочек или полтора - это на порядка 9000 записей, а у меня их будет около 60000 одномоменто
в итоге получится где-то 10,5 часов   Плачущий
  
Наверх
 
IP записан
 
Programmer_1c
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 21. Декабря 2006
Re: Массовый ввод элементов справочников??
Ответ #5 - 21. Декабря 2006 :: 08:32
Печать  
и еще не могу найти в документации ничего по поводу регистрации самой библиотеки  Плачущий

киньте ссылкой, если можно,pls
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Массовый ввод элементов справочников??
Ответ #6 - 21. Декабря 2006 :: 08:37
Печать  
Programmer_1c писал(а) 21. Декабря 2006 :: 08:32:
и еще не могу найти в документации ничего по поводу регистрации самой библиотеки  Плачущий

киньте ссылкой, если можно,pls

Просто в глобальнике при загрузки 1С пиши: ЗагрузитьВнешнююКомпоненту(ПутьК1срр);
  
Наверх
 
IP записан
 
Programmer_1c
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 21. Декабря 2006
Re: Массовый ввод элементов справочников??
Ответ #7 - 21. Декабря 2006 :: 08:38
Печать  
JohnyDeath писал(а) 21. Декабря 2006 :: 08:37:
Programmer_1c писал(а) 21. Декабря 2006 :: 08:32:
и еще не могу найти в документации ничего по поводу регистрации самой библиотеки  Плачущий

киньте ссылкой, если можно,pls

Просто в глобальнике при загрузки 1С пиши: ЗагрузитьВнешнююКомпоненту(ПутьК1срр);


а разве в реестре ее как-то не надо прописывать? только положить куда-то и все?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Массовый ввод элементов справочников??
Ответ #8 - 21. Декабря 2006 :: 08:56
Печать  
Programmer_1c писал(а) 21. Декабря 2006 :: 08:38:
а разве в реестре ее как-то не надо прописывать? только положить куда-то и все?

при загрузке внешней компоненты регистрация в реестре делается сама
  

1&&2&&3
Наверх
 
IP записан
 
Programmer_1c
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 21. Декабря 2006
Re: Массовый ввод элементов справочников??
Ответ #9 - 21. Декабря 2006 :: 09:02
Печать  
trad писал(а) 21. Декабря 2006 :: 07:59:
почитай в доке про SQLLock


спасибо, читаю
  
Наверх
 
IP записан
 
Programmer_1c
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 21. Декабря 2006
Re: Массовый ввод элементов справочников??
Ответ #10 - 21. Декабря 2006 :: 09:06
Печать  
trad писал(а) 21. Декабря 2006 :: 08:56:
Programmer_1c писал(а) 21. Декабря 2006 :: 08:38:
а разве в реестре ее как-то не надо прописывать? только положить куда-то и все?

при загрузке внешней компоненты регистрация в реестре делается сама


спасибо, буду пробовать работать с ней
о впечатлениях расскажу позже  Улыбка
  
Наверх
 
IP записан
 
Programmer_1c
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 21. Декабря 2006
Re: Массовый ввод элементов справочников??
Ответ #11 - 21. Декабря 2006 :: 12:49
Печать  
Появились впечатления, рассказываю
Вот такой пример из документации не работает ;-(

//Пример создания элементов справочника:
Процедура ВыполнитьЗапрос(Запрос,Текст = "")
    Перем Рез;
    Если ПустаяСтрока(Текст)=1 Тогда
       Рез=Запрос.Выполнить();
    Иначе
       Рез=Запрос.Выполнить(Текст);
    КонецЕсли;
    Если Рез=0 Тогда
       ВыполняемыйМодуль=СоздатьОбъект("ВыполняемыйМодуль");
       ВыполняемыйМодуль.СформироватьОшибку(Запрос.ПолучитьОписаниеОшибки());
    КонецЕсли;
КонецПроцедуры
//*********************************
Процедура ПодготовитьЗапрос(Запрос,Текст)
    Если Запрос.Подготовить(Текст)=0 Тогда
       ВыполняемыйМодуль=СоздатьОбъект("ВыполняемыйМодуль");
       ВыполняемыйМодуль.СформироватьОшибку(Запрос.ПолучитьОписаниеОшибки());
    КонецЕсли;
КонецПроцедуры
//*********************************
Процедура ДобавитьПараметр(Запрос,Тип,Длина,Точность)
    Если Запрос.ДобПараметр(1,Тип,Длина,Точность)=0 Тогда
       ВыполняемыйМодуль=СоздатьОбъект("ВыполняемыйМодуль");
       ВыполняемыйМодуль.СформироватьОшибку(Запрос.ПолучитьОписаниеОшибки());
    КонецЕсли;
КонецПроцедуры
//*********************************
Процедура ПробнаяЗагрузка()
    СпрКА=СоздатьОбъект("Справочник.Контрагенты");
    Запрос=СоздатьОбъект("ODBCRecordset");
    БлокировкаКонтрагенты=СоздатьОбъект("SQLLock");
    БлокировкаКонтрагенты.УстановитьТипОбъекта("Справочник","Контрагенты");
    БлокировкаКонтрагенты.УстановитьТаймаут(10);
     
    ФлагУдачи=0;
    Пока ФлагУдачи=0 Цикл
       Попытка
           ВыполнитьЗапрос(Запрос,"begin tran");
           ПодготовитьЗапрос(Запрос,"insert $Справочник.Контрагенты values(?ID, '     0   ', ?Код, ?Наименование, 2, 0, 0, '')");
           ДобавитьПараметр(Запрос, 14, 9, 0);
           ДобавитьПараметр(Запрос, 14, 6, 0);
           ДобавитьПараметр(Запрос, 14, 100, 0);
           Для Тек=1 По 10 Цикл
               Запрос.УстПараметр("ID",БлокировкаКонтрагенты.НовыйИД());
               Запрос.УстПараметр("Код",БлокировкаКонтрагенты.НовыйКод());
               Запрос.УстПараметр("Наименование","Сгенерированный в SQL транзакции "+Тек);
               ВыполнитьЗапрос(Запрос);
           КонецЦикла;
           ВыполнитьЗапрос(Запрос,"if @@trancount > 0 commit tran");
           ФлагУдачи=1;
       Исключение
           Запрос.Выполнить("if @@trancount > 0 rollback tran");
           Если ОписаниеОшибки()="LockTimeoutExpired" Тогда
               Если Вопрос("Не удалось заблокировать справочник Контрагенты!Повторить попытку?","ОК+Отмена")="Отмена" Тогда
                   ФлагУдачи=2;
               КонецЕсли;
           Иначе
               ВызватьИсключение;
           КонецЕсли;
       КонецПопытки;
    КонецЦикла;
КонецПроцедуры

ругается на

ВыполняемыйМодуль.СформироватьОшибку(Запрос.ПолучитьОписаниеОшибки());
{Документ.Такой-То(478)}: State 22001, native 0, message [Microsoft][ODBC SQL Server Driver]String data, right truncation

  
Наверх
 
IP записан
 
Programmer_1c
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 21. Декабря 2006
Re: Массовый ввод элементов справочников??
Ответ #12 - 21. Декабря 2006 :: 12:49
Печать  
Что я не так делаю?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Массовый ввод элементов справочников??
Ответ #13 - 21. Декабря 2006 :: 12:55
Печать  
длина Кода элемента справочника какова?
  

1&&2&&3
Наверх
 
IP записан
 
Programmer_1c
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 24
Зарегистрирован: 21. Декабря 2006
Re: Массовый ввод элементов справочников??
Ответ #14 - 21. Декабря 2006 :: 13:21
Печать  
тоже так подумал изменил, не помогло
правда у меня количество полей больше, чем указано через запятую, в строчке

"insert $Справочник.Контрагенты values(?ID, '     0   ', ?Код, ?Наименование, 2, 0, 0 )"
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 4
ОтправитьПечать