|
v7: Как быстро добавить реквизит в "большой" справочник? | ☑ | ||
---|---|---|---|---|
0
MWWRuza
гуру
02.12.18
✎
13:28
|
Добрый день!
Подскажите, кто знает... Вводная. База обычная, файловая, *.dbf,*.cdx. Не типовая, на основе ТиС. Не сказать, что-бы сильно большая - в разных базах от 50 до 100 тысяч наименований товаров. Размер dbf-ки справочника "Номенклатура" 15 - 30 мегабайт. Необходимо добавить один реквизит, тип "число", длиной 1. Это просто флажок, "галочка". Так вот, сохранение изменений базы после добавления реквизита в конфигураторе растягивается на многие часы! Решил найти возможность ускорить процесс, естественно, не типовыми средствами. Что сделал: 1. Удалил индексы, перенес файл справочника в отдельную папку. 2. В конфигураторе добавил необходимый реквизит, запустил базу, файл создался новый, пустой(мгновенно). 3. Опять снес индексы, перенес новый, пустой файл в отдельную папку. 4. С помощью редактора "sergdbf"(первое, что попалось под руку, умеющее добавлять колонки), добавил поле в исходную дбф-ку(мгновенно). Там-же, заполнил эту новую колонку значениями "0"(тоже мгновенно). 5. Вернул файл на место, запустил базу с восстановлением индексов. Пока - все отлично, база работает, реквизит добавлен, "галочка" ставится/снимается, сохраняется. Казалось-бы УРА, цель достигнута, на все про все 10 минут с перекурами и все работает! НО!!! Для контроля запускаю ТиИ, и получаю такую картинку: https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/i-250.jpg Что я упустил? Длина заголовка? Пробую в том-же редакторе менять, структура нарушается, вся таблица "съезжает", нарушаетя иерархия, и появляются какие-то цифры перед наименованиями, и т.д... Не правильный редактор? Каким тогда лучше это делать? Может есть какой-то скрипт, макрос или утилита для такого действия? Подскажите плиз... PS Не добавлять реквизит в справочник, а использовать другие механизмы, например через подчиненные, типа "свойства", не предлагать. Надо так, и все тут! :-) Конфа не типовая, и ни кем, кроме меня не поддерживается. |
|||
1
MWWRuza
гуру
02.12.18
✎
13:35
|
+(0) добавил поле в исходную дбф-ку(мгновенно)
Естественно, все свойства добавленного поля точно такие-же, как во вновь созданном "пустом" файле. |
|||
2
Василий Алибабаевич
02.12.18
✎
13:40
|
(0)
1. "Размер dbf-ки справочника "Номенклатура" 15 - 30 мегабайт." и "сохранение изменений базы после добавления реквизита в конфигураторе растягивается на многие часы!" Так не бывает. Файл dbf битый. Еще до добавления нового поля. Потому так долго обрабатывается. 2. Корректировку *.md отдал на откуп Пушкину? |
|||
3
MWWRuza
гуру
02.12.18
✎
13:48
|
Файл не битый, ТиИ до добавления нового поля проходит без проблем. И после добавления штатными средствами, если выждать несколько часов, то он все-таки добавляется и ТиИ проходит. Баз несколько, и во всех одинаково.
Такое чувство, что обработка файла при сохранении происходит в какой-то "неправильной" транзакции, по 100 элементов. Первые несколько тысяч проскакивают быстро, потом процесс замедляется, и к 50000 начинает обрабатывать сотню по несколько минут... И что значит "корректировку *.md" - ? Что там корректировать, если я во пункте 2 добавил необходимый реквизит и сохранил конфигурацию? Можно подробнее, не понял? |
|||
4
rsv
02.12.18
✎
13:51
|
(0) скорее таблицу не трогать.Просто очистить.Через конфигуратор новое поле.Сделать insert данных.
|
|||
5
MWWRuza
гуру
02.12.18
✎
13:57
|
+(3)Первые несколько тысяч проскакивают быстро, потом процесс замедляется, и к 50000 начинает обрабатывать сотню по несколько минут...
За процессом можно наблюдать по росту размера изменяемого файла в папке "NEW_STRU". (4) Очистить, поле добавить, это понятно... Наверно, это правильно, что-бы не создавать новый файл... А вот чем сделать "insert данных" - ? Честно говоря, не понял... |
|||
6
rsv
02.12.18
✎
14:00
|
(4) я когда то делал через студио скульный.
|
|||
7
mishaPH
модератор
02.12.18
✎
14:01
|
(0) dd файл там помоему вся инфа по файлам.
|
|||
8
rsv
02.12.18
✎
14:01
|
Но все равно...если запустить тии до опытов ошибка будет ?
|
|||
9
Базис
naïve
02.12.18
✎
14:03
|
Думаю, что существующее неиспользуемое поле можно переименовать и использовать. СтавкаНП обычно свободна, но используется в модулях.
|
|||
10
MWWRuza
гуру
02.12.18
✎
14:19
|
(8) Нет, до "опытов" ТиИ проходит нормально.
(9) Можно конечно, но... Это раз, ну два... А потом неиспользуемые поля закончатся, хочется научиться это делать без таких "костылей". Да их, на самом деле уже нет. НП есть, но у него тип другой, справочник ставки НП. И действительно, в модулях много где используется, косяки полезут, только успевай корректировать. |
|||
11
MWWRuza
гуру
02.12.18
✎
14:23
|
В измененной базе сделал выгрузку/загрузку данных, прошло без ошибок. Запустил ТиИ, пока крутится, не вылетело. До выгрузки/загрузки вылетало почти сразу.
|
|||
12
Sserj
02.12.18
✎
14:24
|
Я делал как то но очень длинным путем.
Копируешь MD и файлы справочника (cdx и dbf) в новую папку.Открыть как новую базу - выгрузить данные - загрузить в SQL (будет чистая база с заполненым справочником) - добавить реквизит (в sql это происходит на порядки быстрее) - выгрузить базу - загрузить в новую dbf - скопировать md и файлы справочников в исходную. |
|||
13
MWWRuza
гуру
02.12.18
✎
14:32
|
+(11) ТиИ завершилось без ошибок(точнее, мелкие, с одним"!" были, но по номерам документов, никак не связанные с этим справочником). Так, что - выгрузка/загрузка данных помогает. Но, это сама по себе не быстрая процедура, надо искать способ редактирования заголовка DBF, что-бы исправить ошибку. Возможно, нужно другой редактор попробовать.
(12) SQL база не вариант... У себя я еще могу попробовать, но у клиентов ни как, там обычные DBF версии 1С. |
|||
14
mikecool
02.12.18
✎
14:34
|
(13) а перед ТиИ пробовал dd удалить и пересоздать?
|
|||
15
Garykom
гуру
02.12.18
✎
14:41
|
(0) Очень смешно, особенно когда работаешь с больше ляма "номенклатуры" в справочнике и никаких проблем не имеешь.
Просто заимей комп получше... |
|||
16
Garykom
гуру
02.12.18
✎
14:45
|
По факту у тебя проблема с галочками "Сортировка" и "Отбор по реквизиту" для реквизитов справочника.
Сначала снимаешь эти галочки, сохраняешь конфу, затем добавляешь свой реквизит (без них), снова сохраняешь конфу и затем уже ставишь галочки назад и снова сохраняешь конфу. |
|||
17
Garykom
гуру
02.12.18
✎
14:47
|
Ну и компы/железо говно на hdd дисках медленных, процы уровня P4 и памяти 512мб-1гб ))
|
|||
18
MWWRuza
гуру
02.12.18
✎
14:56
|
(15) Да у меня то терпимо. Но у клиентов компы самые разные.
Что касается галочек "Сортировка" и "Отбор по реквизиту". Да, я про это читал. Но, сама процедура снять/поставить эти галочки, не окажется такой-же по времени, как добавление реквизита? Надо пробовать. |
|||
19
Garykom
гуру
02.12.18
✎
15:01
|
(18) Вот эти тормоза (с реструктуризацией) и были основной причиной по которой массово в свое время с радостью переходили на 1С 8.1 где такого изврата не было.
Пусть 8-ка и тормозила с ОФ намного сильнее чем 77 для юзеров в обычной работе. Помнится смешно было когда на 400 компах (в почти 200 аптек и складе) 77 летала. А чтобы 8-ка хоть как то крутилась пришлось заказывать партию оперативки и посылать техников все компы апгрейдить чтоб хотя бы 2 гига памяти было. |
|||
20
Garykom
гуру
02.12.18
✎
15:02
|
Короче пора уже 77 на покой и переходить на 8-ку.
|
|||
21
MWWRuza
гуру
02.12.18
✎
15:18
|
Ага. Но, "мыши плакали, кололись, но продолжали жрать кактус" :-)
В общем - победил. Первые три пункта так-же, а вот начиная с четвертого: 4. В редакторе Sdbf(!!!! это важно!), открываем новый, пустой файл с добавленным полем, пункт меню "Таблица" => "Добавить из другой", выбираем исходную, запрос "Условие отбора" оставляем пустым, ждем примерно около минуты. Таблица заполняется данными. 5. Все! Копируем в базу, запускаем с переиндексацией. 6. Радуемся полученным результатам, ТиИ проходит на УРА! |
|||
22
MWWRuza
гуру
02.12.18
✎
15:20
|
Всем спасибо, в особенности rsv, за идею загрузить данные в имеющуюся таблицу а не редактировать(читай - уродовать заголовок) имеющуюся таблицу с данными.
|
|||
23
MWWRuza
гуру
02.12.18
✎
15:27
|
+(21)Да, забыл. Еще, после добавления данных, надо заполнить новую колонку нулями. Становимся на нужную колонку, меню Колонка=>Заменить=>Значения. Вводим "0", ОК.
Вроде все. |
|||
24
Злопчинский
02.12.18
✎
15:53
|
как решать проблему - Епрст неоднократно здесь на форуме описывал, примерно как автор делал, тока без привлечения внешних шняг
|
|||
25
MaxS
02.12.18
✎
16:22
|
Лечил подобным образом убитую базу 7.7.
7-кой создал правильный пустой dbf, в 8-ке написал обработку переноса из битого dbf в нормальный пустой. База починилась. Мне дали мороженое, а потом денег. ;) |
|||
26
MWWRuza
гуру
02.12.18
✎
16:23
|
А дай ссылочку почитать, если не сложно...
Описание, что надо снимать галочки "Сортировка" и "Отбор по реквизиту" я видел... Но... Как-то не впечатлило. Моих реквизитов с этими галочками там только два, я их добавлял, потому, что использую в некоторых процедурах метод "НайтиПоРеквизиту", я их знаю. А сколько там еще типовых, до меня добавленных - х.з., надо лезть разбираться, каждый реквизит проверять. И не забыть потом опять их на место вернуть, а то что-нибудь обязательно работать перестанет. И сколько это займет по времени - тоже вопрос. Поэтому, если есть какой-то еще метод(без использования SQL), и только штатными средствами, очень любопытно взглянуть. |
|||
27
MWWRuza
гуру
02.12.18
✎
16:25
|
(26) к (24)
|
|||
28
mexanik_96
02.12.18
✎
17:26
|
(25) что там лечить? у автора нет описания полей ни в мд, ни в дд. Добавил рекизит в таблицу, потом спрашивает что там не так. Хочешь добавить быстро: сзделай тоже самое что и ты сделал только сначала добавь его пустую базу, получишь дд, мд, потом ложишь их в рабочую, добавляешь поле с имением как в дд путем прямого добавления, заполняешь, радуешься...
|
|||
29
hogik
02.12.18
✎
17:29
|
(21)
"В общем - победил."(с) Владислав. Посмотрите описания индексов таблицы в файле DD. Проблема возникает т.к. существует ограничение на размер ключа в индексе 117 байт, для таблиц начиная с 30000 записей. Тут обсуждали данную проблему: https://forum.infostart.ru/forum9/topic36308/ |
|||
30
MWWRuza
гуру
02.12.18
✎
17:49
|
(28)у автора нет описания полей ни в мд, ни в дд.
Ну как это нет? Я же создаю "пустой" файл вместе с внесением изменений в MD и пересозданием DD. В (0) же написано: 2. В конфигураторе добавил необходимый реквизит, запустил базу, файл создался новый, пустой(мгновенно). Соответственно, в MD и DD новое поле прописалось! Естественно, я потом добавлял в старую ДБФку, поле не "от фонаря", а точно такое(с таким же именем, типом и размером) как в "пустой", вновь созданной ДБФке, и соответственно в MD и DD! Просто тот редактор, с помощью которого я это делал, судя по всему, портил заголовок DBF. (29) Спасибо, сейчас почитаю... |
|||
31
hogik
02.12.18
✎
17:52
|
(30)
Суть в 30 сообщении той темы. |
|||
32
КонецЦикла
02.12.18
✎
18:19
|
Давно уже необходимости именно в таких извратах не возникало
Там 100500 полей или настолько дохлый комп? В часы с трудом верится |
|||
33
MWWRuza
гуру
02.12.18
✎
18:26
|
Да уж... Почитал. Ну, моя методика вполне себе работает. Добавляю поле штатными средствами, в пустую ДБФ-ку, а потом загружаю в нее данные. Быстро и не затратно.
Я думаю, можно попробовать другим редактором добавить поле в ДБФ, тоже должно получиться. Индекс при штатной реструктуризации у меня распухал до 300 мб. В нормальном режиме работы - 14 мб. Короче, все понятно. Вот фрагмент DD, который определяет структуру проблемного справочника: https://cloud.mail.ru/public/49G5/5QS1CvN3M Не нравится мне там один реквизит: F=SP9321 |(P)КодЕГАИС |C |19 |0 и индекс по нему: I=VI9321 |VI9321 |0 |SP9321(UPPER=128),DESCR(UPPER) |VI9321 I=VIP9321 |VIP9321 |0 |PARENTID,ISFOLDER,SP9321(UPPER=128),DESCR(UPPER) |VIP9321 Скорее всего, тормоза из-за него. Надо его удалить, тем более он уже и не нужен - оставлен для совместимости, вместо него уже давно подчиненный справочник добавлен. Может и реструктуризация быстрее заработает. |
|||
34
MWWRuza
гуру
02.12.18
✎
18:32
|
Полей - 35. Комп клиентский, на котором это пол дня работало - Core i5 с 8 гиг ОЗУ. Диск, правда не SSD.
|
|||
35
ADirks
03.12.18
✎
07:57
|
(0) В ТиСе в номенклатуре есть поле НеВключатьВпрайс, и на нём сортировка. Если перед изменением её убрать, а потом включить обратно, то общее время процесса сократится на порядок. Это именно для ДБФ, в СКЛ такой проблемы нет.
Во времена седой старины это знали чуть ли не все :) |
|||
36
opus70
03.12.18
✎
08:23
|
(35) спасибо не знал о таком
я делал так брал чистую базу добавлял реквизит смотрел какое поле добавлено в файле *.dd потом в рабочей загружал в Visual foxpro нужный *.dbf файл добавлял поле и затем подмененял заменял файлы *.md *.dd из новой базы муторно зато быстро самое главное не запутаться |
|||
37
MWWRuza
гуру
03.12.18
✎
10:43
|
(35)Ну, да. поле "НеВключатьВпрайс", и еще два поля было мною добавленных(сейчас одно убрал, необходимость в нем уже отпала, осталось одно).
(36)Visual foxpro не пробовал, но "Sdbf", так-же как и первый редактор, о котором в первом сообщении темы упомянал, портит заголовок, вчера для эксперимента попробовал - также, добавляется, в базе все красиво, реквизит виден, сохраняется, как так и надо. Но, ТиИ не проходит, с той-же ошибкой. Если берешь пустую ДБФ, созданную штатно в 1С, и загружаешь в нее данные из другой(исходной) таблицы, то все нормально. Что-то там не так с заголовком файла делается, когда структуру изменяешь. Visual foxpro наверно более правильно работает, и не портит заголовок. |
|||
38
MWWRuza
гуру
03.12.18
✎
11:00
|
+(37)Сейчас посмотрел, можно и со второго моего поля "галочки" снять(первое поле удалил совсем), нет уже давно тех процедур, где "Сортировка" была нужна, а "Отбор по реквизиту", вообще по незнанию включал, он тем более не нужен. Но все равно остается штатная "НеВключатьВпрайс", с ней придется "играть" туда-сюда...
|
|||
39
MWWRuza
гуру
03.12.18
✎
11:13
|
+(38)И еще штуки три реквизита с признаком "Сортировка", не мои, но и не совсем типовые - досталось "тяжкое наследство" от предыдущих, допиливавших эту конфу до меня программеров... Так, что вариант с созданием пустой дбфки и загрузки в нее данных сторонним редактором на текущий момент проще и быстрее получается.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |