FastReport
отправка письма со стороны сервера
планировщик заданий
Сохранение файлов
Отчёты
Разработка

Добрый день.

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

Есть некий скрипт, который формирует отчет в FastReport, сохраняет его в виде файла .xls и автоматически отправляет его адресату.

Запихал данную функцию в планировщик заданий, Задание выполнилось без ошибок, но ничего не произошло. Может ли сервер построить отчет, сохранить его и отправить?

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

Реализовал данный процесс через планировщик Windows, но хотелось бы через планировщик Terrasoft.

Нравится

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

Здравствуйте, Константин!
Уточните, пожалуйста, выполняются ли правильно другие скрипты планировщиком?
Нет ли в скрипте обращение к визуальным элементам?
Также даю ссылку на комментарий с прикрепленной информацией по планировщику, возможно найдете ответы там:
http://www.community.terrasoft.ru/forum/topic/10248#comment-46358

Да все хорошо выполняется. Строится FastReport и формируется Excel.
Уточнил про сервер, там нет office (из-за него видимо не формировался файл)и скорее всего не будет, поэтому все таки оставлю данный процесс на windows планировщике другого компьютера.

Все таки никак не получается, Может кто подскажет как настроить данный процесс чтобы он запускался в фоновом режиме работы компьютера? т.е. не в загруженном сеансе.
Процессы вроде бы запускаются, но нет письма(

Константин, а как Вы отправляете письмо?

Ещё можно так.

TempFileName - сформированный excel документ

function SendMail(TempFileName, Dataset){
	 AddressListing = new Array();
	 Address1 = 'Когут Константин' + ' <kogut@kodeks.ru>';
	 AddressListing.push(Address1);
	 SendTaskEmailToAction(AddressListing, TempFileName, Dataset);
}
 
function SendTaskEmailToAction(AddressList, TempFileName, Dataset) {
	var ID = Dataset.Values('ID');
	var TemplateID = GetSystemParameterValueEx('ContactMarketingActionReport');   // шаблон
	var Service = Services.GetSingleItemByUSI('scr_MailUtils');
	Service.ScriptControl.CodeObject.SendEmailByTemplate( TemplateID,
		{Attachments: [TempFileName], Dataset: Dataset, Address: AddressList, AutoSend: true, 
		SkipQueryAddresses: true, Silent: true});
}

Причем есть еще загвоздка, если выполнять windows планировщиком с 7ки, то все ок, а например с server 2003, то аналогичный запуск застревает на входном окне Terrasoft (ждет нажатия OK)

Константин, правильно ли я понял, что Вы по планировщику запускаете свое окно? Если да, то уточните, указываете ли Вы параметр "-pwd" при запуске?
Пробовали отправлять письма вручную (по нажатию на кнопку, например)?
Поставьте отладчик в функцию SendEmailByTemplate и посмотрите, где есть проблема.

В планировщике все указано, еще раз повторюсь, на 7ке все выполняется корректно, а на servere 2003 застревает на входе.

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

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

Да по кнопке работает, даже по планировщику работает, но на 7ке, а на servere застревает на входе

Константин, предоставьте, пожалуйста, листинг .bat файла, который запускает Terrasoft.

"C:\Program Files\Terrasoft\Bin\TSClient.exe" /wnd=wnd_AutoReport -сfg="Terrasoft" -usr="Supervisor" -pwd="***"

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2014-02-06T13:19:24.8797741</Date>
    <Author>USO\kogut</Author>
  </RegistrationInfo>
  <Triggers>
    <CalendarTrigger>
      <StartBoundary>2014-02-06T10:20:23</StartBoundary>
      <Enabled>true</Enabled>
      <ScheduleByDay>
        <DaysInterval>1</DaysInterval>
      </ScheduleByDay>
    </CalendarTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>USO\kogut</UserId>
      <LogonType>InteractiveToken</LogonType>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>true</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>
    <WakeToRun>true</WakeToRun>
    <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>"C:\Program Files (x86)\Terrasoft\Bin\TSClient.exe"</Command>
      <Arguments>/wnd=wnd_AutoReport -cfg=Terrasoft -usr=Supervisor -pwd=***</Arguments>
    </Exec>
  </Actions>
</Task>

Константин, передал информацию в департамент разработки. Сообщу, когда будет ответ.

Ок, буду ждать

Добрый день, Константин!
Попробуйсте изменить строку запуска в командном файле на следующую:

start "TSClient" /d "C:\Program Files (x86)\Bin" TSClient.exe –wnd=wnd_AutoReport -cfg=Terrasoft -usr=Supervisor -pwd=***

При этом командный файл запуска должен быть не *.bat, а *.cmd.

Как изменить батник задачи?

Если просто создать батник и его запускать, то он игнорирует окно которое должно запуститься

Константин, Вы имеете ввиду задачу планировщика?
Как я писал выше, попробуйте создать *.cmd файл, а не *.bat.

да планировщика

Изменять параметры задачи можно, открыв окно "Свойства" из контекстного меню задачи.

все ок, проблема была как ни странно в "-wnd" у параметра wnd, вот рабочий cmd на windows servere

start "TSClient" /d "C:\Program Files\Terrasoft\Bin" TSClient.exe /wnd=wnd_AutoReport -cfg=Terrasoft -usr=Supervisor -pwd=*** 
Показать все комментарии
LookupDataControl
несоответствие типа
Технические вопросы
Разработка

Доброго времени суток.

Решаю тестовые задания, основанные на работе с CRM (т.е. вчера увидел Terrasoft CRM в глаза первый раз). В одном из них необходимо на карточку контрагента добавить поле "Статус" с выбором последнего из ранее созданного справочника.

Делал все, основываясь на найденных в сети инструкциях:
1) в таблицу контрагентов tbl_Account добавил связующее поле-указатель StatusID на запись в таблице статусов и создал связь в Relations с первичным ключом tbl_AccountStatus.ID и вторичным tbl_Account.StatusID.
3) в sq_Account добавил JOIN на таблицу статусов tbl_AccountStatus, а также выборку tbl_Account.StatusID и tbl_AccountStatus.Name AS StatusName.
4) в ds_Account добавил поле справочника StatusID, указав колонку StatusID, источник данных ds_AccountStatus и колонку для отображения Name.
5) поместил на карточку контрагента LookupDataControl и связал его с StatusID из датасета.

При нажатии на "лупу" справочник не открывается, но выскакивает ошибка "несоответствие типа".

Что я делаю не так?

*скриншоты для наглядности
tbl_Account: http://tinyurl.com/qgpqt2g
sq_Account: http://tinyurl.com/q9a45ly
ds_Account: http://tinyurl.com/nfy45df
wnd_AccountEdit: http://tinyurl.com/pgqvfha

Нравится

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

Проверьте сервис ds_AccountStatus
Указаны ли там ключевое поле и первичное поле для отображения

Глупая ошибка. Поле для отображения в ds_Account не было указано. Благодарю, Валерий.

Показать все комментарии
Like
права доступа
Фильтры
Разработка

Подскажите, пожалуйста, как "ускорить" LIKE фильтр в представлении (view), то есть когда на таблицу наложены права доступа?

Нравится

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

Создайте индексы для полей, по которым настроена фильтрация.
Однако если для фильтра like используется оператор "CONTAINS", ускорить навряд ли получится.

"Бондарь Наталия" написал:

Создайте индексы для полей


Спасибо, Наталья! Хорошая идея :wink:! Для вьюхи создать индексы. Надо только со схемами разобраться, так как без схемы индексы не разрешает создавать :confused:

Cannot create index on view 'vw_Account' because the view is not schema bound.

это я по контрагенту хочу во вьюхе индекс создать:
CREATE INDEX IAccountNameAndOfficialName ON dbo.vw_Account (Name, OfficialAccountName)

"Бондарь Наталия" написал:Посмотрите следующие темы

ага, уже пытаюсь в них разбираться. Спасибо!
Если разобраться получится - напишу тут.

Показать все комментарии
Connector.DBEngine
Скрипты
Разработка

При выполнение скрипта, дата передаеться текстом (а могла бы безопасно через convert или cast):

exec sp_executesql N'update [vw_ChangeRequest] set EstimatedDueDate = @P1 where ReleaseID = @P2',N'@P1 nvarchar(4000),@P2 uniqueidentifier',N'23.09.2013','23ADF24D-AB85-437D-85BA-AD3CD1A9A4F8'

автоматическая конвертация срабатывает относительно формата дефолтных настроек БД. Соотвественно в БД формат другой, запрос падает. Я могу как то указать для ExecuteCustomSQL, как правильно работать с датой? Очень не хочеться писать генерацию нужной строки с cast или convert.

Пример кода:

