Добрый день,

 

При попытке зайти в Террасофт установленный на сервере (Windows Server 2008 R2 Enterprise), возникает ошибка:

Изображение удалено.

К сожалению, многочисленные попытки решить данную проблему не принесли результата.

Также было замечено, что при добавлении новой конфигурации при нажатии на кнопку выбора имени драйверов Oracle (Home) возникает другая ошибка:

Изображение удалено.

Насколько я понял проблема возникает из-за того, что на сервере были установлены несколько версий Oracle и в данный момент версия 11.2.0 отсутствует на сервере. Вместо нее установлена версия 12.2.

Попытка очистить следы Oracle 11.2.0 и в дальнейшем даже переустановка Oracle привела лишь к тому что в данный момент выходит пустой список в котором невозможно выбрать версию Oracle:

Изображение удалено.

 

Прошу помочь в решении данной проблемы.

 

Благодарю.

 

P. S. По возможности помогите пожалуйста найти инструкцию по бэкапу Terrasoft 3.3, для попытки переустановки Terrasoft, чтобы решить вышеуказанную проблему.

Нравится

3 комментария

Обратите внимание на рекомендацию по поводу «Ошибка открытия конфигурации: Cannot find OCI DLL»:

Для приложения Terrasoft под Oracle обязательно необходимо, чтобы на компьютерах всех пользователей, использующих конкурентные лицензии, был установлен клиент Oracle одной и той же версии. Имя сервера на компьютерах всех пользователей должно совпадать с именем, указанным в поле [Сервер] окна редактирования строки соединения компьютера, на котором заказывают и загружают лицензии, и данный сервер должен быть зарегистрирован. Имя сервера прописывается в файле tnsnames.ora, расположенном в инсталляционной директории клиента Oracle (например, d:/oracle/ora92/network/admin/ tnsnames.ora).

Также версия ядра 3.3.2.120 далеко не самая новая, есть смысл попробовать на последних файлах 3.3.2.313, поскольку в версии 175 и выше вносились изменения в механизм работы с сервером сессий для Oracle.

По вопросу разворачивания базы с нуля из бекапа, идущего с дистрибутивом есть раздел в руководстве администратора.

Для получения бекапа существующей базы нужно воспользоваться средствами СУБД, а также не забыть автоматически перенести или вручную завести пользователей с такими же именами, как в базе, на уровне сервера БД. Именно для Oracle инструкции не встречал. Например, для MS SQL это делается так. Если забыть перенести, то пустит только администратора SYS.

Зверев Александр пишет:

Для приложения Terrasoft под Oracle обязательно необходимо, чтобы на компьютерах всех пользователей, использующих конкурентные лицензии, был установлен клиент Oracle одной и той же версии. Имя сервера на компьютерах всех пользователей должно совпадать с именем, указанным в поле [Сервер] окна редактирования строки соединения компьютера, на котором заказывают и загружают лицензии, и данный сервер должен быть зарегистрирован. Имя сервера прописывается в файле tnsnames.ora, расположенном в инсталляционной директории клиента Oracle (например, d:/oracle/ora92/network/admin/ tnsnames.ora).

Добрый день. Данная проблема наблюдается на самом сервере (невозможно зайти в Terrasoft установленный на сервере).

По поводу бэкапа, посмотрю, большое спасибо за помощь.

Показать все комментарии

При установке пакет получаем ошибку. Понять в чем она не получилось. Файл прикладываю, помогите пожалуйста! 

Ошибка обновления структуры таблицы для схемы "UsrRequestPos" из пакета "Verniy_Request_m_negriy". UId 18f0eb84-a642-4a7f-88c6-62e843da5a99: При выполнении действия обновления структуры схемы произошла ошибка "Exception of type 'Terrasoft.Core.DB.DBMetaActionValidationException' was thrown.", текст Sql сценария: "

SELECT

    CASE

    WHEN COUNT(*) > 0 THEN 0

    ELSE 1

    END [Result]

FROM

    [dbo].[UsrRequestPos] [ChildSchema]

WHERE

    NOT [ChildSchema].[UsrReqPosTypeId] IS NULL

    AND NOT EXISTS (

        SELECT

            *

        FROM

            [dbo].[UsrReqPosType] [ReferencedSchema]

        WHERE

            [ChildSchema].[UsrReqPosTypeId] = [ReferencedSchema].[Id]

    )"

Прикрепленные файлы

Нравится

5 комментариев
Лучший ответ

Проблема в том что не привязаны к пакету данные UsrReqPostType.

Если вы разработчик пакета то привяжите данные справочника в пакет если нет обратитесь к разработчикам, чтобы они исправили ошибку!

Добрый день! У вас срабатывает ограничение целостности по внешнему ключу. Т.е. отсутствуют записи UsrReqPostType, на которые ссылаюся записи UsrRequestPos. Исправьте базу, чтобы предложенный запрос возвращал 1

Проблема в том что не привязаны к пакету данные UsrReqPostType.

Если вы разработчик пакета то привяжите данные справочника в пакет если нет обратитесь к разработчикам, чтобы они исправили ошибку!

Григорий Чех,

Григорий Чех пишет:

Проблема в том что не привязаны к пакету данные UsrReqPostType.

Если вы разработчик пакета то привяжите данные справочника в пакет если нет обратитесь к разработчикам, чтобы они исправили ошибку!

Разработчик я. Подскажите, мне нужно добавить новый объект UsrReqPostType в пакет? Или добавить sql код? В общем как сделать привязку данных в справочник?

Сидоров Александр В.,

Спасибо. Я понял, что эти данные сразу можно добавить в пакет, только не понял как (

Mexanik,

Подробнее о привязке данных к пакету смотрите пост на Академии.

Показать все комментарии

Добрый день, форумчане)



Всегда был интересен вопрос след. характера:

В чём отличие типа данных у параметра БП таких как Уникальный идентификатор и Справочник?

Может в Справочник можно как-то внутрь заглянуть и вытянуть displayValue, избегая запрос к root таблице?



Сталкивался кто с подобным, интересен опыт Ваш.

Нравится

1 комментарий

Если создать два параметра разных типов и привязать к одной и той же записи одного справочника, в исходном коде БП будет выглядеть так:

_processSchemaParameter1 = () => { return (Guid)(new Guid("b06f1e0e-f46b-1410-7190-00155d043204")); };
_processSchemaParameter2 = () => { return (Guid)(new Guid("b06f1e0e-f46b-1410-7190-00155d043204")); };
...
private Func<Guid> _processSchemaParameter1;
public virtual Guid ProcessSchemaParameter1 {
	get {
return (_processSchemaParameter1 ?? (_processSchemaParameter1 = () => Guid.Empty)).Invoke();
	}
	set {
_processSchemaParameter1 = () => { return value; };
	}
}
 
private Func<Guid> _processSchemaParameter2;
public virtual Guid ProcessSchemaParameter2 {
	get {
return (_processSchemaParameter2 ?? (_processSchemaParameter2 = () => Guid.Empty)).Invoke();
	}
	set {
_processSchemaParameter2 = () => { return value; };
	}
}
...
private void WritePropertyValues(DataWriter writer, bool useAllValueSources) {
	if (!HasMapping("ProcessSchemaParameter1")) {
writer.WriteValue("ProcessSchemaParameter1", ProcessSchemaParameter1, Guid.Empty);
	}
	if (!HasMapping("ProcessSchemaParameter2")) {
writer.WriteValue("ProcessSchemaParameter2", ProcessSchemaParameter2, Guid.Empty);
	}
}
 
