Прямое замешательство в БД (не бойтесь!) #574705


#0 by Вуглускр1991
Эта тема не скажет ничего нового маститым 1Сникам, пользователям EnterpIntegratora или тем паче его создателям. Это скорее ободрение для тех, кто тщится попробовать изменение таблиц на живой базе. Итак. Случилось мне перегружать номенклатуру 53000 позиций с ошибкой. Долларовую цену выгрузил в рублях. Обнаружил поздно. Вариантов решений было два: 1. Средствами встроенного языка пересчитать цены и долго мучиться в пустом и неинформативном обмене РИБ, где будет выгружено почти 0,5 гигабайта несжатого XML-я ... 2. Либо. Включаем запись технологического журнала. Выполняем запрос: ВЫБРАТЬ   СПР.ССЫЛКА ИЗ   СПРАВОЧНИК.НОМЕНКЛАТУРА КАК СПР   И СПР.НАЦЕНКА = 0 Читаем файл технологического журнала. Находим в нем что-то типа SELECT R95.IDRRef FROM Reference95 R95 WHERE R95.Fld121 = 0 AND R95.Folder = .. Останавливаем сервер 1С (service srv1cv82 stop или из консоли служб в MS) db2 select R95.* from Reference95 R95 fetch first 10 rows only > ~/kusoktabla.txt и прочитав содержимое kusoktabla.txt db2 update Reference95 R95 set R95.FLD107 = R95.FLD107/33 where (R95.FLD107 > 0) and (R95.Fld121 = 0) (update Reference95 R95 set R95.FLD107 = R95.FLD107/33 where (R95.FLD107 > 0) and (R95.Fld121 = 0) - в человеческом виде без палок при спец символах для баша) Все то же самое для MS можно сделать в QA После чего я запустил сервер, тестирование / исправление базы в части восстановления индексов (на изменяемом поле был индекс), Все.
#1 by Санта
Если по чесноку, сколько времени ты на это потратил всего?
#2 by asady
ай молодца .... это у тебя цена в номенклатуре сидит - а конфа какая?
#3 by Вуглускр1991
Полтора часа. со всеми колебаниями, и подбором синтаксиса в SQL запросах.
#4 by Вуглускр1991
2 Цена в номенклатуре сидит для подбора. Есть РС с ценами, но связь в подборе тормозит, поэтому инфа туда дублируется при изменении данных в РС (переоценки всякие).
#5 by shuhard
единственный комментарий, в MS SQL кроме ТЖ есть профайлер для получения запроса, в остальном ты всё сделал верно
#6 by Ёпрст
да уж.. и нафига для этого запускать технологический журнал было ?? Имена табличек и так доступны стандартным методом, а написать простой запрос на update в qa особенного ума не надо.
#7 by Ёпрст
>>>, и подбором синтаксиса в SQL запросах. :)))))
#8 by Вуглускр1991
-> QA для "белых".
#9 by ZanderZ
зачем Тех Журнал - есть же ПолучитьСтруктуруХраненияБазыДанных
#10 by Ёпрст
вот если б, кто написал вк для снеговика с нормальным метопарсером и типизацией.. это было бы хорошо.
#11 by Вуглускр1991
:) Ну палки в шеле надо было ж расставить, тупил долго.
#12 by Вуглускр1991
Вот оно. Обмен опытом! Спасибо.
#13 by H A D G E H O G s
1) Полгига несжатого XML - это смехуечки. 2) Profiler - это да 3) Есть РС с ценами, но связь в подборе тормозит - проверить hands.dll - не растут ли они из ass.sys
#14 by Ёпрст
на вот поделку (не моя), для "обмена опытом"
#15 by Вуглускр1991
3) Не боись, начну ставить задачу по ценообразованию - все вопросы отпадут. Лови запрос: ВЫБРАТЬ    СправНоменклатура.ЭтоГруппа,        КОГДА ЦеныПрайсаТекСклад.Цена ЕСТЬ NULL                И ЦеныПрайсаОснСклад.Цена ЕСТЬ NULL            ТОГДА ВЫРАЗИТЬ(ЦеныПрайсаСрезПоследних.Цена * &КурсДоллараКВалюте КАК ЧИСЛО(15, 2))        КОГДА ЦеныПрайсаТекСклад.Цена ЕСТЬ NULL        ПО СправНоменклатура.Ссылка = ЦеныПрайсаОснСклад.Номенклатура Может ass.sys в отделе маркетинга, а может где-то в платформе индексы все расставлены. Основная таблица "Номенклатура", динамическое считывание.
#16 by zladenuw
спс
#17 by Вуглускр1991
СПС. Это не нифига не смешно. Оно в родную-то базу загружается пол-дня. А мне его в 7.7 УРБД транслировать.
#18 by H A D G E H O G s
Да. Без временных таблиц в динамическом списке - тяжко.
#19 by H A D G E H O G s
бгг, забавно.
#20 by H A D G E H O G s
ВЫБРАТЬ    ФильтрованнаяНоменклатура КАК ФильтрованнаяНоменклатура        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(                ,                    ИЗ
#21 by H A D G E H O G s
Вот такой текст запроса введите и откройте конструктором
#22 by H A D G E H O G s
И при выполнении Ошибка при выполнении запроса. Ошибка при выполнении запроса. по причине: Поле не найдено "DeletionMark" у всех так?
#23 by H A D G E H O G s
Надо написать на партнерский, чтобы впилили ВТ в дин. список
#24 by milan
А в консоли запросов обработать результат никак ? 53К это, в принципе, семечки.
#25 by Вуглускр1991
Там ещё пришлось бы смотреть на тему: "а если в процессе обработки что-то сдохнет" и половина позиций будет с уже правильной ценой, а половина с ещё нет. То есть придется гондобить учет того, что сделано на случай факапа и потом этот учет убирать, после того, как все пройдет. Я собирался так сделать, но потом ретивое взыграло. И обмены опять же...
#26 by Вуглускр1991
А куда ввести в дин список или в консоль или просто в модуль? В конструкторе (из модуля) пока не ругается.
#27 by ДенисЧ
шото я не понял... Справочник обновил... А в РИБ кто будет выгружать? Или на остальные базы плевать?
#28 by Вуглускр1991
В остальных базах правильно, так случилось.
#29 by Вуглускр1991
(26+) В консоли запросов прокатило. Два результата БД файловая, клиент тонкий, релиз 13.последний.
#30 by H A D G E H O G s
В произвольный запрос динамического списка, и выбрать Номенклдатура основной таблицей
#31 by H A D G E H O G s
В консоли - конечно покатит
#32 by H A D G E H O G s
В конструкторе запросов динамического списка - нет закладки по которой можно добавить запросы (несколько запросов). А вот если текст написать - закладки появляются. Бага.
#33 by Вуглускр1991
М-м! Читал я на ИТС про ограничения ДС, но сейчас не помню среди ограничений есть ВТ, судя по тому, что нет закладок - их убрали не случайно.
#34 by H A D G E H O G s
Щас посмотрю, какой он SQL запрос строит, что Поле не найдено "DeletionMark"
#35 by Fragster
а что, ПолучитьСтруктуруХраненияБазыДанных уже не модно?
#36 by H A D G E H O G s
Кто здесь?
#37 by Fragster
не, ну риальне, автор нам рассказал, как получить текст запроса для обновления таблицы... в способ попроще, ИМХО
#38 by DmitrO
а у меня другие два вопроса: 1.зачем было останавливать сервер 1С? 2.зачем было после этого переиндексировать базу?
#39 by acsent
Склад - первое измерение в регистре
#40 by МихаилМ
меня ещё слово "тщится" пугает
#41 by Вуглускр1991
В моем второе. Надо сделать? "Индексировать" на складе стоит. А вот и хозяева ie. Я не знаю, что именно платформа реализует свойством "Индексировать", может это индекс в базе данных, но (я же не знаю) вдруг (ВНЕЗАПНО) кроме индекса в базе это доп. таблица с какой-нибудь НЕХ, ибо стандартные индексы разработчиков 1С могут не устроить. Вот поэтому. Если ты мне скажешь, что платформа всегда будет использовать индексы в том и ровно в том смысле в котором они существуют при таблицах сервера баз данных, я готов поверить и не останавливать и потом не переиндексировать. Это пройдет.
#42 by Grusswelle
20 см видно издалека, молодец! :-)
#43 by H A D G E H O G s
Не очкуй. Стандартные индексы.
#44 by дущ
А слабо так на файловой сделать? :D
#45 by Drx211
Издалека попахивает извращенством. Пытливый ум виден, но кривые руки так-же в наличии :) Лучше бы почитал, как с планами обмена работать. Не знаю, что там за конфа, но не допускать создания гигабайтного XML при выгрузке, путем фильтрации ненужных записей об изменении - это гораздо проще и надежнее, чем то - что ты наваял :)
#46 by Вуглускр1991
Капитан очевидность. Подите туда там все будет. Если начать играть с планом обмена, то после возвращения его в исходные настройки (а оно надо! ибо как было правильно), все элементы снова будут помечены "к выгрузке". "Не знаю, что там за конфа" "кривые руки" я, конечно? не сахарный и клал с прибором. Самому все нормально?
#47 by DrShad
"все элементы снова будут помечены "к выгрузке"" а снять регистрацию уже не модно? в конечно нормально все, но есть ведь пути и попроще
#48 by Вуглускр1991
А вот пример того, что ментальность семерочника вставляет в колеса палки. Да ты прав. Для 8-ки это можно. Я выбирал по времени, что я смог бы сделать быстрее. Использовать запрос update или перебрать элементы, перезаписать, выгрузить полгига и подменить пакет очистив <data> элемент.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям