Консультация № 150080
10.11.2008, 11:23
0.00 руб.
0 8 2
Здравствуйте, люди добрые!
Возникла такая проблема: использую универсальную программу для загрузки-выгрузки справочников. Выгружает хорошо, а вот при загрузке размер индексного файла доходит до 2ГБ и выдает ошибку. Сейчас пробую загрузить справочник кусками, но опять же: я занесла 1/8 справочника, а размер индексного файла уже 1.65 ГБ. Возможно ли как-нибудь уменьшить размер файла? И почему размер такой большой, ведь из базы, из которой выгружала справочник, размер этого файла около 77 МБ.
Заранее спасибо!

Обсуждение

Неизвестный
10.11.2008, 11:34
общий
08.09.2009, 18:55
это ответ
Здравствуйте, Evgesha!
Попробуйте разбить справочник так, как он лежит в 1С.
В первый фаил скинь выгрузите только коды и наименования, в остальные скинь выгрузите справочные коды и остальную информацию. Чем часче чаще ты Вы будеш будете делить, тем меньше будут фаилы. Да, можно создать связаные справочники с этим справочником.
Неизвестный
10.11.2008, 12:13
общий
Я выгрузила справочник в некий текстовый файл и в нем инфо хранится построчно. 1 строка - один товар с кодом, названием, реквизитами. Поэтому я не вижу возможности закачать сначала коды, а потом остальную инфо. Зато я могу загружать порциями, например по 1000 товаров.
Повлияет ли на размер файла, если я буду закачивать по 1.000 товаров, а не по 10.000? (всего строк 120.000).
Неизвестный
10.11.2008, 12:49
общий
это ответ
Здравствуйте, Evgesha!

Файлы индексов при переносе растут из-за того, что Вы пытаетесь запистаь весь справочник в одной транзакции. У меня была такая проблема на справочнике Номенклатура (в 15000 элементов + 2 подчиненных спраовчников единиц и цен). Первые 2-3 тысячи элемнтов записывались сравнительно шустро, минут за 15-20, но потом время записи каждого последующего элемента возрастало прямопропорционально количеству записанных. Доходило до того, что весь перенос длился часов 10 (точно не помню). Индексы тоже росли (когда прерывал процесс и смотрел, что у меня с файлами).

Как вылечил: добавил счетчик транзакций и каждые 100 элементов фиксировал транзакцию. Пример - в Приложении. Теперь этот же самый перенос (все справочники!!! + остатки) занимает около 2 часов.

Успехов!
С уважением, Владимир.

Приложение:
Пример. Переменная СчетчикТранзакций у меня задается на форме, при открытии ей присваивается значение 100.

//_____________________________________________________________________________
//
Процедура ПереносСправочникаНоменклатура()
Перем Счетчик; // счетчик транзакций внутри цикла
Состояние("Заполнение справочника товары в "+ТекущееВремя());
НачатьТранзакцию();
Счетчик = 0;
...
...
//Цикл загрузки справочника:
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Счетчик = Счетчик+1;
Если Счетчик = СчетчикТранзакций Тогда // Вот здесь фиксируем предыдущую транзакцию и открываем новую.
ЗафиксироватьТранзакцию();
НачатьТранзакцию();
КонецЕсли;
//_____________________________________________________________________________
//
// здесь дальше цикл загрузки элементов справочника
//_____________________________________________________________________________
...
...
...
КонецЦикла;
ЗафиксироватьТранзакцию();
Сообщить(Строка(ТекущееВремя())+" Перенесены товары");
КонецПроцедуры // ПереносСправочникаНоменклатура()
//_____________________________________________________________________________
//
Неизвестный
10.11.2008, 14:38
общий
Владимир!
У меня в коде есть такие строчки:
КоличествоСтрок = КоличествоСтрок+1;
Если КоличествоСтрок%50 = 0 Тогда
Состояние(Предст+КоличествоСтрок);
ЗафиксироватьТранзакцию();
НачатьТранзакцию();
КонецЕсли;

Это случайно не тоже сомае, что Вы предлагаете?
Неизвестный
10.11.2008, 15:28
общий
Ну да, то же самое... Я когда писал ответ не знал Вашего кода или обработки... Пробуйте "загружать порциями" - после нескольких таких загрузок нужно будет реиндексировать базу - тогда индексы уменьшатся.
Неизвестный
10.11.2008, 15:33
общий
Спасибо! Попробую!
А где мне найти реиндексацию в 1С? Я только видела, как она предлагается, когда система завершается аварийно.
Неизвестный
10.11.2008, 16:07
общий
В Конфигураторе главное меню => Администрирование => Тестирование и исправление ИБ. Выключети все флажки, кроме "Реиндексация ИБ" и нажмите ОК. Делается это, если нет ни одного сеанса этой базы в пользователдьском режиме. По-русски - если никто "не вошел в базу".
Неизвестный
11.11.2008, 10:56
общий
Ясно. Спасибо большое!!!
Форма ответа