...
protected override void InitializeMetaPathParameterValues() {
	base.InitializeMetaPathParameterValues();
	MetaPathParameterValues.Add("e0873088-8334-4b85-96a4-fa3e5ecb7374", () => ProcessSchemaParameter1);
	MetaPathParameterValues.Add("246467c7-071b-4cb0-8073-30c4f72be120", () => ProcessSchemaParameter2);
...	
protected override void ApplyPropertiesDataValues(DataReader reader) {
	base.ApplyPropertiesDataValues(reader);
	bool hasValueToRead = reader.HasValue();
	switch (reader.CurrentName) {
case "ProcessSchemaParameter1":
	if (!hasValueToRead) break;
	ProcessSchemaParameter1 = reader.GetValue<System.Guid>();
break;
case "ProcessSchemaParameter2":
	if (!hasValueToRead) break;
	ProcessSchemaParameter2 = reader.GetValue<System.Guid>();
break;
	}
}
...

А в метаданных:

      "Parameters": [
        {
          "TypeName": "Terrasoft.Core.Process.ProcessSchemaParameter",
          "UId": "e0873088-8334-4b85-96a4-fa3e5ecb7374",
          "Name": "ProcessSchemaParameter1",
          "CreatedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395",
          "ModifiedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395",
          "DataValueType": "b295071f-7ea9-4e62-8d1a-919bf3732ff2",
          "SourceValue": {
            "Source": 3,
            "Value": "[#Lookup.c449d832-a4cc-4b01-b9d5-8a12c42a9f89.b06f1e0e-f46b-1410-7190-00155d043204#]",
            "ModifiedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395"
          },
          "ReferenceSchemaUId": "c449d832-a4cc-4b01-b9d5-8a12c42a9f89"
        },
        {
          "TypeName": "Terrasoft.Core.Process.ProcessSchemaParameter",
          "UId": "246467c7-071b-4cb0-8073-30c4f72be120",
          "Name": "ProcessSchemaParameter2",
          "CreatedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395",
          "ModifiedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395",
          "DataValueType": "23018567-a13c-4320-8687-fd6f9e3699bd",
          "SourceValue": {
            "Source": 3,
            "Value": "[#Lookup.c449d832-a4cc-4b01-b9d5-8a12c42a9f89.b06f1e0e-f46b-1410-7190-00155d043204#]",
            "ModifiedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395"
          }
        }
      ],

То есть разницы практически нет, хотя внешний вид и интерфейс выбора значения разные.

Также на значения параметров в выполняющемся процессе можно посмотреть запросом в базу:

select top 10 *, cast(PropertiesData as varchar(max)) from SysProcessData

Там для параметров видно тоже только Id.

Показать все комментарии

Добрый день, Коллеги!

Версия 7.11.3

Суть проблемы:

1) Подключили SVN.

2) Создали свой пакет. Пакет привязан к SVN

3) Создали раздел через мастер раздела. Создались автоматически схемы

https://www.screencast.com/t/Q5QGRbjj

4) Зафиксировали пакет в SVN - успешно

 

Проблема:

После фиксации в SVN схема на скриншоте

https://www.screencast.com/t/B8UYl1aZg

оказалась заблокированной

 

Что пробовали сделать:

1) Компиляция всего

2) Обновление БД

3) Генерация исходных кодов всего

4) Удаление Схемы и обновление пакета из SVN

5) Восстановление конфигурации из хранилища

6) Разблокировка пакета SQL сценарием 

https://www.screencast.com/t/AJjjnyf8C

https://www.screencast.com/t/0dWvpqJsod

7) Повторная и фиксация и обновление из SVN

8) Очистка кеша Redis

 

Все перечисленные выше действия не помогли

Другие схемы и объекты пакета не заблокированы. Проблема возникает только с конкретной схемой

Подскажите, пожалуйста, в чём может быть проблема и как это вылечить?

Нравится

3 комментария

Если дело именно в блокировке схемы, то можете попробовать через TortoiseSVN снять блокировку. А так судя по ошибке на скрине это не похоже на блокировку. 

Миннекаев Айдар,

Айдар, Если бы был лок в SVN, он не давал бы закоммитить повторно =)

На всякий случай проверили 

https://www.screencast.com/t/IpuwnUUa 

Блокировки нет

Если это не блокировка, то в чём может быть проблема? Буду благодарен за идеи!

В SysSchema вроде тоже всё в порядке.. 

 

Разблокировка пакета SQL сценарием 

2019-07-02_1705.png (195×91)

В поле Maintainer должно быть указано то значение, которое стоит в системной настройке «Издатель» (Maintainer). Проверьте, точно ли у Вас там сейчас «Customer».

Показать все комментарии

Всем привет. 

Продукт bpmn SDE 7.13.2.934

Подскажите, пожалуйста, каким образом реализовать выбор Сервиса в зависимости ото выбранной КЕ. 

Из коробки требуется выбрать сервис и только потом КЕ, но дело в том, что всегда легче узнать с какой КЕ проблема и выбрать сервис для неё. Наверняка этот кейс сильно распространён

Нравится

4 комментария

В разделе фильтрация одного поля по другому делается при помощи бизнес-правил. Они настраиваются в мастере раздела. Стандартно КЕ не фильтруется по сервису, как и наоборот, их можно выбирать в любом порядке. Сервис блокируется бизнес-правилом при пустом сервисном договоре.

Зверев Александр, есть ли примеры настройки подобного(фильтрация) БП ?  

Достаточно переключиться в мастере раздела на нужную вкладку и посмотреть существующие бизнес-правила. Либо см. документацию. Их бывает 4 разновидности, в том числе и фильтрация:

scr_section_wizard_rules_designer_action.png

В целом, вопрос решён, важна была подсказка о том, что для решения кейса стоит использовать бизнес-правило в разделе "Обращения". 

Для реализации задуманного нужно сделать следующее - задать всем КЕ при импорте "тип" и добавить суррогатное поле "тип КЕ" в каталоге услуг. 

После этого сравнивать два поля. Выглядит это примерно следующим образом: 

Кстати, разрабам на заметку - подписи "Если" , "То", а также сама инфографика, при выборе фильтра значений, сбивают с толку.

Коллеги, спасибо за помощь. 

 

Показать все комментарии

При попытке открыть конфигурацию сначала идет долгое ожидание, а затем выходит ошибка: "У вас нет прав на выполнение данного действия. Обратитесь к системному администратору." Но спустя секунд 30, а то и больше в конфигурацию заходит, но и то не всегда. 

Изображение удалено.

Появилось это после обновления с 7.12.4 до 7.13.1.

Как можно это исправить?

Нравится

3 комментария

Попробуйте зайти по ссылке адрес_сервера:порт/0/dev

После обновления вы поменяли бинарники веб сервера на новые? Выполнили очистку редиса и перезапуск пула придложений? Попробуйте еще очистить кэш броузера и перекомпелировать конфигурацию! (Это можно сделать через WorkspaceConsole  (-operation=BuildWorkspace)  детальнее описано тут

Григорий Чех,

Все этоя проделывал, не помогло. Пробовал развернуть чистую сборку 7.13.1 и там та же ошибка. 

Григорий Чех пишет:

Попробуйте зайти по ссылке адрес_сервера:порт/0/dev

 Так заходит, но хотелось чтобы и через дизайнер системы можно было зайти

Возможно, у пользователя не актуализированы роли. Нужно запустить действие актуализации в разделе «Организационная структура».

Показать все комментарии

Здравствуйте! Может кто-нибудь объяснить почему не работают следующие команды в конфигураторе:

- Сгенерировать требующих генерации

- Обновить для требующих обновления (Структура БД)

- Установить для требующих установки

И я уверен что они не работают, "Обновить для требующих обновления" уж точно, т.к. начал через пару секунд вышло сообщение о том, что выполнено успешно, НО в БД структура не обновилась, а обновилась оно после того команды "Обновить для выбранных", на выбранном объекте. Неужели нужно каждый объект в ручную выделять и обновлять?



P.S.: пакеты были установлены, точнее обновлены при помощи встроенной утилиты "Установка приложений", и она автоматически почему-то не обновила структуру

Нравится

3 комментария

Добрый день!

В коробке функционал этих команд работает. Попробуйте вывести колонку "Текст последней ошибки", вбить в поиск "%" и отсортировать по этой колонке - есть ли в конфигурации объекты с ошибками?

Антон Малий,

нет таких объектов

На community такой вопрос решить сложно. В коробке данный функционал работает корректно. Если вопрос актуален - создайте обращение в поддержку и предоставьте пакеты и копию БД до накатки.

Показать все комментарии

Коллеги, добрый день! На дев площадке добавили колонки в разделы Контрагенты, Конфигурации и Обращения. После добавления разделы отображались корректно. После фиксации изменений, обновления пакета из хранилища на прод площадку и последующей компиляции конфигурации, разделы Конфигурации и Обращения стали отображаться некорректно. В разделе Конфигурации при открытии существующей записи отображается окно новой записи: https://yadi.sk/d/kHsdJtiL3Gg3Wd , в консоли появляются следующие ошибки https://yadi.sk/d/sXIPRxkn3Gg3eF,приложение ругается на новые колонки (Недопустимое имя столбца) В разделе Обращения при открытии записи не отображается номер обращения https://yadi.sk/d/JuO8WvQ63Gg3sq в консоли также появляются аналогичные ошибки из-за созданных колонок https://yadi.sk/d/slVgPRYq3Gg3z3 Есть способ лечения ошибок с помощью удаления этих колонок с помощью мастера раздела и из конфигурации, последующей фиксации изменений в хранилище и переносе обратно на дев площадку, но это неправильно. Также после обновления пакета из хранилища, возникает ошибка для пользовательского бизнес процесса https://yadi.sk/d/gn6EsdX33Gg6zc
Какова природа данной проблемы?

Нравится

6 комментариев

Я, конечно, не разработчик, но в почему всё в пакете Custom? Его же, вроде, нельзя корректно перенести.

"Сидоров Александр Валерьевич" написал:всё в пакете Custom?

Разве? всё вроде как в пакете WS_FirstOfd
"Голикова Елена Евгеньевна" написал:Какова природа данной проблемы?

Вы только компилировали? Или делали все 5 шагов? (генерация-компиляция-данные-скрипты-обновление структур)?

"Варфоломеев Данила" написал:Разве? всё вроде как в пакете WS_FirstOfd

Да, Вы правы. На этом скрине мне показалось, что открыт пакет Custom https://yadi.sk/d/gn6EsdX33Gg6zc

"Варфоломеев Данила" написал:
Сидоров Александр Валерьевич пишет:

всё в пакете Custom?

Разве? всё вроде как в пакете WS_FirstOfd

Голикова Елена Евгеньевна пишет:

Какова природа данной проблемы?

Вы только компилировали? Или делали все 5 шагов? (генерация-компиляция-данные-скрипты-обновление структур)?


Делала обновление структур БД, компиляцию, генерацию всех исходных кодов. Результат тот же. В тех поддержке отклонили обращение по SLA

Здравствуйте!

Ответ на вопрос "Какова природа данной проблемы?" - различие между тестовой средой и продуктовой среда, на прод вносятся изменения на прямую миную тест.

Выполните следующие рекомендации:

  • Убедитесь в корректности зависимостей пакетов и их соответствие между тест и прод средой
  • Откройте все объекты участвующие в разделе, убедитесь, что все поля заполнены корректно, после чего пересохраните и опубликуйте. Все возникшие конфликты устраните
  • Переоткройте каждую схему/модуль раздела и пересохраните/скомпилируйте
  • Откройте процесс и выполните его пересохранение, возникшие ошибки устраните

Не забудьте все исправления внести тестовую среду.

Обратите внимание на системную настройку SchemaNamePrefix на прод среде, она должна совпадать с настройкой на тест среде.

"Терещук Павел" написал:

Здравствуйте!

Ответ на вопрос "Какова природа данной проблемы?" - различие между тестовой средой и продуктовой среда, на прод вносятся изменения на прямую миную тест.

Выполните следующие рекомендации:

  • Убедитесь в корректности зависимостей пакетов и их соответствие между тест и прод средой
  • Откройте все объекты участвующие в разделе, убедитесь, что все поля заполнены корректно, после чего пересохраните и опубликуйте. Все возникшие конфликты устраните
  • Переоткройте каждую схему/модуль раздела и пересохраните/скомпилируйте
  • Откройте процесс и выполните его пересохранение, возникшие ошибки устраните

Не забудьте все исправления внести тестовую среду.

Обратите внимание на системную настройку SchemaNamePrefix на прод среде, она должна совпадать с настройкой на тест среде.


Помогла пошаговая компиляция и сохранение всех объектов и схем. Префиксы названий объектов были настроены на обоих площадках корректно. Спасибо

Показать все комментарии

Добрый день.
Искал похожую тему на форуме - на нашел.

После работы в мастере разделов, получил дубли полей, т.е. есть несколько дублирующихся полей "фамилия" и т.д.
Самостоятельно удалил их как поля через конфигурацию в карточке объекта раздела, в итоге в мастере разделов получились ссылки на не существующие поля (см. вложение).
Подскажите как их убрать.
Спасибо большое.

Нравится

2 комментария

Здравствуйте!

После удаления полей со схемы необходимо очистить кеш браузера (если поля были действительно удалены корректно, например, комментированием кода, который их добавляет на страницу).
Также Вы можете удалить поля, используя мастер раздела.

Это только визуально скроет поля. Тем не менее их можно быт выбрать в фильтре или в представлении раздела. Для того, чтобы поля не отображались Вам необходимо удалить их из объекта (либо изменить режим использования на "Никогда").

Показать все комментарии

Иногда во время открытия конфигурации появляется сообщение:

Причина появления данного сообщения связана с часовыми поясами системы.Проблема может возникнут из-за обновления часовых поясов системы или у контакта в приложении Terrasoft установлен часовой пояс, который отсутствует в реестре Windows.

Проблема может возникнуть в двух функциях конфигурации:

  • CheckTimeZone (сервис scr_Main)
  • GetTimeZoneCaption (сервис scr_DateUtils)

Для устранения проблемы необходимо заменить функцию CheckTimeZone находящуюся в сервисе scr_Main на новую:

function CheckTimeZone() {
    var UserTimeZone = Connector.CurrentUser.TimeZone;
    var SystemTimeZone = System.GetSystemTimeZone();
     
    var TimeZoneEnum = GetSingleItemByCode('enm_TimeZone');
    var EnmUserTimeZone = TimeZoneEnum.ItemsByCode(UserTimeZone);          
    if (IsEmptyValue(EnmUserTimeZone)) {
        UserTimeZone = '';
    }
     
    if (!UserTimeZone) {
        UserTimeZone = SystemTimeZone;
        Connector.CurrentUser.TimeZone = UserTimeZone;
    }
    if (UserTimeZone == SystemTimeZone) {
        return;
    }
    var Message = FormatStr(
        "Часовой пояс системы: %1\rЧасовой пояс текущего контакта: %2\rИспользовать часовой пояс системы?",
        GetTimeZoneFullCaption(SystemTimeZone), GetTimeZoneFullCaption(UserTimeZone));                          
    if (ShowConfirmationDialog(Message) != wmrYes) {
        return;
    }      
    Connector.CurrentUser.TimeZone = SystemTimeZone;
    var UpdateQuery = GetSingleItemByCode('uq_ContactTimeZone');
    UpdateRecordField(UpdateQuery, Connector.CurrentUser.ContactID,
        Array('TimeZone'), Array(SystemTimeZone));              
}

 

А также необходимо заменить функцию GetTimeZoneCaption находящуюся в сервисе scr_DateUtils на новую:

function GetTimeZoneCaption(TimeZone, ForScheduler) {
    var TimeZoneEnum = GetSingleItemByCode('enm_TimeZone');
    var TimeZoneCaption = '';
    if (!IsEmptyValue(TimeZone)) {
        var TimeZoneValue = TimeZoneEnum.ItemsByCode(TimeZone);
        if (!IsEmptyValue(TimeZoneValue)) {
            TimeZoneCaption = TimeZoneEnum.ItemsByCode(TimeZone).Caption;
        } else {
            TimeZoneCaption = TimeZone;
        }
    }
    var Result = 'GMT';  
    Result += (ForScheduler ? '\r' : '') +
        (TimeZoneCaption.substring(4, 5) == ')' ? '' : TimeZoneCaption.substring(4, 10));
    return Result;
}

 

Как еще одним решением может быть - поудалять дубли часовых поясов в ветке [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones]. Оставив те часовые пояса, которые содержат ключ Display:

Иногда помогает внесение изменений в реестр Windows, обновив значение ветки [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Kamchatka Standard Time]. Необходимые значение находятся в файле Kamchatka Standard Time.reg

Также можно просто импортировать ветку [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Kamchatka Standard Time] из другого реестра системы, где пользователь работает без сбоев.

Нравится

Поделиться

11 комментариев

Коммент по исследованию этой проблемы с версией TSXRM 3.3.1

(Похоже. что в версии TS 3.4 под Win10 этого не наблюдается)

Последнее время на Win10 обновления от MS дописывают ключи для часовых поясов в реестр, но не обновляют библиотеку - tzres.dll.mui 

  1. Программа (например TSClient.exe) запрашивает локальное имя часового пояса Судана. (о-в Св.Антония, Фиджи и т.д.)
  2. Операционка считывает значение ключа из реестра - (UTC+02:00) Хартоум - @tzres.dll,-2890
  3. Вызывает библиотеку tzres.dll
  4. Библиотека чтобы дать имя на установленном в ОС языке вызывает местную - tzres.dll.mui  и запрашивает строку за нумером -2890 Смотрим самый последний номер строки в библиотеке, например, это: STRINGTABLE LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT {2810, "(UTC+03:00) Стамбул"}
  5. Система возвращает ПУСТО (NULL)

TSClient видит пусто в энумераторе enm_TimeZone, которое при проверке на уникальность срабатывает как дублирование названия.

Возникает ошибка в бинарнике, вызванная библиотекой TSObjectLibrary.dll - там лежит вызов

GetSingleItemByCode('enm_TimeZone') -> Services.GetNewItemByUSI(Code)

Когда TSObjectLibrary видит слово enm_TimeZone, она хватается за пистолет и, очистив энумератор, заполняет его снова из реестра ОС и падает из-за  NULL.

Варианты Решения:

1. Обновить библиотеку местного диалекта для часовых поясов tzres.dll.mui. Не факт, что следующее обновление её не затрёт.

2. Создать новый энумератор (имя + ID), заполнять его кодом JScript ручками из ОС при запуске и заменить вызовы на него. Не забываем таблицы и датасеты типа ds_Contact, tbl_City etc.. 

3. Заполнять энумератор самим, а хексредактором "исправить" :)  злосчастное имя enm_TimeZone в библиотеке TSObjectLibrary

 

 

 

 

Спасибо за анализ.

Для Судана и прочего сообщение «Дублируется значение свойства 'Caption'. Значение 'Sudan Standard Time' уже существует» встречалось и в 3.4.0, и даже в 3.4.1. Помогает удаление пояса в Regedit.

Это так, но следующее обновление Вин10, скорее всего, снова его внесёт в реестр. И добавит острова Святого Антония)). Поскольку мой парк машин - велик и разбросан по стране - решение через общую конфигурацию TS представляется более оптимальным. Можно чистить реестр средствами групповой политики, можно отменить всем ВинАвтоАпдейт навсегда (не 35 дней), можно найти самый последний вариант MUI и каждому его подсунуть, но не факт, что следующее обновление не заменит и его. Можно забить корректными данными enm_TimeZone и запретить ему автообновление; обновлять централизованно разработчику по фиксации новых часовых поясов в MS-KB файлах. Можно ещё исключить все упоминания enm_TimeZone из конфигурации: часовой пояс клиента/контакта/города не всем необходим. )

До этого общим решением наших админов было: чистка реестра, откат последнего обновления Win10 или, вообще, откат на Win7. :) Развелось самостоятельных любителей десятки... И это - не первая проблема работы TS3.x под Win10, и что ещё нам принесут очередные обновления от MS. :)

Сбои с новыми поясами бывают нерегулярно и не на всех компьютерах. То есть, если удалили Sudan, не факт, что сразу на тот же компьютер придёт Sao Tome.

C Windows 10 есть и более серьёзные и трудноустранимые препятствия в обновлениях. Помогает от них только переход с более старых версий на 3.4.1.

Да, так. Но я предлагаю универсальный способ избавления от часового пояса. Навсегда. Из конфигурации. С другой стороны - острова Св.Антония выбивают пользака прямо при входе. Это - свежее.

Более серьёзные трудности - копятся. Пока что мы все их обходим..))

Да, у меня под руками TS3.4.1 так что я  - не голословен.))

Надеюсь, что вмешательство в бинарный код фирма не почтёт за нарушение её прав? Мне уже приходилось менять код екзешника TSClient - ничего, притерпелись...)

 

Прежде, чем править бинарный файл, есть смысл скачать последнюю сборку в пределах версии.

Выбивало при входе ещё при Marquesas Standard Time в 2016 году. Думал, что там просто две записи в реестре об одном поясе, но, как Вы расследовали, всё оказалось интересней.

Опять же, с часовым поясом — не самое страшное, что может случиться при обновлении Windows 10.

Помню эту историю)) 

Самое страшное мы - уже победили.. Но, чем чорт не шутит...

Кстати, TSAdmin.exe тоже "кашляет" на эту историю.. Обходим, гладим, усмиряем..) Там то мы не можем конфигурацией помочь. Только вмешательство в тело бинарника. А это мы умеем)

 

Последний реально существующий релиз - TS3.3.1.184 Скачан два года назад с официального сайта.

 

https://c2n.me/3TZJXIb

вот такая переферналия, но это вполне победимо)

Показать все комментарии