Показать сообщение отдельно
Старый 18.09.2017, 12:57   #102
Igor_482
VIP
 
Аватар для Igor_482
 
Регистрация: 03.09.2008
Сообщений: 174
Сказал(а) спасибо: 34
Поблагодарили 794 раз(а) в 113 сообщениях
Вес репутации: 367
Igor_482 - просто великолепная личностьIgor_482 - просто великолепная личностьIgor_482 - просто великолепная личностьIgor_482 - просто великолепная личностьIgor_482 - просто великолепная личностьIgor_482 - просто великолепная личностьIgor_482 - просто великолепная личность
По умолчанию

Цитата:
Сообщение от De_mon Посмотреть сообщение
Цитата:
Сообщение от BlackAvatar Посмотреть сообщение
Добрый день! Как наиболее просто перенести базу материалов с 10й версии на более раннюю, например 9ку?
Экспорт номенклатуры в DBF и загрузки в новую базу с сопоставлением полей.
Для случай когда образ БД невозможно вернуть к более ранней версии какими либо другими способами, есть такое решение:

скрипт


Код HTML:
var FSO              = NewCOMObject('Scripting.FileSystemObject'),
    FDBServ          = 'localhost',
    FBSPort          = 14357,
    FBCFile          = FSO.GetParentFolderName(Action.Control.Owner.Owner.Owner.ExeName) + '\\' + 'fbclient.dll',
    FDBFile          = new Object(),
    NewFile          = new String(),
    ConnectionString = new String(),
    Path             = system.askFileName('FDB');

if (FSO.FileExists(Path)) {
  try {
    FDBFile = FSO.GetFile(Path);
    system.sleep(200);
    NewFile = FSO.GetParentFolderName(FDBFile.Path) + '\\' + FSO.GetBaseName(FDBFile.Name) + '_V9.FDB';
    FDBFile.Copy(NewFile);
    system.log('Новый файл БД: ' + NewFile);
    system.sleep(200);
    ConnectionString = 'Driver={Firebird/InterBase(r) driver};' +
                       'Dbname=' + FDBServ + '/' + FBSPort + ':' + NewFile + ';' +
                       'CHARSET=NONE;' +
                       'PWD=masterkey;' +
                       'UID=SYSDBA;' +
                       'Client=' + FBCFile + ';';
    system.log('Строка соединения: ' + ConnectionString);
    var Connection        = NewCOMObject('ADODB.Connection'),
        Recordset         = NewCOMObject('ADODB.Recordset'),
        Query             = 'Select\n' +
                            '  PARAM_BASE.PARAM, ' +
                            '  PARAM_BASE.VALUE_P\n' +
                            'From\n' +
                            '  PARAM_BASE';
    try {
      Connection.Open(ConnectionString);
      Recordset.ActiveConnection = Connection;
      Recordset.CursorType = 3;
      Recordset.LockType   = 3;
      Recordset.Open(Query);
      Recordset.MoveFirst();
      while (Recordset.EOF == 0) {
        if (Recordset.Fields.Item('PARAM').Value == 'VERSION') {
          system.log('Текущее значение: ' + Recordset.Fields.Item('VALUE_P').Value);
          Recordset.Fields.Item('VALUE_P').Value = 10; //4 - БМ v.8; 10 - БМ v.9; 14 - БМ v.10
          system.log('Новое значение: ' + Recordset.Fields.Item('VALUE_P').Value);
          Recordset.Update();
        };
        Recordset.MoveNext();
      };
    } catch (Error) {
      Recordset.Close();
      Connection.Close();
      alert(decodeURIComponent(escape(Error.message)));
      Action.Cancel();
    };
    Recordset.Close();
    Connection.Close();
    system.log('Работа скрипта завершена.');
    alert('Файл БД скопирован и преобразован.');
  } catch (Error) {
    alert('Копировать файл БД неудалось, возможно файл занят.\n' +
          decodeURIComponent(escape(Error.message)));
    Action.Cancel();
  };
};
[свернуть]


Работает в 9-й версии, позволяет выбрать образ БД, скопировать его и откатить эту копию до 9-й версии (переписывает параметр содержащий значение по которому БазисМебельщик определяет версию подключаемой БД, возможно это не все, что необходимо сделать с образом, но работает). Для работы скрипта необходим установленный ODBC драйвер FireBird.
Igor_482 вне форума   Ответить с цитированием Вверх
6 пользователя(ей) сказали cпасибо: