База быстро растет.

1. shutniksasha 03.09.13 16:45 Сейчас в теме
Добрый день коллеги!

Есть розничная аптека, платформа 1С: Предприятие 8.1 (8.1.15.14), Розница 8. Аптека, редакция 1.0 (1.0.14.3). База данных распределенная, 5 аптек.
Они делают поступление товаров из программки под названием СКЛИТ через DBF файлик. Так вот сверка с номенклатурой идет по наименованию товара, так как того же артикула в dbf нет. За счет чего база постоянно растет и пухнет за два года уже 8 ГБ. Мой вариант постоянный, постепенный и регулярный поиск и замена элементов дублирующихся элементов справочника через стандартную обработку (их там 1950 позиций) да, это долго, но другого выхода я не вижу, и на просторах интернета не нашел.
Они от меня хотят, чтобы я нажал кнопочку и все заработало.

Кто и что может мне посоветовать? Так как у меня опыта еще не много, я обращаюсь за помощью к вам, более опытным товарищам. Буду рад любым советам и подсказкам.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. AllexSoft 03.09.13 17:05 Сейчас в теме
(1) shutniksasha, а вы тестирование делаете? дело в том что реально удаление из базы происходит только когда вы делаете тестирование с флагом сжатия и реиндексации... а так ваше удаление из пользовательского режима ничуть базу не сократит
4. shutniksasha 03.09.13 17:07 Сейчас в теме
(3) AllexSoft, спасибо за совет. Но после тестирования база стала весить 12 ГБ.
25. Angel_Ok 11.09.13 10:29 Сейчас в теме
(1) shutniksasha, если в ДБФ файле есть колонка артикул, или штрихкод, то можно попробовать сделать сопоставление номенклауры при загрузке данных по этому артикулу или штрихкоду. у нас в базе было сделано именно так, чтобы не разростался справочник номенклатуры. Загрузчик проверяет есть ли номенклатура с подобным ШК в базе, и если есть не создаёт новую, а использует уже имеющуюся. Весь вопрос заключается в том будут ли корректные данные в исходном ДБФ файле, из которого происходит загрузка в базу.
26. shutniksasha 11.09.13 11:30 Сейчас в теме
(25) Angel_Ok, благодарю за совет. Нужно будет проверить.
2. peterxx 23 03.09.13 16:59 Сейчас в теме
Не очень понятно, за счет чего пухнет база. Если поиск идет по наименованию товара, то обработка ищет товар с таким наименованием и успокаивается. Если наименования нет, то очевидно, она создает его. Но это создание происходит один раз.
5. shutniksasha 03.09.13 17:09 Сейчас в теме
(2) peterxx, если честно, то я тоже не очень понимаю. Но одного и того же наименования в некоторых вариантах в номенклатуре набирает аж по 16 штук.
6. shutniksasha 03.09.13 17:10 Сейчас в теме
И вообще интересно знать, кто еще работал с подобными вариантами и как структурировали базу, нормальный ли размер после двух лет пользования?
7. peterxx 23 03.09.13 17:23 Сейчас в теме
А к самой процедуре загрузки вы имеете доступ? Может некорректно прописана процедура поиска?
9. shutniksasha 03.09.13 17:32 Сейчас в теме
(7) peterxx, Документы / Поступление / Поступление товаров / Новый / Сервис / Заполнить из файла / Выбираем настройку / Далее / Сверяет по наименованию... Вот скрин самой настройки:
Из вариантов искать по:
Наименование
Код
Артикул
Единый государственный классификатор лекарственных средств
ШтрихКод...
10. peterxx 23 03.09.13 17:54 Сейчас в теме
(9) shutniksasha, так ведь я это и имел в виду. Выглядит снаружи все красиво, а что внутри... Отладчик в руки просится и/или код посмотреть.
11. shutniksasha 03.09.13 17:58 Сейчас в теме
(10) peterxx, в этом, я к сожалению пока не силен, что можете посоветовать?
12. peterxx 23 03.09.13 18:10 Сейчас в теме
(11) shutniksasha, обработку можете предоставить для начала?
13. shutniksasha 04.09.13 10:31 Сейчас в теме
8. peterxx 23 03.09.13 17:25 Сейчас в теме
Вообще я имел дело с чем-то подобным, загружая прайсы и реестры в Рарус-Аптеку из xls, dbf и текста. Но там ничего сверхъестественного не происходило.
14. peterxx 23 04.09.13 10:53 Сейчас в теме
А сама то обработка где?
15. shutniksasha 04.09.13 11:24 Сейчас в теме
(14) peterxx, скорее всего эта:
16. shutniksasha 04.09.13 12:18 Сейчас в теме
18. peterxx 23 04.09.13 13:03 Сейчас в теме
(16) шутниксаша, у вас дублируются элементы "Номенклатура" или серии?
19. shutniksasha 04.09.13 14:16 Сейчас в теме
17. peterxx 23 04.09.13 12:51 Сейчас в теме
20. peterxx 23 04.09.13 14:56 Сейчас в теме
Есть одно предположение, которое нуждается в проверке:
Сначала данные из внешнего источника загружаются в табличный документ. Далее этот табличный документ обходится и для поиска номенклатуры формируется запрос (строка 1379 модуля объекта):

ТекстЗапроса =
	"Выбрать Первые 1
       |Справочник.Ссылка КАК Ссылка
       |Из Справочник."+МетаданныеИсточника.Имя+" КАК Справочник
       |Где";
				
	Для каждого СтрокаПоиска Из СтрокиПоиска Цикл
	   ТекстЗапроса = ТекстЗапроса +"
	   |Справочник."+СтрокаПоиска.ИмяРеквизита+" = &" + СтрокаПоиска.ИмяРеквизита + "
	  |И";
			
	КонецЦикла;
				
	ТекстЗапроса = Лев(ТекстЗапроса,СтрДлина(ТекстЗапроса) - 2);
	Запрос = Новый Запрос (ТекстЗапроса);
Показать


В вашем случае СтрокаПоиска.ИмяРеквизита - это "Наименование", МетаданныеИсточника.Имя - "Номенклатура"

Далее (строка 1446) появляется строка установки параметров:

Запрос.УстановитьПараметр(СтрокаПоиска.ИмяРеквизита,ТекущаяСтрока[СтрокаПоиска.ИмяРеквизита]);

И, как мне кажется, здесь засада: если в табличном документе считанное из файла наименование: "Аспирин ", а в справочнике "Номенклатура" - "Аспирин", то результат запроса будет пустой. Я бы попробовал заменить строку на следующую:
Если ТипЗнч(ТекущаяСтрока[СтрокаПоиска.ИмяРеквизита]) = Тип("Строка") Тогда
								Запрос.УстановитьПараметр(СтрокаПоиска.ИмяРеквизита,СокрП(ТекущаяСтрока[СтрокаПоиска.ИмяРеквизита]));
							Иначе	
								Запрос.УстановитьПараметр(СтрокаПоиска.ИмяРеквизита,ТекущаяСтрока[СтрокаПоиска.ИмяРеквизита]);
							КонецЕсли;
21. shutniksasha 04.09.13 15:34 Сейчас в теме
(20) peterxx, благодарю!!! Проверка соответствия стала работать значительно лучше.
Еще один вопрос. Как можно более эффективно уменьшить размер базы данных. Стандартной обработкой поиска и замены очень долго. Возможно Вам встречались более эффективные варианты?
23. peterxx 23 09.09.13 10:32 Сейчас в теме
(21) shutniksasha, прошу прощения за долгое молчание, отсутствовал.
Как бы я стал действовать в вашем случае: модифицировал бы обработку "ПоискИЗаменаЗначений", написал бы процедуру программного заполнения табличной части "ЗаменяемыеЗначения" (если речь идет об устранении дубликатов номенклатуры), перенес бы в модуль объекта процедуры поиска ссылок и замены значений и процедурой верхнего уровня запустил бы всё скажем на ночь или на выходные.
24. shutniksasha 09.09.13 11:13 Сейчас в теме
(23) peterxx, (22) mixa4, благодарю за советы, все выходные с ней мучился, вот что получается...
Протестировав базу данных наткнулся на следующее:
При тестировании и исправлении (ТИИ) база резко начинала расти и в итоге выбивала ошибку "не достаточно памяти" на следующих независимых регистрах сведений: ПрайсЛистыКонтрагентов, СоответствиеОбъектовДляОбмена.
Вычистив их процесс исправления пошел дальше, но споткнулся на регистре накопления РазмещениеЗаказов
(В процессе обновления информационной базы произошла критическая ошибка.
по причине:
Ошибка СУБД:
Ошибка SQL: Запись значения NULL в поле, не допускающее NULL '_FLD2622_TYPE'
по причине:
Ошибка SQL: Запись значения NULL в поле, не допускающее NULL '_FLD2622_TYPE')
, но с ним дело уже посложнее, так как он регистрирует движения по нескольким документам:
ВнутреннийЗаказ
ЗаказПоставщику
ЗакрытиеЗаказовПокупателей
ПеремещениеТоваров
ПоступлениеТоваров
В этом направлении копаю сейчас.
Тестирую утилиткой chdbfl...
22. mixa4 07.09.13 01:24 Сейчас в теме
1950 номенклатуры это не много, так что для начала надо все же по-точнее выяснить от чего пухнет база.
Выяснять это путем анализа кода - пожалуй, не самый оптимальный вариант. Есть база, гляньте что в ней нанимает основной объем, например, с помощью Tool_1CD, или посмотрев размер выгрузки отдельных объектов, или хотя бы кодом - пройтись по метаданным и вывести количество объектов каждого вида.
27. shutniksasha 11.09.13 11:38 Сейчас в теме
В общем проблема с нереальным размером базы данных решилась при помощи стандартной утилитки chdbfl и чистки независимых реестров ПрайсЛистыКонтрагентов и СоответствиеОбъектовДляОбмена. Тестирование и исправление через конфигуратор в разных вариантах не помогло. База только увеличивала свой размер.
Итог: база весом в 3.1 Гб.
28. shutniksasha 11.09.13 11:39 Сейчас в теме
Всем спасибо за помощь, советы и просветляющие пинки!
29. aleksey_vk 7 11.09.13 21:28 Сейчас в теме
Если у тебя был заполнен регистр СоответствиеОбъектовДляОбмена значит кроме распределенной базы у тебя есть обмен с "другой конфигурацией" (возможно это управляющая система на конфигурации Управление Торговлей или выгрзка данных в "Бухгалтерию"). Лучше сначала узнать с какой конфигурацией идет обмен, а потом удаляй данные.
30. shutniksasha 23.09.13 17:23 Сейчас в теме
(29) aleksey_vk, благодарю за совет, скорее всего с бухгалтерией
Оставьте свое сообщение

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