Сколько должна "весить" база с 20000 позиций номенклатуры
Приветствую.
Есть база (1С Розница) пустая. Есть excel таблица на 20000 наименований товаров, в таблице лишь две колонки - Наименование и штрихкод.
Написал обработку, которая эту таблицу считывает и создает номенклатуру и штрихкод.
Каково было мое удивление, когда на остававшиеся на диске 50гб база не поместилась!
В связи с этим вопрос - это вообще нормально ?
Есть база (1С Розница) пустая. Есть excel таблица на 20000 наименований товаров, в таблице лишь две колонки - Наименование и штрихкод.
Написал обработку, которая эту таблицу считывает и создает номенклатуру и штрихкод.
Каково было мое удивление, когда на остававшиеся на диске 50гб база не поместилась!
В связи с этим вопрос - это вообще нормально ?
По теме из базы знаний
Найденные решения
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(12)Вы оказались правы. Моя обработка не причем. Что я сделал:
1)Открыл папку с базой и скопировал оттуда файл CD. Вся папка весит 40 с чем то Гб. Однако файл CD - 570 мб примерно.
2) Вставил скопированный CD файл в пустую папку.
3) Подключился к ней. Все работает как надо и папка с базой весит теперь 590 мб)).
1)Открыл папку с базой и скопировал оттуда файл CD. Вся папка весит 40 с чем то Гб. Однако файл CD - 570 мб примерно.
2) Вставил скопированный CD файл в пустую папку.
3) Подключился к ней. Все работает как надо и папка с базой весит теперь 590 мб)).
(25) в ЖР у вас писалось все, что происходило - т.е., грубо говоря, по несколько десятков операций на каждую позицию. Вот он и разросся до огромных размеров.
Удалите ЖР, он навряд ли вам нужен (ну или заархивируйте, если планируете там что-то смотреть в дальнейшем), 1С новый создаст новый.
Удалите ЖР, он навряд ли вам нужен (ну или заархивируйте, если планируете там что-то смотреть в дальнейшем), 1С новый создаст новый.
&НаСервереБезКонтекста
Процедура ВыбериФайлНачалоВыбораНаСервере(Наименование, Штрихкод)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Штрихкоды.Владелец,
| Штрихкоды.Штрихкод
|ИЗ
| РегистрСведений.Штрихкоды КАК Штрихкоды
|ГДЕ
| Штрихкоды.Штрихкод = &Штрихкод";
Запрос.УстановитьПараметр("Штрихкод", Штрихкод);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
НоваяНоменклатура.Наименование = Наименование;
НоваяНоменклатура.НаименованиеПолное = Наименование;
НоваяНоменклатура.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
НоваяНоменклатура.СтавкаНДС = Справочники.СтавкиНДС.НайтиПоНаименованию("БезНДС");
НоваяНоменклатура.Записать();
Набор = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
Набор.Прочитать();
НовыйШтрихКод = Набор.Добавить();
НовыйШтрихКод.Владелец = НоваяНоменклатура.Ссылка;
НовыйШтрихКод.Штрихкод = Штрихкод;
НовыйШтрихКод.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
Набор.Записать();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыбериФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим);
Фильтр = "Таблица, *.xlsx|*.xlsx";
ДиалогОткрытия.Фильтр = Фильтр;
ДиалогОткрытия.МножественныйВыбор = ЛОЖЬ;
ДиалогОткрытия.Заголовок = "выбери файл";
Если ДиалогОткрытия.Выбрать() Тогда
ИмяФайла = ДиалогОткрытия.ПолноеИмяФайла;
КонецЕсли;
Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(ИмяФайла);
Состояние("Обработка файла Microsoft Excel...");
Исключение
Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Попытка
//Открываем необходимый лист
Excel.Sheets(1).Select(); // лист 1, по умолчанию
Исключение
//Закрываем Excel
Excel.ActiveWorkbook.Close();
Excel = 0;
Сообщить("Файл "+Строка(ИмяФайла)+" не соответствует необходимому формату! Первый лист не найден!");
//ОтменитьТранзакцию();
Возврат;
КонецПопытки;
//Получим количество строк и колонок.
//В разных версиях Excel получаются по-разному, поэтому сначала определим версию Excel
Версия = Лев(Excel.Version,Найти(Excel.Version,".")-1);
Если Версия = "8" тогда
ФайлСтрок = Excel.Cells.CurrentRegion.Rows.Count;
ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);
Иначе
ФайлСтрок = Excel.Cells(1,1).SpecialCells(11).Row;
ФайлКолонок = Excel.Cells(1,1).SpecialCells(11).Column;
Конецесли;
Для НС = 2 по ФайлСтрок Цикл // НС указываем с какой строки начинать обработку
Состояние("Файл "+Строка(ИмяФайла)+": Обрабатывается первый лист "+Строка(Формат(?(ФайлСтрок=0,0,((100*НС)/ФайлСтрок)),"ЧЦ=3; ЧДЦ=0"))+" %");
ОбработкаПрерыванияПользователя(); //указав данный оператор, цикл можно прервать в любой момент нажатие ctrl+break
ЭтоШтрихКод = Excel.Cells(НС, 4).Text;
ЭтоНаименование = Excel.Cells(НС, 2).Text;
ДлинаНаименования = СтрДлина(ЭтоНаименование);
//Счетчик = ДлинаНаименования;
НайтиРазделение = СтрНайти(ЭтоНаименование,"/", НаправлениеПоиска.СКонца);
ПростоНаименование = Сред(ЭтоНаименование,НайтиРазделение+1, ДлинаНаименования - НайтиРазделение);
ВыбериФайлНачалоВыбораНаСервере(ПростоНаименование, ЭтоШтрихКод);
КонецЦикла;
Excel.DisplayAlerts = 0;
Excel.Quit();
Excel.DisplayAlerts = 1;
КонецПроцедуры
ПоказатьВот что я там писал.
(17)Может штрих коды с отбором читать?
Набор = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
Набор.Отбор.Владелец.Установить(НоваяНоменклатура.Ссылка);
Набор.Отбор.Штрихкод.Установить(Штрихкод);
Набор.Отбор.ТипШтрихкода.Установить(ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13);
Набор.Прочитать();
Если Набор.Количество() = 0 Тогда
НовыйШтрихКод = Набор.Добавить();
Набор.Записать();
КонецЕсли;
Показать
(32)Я же написал.
Набор = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
Набор.Отбор.Владелец.Установить(НоваяНоменклатура.Ссылка);
Набор.Отбор.Штрихкод.Установить(Штрихкод);
Набор.Отбор.ТипШтрихкода.Установить(ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13);
Набор.Прочитать();
Если Набор.Количество() = 0 Тогда
НовыйШтрихКод = Набор.Добавить();
Набор.Записать();
КонецЕсли;
Показать
(17)
Обратите внимание, что вы чтобы добавить 1 запись в регистр сведений читаете весь набор записей, сколько бы их там ни было, добавляете в него 1 запись и весь записываете. 20000 раз.
Не надо так.
Либо устанавливайте отбор по измерениям РС в наборе, либо используйте Менеджер записи.
П.С. Возможно поэтому у вас так и разросся журнал регистрации.
Обратите внимание, что вы чтобы добавить 1 запись в регистр сведений читаете весь набор записей, сколько бы их там ни было, добавляете в него 1 запись и весь записываете. 20000 раз.
Набор = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
Набор.Прочитать();
НовыйШтрихКод = Набор.Добавить();
НовыйШтрихКод.Владелец = НоваяНоменклатура.Ссылка;
НовыйШтрихКод.Штрихкод = Штрихкод;
НовыйШтрихКод.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
Набор.Записать();
Набор.Прочитать();
НовыйШтрихКод = Набор.Добавить();
НовыйШтрихКод.Владелец = НоваяНоменклатура.Ссылка;
НовыйШтрихКод.Штрихкод = Штрихкод;
НовыйШтрихКод.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
Набор.Записать();
Не надо так.
Либо устанавливайте отбор по измерениям РС в наборе, либо используйте Менеджер записи.
П.С. Возможно поэтому у вас так и разросся журнал регистрации.
(41) Используйте синткакс помощник, в этом нет ничего сложного.
РегистрСведенийМенеджерЗаписи.<Имя регистра сведений> (InformationRegisterRecordManager.<Имя регистра сведений>)
Свойства:
<Имя измерения> (<Dimension name>)
<Имя общего реквизита> (<Common attribute name>)
<Имя реквизита> (<Attribute name>)
<Имя ресурса> (<Resource name>)
Период (Period)
Методы:
Выбран (Selected)
Записать (Write)
Заполнить (Fill)
Модифицированность (Modified)
ПолучитьФорму (GetForm)
Прочитать (Read)
Удалить (Delete)
Описание:
Позволяет читать, записывать и удалять отдельную запись регистра сведений. Используется только для регистров сведений, неизменяемых регистраторами, т.е. для которых в Конфигураторе установлен режим записи "Независимый".
Предназначен для интерактивной работы с записью регистра сведений.
Доступ (чтение и запись) к записям регистра сведений производится объектом РегистрСведенийНаборЗаписей.<Имя регистра сведений> на системном уровне. При этом, в общем случае, используются два набора записей: один предназначен для удаления "старой" записи, другой - для записи данных, определенных менеджером записи. Это проявляется, например, в том, что при выполнении записи могут дважды вызываться события ПередЗаписью и ПриЗаписи объекта РегистрСведенийНаборЗаписей.<Имя регистра сведений>, сначала для пустого набора записей удаляющего "старую" запись, а затем для набора записей с новыми данными.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Пример:
Курс = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
Курс.Валюта = ВыбВалюта;
Курс.Период = ТекущаяДата();
Курс.Прочитать();
Если Не Курс.Выбран() Тогда
Курс.Период = ТекущаяДата();
Курс.Валюта = ВыбВалюта;
Курс.Курс = 41.35;
Курс.Кратность = 1;
КонецЕсли;
Если ВвестиЧисло(Курс.Курс, "Введите курс на сегодня",15,5) Тогда
Курс.Записать();
КонецЕсли;
ПоказатьСвойства:
<Имя измерения> (<Dimension name>)
<Имя общего реквизита> (<Common attribute name>)
<Имя реквизита> (<Attribute name>)
<Имя ресурса> (<Resource name>)
Период (Period)
Методы:
Выбран (Selected)
Записать (Write)
Заполнить (Fill)
Модифицированность (Modified)
ПолучитьФорму (GetForm)
Прочитать (Read)
Удалить (Delete)
Описание:
Позволяет читать, записывать и удалять отдельную запись регистра сведений. Используется только для регистров сведений, неизменяемых регистраторами, т.е. для которых в Конфигураторе установлен режим записи "Независимый".
Предназначен для интерактивной работы с записью регистра сведений.
Доступ (чтение и запись) к записям регистра сведений производится объектом РегистрСведенийНаборЗаписей.<Имя регистра сведений> на системном уровне. При этом, в общем случае, используются два набора записей: один предназначен для удаления "старой" записи, другой - для записи данных, определенных менеджером записи. Это проявляется, например, в том, что при выполнении записи могут дважды вызываться события ПередЗаписью и ПриЗаписи объекта РегистрСведенийНаборЗаписей.<Имя регистра сведений>, сначала для пустого набора записей удаляющего "старую" запись, а затем для набора записей с новыми данными.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Пример:
Курс = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
Курс.Валюта = ВыбВалюта;
Курс.Период = ТекущаяДата();
Курс.Прочитать();
Если Не Курс.Выбран() Тогда
Курс.Период = ТекущаяДата();
Курс.Валюта = ВыбВалюта;
Курс.Курс = 41.35;
Курс.Кратность = 1;
КонецЕсли;
Если ВвестиЧисло(Курс.Курс, "Введите курс на сегодня",15,5) Тогда
Курс.Записать();
КонецЕсли;
(3)Обработка делает запрос (он в цикле. да да, это кака, но вот так вот) к регистру штрихкодов, если там ничего не находит, то создает элемент справочника и штрихкод. Все.
Там есть еще код, который от наименования отсекает не нужные мне части, оставляя чисто наименование.
Там есть еще код, который от наименования отсекает не нужные мне части, оставляя чисто наименование.
При наличии непонятных ошибок задачу нужно упрощать и решать по частям.
Самым простым решением было бы сначала добавить например всего 200 наименований и посмотреть как работает.
Потом попробовать добавить 1000 наименований и так далее.
Кроме того отладкой пользоваться никто вам наверное не запрещает :)
Самым простым решением было бы сначала добавить например всего 200 наименований и посмотреть как работает.
Потом попробовать добавить 1000 наименований и так далее.
Кроме того отладкой пользоваться никто вам наверное не запрещает :)
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)