var Parameters = System.CreateObject('TSObjectLibrary.Parameters');
var ReturnParameter1 = Parameters.CreateItem();
ReturnParameter1.Name = 'ReleaseID';
ReturnParameter1.DataType = pdtGUID;
ReturnParameter1.Value =  Dataset('ID');
Parameters.Add(ReturnParameter1);
Connector.DBEngine.ExecuteCustomSQL("update [vw_ChangeRequest] set StatusID = '{06DF639B-AC5D-48DF-88EE-EFD0369E80D3}' where ReleaseID = :ReleaseID",Parameters);

Нравится

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

Как то странно работают функции получить день и месяц(24 сентября плавно превращаеться во 2 августа):

Почему?

"Борисов Михаил Евгеньевич" написал:

Почему?


Добрый день!

getDay() возвращает целое число, обозначающее день недели: 0 - воскресенье, 1 - понедельник, 2 - вторник, и т.д.

getMonth() возвращает целое число от 0 до 11. 0 соответствует январю, 1 - февралю, и т.д.

Спасибо. А по Connector.DBEngine и региональным стандартам не подскажете как быть? Функцию я дописал, которая меня будет экронировать от настроек БД, но как то это некрасиво.

P.S. я очень люблю JS, я очень люблю JS, я не люблю C#, я не люблю C# он слишком логичен, в нем день недели DayWeak, это ж так каждый поймет что там лежит

В общем сделал так:

function GetSQLDate(Data) {
	Result="convert(datetime,'"+(Data.getUTCDate()+1)+'.'+(Data.getMonth()+1)+'.'+Data.getFullYear()+"',104)";
 
	return Result;
}

И способ использования велосипеда:

 var EstimatedReleaseDate=  GetSQLDate(new Date(Dataset('EstimatedReleaseDate')));
 Connector.DBEngine.ExecuteCustomSQL("update [vw_ChangeRequest] set EstimatedDueDate = "+EstimatedReleaseDate+" where ReleaseID = :ReleaseID",Parameters);

Здравствуйте, Михаил!
Попробуйте еще использовать функцию getVarDate() для получения даты в нужном формате.

Показать все комментарии
Технические вопросы
Разработка

Приветствую!
Прошу помощи в реализации следующей задачи:
Имеем окно редактирование, как только кликаем за его пределы(например на грид) - окно(редактирования) должно закрываться. Как можно это решить?

Нравится

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

Здравствуйте, Артем!
У окна есть событие "OnDeactivate", которое как раз генерируется, когда окно теряет фокус.
В обработчике события можно описать всю необходимую логику.

А как можно получить ссылочку на открытое окно? Например мне нужно закрыть определенное окно при фокусе на одном из двух.

А как можно получить ссылочку на открытое окно? Например мне нужно закрыть определенное окно при фокусе на одном из двух.

Артем, ссылку на окно можно получить только если они как-то связаны, например родительская свяь, тогда можно будет обратиться к ParentWindow.
Но, думаю, такой вариант Вам не подойдет.
Можно еще отправлять сообщение (SendNotify) из окна, которое требуется закрыть при потере фокуса, а ловить сообщение в окне, на котором должен быть фокус и из него закрывать уже нужное окно.

Да нет, вполне подойдёт, т.к. корзина является дочерним окном обращения. Как взять ссылочку только на дочерний объект?

Есть ли вообще способ получить список открытых окон?

Артем,
1. Ссылку взять тем же Notify, передать Self в родительское окно, прямой ссылки на потомка у родительского окна нет.
2. Такого способа нет.

Артем, по поводу списка открытых окон я ошибся.
Открытые окна размещены в элементах массива "WinCache_Windows" в качестве параметра Instance. В "scr_WindowUtils" есть метод для получения экземпляра окна ("WinChache_Get") по параметру элемента массива "RecordID", но Вы можете написать свой метод получения окна по идентификатору окна, который предварительно будете сохранять при открытии.

Показать все комментарии
Технические вопросы
Разработка

Добрый день сообщество!
Помогите решить проблему с разделом планирования. Делал по инструкции, создал запрос по таблице счета с колонками ID, дата оплаты, сумма оплаты, сумма (б. в.), клиент. В настройках планирования создал новый вид планирования указав запрос, поля ID как ключевое и дату оплаты как поле периода. В показателях для данного вида указал сумму оплаты. Но при выборе этого вида планирования в значениях всех колонок по всем клиентах 0. Где я ошибся или есть какие то условия при которых рассчитывается значения?

Нравится

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

Здравствуйте, Иван!

Возможно проблема связана с правами доступа. Проверьте, пожалуйста, права для записей на детали "Измерения":

Права установлены для группы все пользователи.

Иван, настроила вид планирования согласно Вашему описанию - всё отображается корректно.
Проверьте, возможно, что-то не учли (во вложении прилагаю алгоритм своих действий).

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

Показать все комментарии
LookupDataControl
Сортировка
Технические вопросы
Разработка

Есть поле LookupDataControl, которое в датасете установлено как выпадающий список (галочка "Отображать как выпадающий список в карточках")

При отображении значений в карточке они появляются в произвольном порядке.
Т.е. сортировка указанная в SelectQuery не учитывается.

В профайлере тоже отображает выборку из базы без указания сортировки.

Terrasoft 3.4.1.106

Нравится

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

Виктор, добрый день!

По умолчанию LookupDataControl с включенным simple select не использует ORDER BY.

Но можно добавить: для контрола в функции OnPrepareSelectWindow пропишите:

var Dataset = LookupDataControl.DataField.LookupDataset;
Dataset.DataFields.ItemsByName('Name').OrderType = otDesc;

либо otAsc.

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

Добрый день!

Террасофт CRM 3.4.0.180, WinXP sp3, права Администратора.
Создал собственный ActiveX компонент exportonline.dll
Прописал в RunSettings.xml

  Enabled="True" Force="False" Type="Network" Path="\\expert\pubfull\TSUpdate" URL="" FTPUserName="" FTPPassword="" MaxIterations="5"/>
  в > добавил строку
  FileName="ExportOnline.dll"/>

Библиотека копируется в папку bin, но ее регистрации не происходит
при запуске Террасофт. С чем это может быть связано. И правильно ли
я все сделал для автоматической регистрации собственного ActiveX?

С помощью regsvr32.exe все проходит успешно, но мне нужно чтобы
библиотека регистрировалась автоматом после обновления.

Нравится

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

Можно получить RunSettings.log ?

runsettings_23.rar
Файл прикрепил, но вроде там все нормально, тем не менее авторегистрация не проходит, а если вручную через regsvr32.exe, то все нормально.

Странно, судя по логу, команда регистрации была отправлена системе.
Можете прикрепить Вашу библиотеку, протестирую у себя локально?

Прикрепил exportonline.rar

runsettings_28.rar

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

runsettingsxml.rar

Вот мой runsettings.xml на всякий случай

runsettingsxml.rar

Вот мой runsettings.xml на всякий случай

Андрей, попробуйте так:

<Item FileName="ExportOnline.dll" Required="True"/>

и что-бы библиотека уже была в Bin'e. У меня зарегистрировалась:

[14.01.30 14.30.03.086]	Register Dll library C:\Terrasoft\Files\Bin\ExportOnline.dll
[14.01.30 14.30.03.086]	Command: "regsvr32" /s "C:\Terrasoft\Files\Bin\ExportOnline.dll"

Кстати, если такая команда в логе есть, почему Вы считаете что библиотека не зарегистрирована?

Так тоже не получается. При запуске Террасофта перерегистрации библиотек не происходит, новый лог не создается. Библиотеку проверяю попыткой создать activex объект в javascript. Если библиотека не зарегистрирована, то происходит ошибка. Если библиотеки нет в папке bin, то в лог пишется только обновление, а не перерегистрация. Этот лог я тоже выше прикреплял. А тот лог который я прислал первым, его лучше не учитывать, поскольку я точно не могу сказать когда он был сформирован и после каких действий. А на какой версии Вы мою библиотеку тестировали? У меня 3.4.0.180. И еще вопрос. Как террасофт определяет какие нужно регистрировать библиотеки? Ведь не может быть чтобы программа при каждом запуске их перерегистрировала. Или она смотрит на дату файла. Если файл более новый в папке bin лежит, то она только его перерегистрирует или как вообще алгоритм регистрации библиотек работает?

И еще вопрос нужно ли на Висте и Win7 запускать Террасофт от имени администратора для регистрации библиотек

Андрей, по поводу "от имени администратора" - это обязательно!
По поводу как происходит регистрация: есть 2 уровня проверки:
1) смотрим в реестр, есть ли такая библиотека. Нету - регистрируем.
2) В реестре библиотека есть. Смотрим не изменилась ли версия. Изменилась? Перерегистрируем.

Я проверял на 3.4.1, но в регистрации не думаю что меняли что-то.
Проверил в реестре - библиотека зарегистрирована:

