Сколько должна "весить" база с 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 156 19.09.18 16:46 Сейчас в теме
(1)видимо про итератор забыл, вот оно и лупило до бесконечности
8. ResAndDev 19.09.18 17:38 Сейчас в теме
(4)Результат работы такой, какой мне надо. Итератор там просто количество строк. Они создаются.
7. herfis 498 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 156 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 Сейчас в теме
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)