Возможно немного путаный и дилитантский вопрос для вас но прошу помощь

77 views
Skip to first unread message

Alex Levites

unread,
Jul 2, 2013, 8:03:50 AM7/2/13
to enterprise...@googlegroups.com
Мы ведем разработку в Net клиента для базы данных которая разрабатывается в 1с8(исторически так сложилось)
База данных SQL Server
Читаем данные непосредственно из SQL( используем LINQ)
Записываем через 1с (через COM соединение).
Разработка велась на внутреннем сервере компании .
Сейчас решили перенести базу данных на другой сервер в Дата Центре.
Данные переносить не надо , надо только структуру БД
Перенесли конфигурацию в 1С на новый сервер и получили на SQL сервере
другие названия наших таблиц и полей.
И теперь клиент не работает название таблиц и полей не те.
Если есть мысли как решить эту проблему ПОМОГИТЕ.
Причем изменения в структуру базы надо вносить постоянно и переносить на другой сервер
после отладки тоже.
Может быть есть какой то режим переноса конфигурации в 1с который даст сохранить название 
SQL  ых таблиц и полей.
Или может можно как то сделать это средствами SQL Server.

Заранее благодарен за ответ

Александр

Valeri Prosvirnin

unread,
Jul 2, 2013, 8:12:30 AM7/2/13
to enterprise...@googlegroups.com
Смотрите в сторону функции ПолучитьСтруктуруХранения...

Герман Кудяков

unread,
Jul 2, 2013, 9:28:00 AM7/2/13
to enterprise...@googlegroups.com
не нужно было БД выгружать в dt, а достаточно было просто сделать бекап и восстановить ее в Дата Центре

вторник, 2 июля 2013 г., 16:03:50 UTC+4 пользователь Alex Levites написал:

Alex Levites

unread,
Jul 2, 2013, 10:12:09 AM7/2/13
to enterprise...@googlegroups.com
Герман спасибо за ответ но это не совсем то что мы хотим

Ситуация такая: если мы выгружаем dt то все пока ок (если через бэкап тоже все хорошо),
но нам надо другое нам надо переносить только изменения конфигурации 1с (например создали новый справочник и добавили несколько полей и т.д.)
и после этого мы выгружаем в файл cf  новую конфу и на другом сервере получаются другие названия таблиц и полей в SQL .
Соответственно на двух серверах разные таблицы и поля . Наша программа клиент работает на первом сервере и не работает на втором (она ведь знает только таблицы сервера разработки).

Вопрос такой как переносить изменения конфигурации 1с (а следовательно и таблиц SQL) между серверами так чтобы названия таблиц и полей были одинаковыми.

Если есть решение в 1с хорошо. Если в SQL тоже неплохо.
Может быть достаточно перенести таблицу config ?(или нужно что то еще).

Важно что нам не надо переносить данные с сервера разработки на рабочий сервер- надо переносить только изменения конфигурации так чтобы  оба сервера были синхронны .

Зараннее благодарен за ответ

Александр

Valeri Prosvirnin

unread,
Jul 2, 2013, 10:27:23 AM7/2/13
to enterprise...@googlegroups.com

Надо строить запросы к SQL динамически, определяя имена таблиц и полей БД с помощью функции ПолучитьСтруктуруХранения

Герман Кудяков

unread,
Jul 3, 2013, 7:49:27 AM7/3/13
to enterprise...@googlegroups.com
Попробуйте генерить вьюхи с фиксированными именами и строить запрос к ним, уже обсуждалось на форуме

Вопрос такой как переносить изменения конфигурации 1с (а следовательно и таблиц SQL) между серверами так чтобы названия таблиц и полей были одинаковыми.

Достаточно перенести  изменения config
процитирую тут свою статью 2008 года 

Мгновенный перенос изменений конфигурации между копиями ИБ 8.*

Очень часто при разработке используется несколько копий базы одной конфигурации.

Одна для разработчиков, в которой можно накидать изменения и поверхностно их проверить. Другая для тестеров которые уже набили свои данные и хотят их сохранить при очередном обновлении конфигурации. Другая база с оригинальными данными.. Но вообще вот такой зоопарк имеется у меня.


Дак вот все эти копии для плодотворной работы коллектива приходится обновлять каждый раз когда тестеры натыкаются на очередную по их мнению "не преодолимую ошибку". 

Немного напомню у том как это можно сделать стандартными методами

Есть два пути .. через распределенку, и через Владивосток.

Через распределенку все просто передаем изменения из главного узла в перефирийные. 
Чем плох данный способ .. 
  • Во первых нужно создавать план обмена.
  • Во вторых каждый раз при создании копии (не начального образа) переопределять главный узел.
  • Ну и читать каждый раз изменения из Xml файла, запуская вначале предприятие и потом конфигуратор.
Ну и через Владивосток это самый распространенный способ:
  1. Выгрузить конфигурацию (УПП 1.2.9 - 5 мин)
  2. Загрузить конфигурацию без сравнения (УПП 1.2.9 - 9 мин).
  3. Обновить конфигурацию (УПП 1.2.9 - 4 мин)
Итого: (5 + 13*n) где n- колличество баз.
О недостатках этого способа нужно говорить? 

Есть еще один путь .. пользуюсь им давно не так давно но поражаюсь почему до этого все ходил мимо и не замечал таких простых вещей.

О том как хранятся данные конфигурации писалось давно и много в том числе и мной.
Обратил я внимание на колонку "Modified" в этой колонке сохраняется дата последней модификации записи конфигурации. Вот это основная наша соломинка

Теперь спустимся ну уровень ниже. Для того что передать изменения в конфигурацию нужно сделать записи в Таблицу ConfigSave. При чем не всей конфигурации (как при загрузке без сравнения), а только измененных. Измененной запись будем считать если дата изменения "Modified" ее в основной конфигурации больше чем в копии. Можно еще сравнивать по размеру ну я считаю что это лишнее.
Ну собственно записи добавляем следующим запросом в EM или Enterprise Integrator 

В запросе нужно поменять только названия баз соответствующих вашим.

 

 

Имя БД
Описание
dogovor_81Основная БД из которой передаем изменения конфигурации.
Dogovor81_TestКопия БД в которую нужно передать изменения конфигурации.

 

INSERT INTO Dogovor81_Test.dbo.ConfigSave
Select ConfigNew.* From dogovor_81.dbo.Config as ConfigNew
Left JOIN
Dogovor81_Test.dbo.Config as ConfigOld
ON ConfigNew.FileName = ConfigOld.FileName
Where ConfigNew.Modified>ConfigOld.Modified or ConfigOld.Modified is Null

Выполняем запрос, перечитываем конфигурацию и обновляемся. 
Теперь на сладкое... о достоинствах.
  1. Запрос выполняет меньше 2 сек.
  2. Обновление ~~60 сек. записей значительно меньше.
  3. Устраняется колоссальная избыточность перезаписи одинаковых данных.
Ограничения:
  1. Перед выполнением запроса конфигурация в которую необходимо передать изменения должна соответствовать конфигурации БД.
  2. Разумеется только для серверного варианта.

вторник, 2 июля 2013 г., 18:12:09 UTC+4 пользователь Alex Levites написал:

Alex Levites

unread,
Jul 10, 2013, 9:24:58 AM7/10/13
to enterprise...@googlegroups.com
Герман большое спасибо за помощь
Ваша статья нам помогла

Александр


вторник, 2 июля 2013 г., 16:03:50 UTC+4 пользователь Alex Levites написал:
Мы ведем разработку в Net клиента для базы данных которая разрабатывается в 1с8(исторически так сложилось)
Reply all
Reply to author
Forward
0 new messages