А есть ли такая запись в реестре?

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

в ветке дерева ProgID должно быть значение ExportOnline.Online

И еще очень важный вопрос для понимания проблемы, в каком месте реестра и как террасофт проверяет регистрацию библиотеки?

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

Андрей, есть такая запись:

Выполните

regsvr32.exe /u C:\Terrasoft\Files\Bin\TSMAPILibrary.dll

а затем запустите TSClient.exe, запустится перерегистрация библиотек:

[14.01.31 11.41.18.889] Unregister Dll library C:\Terrasoft\Files\Bin\ExportOnline.dll
[14.01.31 11.41.18.890] Command: "regsvr32" /s /u "C:\Terrasoft\Files\Bin\ExportOnline.dll"

Но вот почему то регистрации у меня также не было.
Затем попробовал выполнить:

regsvr32.exe /u C:\Terrasoft\Files\Bin\TSMAPILibrary.dll
regsvr32.exe /u C:\Terrasoft\Files\Bin\ExportOnline.dll

И запустить TSClient.exe:

Регистрации также не было. И запись ProgID также из реестра исчезла.

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

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

Судя по всему проблема с библиотекой. При выполнении команды regsvr32.exe с ключем /u библиотека некорректно удаляется из системы, т.е. остается висеть. Можно посмотреть утилитой oleview (Library Types):
C:\Program Files (x86)\Windows Kits\8.0\bin\x86

Поэтому при удалении регистрации система при повторном запуске не запускает процесс перерегистрации.

Ну хорошо, пусть это проблема библиотеки, но на это я повлиять не могу поскольку библиотеку формирует Builder С++ 6, то и функция чистки DllUnregisterServer() формируется автоматически. Следовательно, можно ли решить проблему, если Террасофт будет проверять регистрацию библиотеки именно в той ветке реестра, где находятся InprocServer32, ProgID и т.д. Ведь эти разделы все-таки чистятся? У меня подобных библиотек для Террасофта на Билдере много.

Пробовали ли вы другие ваши библиотеки подключать?
Если да, то они нормально регистрируются и удаляются(что важнее) из системы?

Другие библиотеки работают аналогично первой. Чистятся только следующие разделы

HKEY_CLASSES_ROOT\CLSID\GUID Библиотеки\
HKEY_CLASSES_ROOT\CLSID\ExportOnline.Online

Возможно это особенность Билдера 6. Может ли Террасофт проверять зарегистрирована ли библиотека именно в этих разделах?

Андрей, попробую уточнить у коллег из департамента разработки.

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

К сожалению, нет - мы не будем "собирать" отдельное ядро с таким поведением.
Однако, для обхода этой проблемы, выполните:

(Все ниже действия выполняются в текущей папке Terrasoft)

1. Создать bat файл unreg.bat
2. В нем пишем код:

@echo off
regsvr32  ExportOnline.dll  /s/u
Reg delete "HKEY_CLASSES_ROOT\TypeLib\{74FCD2F5-4432-4309-A978-B267819572E1}" /f
 
TSClient.exe

3. Для созданного батника создаем ярлык (можно сменить иконку).
4. Запускаем ярлык.

пс: cmd окно также можно спрятать:

1. Создаем файл Hide.vbs
2. В нем пишем скрипт:
Set WshShell = CreateObject("WScript.Shell")
RetCode = WshShell.Run("S:\TerrasoftCRM\Bin\unreg.bat", 0, False)
3. Создаем ярлык, по такому же сценария как и для unreg.bat
4. Запускаем созданный ярлык

Я решил сделать немного по другому и воспользоваться настройкой runsettings.
В runsettings.xml пишу

<!--  Commands for execute after update 
  --> 
<PostUpdateRun>
  <Item FileName="{tscrm}\regdll.cmd" Parameters="" Show="True" UseSessionUser="False" Version="" /> 
  </PostUpdateRun>
<!--  Commands for execute before execute application 
  --> 
- <PreExecuteRun>
  <Item FileName="{tscrm}\regdll.cmd" Parameters="" Show="True" UseSessionUser="False" Version="" /> 
  </PreExecuteRun>

в regdll.cmd пишу такой код

regsvr32 ExportOnline.dll

Но этот код не отрабатывает ни на PostUpdateRun, ни на PreExecuteRun
в лог пишется вот что

[14.02.24 06.29.13.209]	Run PreUpdateCommands
[14.02.24 06.29.13.209]	Run Deleting
[14.02.24 06.29.13.209]	Update local file G:\Program Files\Terrasoft\Bin\..\Bin\1.txt from network file \\expert\pubfull\TSUpdateLocal\Bin\1.txt
[14.02.24 06.29.13.256]	Run PostUpdateCommands

Это ошибка Террасофта или я что-то не так делаю?

Здравствуйте, Андрей!
Видимо, не там распологается файл для запуска. Попробуйте прописать путь без использованя макросов.
У меня отрабатывает так:

	<PreExecuteRun>
		 <Item FileName="C:\Users\a.kasparevich\Desktop\Terrasoft 3x\3.4.0.180\test.cmd" Parameters="" Show="True" UseSessionUser="False" Version="" /> 
	</PreExecuteRun>

В файле просто команда "pause".

Андрей, обнаружена ошибка в статье по runsettings. Обратите внимание на комментарий.

Спасибо, проблема решена

Показать все комментарии
логин fkeys
Установка и Администрирование
Разработка

Вопрос: как создаеться логин fkeys?

Развернули дамп на MSSQL и пошли по инсрукции в которой значилось:
5. Эту же процедуру нужно выполнить для логина «fkeys» (служебный логин):
sp_change_users_login 'auto_fix', 'fkeys'
Похожее давно использовал с форума:
sp_change_users_login 'update_one', 'fkeys', 'fkeys'

Пользователь БД создался, но вот логина сервера такого(fkeys) нет. Поэтому оба варианта выдают ошибку: The Login name 'fkeys' is absent or invalid. Логин перенес с продуктива создав скрипт Create as c и все заработало. Правильно ли сделал? А что за пароль выгрузился нечитаемыми символами в скрипте, это дефолтные настройки террасофт?

Нравится

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

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

Логин можно было создать и через графический интерфейс Management Studio. Какой именно пароль пароль установился для fkeys точно не скажу, но он нигде не фигурирует и на него можно не обращать внимания. Что касается Террасофт, то пароли хранятся исключительно на уровне SQL-сервера. Другими словами, какой пароль задать для логина, с таким и нужно входить в Террасофт. Пароль можно изменить под пользователем с правами системного администратора как через интерфейс Террасофт так и напрямую для логина.

"Котенко Александр" написал:Какой именно пароль пароль установился для fkeys точно не скажу, но он нигде не фигурирует и на него можно не обращать внимания.

Вот эта магия меня и смущает. Без логина, например интеграция с outlook нормально не работает. С логином работает, но не понятно почему. Если пароль любой, то как этим логином может потом воспользоваться террасофт. А если не любой, то почему об этом нигде не написанно.

Здравствуйте. "fkeys" - это служебный пользователь SQL-сервера. Что касается пароля, я сейчас уточню и дополнительно сообщу.

Для пользователя "fkeys", если не задать специально, пароль генерируется случайный самой СУБД. При работе Террасофт он не проверяется. Как вариант при переносе БД (если используется SQL >= 2005) можно удалить пользователя "fkeys" из базы, потом запустить Террасофт под пользователем, который обладает ролью "sysadmin". После этого создастся такой пользователь и логин на сервере.

Показать все комментарии
Скрипты
Разработка

Добрый день!
Подскажите, пожалуйста, есть ли возможность в скрипте подписаться на событие окна?
Например нужно написать скрипт, который будет обрабатывать событие OnPrepare окон, но хочется не вносить изменения в скрипт окна, а создать новый скрипт.

Функция SetObjectEventDispatcher похоже не подходит, т.к. в ней нужно указать ссылку на объект, а у меня ссылки нет.

Нравится

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

Здравствуйте, Дмитрий!
А почему Вы не хотите вносить изменения в скипт окна?
В любом случае, Вы же можете подписаться на события базового окна с помощью SetObjectEventDispatcher.
Так как все окна унаследованы от базового, то можно будет в скрипте обрабатывать события всех окон.
Такой вариант Вам подходит?

Хочу сделать утилиту, которая будет обрабатывать событие открытия окон и изменения данных в датасете. Хочется сделать максимально простой механизм внедрения этой утилиты - простое копирование сервисов в базу без внесения изменений в существующие.

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

Событие базового шаблона это хорошо, но если где то забыть, при создание события нового окна, вызвать и базовое, то получиться нехорошо.

Дмитрий, уточню этот вопрос у разработчиков и предоставлю ответ в течение дня.

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

Понятно, спасибо.

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