Сколько должна "весить" база с 20000 позиций номенклатуры

1. ResAndDev 19.09.18 15:12 Сейчас в теме
Приветствую.

Есть база (1С Розница) пустая. Есть excel таблица на 20000 наименований товаров, в таблице лишь две колонки - Наименование и штрихкод.

Написал обработку, которая эту таблицу считывает и создает номенклатуру и штрихкод.

Каково было мое удивление, когда на остававшиеся на диске 50гб база не поместилась!
В связи с этим вопрос - это вообще нормально ?
По теме из базы знаний
Найденные решения
14. Sashares 34 19.09.18 17:50 Сейчас в теме
(13)Так посмотрите, что в папке.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Doreng 27 19.09.18 15:19 Сейчас в теме
(1)
В связи с этим вопрос - это вообще нормально ?

Нет, это не нормально...в студию код своей обработки :-), похоже кеш у Вас все сожрал...так как вы подключаетесь экселем
4. Fox-trot 158 19.09.18 16:46 Сейчас в теме
(1)видимо про итератор забыл, вот оно и лупило до бесконечности
8. ResAndDev 19.09.18 17:38 Сейчас в теме
(4)Результат работы такой, какой мне надо. Итератор там просто количество строк. Они создаются.
7. herfis 499 19.09.18 16:52 Сейчас в теме
(1) Ну, если MSSQL и для базы установлен рост с шагом в 50 гб - то нормально.
9. ResAndDev 19.09.18 17:39 Сейчас в теме
(7)База обыкновенная - файловая.
12. Sashares 34 19.09.18 17:44 Сейчас в теме
(9)То есть у вас файл 1CD 50 гб или что именно 50гб? С чего вы решили что база не поместилась?
Может вам выдало ошибку "Недостаточно памяти" или что-то подобное?
13. ResAndDev 19.09.18 17:48 Сейчас в теме
(12)Нет, я смотрел объем всей папки 1с. Обработка не смогла закончить работу, так как закончилось место на диске.
14. Sashares 34 19.09.18 17:50 Сейчас в теме
(13)Так посмотрите, что в папке.
25. ResAndDev 20.09.18 06:25 Сейчас в теме
(12)Вы оказались правы. Моя обработка не причем. Что я сделал:
1)Открыл папку с базой и скопировал оттуда файл CD. Вся папка весит 40 с чем то Гб. Однако файл CD - 570 мб примерно.

2) Вставил скопированный CD файл в пустую папку.
3) Подключился к ней. Все работает как надо и папка с базой весит теперь 590 мб)).
26. collider 20.09.18 07:46 Сейчас в теме
(25) Но всё равно было бы лучше убрать из цикла вызов сервера.
27. ResAndDev 20.09.18 07:49 Сейчас в теме
(26)знаю что это плохо. Но эта обработка одноразовая. А другие способы я пока только изучаю.
30. Sashares 34 20.09.18 09:55 Сейчас в теме
(25) Вероятно у вас большого размера был файл журнала регистрации.
40. AlexO 135 20.09.18 12:24 Сейчас в теме
(25) в ЖР у вас писалось все, что происходило - т.е., грубо говоря, по несколько десятков операций на каждую позицию. Вот он и разросся до огромных размеров.
Удалите ЖР, он навряд ли вам нужен (ну или заархивируйте, если планируете там что-то смотреть в дальнейшем), 1С новый создаст новый.
17. ResAndDev 19.09.18 17:57 Сейчас в теме
&НаСервереБезКонтекста
Процедура ВыбериФайлНачалоВыбораНаСервере(Наименование, Штрихкод)
	
	   	
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Штрихкоды.Владелец,
		|	Штрихкоды.Штрихкод
		|ИЗ
		|	РегистрСведений.Штрихкоды КАК Штрихкоды
		|ГДЕ
		|	Штрихкоды.Штрихкод = &Штрихкод";
	
	Запрос.УстановитьПараметр("Штрихкод", Штрихкод);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Если РезультатЗапроса.Пустой() Тогда
		НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
		НоваяНоменклатура.Наименование = Наименование;
		НоваяНоменклатура.НаименованиеПолное = Наименование;
		НоваяНоменклатура.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
		НоваяНоменклатура.СтавкаНДС = Справочники.СтавкиНДС.НайтиПоНаименованию("БезНДС");
		НоваяНоменклатура.Записать();
		
		Набор = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
		
		Набор.Прочитать();
		НовыйШтрихКод = Набор.Добавить();
		
		НовыйШтрихКод.Владелец = НоваяНоменклатура.Ссылка;
		НовыйШтрихКод.Штрихкод = Штрихкод;
		НовыйШтрихКод.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.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;
	
