Собственно, в названии темы и описании сама задача. Есть таблицы с миллионами записей, и при добавлении нового реквизита или изменении какого-то происходит очень долгая реструктуризация. Вот и появился вопрос, как можно это обойти? Пересмотрел все таблицы, все зашифровано, никаких явных названий не нашел. Да и расщифровать тоже неизвестно как.
(1) info1i, Александр, ваша задача в точности как "можно ли добавить телеге пятое колесо".
Ответ: конечно, можно!
Но вас кто-то обманул, что 1снег - это совсем-совсем не программист.
(3) info1i, хорошо, попробуем так
что если спросить "как нам обустроить Россию?"
легко, это мог даже солженицин. но собственно обустроить он даже и не попытался. почему? потому что этого не стал делать даже полковник кгб
вы задаете вопрос из вполне себе конкретной науки
почему вы думаете, что на ваш вопрос можно ответить, даже если у вас нет никаких знаний, кроме флагманского слогана "Доступно и всерьез"?
(1) info1i,
В версии 7.7 я решал данный вопрос следующим образом: на пустой конфигурации (копия md) делал структурые изменения. Потом смотрел какие колонки и индексы создает 1С - и писал скрипт на T-SQL, чтобы он вносил такие же изменения, но оптимальными средствами SQL сервера, а не так как это делала 7-ка. После выполнения скрипта (без пользователей + бэкап обязательно) - подменял md + dds. Все работало. Менялись/добавлялись и справочники и документы и регистры. Любые структурные изменения выполнялись не более 10 минут. База была 120 Гб.
Не знаю можно ли такое проделать в 8-ке - пока таких задач не было.
По поводу соответствия имен таблиц в SQL и в конфигураторе: скорее всего здесь (на ИС) много разарботок которые их покажут. А так есть стандартный метод глбального контекста в 1С: ПолучитьСтруктуруХраненияБазыДанных.
Все конечно зависит от задачи - может и (6) подойдет
(9) Reptile, Отлично, ваше сообщение, ближе всего к решению. Только почему-то изменения, которые делаются в конфигураторе, я не смог выловить в профайле, там одни селекты, инсерты и апдейты.
(14) info1i,
В профайлер я особо не заглядывал при структурых изменениях. Я смотрел изменения в dds: какие колонки (идентификторы) на каком месте (в некоторых таблцах 1С добавляет колонку не в конец, а в середине, например, в документах общие реквизиты (которые без отбора) всегда последние), какие индексы.
Если колонка в конце, то делал alter table add column (синтаксис точно не помню, sql нет под рукой). Null 1С не пропускает, поэтому добавлял значение по умолчанию (пустое значение соответствующего типа).
Если колонка в середине, то переименовывал старую таблицу, добавлял новую нужной структуры с правильным именем, потом делал
insert into <НоваяТаблица>
select <СтарыеКолонки (начало)>, <пустое значение соответствующего типа> as <НоваяКолонка>, <Старые колонки (конец)> from <СтараяТаблица>. После этого старую таблицу удалял.
Для добавленных объектов, соответственно, create table.
Индексы drop`ал и создавал новые.
Более подробно сейчас сказать не могу (нет примеров под рукой), но если актуально по 7.7, то могу написать статью и более подробно описать.
(17) info1i,
Я собственно не понял по 7-ке весь сабж или по 8-ке?
Если имеется в виду 77, то 1cv7.dds лежит в каталоге базы, там же где 1cv7.md. Если копия базы dbf, то словарь данных называется 1cv7.dd.
Хотя в 8-ке нет ни md ни dds
(19) info1i,
Ну что ж. Статьяпо 7.7 есть. Описание полей и индексов есть. Ограничение по NULL в полях таблиц, насколько я понимаю, осталось.
Единственное, и самое главное, что мне не понятно: где хранит 1С8 в клиент-серверном варианте описание конфигурации (может лежит где файл .cf) и можно ли его подменить. Когда-нибудь доберусь и до этого вопроса, а пока доступа на работе даже к SQL серверу у меня нет :(
где хранит 1С8 в клиент-серверном варианте описание
по ходу, такой фичи нет:
1. создаем новую скуль-базу, подняв архив существующей
2. подключаемся к ней из предприятия и сразу работаем. задержки на создание какого-либо кэша в "1с-кластере-серверофф" не заметно
ну, по-чесноку, надо бы отснифить файловую систему на сервере с "1с-кластером-серверофф" в момент п.2, но что-то совсем уж лень
(21) tango,
все-таки мне думается, что 1С где-то хранит описание конфигурации, иначе как бы она оперировала с данными, создавала формы и пр. По одним таблицам в базе данных в SQL так не сделаешь. Даже в файловом варианте в файле 1СD хранится и описание конфигурации и данные. Только вот возможно не в общедоступном файле, как это было в 7.7
(12) andrewks, 1C-база на MS SQL сервере. Мне нужно добавить в таблицу номенклатуры одно поле типа "строка", но чтобы реструктуризации не было, т.к. виснет и надолго, и может даже слететь от такого зависания.
Процесс rphost.exe называется рабочим процессом. Рабочий процесс обслуживает непосредственно клиентские приложения, взаимодействует с сервером баз данных и в нем, в частности, могут исполняться процедуры серверных модулей конфигурации.
Вряд ли 1С, с его тонким клиентом, решила преобразовывать запросы на клиенте. Тем более что такие конструкции в запросах как ИТОГИ ПО (в интерпретации 1С), УПОРЯДОЧИТЬ ПО ИЕРАРХИИ, большую часть виртуальных таблиц не реализовать одним запросом к базе даже если сгенерировать его текст динамически. Я думаю, что именно сервер 1С (или кластер серверов) преобразует запрос к физическим именам таблиц.
Но это только догадки. На выходных поставлю сервер 1С и потренеруюсь.
1) Учитывая то, что 1С-база восстанавливается полностью из bak-файла, то по логике понятно, что вся информация о метаданных содержится в самой базе.
2) Как пишут сами 1С-ники в книжках, каждый объект метаданных имеет свою таблицу или несколько таблиц в SQL. Я не поленился пересмотреть каждую sql-таблицу. Многие понятны, что означают, кроме следующих: [Config], [ConfigSave], [DBSchema]. Данные во всех трех как-то зашифрованы.
3) Так как в конфигураторе есть возможность возврата старой конфигурации, то где-то и эта информация хранится; а учитывая то, что таблицы [Config], [ConfigSave] имеют одинаковую структуру(все поля одинаковы), то логично предположить, что именно в них и зашифрована информация о метаданных.
4) На основании вышеизложенного предположения и предыдущих сообщений темы, есть смысл искать пути расшифрования данных в таблице [Config]. Только как?
(29) info1i,
Поискал на SQL.ru - оказывается, дествительно, конфигурация хранится в таблицах [Config], [ConfigSave]. Описания этих таблиц не нашел.
Но есть некоторое ограничение: 1С запрещает вносить изменения в свои таблицы средствами СУБД. По этому как минимум статьи на ИС по этому поводу не будет, даже если разобраться что к чему.
info1i, можете приложить сюда сриншот выборки, например, select top 10 * from Config?
База около 50 гигов, добавление и пр. работает нормально. Я бы предложил не заморачиваться, и сделать как обычно, а насчет тормозов - кластерные индексы...
Не должно очень сильно тормозить если все регламентные операции на субд делаешь...