- Общая информация
- Состав приложения
- Системные требования
- Установка приложения
- Шаг 1: Создание пользователя SQL Server
- Шаг 2: Установка приложений
- Шаг 3: Создание базы данных
- Шаг 4: Создание предприятия
- Шаг 5: Создание роли с ограниченными правами
- Шаг 6: Настройка импорта данных (ImportRK.exe) в локальном складе - Важно!
- Шаг 7: Установка дополнительного (удаленного) рабочего места SH4 HeadOffice
- Обновление системы
- Интеграция с R-Keeper
- Решение проблем
- Проблемы, ошибки и способы их решения
- Данные не экспортируются, в логе только операции login и logout
- Зацикливание комплекта
- Ошибка "DB Error" при импорте данных из RK7
- Ошибка "Could not convert variant of type (Null) into type (Integer)"
- Слишком большие значение отпускных цен в свойствах товаров
- Восстановление БД SHO4, используя сервер справочников RK7 и БД локального склада SH4
Общая информация
Система StoreHouse HeadOffice v4 (далее SHO4) предназначена для централизированного управления словарями и построения отчетов в разрезе всех ресторанов сети.
В отличии от предыдущей версии StoreHouse BackOffice v3, в версии 4 изменился принцип работы - для обновления словарей в локальных ресторанах требуется подключение из центрального офиса к локальным ресторанам, а не наоборот.
Система отчетов также изменилась - в SHO4 не хранятся накопительные данные по локальным точкам, а при построении отчета в центральном офисе происходит подключение к удаленным локальным серверам StoreHouse v4
Состав приложения
Примечание: Дистрибутив SHO4 доступен по ссылке ftp://ftp.ucs.ru/storehouse/SH4 HeadOffice
Система состоит из следующих модулей:
- SH HeadOffice Administrator - административное приложения для создания базы данных и управления пользователями системы
- SH HeadOffice Editor - основное приложение системы. Предназначено для управления словарями, импорта/экспорта данных
- SH HeadOffice Reports - приложение для создания различных отчетов по всем ресторанам сети
- SH Application Server - специальный многопоточный сервер приложений
В качестве СУБД используется Microsoft SQL Server (далее MSSQL). Рекомендуется использовать версию SQL Server 2012 (коммерческая версия) или SQL Server 2012 Express Edition (бесплатная версия), разрядность не имеет значения.
Примечание: Пошаговая установка MSSQL Express Edition на примере версии 2005 описана в статье.
Системные требования
Серверная часть
Требования к серверной части определяются требованиями к СУБД, с которой будет работать SHO4 - ниже описаны требования и рекомендации для СУБД SQL Server 2012, приведенные на оф. сайте Microsoft https://msdn.microsoft.com/ru-ru/library/ms143506(v=sql.110).aspx
Следующие требования и рекомендации относятся как к 32-разрядной, так и к 64-разрядной версиям SQL Server 2012.
Общие рекомендации
- Рекомендуется запускать SQL Server 2012 на компьютерах с файловой системой NTFS. Установка SQL Server 2012 в файловой системе FAT32 поддерживается, но не рекомендуется, поскольку эта система менее защищена, чем NTFS.
- Установка SQL Server не допускается на диски со сжатием, сетевые диски и диски, доступные только для чтения
- Для установки SQL Server 2012 на компьютере под управлением Windows Vista с пакетом обновления SP2 или Windows Server 2008 с пакетом обновления SP2, необходимо предварительно установить обновления для платформы .NET Framework 3.5 с оф. сайта Microsoft https://support.microsoft.com/ru-ru/kb/956250, для компьютеров под управлением Windows 7 с пакетом обновления SP1, Windows Server 2008 R2 с пакетом обновления SP1, Windows Server 2012 или Windows 8 и выше, это обновление уже установлено
- Установка SQL Server 2012 через клиент службы терминалов не поддерживается
Требования к оборудованию
Копмонент | Требования |
Память (ОЗУ) |
Минимальные:
Рекомендуемые:
|
Быстродействие процессора |
Минимальные:
Рекомендуемые: 2,0 ГГц и выше |
Тип процессора |
|
Жесткий диск | Для SQL Server 2012 требуется как минимум 6 ГБ свободного места на диске |
Требования к операционной системе
Полный перечень версий и редакций ОС Windows, совместимых с SQL Server 2012, приведен на оф. сайте Microsoft https://msdn.microsoft.com/ru-ru/library/ms143506(v=sql.110).aspx
Клиентская часть
- ОС Windows XP Professional SP3 и выше
- 32-разрядный (x86) или 64-разрядный (x64) процессор с тактовой частотой 1 гигагерц (ГГц) или выше
- 512 мегабайт (МБ) (для 32-разрядной системы) или 1 ГБ (для 64-разрядной системы) оперативной памяти (ОЗУ)
- 100 мегабайт (МБ) свободного пространства на жестком диске
Установка приложения
Шаг 1: Создание пользователя SQL Server
Все модули SHO4 для работы требуют подключения к БД MSSQL - можно использовать встроенную учетную запись 'sa', но рекомендуется создать отдельного пользователя, от имени которого будут осуществляться все обращения к серверу MSSQL.
Для создание нового пользователя MSSQL необходимо запустить среду "SQL Server Management Studio", выбрать рабочий экземпляр SQL-cервера и перейти в раздел Безопасность ⇒ Имена входа. Вызвать меню по правой кнопке мыши и выбрать пункт "Создать имя входа ...".
В разделе "Общие" необходимо указать имя входа, например sho4, установить переключатель в положение "Проверка подлиности SQL Server" , ввести пароль и подтверждение пароля, убрать опцию "Требовать использования политики паролей". Остальные параметры оставляем по умолчанию
Важно: При создании пользователя имя входа и пароль должны быть разными - это требование политики безопастности MS SQL Server!
Далее переходим в раздел "Серверные роли", отмечаем все доступные роли и подтверждаем создание пользователя нажатием кнопки "ОК"
Шаг 2: Установка приложений
Важно: Для запуска клиентских приложений SHO4 требуется электронный ключ защиты USB Novex Stealth II, прописанный специальным образом - ключ должен быть установлен на каждом рабочем месте! Сервер, если на нем нет рабочего места, не требует ключа защиты.
Примечание: ключ защиты для SHO4 не имеет ограничений по сроку действия - он прописывается один раз с бессрочной лицензией.
Для установки скопируйте все файлы из дистрибутива в отдельную директорию, например D:\UCS\SHO4.
Для запуска редактора (SHO4edit.exe) необходимы дополнительные файлы из станлартного дистрибутива StoreHouse v4 той версии, с которой планируется использование SHO4:
- BORLNDMM.DLL
- DELPHIMM.DLL
- RTL60.BPL
- SdbCli.dll
- MIDAS.DLL
Кроме указанных библиотек для запуска SHO4edit.exe требуется библиотека SHTR.dll, которую можно взять на фтп ftp://ftp.ucs.ru/storehouse/sh4/shtr.dll/RK7/SHTR.dll
Создайте несколько разделов в реестре:
Примечание: при установке системы на 64-битных операционных системах обязательно ознакомьтесь с пунктом "Тонкости развертывания системы на 64-х битных ОС".
В этом разделе создайте следующие строковые переменные (String Value):
- DBPath - перечень баз данных, к которым требуется подключение. Значения разделяются знаком ";" ("точка с запятой"). Значение параметра необходимо указывать в виде:
<имя компьютера-сервера>\<имя экземпляра сервера SQL>:<имя базы данных>
Например, Server1\SQLExpress:sho4_data1 или для нескольких баз Server1\SQLExpress:sho4_data1; Server2\SQLServer2005:sho4_data2
где:
- Server1 и Server 2 - имена компьютеров, на которых установлены СУБД SQL Server (могут быть одинаковы)
- SQLExpress и SQLServer2005 - экземпляры баз данных SQL Server
- sho4_data1 и sho4_data1 - базы данных SQL Server. На данном шаге можно не указывать эти значение, т.к. базу данных мы будем создавать на следующем этапе
- Db_user - имя пользователя, с помощью которого осуществляются все обращения к SQL Server. Необходимо указать пользователя, которого мы создали ранее
- Db_pwd - пароль пользователя, указанного в параметре Db_user
2. Раздел [HKEY_LOCAL_MACHINE\SOFTWARE\UCS\SHO4COM] - необходим для возможности обращения к серверу через DCOM. Используется приложением SH4 HeadOffice Reports (SHO4Rpt.exe)
В этом разделе создайте точно такие же строковые переменные, как и в разделе [HKEY_LOCAL_MACHINE\SOFTWARE\UCS\SHO4editor]
Важно: Сервер приложений (SHAppSrv.exe), который вызывается при запуске приложения SH4 HeadOffice Reports, может подключаться только к одной базе данных SHO4, поэтому в качестве значения параметра DBPath в разделе [HKEY_LOCAL_MACHINE\SOFTWARE\UCS\SHO4COM] можно указать путь только к одной базе!
Примечание: Для успешного запуска сервера приложений SHAppSrv.exe требуется файл SHAppSrv.txt, в котором формируется лог работы - если файл отсутствует, обязательно создайте его вручную (пустой)
После этого информация в реестре должна выглядеть примерно так (для одной базы данных):
[HKEY_LOCAL_MACHINE\SOFTWARE\UCS\SHO4editor] DBPath=Server1\SQLExpress:sho4_data1 Db_user=sho Db_pwd=ucs [HKEY_LOCAL_MACHINE\SOFTWARE\UCS\SHO4COM] DBPath=Server1\SQLExpress:sho4_data1 Db_user=sho Db_pwd=ucs
Или в случае использования нескольких баз данных (см. примечание выше):
[HKEY_LOCAL_MACHINE\SOFTWARE\UCS\SHO4editor] DBPath=Server1\SQLExpress:sho4_data1; Server2\SQLServer2005:sho4_data2 Db_user=sho Db_pwd=ucs [HKEY_LOCAL_MACHINE\SOFTWARE\UCS\SHO4COM] DBPath=Server1\SQLExpress:sho4_data1 Db_user=sho Db_pwd=ucs
Важно: После выполнения всех настроек, необходимо один раз запустить SHAppSrv.exe вручную для регистрации COM-объектов. В дальнейшем сервер будет вызываться автоматически при запуске приложения SHO4Rpt.exe.
Шаг 3: Создание базы данных
Для создания базы данных запустите приложение SH HeadOffice Administrator (SHO4Admin.exe) - при запуске приложение не запрашивает пароль
Далее выберите в меню Прочее ⇒ Создать базу данных...
В окне создания базы данных заполните следующие поля:
- Имя сервера - укажите имя сервера SQL в виде <имя компьютера>\<имя экземпляра>, например Server1\SQLExpress
- Имя БД - укажите имя базы данных, которую хотите создать. Если в реестре уже задано имя базы данных, укажите это же имя, если нет - укажите произвольное имя и затем пропишите его в реестре, как описано выше
- Директория БД - укажите полный путь к директории, в которой будет создана база данных. Необходимо указывать путь к существующей директории.
- Флаг "заполнить первоначальными данными" должен быть отмечен (по умолчанию)
Подтвердите создание базы данных нажатием кнопки ОК - если процесс пройдет успешно, появится соответствующее сообщение.
Если необходимо создать еще одну базу данных - повторите действия, описанные выше.
После создания базы можно проверить подключение к ней - выберите меню "Файл" ⇒ "Соединение с базой данных..". Появится окно с параметрами подключения - для входа используйте имя пользователя Admin без пароля.
Сброс пароля администратора
Если пароль для пользователя Admin утерян, можно сбросить его значение с помощью SQL-запроса:
SHO 4.46 и ниже:
update sho_users set pass = 'D41D8CD98F00B204E9800998ECF8427E' where rid = 0
SHO 4.48 и выше
update sho4SHO_USERS set pass = 'D41D8CD98F00B204E9800998ECF8427E' where rid = 0
Запрос можно выполнить в среде SQL Server Management Studio.
Шаг 4: Создание предприятия
Предприятие - это единица, которая определяет локальный ресторан. При создании базы данных и заполнении ее первоначальными данными создается только одна корневая группа предприятий с названием "Корпорация" - вы можете изменить ее.
Важно: Если SHO4 планируется использовать совместно с RK7 или RBO, предприятия НЕ ДОЛЖНЫ создаваться вручную - они будут сформированы автоматически при импорте данных из этих приложений.
Шаг 5: Создание роли с ограниченными правами
Для корректной работы SHO4 в удаленных (локальных) складах пользователи не должны иметь возможности редактировать основные словари.
Для этого необходимо создать специальную роль в локальном SH4 и назначить всем пользователям эту роль.
Создание роли:
- Запустите Sdb Server manager (Sdbman.exe)
- Выберите пункт меню "Прочее" ⇒ "Выполнить запрос"
- В поле "Процедура:" введите CreateHoRole, а в поле "Библиотека:" выберите библиотеку SH_CRTDB.DLL из рабочей директории локального SH4 (должен быть указан полный путь)
- Выполните процедуру с помощью меню "Прочее" ⇒ "Выполнить" либо выберите соответствующую иконку "Выполнить" на панели задач
- Если процедура выполнена успешно, на закладке "Результаты запросы" будет выдано сообщение "Процедура выполнена успешно"
В итоге будет создана роль "Head office", которую нужно назначить всем пользователям.
Если в локальном складе были созданы другие роли, отличные от роли "Public", и их нужно сохранить, необходимо использовать процедуру AlterHoRole, которая позволяет установить необходимые права для уже созданной роли (или ролей).
Выполнение этой процедуры аналогично вышеописанному процессу.
Важно: Выполнение процедуры AlterHoRole затрагивает все существующие роли!
Примечание: Процедуры CreateHoRole и AlterHoRole доступны начиная с версии SH 4.38.62
Шаг 6: Настройка импорта данных (ImportRK.exe) в локальном складе - Важно!
Технология работы StoreHouse HeadOffice предполагает, что базовые словари создаются и редактрируются только в SHO4 - в локальных складах редактирование словарей должно быть запрещено.
Для исключения нарушения целостности данных, импорт в локальном складе должен использовать специальную версию SHTR.DLL, в описании которой присутсвует фраза "EMPTY DISHLIST" (исключение импорта меню)
На момент последней редакции данного документа специальная библиотека SHTR.DLL имела версию 1.24.21 и размещалась на фтп по ссылке ftp://ftp.ucs.ru/storehouse/SH4 HeadOffice/SHTR_1_24_21.zip
Библиотеку SHTR.DLL необходимо скопировать в рабочий каталог локального SH4, откуда происходит запуск приложения ImportRK.exe
Начиная с версии склада 4.95.268 добавлен флаг "StoreHouse иcпользует словари SH HeadOffice", который определяет, импортируются или нет словари в SH4 из R-Keeper - флаг устанавливается через модуль IRkSetup.exe версии 4.56 и выше:
Примечание: Модуль ImportRK.exe более ранних версий не будет работать с версией склада 4.95 и выше
Важно: Несмотря на появление флага "StoreHouse иcпользует словари SH HeadOffice" рекомендуется всегда устанавливать специальную версию SHTR.DLL на случай отключения флаге.
Шаг 7: Установка дополнительного (удаленного) рабочего места SH4 HeadOffice
Перед установкой дополнительного рабочего места необходимо настроить SQL Server для возможности удаленного подключения.
Данный процесс подробно описан в следующей статье. Дальнейшее описание подразумевает, что SQL Server сконфигурирован и может обслуживать удаленные подключения клиентов по протоколу TCP/IP.
Также следует убедиться, что на клиенте и на сервере отключены файерволы (по крайней мере, на период конфигурирования), при необходимости проверить, что в настройках файерволов открыты все необходимые порты.
Для установки дополнительного рабочего места выполните следующие действия:
- скопируйте содержимое директории SHO4 (или дистрибутива - см. Шаг 2) на компьютер, где планируется установка доп. рабочего места
- в реесте пропишите путь к базе данных, к которой требуется подключение. Для этого создайте раздел HKEY_LOCAL_MACHINE\SOFTWARE\UCS\SHO4editor и в нем три переменные типа String:
- DB_user - имя пользователя для подключения к SQL Server
- DB_pwd - пароль пользователя, указанного в параметре DB_user
- DBPath - путь к базе данных. Путь должен быть указан в формате <имя_сервера>\<имя_экземпляра>:<имя_базы_данных> , где <имя_сервера> - имя сервера (или IP адрес), к которому требуется подключение, <имя_экземпляра> - имя экземпляра SQL Server, с которым требуется установить соединение, <имя_базы_данных> - имя базы данных, с которой необходимо работать. Например, если требуется прописать подключение к серверу MYSERVER (IP адрес 192.168.0.100), на котором запущен экземпляр SQL Server с именем SQLEXPRESS, и базой данных sho4, то срока будет выгдядеть так: MYSERVER\SQLEXPRESS:sho4 или 192.168.0.100\SQLEXPRESS:sho4
Примечание: В реестре можно прописать несколько подключение к разным базам и разным серверам - для этого раздлеляйте записи с помощью символа ";" ("точка с запятой"). Например: 192.168.0.100\SQLEXPRESS\sho4_work;192.168.0.100\SQLEXPRESS\sho4_reserve
Важно: Если SQL Server настроен на прослушивание нестандартного порта (стандартный порт - 1433), то в строке подключения необходимо указать значение этого порта через запятую после имени (или IP адреса) сервера. Например, 192.168.0.100,3456\SQLEXPRESS:sho4 определяет подключение к серверу 192.168.0.100 через порт 3456
Обновление системы
Обновление версии SH4 HeadOffice включает в себя обновление исполняемых файлов, библиотек и базы данных.
Обновление базы данных происходит методом создания новой БД и копирования данных из текущей (рабочей) БД
Для обновления версии необходимо выполнить следующие действия:
- Сделать копию всей рабочей директории SHO4 и резервную копию (backup) рабочей SQL-базы SHO4 (с помощью среды "SQL Server Management Studio")
- Скопировать с FTP ftp://ftp.ucs.ru/storehouse/SH4 HeadOffice дистрибутив новой версии SHO4, распаковать его и заменить в рабочей директории все файлы, за исключением файла rk7tosh4.ini
- Запустить приложение SHO4Admin.ехе, не подключаясь к базе данных, перейти в меню "Прочее" ⇒ "Создать базу данных".
- В окне создания БД заполнить все поля (аналогично шагу 3) - имя новой БД указать отличное от текущей (рабочей) БД и обязательно снять флаг "Заполнить первоначальными данными"
- Прописать имя новой БД в реестре (см. шаг 2)
- Установить соединение с новой (чистой) БД, выбрать в меню "Пользователи" ⇒ "Копировать данные"
- В поле "БД источник" указать имя текущей (рабочей) БД - в этом поле необходимо указать ТОЛЬКО имя БД, без указания имени сервера и экземпляра
- В поле "Файл скриптов" указать файл скрипта, соотв. текущей (рабочей) версии - файл скрипта называется fromA_AA_xx.sql (А_АА - индекс текущей версии) и находится в подкаталоге \upgrade\toB_BB_00 (B_BB - индекс устанавливаемой версии). Например, при обновлении версии 4.22.хх до версии 4.28.хх, необходимо использовать скрипт from4_22_xx.sql из подкаталога upgrade\to4_28_00\
Важно: Версия, указанная в названии скрипта, соотв. версии базы данных, а не версии программы. Соответствие версии БД и версии исполняемых файлов можно посмотреть в файле SHO4.xls (ftp://ftp.ucs.ru/storehouse/SH4 HeadOffice/SHO4.xls)
Примечание: Если в подкаталоге \upgrade\ отсуствует каталог toB_BB_00, это значит, что версия B_BB не содержит специфичных изменений и в процессе обновления необходимо применить скрипт из каталога с индексом, соотв. более ранней и наиболее близкой версии.
Например, для версий 4.50.64, 4.51.66 и 4.52.67 отсутсвуют подкаталоги с соотв. индексами - в процессе обновления необходимо использовать скрипты из подкаталога \upgrade\to4_48_49_00
Примечание: Если в подкаталоге \upgrade\toB_BB_00 отстувуют скрипты fromA_AA_xx.sql , соотв. текущей версии, необходимо сначала выполнить обновление на более раннюю версию.
Например, при обновлении версии 4.40.51 до версии 4.52.67 сначала надо выполнить скрипт \upgrade\to4_45_00\from4_40_xx.sql, затем скрипт \upgrade\to4_48_49_00\from4_45_xx.sql
Интеграция с R-Keeper
R-Keeper v7
Связь с кассовой системой R-Keeper v7 (далее RK7) обеспечивает наполнение БД SHO4 данными о предприятиях (ресторанах) и товарах (меню). При использовании SHO4 предполагается, что система R-Keeper v7 также сконфигурирована для централизированого управления сетью предприятий (ресторанов).
Для связи SHO4 c RK7 необходимо скопировать в рабочий каталог SHO4 следующие файлы из дистрибутива используемой версии RK7:
- dllman.dll
- errors32.dll
- Netkern.dll
- TCPSOC.dll
- Thread32.dll
- rk7tosh4.dll
- rk7tosh4.ini
Примечание: Файлы rk7tosh4.dll и rk7tosh4.ini находятся в каталоге \bin\sh4tr\ полного дистрибутива RK7
Примечание: Если некоторые из перечисленных выше файлов уже присутствуют в рабочем каталоге SHO4, их необходимо перезаписать.
В файле rk7tosh4.ini необходимо прописать имя рабочего сервера справочников RK7 и уникальное имя клиента:

Решение проблем
Сложности развертывания системы на 64-х битных ОС
Проблема: Невозможно зарегистрировать midas.dll
Решение: midas.dll необходимо скопировать в директорию {WINDOWS}\SysWow64
Проблема: при запуске SH невозможно выбирать база данных, появляются ошибки типа "недопустимое подключение" или "недопустимая спецификация авторизации" при попытке создать БД.
Сущность проблемы: некорректное определение целевой ветки реестра для 32-х битных приложений в 64-х битной среде.
Решение: вместо стандартной ветки реестра [HKEY_LOCAL_MACHINE\SOFTWARE\UCS\ надо использовать следующую ветку: [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\UCS\
Пример:
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\UCS\SHO4Editor]
"Db_user"="sho"
"Db_pwd"="ucs"
"DBPath"="127.0.0.1,1433:SHO"
Перенос данных из SH4 в SHO4
Важно: Операция переноса данных из локальной базы склада выполняется единоразово!
Последовательность действий:
- С помощью SHO4Admin.exe создать новую базу без заполнения первоначальных данных
- Создать корневую вершину для предприятий с помощью скрипта "Создание корневой группы предприятий.sql"
- С помощью SHO4edit.exe импортировать предприятия из R-Keeper BackOffice Editor (если используется R-Keeper v6) либо из сервера справочников R-Keeper v7 (меню "Файл" \ "Импорт")
- С помощью SHO4edit.exe импортировать из локального склада словари (операция "Файл" \ "Импорт" \ "Импорт данных SH4")
- Удалить все меню из SHO4 - для этого выполнить два запроса "Удаление меню - 1.sql" и "Удаление меню - 2.sql"
- На всякий случай выполнить запрос "Добавление точки в коды товаров.sql". чтобы в дальнейшем не возникало ошибки неуникальности кодировки товаров
- Если остались неудаленные товары в группе "Меню Ресторана", удалить их вручную
- Установить версию базы, выполнив скрипт "Установка версии БД.sql" - перед выполнение предварительно в скрипте указать корректную версию базы
Примечание: Для выполнения скриптов можно использовать любую доступную среду, например "SQL Server Management Studio".
После выполненных действий информировать Заказчика о следующем:
- Необходимо связать товары с комплектами вручную (рекомендуется заранее предупредить Закзачика о данной операции)
- Проверить и при необходимости переназначить категории на всех товарах из меню ресторана
- Проверить и при необходимости переназначить ставки налогов для всех товаров из меню
- Привести меню и корреспондентов в соответствие с локальными точкам (запреты/разрешения)
Используемые скрипты
SHO 4.46 и ниже | SHO 4.48 и выше | |
create procedure dbo.sp_POPULATE_DEPARTS as begin declare @DEPName varchar(47) set @DEPName = 'Корпорация' insert into dbo.DEPARTS ( RID,PARENT_REF,NAME, ISGROUP, DELETED ) values (1,NULL,@DEPName,2,0) end GO set IDENTITY_INSERT dbo.DEPARTS ON GO exec dbo.sp_POPULATE_DEPARTS GO set IDENTITY_INSERT dbo.DEPARTS OFF GO |
create procedure dbo.sp_POPULATE_DEPARTS
as begin declare @DEPName varchar(47) set @DEPName = 'Корпорация' insert into dbo.sho4DEPARTS ( RID,PARENT_REF,NAME, ISGROUP, DELETED ) values (1,NULL,@DEPName,2,0) end GO set IDENTITY_INSERT dbo.sho4DEPARTS ON GO exec dbo.sp_POPULATE_DEPARTS GO set IDENTITY_INSERT dbo.sho4DEPARTS OFF GO |
Примечание: Если процедура dbo.sp_POPULATE_DEPARTS уже существует в БД, для ее изменения вместо оператора create необходимо использовать оператор alter
SHO 4.46 и ниже | SHO 4.48 и выше | |
create procedure sp_Delete_SubTree (@ROOT_REF integer) as begin declare @RID integer declare cr cursor LOCAL for select RID from dbo.GOODS where EXT_INFO <> 0 open Cr fetch next from Cr into @RID while @@FETCH_STATUS = 0 begin exec dbo.sp_DELETE_GOODS 'Admin',@RID fetch next from Cr into @RID end close cr deallocate cr declare crT cursor LOCAL for select RID from dbo.fn_GoodsTree (@ROOT_REF) where RID <> @ROOT_REF order by IND desc open crT fetch next from crT into @RID while @@FETCH_STATUS = 0 begin delete from dbo.GOODSTREE where RID = @RID fetch next from crT into @RID end close crT deallocate crT end go |
create procedure sp_Delete_SubTree
(@ROOT_REF integer) as begin declare @RID integer declare cr cursor LOCAL for select RID from dbo.sho4GOODS where EXT_INFO <> 0 open Cr fetch next from Cr into @RID while @@FETCH_STATUS = 0 begin exec dbo.sp_DELETE_GOODS 'Admin',@RID fetch next from Cr into @RID end close cr deallocate cr declare crT cursor LOCAL for select RID from dbo.fn_GoodsTree (@ROOT_REF) where RID <> @ROOT_REF order by IND desc open crT fetch next from crT into @RID while @@FETCH_STATUS = 0 begin delete from dbo.sho4GOODSTREE where RID = @RID fetch next from crT into @RID end close crT deallocate crT end go |
Примечание: Если процедура sp_Delete_SubTree уже существует в БД, для ее изменения вместо оператора create необходимо использовать оператор alter
SHO 4.46 и ниже | SHO 4.48 и выше | |
update dbo.GOODS set Abbr_text = Abbr_text+'.' where SUBSTRING ( Abbr_text,Len(Abbr_text),1)<>'.' and ext_info <>0 |
update dbo.sho4GOODS set Abbr_text = Abbr_text+'.' where SUBSTRING ( Abbr_text,Len(Abbr_text),1)<>'.' and ext_info <>0 |
SHO 4.46 и ниже | SHO 4.48 и выше | |
update dbo.DATABASEPARAMS set db_version=43800 |
update dbo.sho4DATABASEPARAMS set db_version=44900 |
Проблемы, ошибки и способы их решения
Данные не экспортируются, в логе только операции login и logout
Описание проблемы:
При рассылке данных по локальным складам ошибок нет, но данные не экспортируются - в логе только две операции login и logout.
Решение:
- Получаем список всех предприятий в базе и запоминает RID предприятия, по которому не происходит рассылка данных:
select * from departs
- Определяем количество параметров (строк), которые нужно добавить
select * from repl_map where depart_ref= <RID предприятия, где точно происходит репликация и смотрим количество строк>
- Вставляем необходимые строки для предприятия, у которого проблемы
insert into repl_map (depart_ref,table_id,last_date,pending_date,qerrors) values (<RID предприятия из п.1>,1,0,0,0) insert into repl_map (depart_ref,table_id,last_date,pending_date,qerrors) values (<RID предприятия из п.1>,2,0,0,0) insert into repl_map (depart_ref,table_id,last_date,pending_date,qerrors) values (<RID предприятия из п.1>,3,0,0,0) insert into repl_map (depart_ref,table_id,last_date,pending_date,qerrors) values (<RID предприятия из п.1>,4,0,0,0) insert into repl_map (depart_ref,table_id,last_date,pending_date,qerrors) values (<RID предприятия из п.1>,5,0,0,0) insert into repl_map (depart_ref,table_id,last_date,pending_date,qerrors) values (<RID предприятия из п.1>,6,0,0,0) insert into repl_map (depart_ref,table_id,last_date,pending_date,qerrors) values (<RID предприятия из п.1>,7,0,0,0) insert into repl_map (depart_ref,table_id,last_date,pending_date,qerrors) values (<RID предприятия из п.1>,8,0,0,0) insert into repl_map (depart_ref,table_id,last_date,pending_date,qerrors) values (<RID предприятия из п.1>,9,0,0,0) insert into repl_map (depart_ref,table_id,last_date,pending_date,qerrors) values (<RID предприятия из п.1>,10,0,0,0)
- Проверяем, что все добавилось
select * from repl_map where depart_ref = <RID предприятия из п.1>
Примечание: В некоторых случаях после выполнения операций требуется сделать backup/restore SQL-базы
Зацикливание комплекта
Описание проблемы:
Операция рассылки данных (все словари целиком) заканичвается без явных ошибок, но изменения не отображаются в локальных базах
Решение проблемы:
Для начала необходимо проверить в детализации протокола рассылки, какими операциями заканчивается процесс рассылки - если в конце списка операций отсутсвуют операции login и/или logout, это свидетельствует о проблеме "зацикливания" комппекта
Для анализа проблемы необходимо создать две вспомогательные фунции в БД. В связи с тем, что начиная с версии 4.48 в наименование таблиц БД добавлен префикс "sho4", скрипт создания фунцкций будет различаться для разных версий:
SHO 4.46 и ниже | SHO 4.48 и выше | |
Функция fn_CompParents1 |
create function dbo.fn_CompParents1
( @CMBASE_REF integer,
@LEV integer )
returns @Tree table
( RID integer,
IND integer IDENTITY,
L integer )
as
begin
if (@LEV>25) return;
declare @ITEM_REF int
declare @LL int
declare cr cursor local for
select b.CMBASE_REF, @LEV+1 from CMITEMS a
left join CMHEADERS b on a.CMHEADERS_REF = b.RID
where ( a.ITEM_TYPE = 1) and
( a.ITEM_REF = @CMBASE_REF )
group by b.CMBASE_REF
insert into @Tree(RID,L) values (@CMBASE_REF,@LEV+1)
open cr
fetch next from cr into @ITEM_REF,@LL
while @@FETCH_STATUS = 0
begin
insert into @Tree (RID, L)
select RID,L from dbo.fn_CompParents1 (@ITEM_REF,@LL)
fetch next from cr into @ITEM_REF,@LL
end
close cr
deallocate cr
return
end
|
create function dbo.fn_CompParents1
( @CMBASE_REF integer,
@LEV integer )
returns @Tree table
( RID integer,
IND integer IDENTITY,
L integer )
as
begin
if (@LEV>25) return;
declare @ITEM_REF int
declare @LL int
declare cr cursor local for
select b.CMBASE_REF, @LEV+1 from sho4CMITEMS a
left join sho4CMHEADERS b on a.CMHEADERS_REF = b.RID
where ( a.ITEM_TYPE = 1) and
( a.ITEM_REF = @CMBASE_REF )
group by b.CMBASE_REF
insert into @Tree(RID,L) values (@CMBASE_REF,@LEV+1)
open cr
fetch next from cr into @ITEM_REF,@LL
while @@FETCH_STATUS = 0
begin
insert into @Tree (RID, L)
select RID,L from dbo.fn_CompParents1 (@ITEM_REF,@LL)
fetch next from cr into @ITEM_REF,@LL
end
close cr
deallocate cr
return
end
|
Функция fn_CheckCmpCicle |
create function dbo.fn_CheckCmpCicle()
returns @t table
( RID integer,
NAME varchar (50),
LEV integer
)
as
begin
declare @RID integer
declare @NAME varchar (50)
declare @LEV integer
declare cr cursor local for
select RID,NAME from CMBASE
open cr
fetch next from cr into @RID,@NAME
while @@FETCH_STATUS = 0
begin
insert into @t (RID,NAME,LEV)
select @RID,@NAME,max(L) from dbo.fn_CompParents1 (@RID,0)
fetch next from cr into @RID,@NAME
end
close cr
deallocate cr
return
end
|
create function dbo.fn_CheckCmpCicle()
returns @t table
( RID integer,
NAME varchar (50),
LEV integer
)
as
begin
declare @RID integer
declare @NAME varchar (50)
declare @LEV integer
declare cr cursor local for
select RID,NAME from sho4CMBASE
open cr
fetch next from cr into @RID,@NAME
while @@FETCH_STATUS = 0
begin
insert into @t (RID,NAME,LEV)
select @RID,@NAME,max(L) from dbo.fn_CompParents1 (@RID,0)
fetch next from cr into @RID,@NAME
end
close cr
deallocate cr
return
end
|
Примечание: Если функция уже существует в БД, для ее изменения вместо оператора create необходимо использовать оператор alter
После создания функций необходимо выполнить запрос для выявления "зацикленных" комплектов - он также будет различным для разных версий SHO4:
SHO 4.46 и ниже | SHO 4.48 и выше | |
Проверочный запрос |
select a.*,b.abbr_text, b.ABBR_NUMBER from dbo.fn_CheckCmpCicle() a left join CMBASE b on a.rid=b.rid where a.LEV>20
|
select a.*,b.abbr_text, b.ABBR_NUMBER from dbo.fn_CheckCmpCicle() a left join SHO4CMBASE b on a.rid=b.rid where a.LEV>20 |
После выполнения запроса отобразятся проблемные комплекты - необходимо найти эти комплекты в редакторе SHO4 и проверить "зацикленность" (т.е. вхождение комплектов "самих в себя")
Ошибка "DB Error" при импорте данных из RK7
Описание проблемы:
Ошибка вида "DB Error: ..." признак нарушения логической стуктуры БД SHO4.
Решение проблемы:
Для локализации проблемы в первую очередь необходимо создать новую БД и выполнить в нее импорт данных - если ошибок не будет, значит проблема связана с рабочей БД SHO4.
Класс ошибок "DB Error" достаточно обширный, локализация и исправление может потребовать знания структуры БД и основ языка SQL - рекомендуется создать запрос на трекере с описанием проблемы, вложить скриншоты сообщений и бекап рабочей БД.
Одна из причин ошибки "DB Error" может быть связана с таблицей [sho4DATABASEPARAMS] - если в этой таблице отсутсвует запись или запись некорректная, при импорте данных будет возникать ошибка "DB Error".
Для решения проблемы необходимо заполнить таблицу [sho4DATABASEPARAMS]:
- при необходимости сначала очистить таблицу:
TRANCATE TABLE [sho4DATABASEPARAMS]
- выполнить следующий запрос:
INSERT INTO [sho4DATABASEPARAMS] ( ORGANIZATION, MUNITS_REF, CMUNITS_REF, TMUNITS_REF, CCDATE, BUCCATEG_REF, MAINCATEG_REF, DB_VERSION, REPL_PLDOCS) values ('',1,6,2,'01.01.1980',2,1,44900,1)
Ошибка "Could not convert variant of type (Null) into type (Integer)"
Описание проблемы:
В SHO4 при выборе "Словари" ⇒ "Предприятия" возникает ошибка "Could not convert variant of type (Null) into type (Integer)" - при нажатии ОК ошибка появляется еще раз и далее открывается форма "Set Depart Form" со списком предприятий, импорт из R-Keeper v7 (далее RK7) при этом выполняется успешно.
Решение проблемы:
Для решения проблемы необходимо выполнить частичное удаление данных (предприятий) в БД SHO4:
- выполнить резервное копирование рабочей базы данных SHO4
- с помощью среды SQL Server Management Studio выполнить следующий скрипт для рабочей базы SHO4:
delete from DEP_GOODSTREE go delete from DEP_GOODS go delete from DEP_GOODSPARAMS go delete from REPL_MAP go delete from DEPARTS where PARENT_REF is not null go delete from DEPARTS go create procedure dbo.sp_POPULATE_DEPARTS as begin declare @DEPName varchar(47) set @DEPName = 'Корпорация' insert into dbo.DEPARTS ( RID,PARENT_REF,NAME, ISGROUP, DELETED ) values (1,NULL,@DEPName,2,0) end GO set IDENTITY_INSERT dbo.DEPARTS ON GO exec dbo.sp_POPULATE_DEPARTS GO set IDENTITY_INSERT dbo.DEPARTS OFF GO
- выполнить импорт данных только по предприям из RK7, флаг импорт меню должен быть отключен
- проверить в SHHO кооректность открытия и наполнения справочника предприятий
- выполнить импорт меню из RK7, при этом обязательно повторно выбрать группу "Меню ресторана" и установить флаг "цены блюд по ресторанам"
- т.к. скрипт удаляет список предприятий из базы SHHO, необходимо заново настроить связь каждого предприятия с соотв. локальным SH4
Слишком большие значение отпускных цен в свойствах товаров
Восстановление БД SHO4, используя сервер справочников RK7 и БД локального склада SH4
- С помощью SHO4Admin.exe создать новую базу без заполнения первоначальных данных
- Создать корневую вершину для предприятий с помощью скрипта "Создание корневой группы предприятий.sql"
- С помощью SHO4edit.exe импортировать предприятия из R-Keeper BackOffice Editor (если используется R-Keeper v6) либо из сервера справочников R-Keeper v7 (меню "Файл" \ "Импорт")
- С помощью SHO4edit.exe импортировать из локального склада словари (операция "Файл" \ "Импорт" \ "Импорт данных SH4")
- Установить версию базы, выполнив скрипт "Установка версии БД.sql" - перед выполнение предварительно в скрипте указать корректную версию базы
Содержимое скриптов "Создание корневой группы предприятий.sql" и "Установка версии БД.sql" см. в разделе "Перенос данных из SH4 в SHO4"
Примечание: Для выполнения скриптов можно использовать любую доступную среду, например "SQL Server Management Studio".
1 - для построения отчетов в центральном офисе можно не подключаться к удаленным локальным ресторанам. Для этого необходимо иметь альтернативный сервер SDBSERV в центральном офисе (с копиями баз из локальных ресторанов). Примечание: информация в отчетах при такой схеме может быть не актуальной