КонецПроцедуры
Показать


Вот что я там писал.
21. user705522_constantin_h 35 19.09.18 19:47 Сейчас в теме
(17)Может штрих коды с отбором читать?
        Набор = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
        Набор.Отбор.Владелец.Установить(НоваяНоменклатура.Ссылка);
        Набор.Отбор.Штрихкод.Установить(Штрихкод);
        Набор.Отбор.ТипШтрихкода.Установить(ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13);
        Набор.Прочитать();
        Если Набор.Количество() = 0 Тогда
                НовыйШтрихКод = Набор.Добавить();
                Набор.Записать();
        КонецЕсли;
Показать
22. Fox-trot 158 19.09.18 20:23 Сейчас в теме
(21) так если без владельца не нашлось, почему найдется с владельцем?
23. user705522_constantin_h 35 20.09.18 00:00 Сейчас в теме
(22)Я думаю, как раз не найдётся, но перезаписывается не весь регистр сведений, а только дописываются новые данные.
24. ResAndDev 20.09.18 06:05 Сейчас в теме
(22)Я знаю про отборы. Однако штрихкод ведь создается в этот момент в Наборе. Отбор ничего не найдет. Проверял.
28. user705522_constantin_h 35 20.09.18 09:18 Сейчас в теме
(24)Просто вы читаете и записываете весь регистр целиком. А можно только добавлять новые записи.
32. ResAndDev 20.09.18 10:27 Сейчас в теме
(28)можете дать пример кода ?
35. user705522_constantin_h 35 20.09.18 12:04 Сейчас в теме
(32)Я же написал.
        Набор = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
        Набор.Отбор.Владелец.Установить(НоваяНоменклатура.Ссылка);
        Набор.Отбор.Штрихкод.Установить(Штрихкод);
        Набор.Отбор.ТипШтрихкода.Установить(ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13);
        Набор.Прочитать();
        Если Набор.Количество() = 0 Тогда
                НовыйШтрихКод = Набор.Добавить();
                Набор.Записать();
        КонецЕсли;
Показать
36. Sashares 34 20.09.18 12:07 Сейчас в теме
(35) Забавно. Чтобы проверить есть ли такая номенклатура в базе в регистре штрихкодов, надо прочитать регистр с отбором по номенклатуре, которой еще нет =)
Набор.Отбор.Владелец.Установить(НоваяНоменклатура.Ссылка);
37. Sashares 34 20.09.18 12:10 Сейчас в теме
(35)Вы правильно пишите, что надо ставить отбор на набор записей, но читать набор смысла нет.
38. user705522_constantin_h 35 20.09.18 12:13 Сейчас в теме
39. Sashares 34 20.09.18 12:20 Сейчас в теме
(17)
Обратите внимание, что вы чтобы добавить 1 запись в регистр сведений читаете весь набор записей, сколько бы их там ни было, добавляете в него 1 запись и весь записываете. 20000 раз.

Набор = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
Набор.Прочитать();
НовыйШтрихКод = Набор.Добавить();
НовыйШтрихКод.Владелец = НоваяНоменклатура.Ссылка;
НовыйШтрихКод.Штрихкод = Штрихкод;
НовыйШтрихКод.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
Набор.Записать();


Не надо так.
Либо устанавливайте отбор по измерениям РС в наборе, либо используйте Менеджер записи.

П.С. Возможно поэтому у вас так и разросся журнал регистрации.
41. ResAndDev 20.09.18 16:22 Сейчас в теме
(39) Приведите пример кода менеджера записи.
42. Sashares 34 20.09.18 16:37 Сейчас в теме
(41) Используйте синткакс помощник, в этом нет ничего сложного.

РегистрСведенийМенеджерЗаписи.<Имя регистра сведений> (InformationRegisterRecordManager.<Имя регистра сведений>)
Свойства:

<Имя измерения> (<Dimension name>)
<Имя общего реквизита> (<Common attribute name>)
<Имя реквизита> (<Attribute name>)
<Имя ресурса> (<Resource name>)
Период (Period)

Методы:

Выбран (Selected)
Записать (Write)
Заполнить (Fill)
Модифицированность (Modified)
ПолучитьФорму (GetForm)
Прочитать (Read)
Удалить (Delete)

Описание:

Позволяет читать, записывать и удалять отдельную запись регистра сведений. Используется только для регистров сведений, неизменяемых регистраторами, т.е. для которых в Конфигураторе установлен режим записи "Независимый".
Предназначен для интерактивной работы с записью регистра сведений.
Доступ (чтение и запись) к записям регистра сведений производится объектом РегистрСведенийНаборЗаписей.<Имя регистра сведений> на системном уровне. При этом, в общем случае, используются два набора записей: один предназначен для удаления "старой" записи, другой - для записи данных, определенных менеджером записи. Это проявляется, например, в том, что при выполнении записи могут дважды вызываться события ПередЗаписью и ПриЗаписи объекта РегистрСведенийНаборЗаписей.<Имя регистра сведений>, сначала для пустого набора записей удаляющего "старую" запись, а затем для набора записей с новыми данными.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Пример:

Курс = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
Курс.Валюта = ВыбВалюта;
Курс.Период = ТекущаяДата();
Курс.Прочитать();
Если Не Курс.Выбран() Тогда
Курс.Период = ТекущаяДата();
Курс.Валюта = ВыбВалюта;
Курс.Курс = 41.35;
Курс.Кратность = 1;
КонецЕсли;
Если ВвестиЧисло(Курс.Курс, "Введите курс на сегодня",15,5) Тогда
Курс.Записать();
КонецЕсли;
Показать
3. YannikAlx 43 19.09.18 15:20 Сейчас в теме
Обработка явно съела весь диск.... Кто его знает что вы там создаете реально своей обработкой!
20000 номенклатуры - это не большой объем - это вообще ничего
alex-l19041; user705522_constantin_h; +2 Ответить
11. ResAndDev 19.09.18 17:42 Сейчас в теме
(3)Обработка делает запрос (он в цикле. да да, это кака, но вот так вот) к регистру штрихкодов, если там ничего не находит, то создает элемент справочника и штрихкод. Все.

Там есть еще код, который от наименования отсекает не нужные мне части, оставляя чисто наименование.
5. VmvLer 19.09.18 16:49 Сейчас в теме
заголовок сабжа вводит в заблуждение

было бы логичнее назвать тему

"где я накосячил и в чем, но я вам ничего не покажу - телепатируйте"
16. alex-l19041 8 19.09.18 17:55 Сейчас в теме
(5) без кода и говорить не о чем...
6. VmvLer 19.09.18 16:51 Сейчас в теме
хотя если при загрузке грузят 20К картинок номенклатуры в конском разрешении то возможно всякое
10. ResAndDev 19.09.18 17:39 Сейчас в теме
15. alex-l19041 8 19.09.18 17:54 Сейчас в теме
ооочень любопытно, что такого надо изобрести, чтобы при простейших (создание номенклатуры) действиях "съесть" столько места???
18. VmvLer 19.09.18 18:06 Сейчас в теме
я бы посмотрел каталоги временных файлов 1С и профиля

может с таким кодом там кеши раздулись
19. SlavaKron 19.09.18 18:13 Сейчас в теме
ФайлСтрок какое число в отладке показывает? Что делает питцедура состояние?
20. ResAndDev 19.09.18 18:30 Сейчас в теме
(19)ФайлСтрок это номер текущей строки из документа. А процедура Состояние просто показывает сколько процентов отработала программа.
29. YanTsys 12 20.09.18 09:51 Сейчас в теме
При наличии непонятных ошибок задачу нужно упрощать и решать по частям.
Самым простым решением было бы сначала добавить например всего 200 наименований и посмотреть как работает.
Потом попробовать добавить 1000 наименований и так далее.
Кроме того отладкой пользоваться никто вам наверное не запрещает :)
31. ResAndDev 20.09.18 10:25 Сейчас в теме
(29)Была такая мысль. Но я хотел обработку вида "сделать все хорошо" и "закрыть".
33. YanTsys 12 20.09.18 11:38 Сейчас в теме
(31) Если найдете такую, буду благодарен если поделитесь ... :)
34. Sashares 34 20.09.18 11:52 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот