Table of Contents

Общая информация

Система 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 через клиент службы терминалов не поддерживается

Требования к оборудованию

Копмонент Требования
Память (ОЗУ)

Минимальные:

  • Экспресс-выпуски: 512 МБ
  • Все другие выпуски: 1 ГБ

Рекомендуемые:

  • Экспресс-выпуски: 1 ГБ
  • Все другие выпуски: Для обеспечения оптимальной производительности требуется не менее 4 ГБ с последующим увеличением по мере роста размера базы данных.
Быстродействие процессора

Минимальные:

  • процессор x86: 1,0 ГГц
  • процессор x64: 1,4 ГГц

Рекомендуемые: 2,0 ГГц и выше

Тип процессора
  • процессор x64: AMD Opteron, AMD Athlon 64, Intel Xeon с поддержкой Intel EM64T, Intel Pentium IV с поддержкой EM64T.
  • процессор x86: Процессор, совместимый с Pentium III или выше
Жесткий диск Для 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-х битных ОС".

1. Раздел  [HKEY_LOCAL_MACHINE\SOFTWARE\UCS\SHO4editor] - необходим для работы клиентского приложения SHO4edit.exe

В этом разделе создайте следующие строковые переменные (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 и назначить всем пользователям эту роль.

Создание роли:

  1. Запустите Sdb Server manager (Sdbman.exe)
  2. Выберите пункт меню "Прочее" ⇒ "Выполнить запрос"
  3. В поле "Процедура:" введите CreateHoRole, а в поле "Библиотека:" выберите библиотеку SH_CRTDB.DLL из рабочей директории локального SH4 (должен быть указан полный путь)
  4. Выполните процедуру с помощью меню "Прочее" ⇒ "Выполнить" либо выберите соответствующую иконку "Выполнить" на панели задач
  5. Если процедура выполнена успешно, на закладке "Результаты запросы" будет выдано сообщение "Процедура выполнена успешно"

В итоге будет создана роль "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 включает в себя обновление исполняемых файлов, библиотек и базы данных.

Обновление базы данных происходит методом создания новой БД и копирования данных из текущей (рабочей) БД

Для обновления версии необходимо выполнить следующие действия:

  1. Сделать копию всей рабочей директории SHO4 и резервную копию (backup) рабочей SQL-базы SHO4 (с помощью среды "SQL Server Management Studio")
  2. Скопировать с FTP ftp://ftp.ucs.ru/storehouse/SH4 HeadOffice дистрибутив новой версии SHO4, распаковать его и заменить в рабочей директории все файлы, за исключением файла rk7tosh4.ini
  3. Запустить приложение SHO4Admin.ехе, не подключаясь к базе данных, перейти в меню "Прочее"  "Создать базу данных".
  4. В окне создания БД заполнить все поля (аналогично шагу 3) - имя новой БД указать отличное от текущей (рабочей) БД и обязательно снять флаг "Заполнить первоначальными данными"
  5. Прописать имя новой БД в реестре (см. шаг 2)
  6. Установить соединение с новой (чистой) БД, выбрать в меню "Пользователи"  "Копировать данные"
  7. В поле "БД источник" указать имя текущей (рабочей) БД - в этом поле необходимо указать ТОЛЬКО имя БД, без указания имени сервера и экземпляра
  8. В поле "Файл скриптов" указать файл скрипта, соотв. текущей (рабочей) версии - файл скрипта называется 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 и уникальное имя клиента:

[REFSERVER7]
ServerName = RK7REFSRV
ClientName = SHO4_Client_XXX
 
В некоторых случаях может потребоваться принудительное преобразование имени сервера справочников в хост - для этого используется секция [TCPDNS] файла rk7tosh4.ini:
 
[TCPDNS]
RK7REFSRV=192.168.0.1
 
либо  с указание порта сервера справочников:
 
[TCPDNS]
RK7REFSRV=192.168.0.1:12345
 
Для импорта данных в приложении SHO4edit.exe переходим в меню "Файл"  "Импорт"  "Импорт данных RK7" и устанавливаем необходимые параметры импорта
 
 
 
Примечание: Подробная информация по использованию SHO4 содержится в руководстве пользователя, электронный вариант на FTP  ftp://ftp.ucs.ru/books/store_house_head-office_user_manual.pdf

Решение проблем

Сложности развертывания системы на 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

Важно: Операция переноса данных из локальной базы склада выполняется единоразово!

Последовательность действий:

  1. С помощью SHO4Admin.exe создать новую базу без заполнения первоначальных данных
  2. Создать корневую вершину для предприятий с помощью скрипта "Создание корневой группы предприятий.sql"
  3. С помощью SHO4edit.exe импортировать предприятия из R-Keeper BackOffice Editor (если используется R-Keeper v6) либо из сервера справочников R-Keeper v7 (меню "Файл" \ "Импорт")
  4. С помощью SHO4edit.exe импортировать из локального склада словари (операция "Файл" \ "Импорт" \ "Импорт данных SH4")
  5. Удалить все меню из SHO4 - для этого выполнить два запроса "Удаление меню - 1.sql" и "Удаление меню - 2.sql"
  6. На всякий случай выполнить запрос "Добавление точки в коды товаров.sql". чтобы в дальнейшем не возникало ошибки неуникальности кодировки товаров
  7. Если остались неудаленные товары в группе "Меню Ресторана", удалить их вручную
  8. Установить версию базы, выполнив скрипт "Установка версии БД.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 и выше

Удаление меню - 1

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

Удаление меню - 2

exec sp_Delete_SubTree  2

 
  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.

Решение:

  1. Получаем список всех предприятий в базе и запоминает RID предприятия, по которому не происходит рассылка данных:
select * from departs

 

  1. Определяем количество параметров (строк), которые нужно добавить
select * from repl_map
where depart_ref= <RID предприятия, где точно происходит репликация и смотрим количество строк>

 

  1. Вставляем необходимые строки для предприятия, у которого проблемы
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)

 

  1. Проверяем, что все добавилось
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)
 
В параметре value необходимо указать текущую версию БД - значение или весь запрос целиком можно посмотреть в файле populateSHO.sql (находится в корне рабочего директории SHO4).
 
Еще одна из причин ошибки "DB Error" может быть связана с таблицей [sho4DEPARTS]  - если в этой таблице у одного из ресторанов вместо кода NULL, при импорте данных будет возникать ошибка "DB Error".

Ошибка "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

 

Слишком большие значение отпускных цен в свойствах товаров

Если после испорта данных из R-Keeper v7 в свойствах товаров отображаются слишком большие значения в полях отпускных цен, следует проверить актуальность библиотеки SHTR.DLL
 
 

Восстановление БД SHO4, используя сервер справочников RK7 и БД локального склада SH4

Если по каким-либо причиная БД SHO4 разрушена и/или утеряна и отсутсвуют резерные копии, данные можно восстановить из БД сервера справочников RK7 и БД локального склада SH4.
 
Для этого необходимо выполнить операции, описанные в разделе "Перенос данных из SH4 в SHO4", за исключением операций, указанных в п.5, 6 7.
 
Таким образом, список операций для восстанления БД SHO4 следующий:
  1. С помощью SHO4Admin.exe создать новую базу без заполнения первоначальных данных
  2. Создать корневую вершину для предприятий с помощью скрипта "Создание корневой группы предприятий.sql"
  3. С помощью SHO4edit.exe импортировать предприятия из R-Keeper BackOffice Editor (если используется R-Keeper v6) либо из сервера справочников R-Keeper v7 (меню "Файл" \ "Импорт")
  4. С помощью SHO4edit.exe импортировать из локального склада словари (операция "Файл" \ "Импорт" \ "Импорт данных SH4")
  5. Установить версию базы, выполнив скрипт "Установка версии БД.sql" - перед выполнение предварительно в скрипте указать корректную версию базы

Содержимое скриптов  "Создание корневой группы предприятий.sql" и "Установка версии БД.sql" см. в разделе "Перенос данных из SH4 в SHO4"

Примечание: Для выполнения скриптов можно использовать любую доступную среду, например "SQL Server Management Studio".

 

1 - для построения отчетов в центральном офисе можно не подключаться к удаленным локальным ресторанам. Для этого необходимо иметь альтернативный сервер SDBSERV в центральном офисе (с копиями баз из локальных ресторанов). Примечание: информация в отчетах при такой схеме может быть не актуальной