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

Есть ли какой-то рабочий пример по сабжу.
Заранее спасибо

С уважением, Павел

Нравится

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

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

Добрый день, Павел!
Похоже, нашел на Community подходящий пример:
http://www.community.terrasoft.ru/blogs/3521
Если что, вот SDK:
http://terrasoft.ru/sdk/index.html?frmname=topic&frmfile=TSObjectLibrar…

Добрый день, Андрей

Спасибо за пример.
Попробовали реализовать, при попытке выполнить код:

<?
ini_set('display_errors',1);
error_reporting(E_ALL);
set_time_limit(0);
include 'itsTerrasoftClass.php';

$ws = new itsTerrasoftWS();
$ws->set_Host('http://192.168.0.4/wsdl/IServer');

$ws->set_Username('ttt');
$ws->set_Password('ttt');

$ws->set_wsClient();

$wsConfigurations = $ws->get_wsConfigurations();

$ws->set_Configuration($wsConfigurations[0]);
$ws->OpenConfiguration();

$SQL = "select top 1 [OfficialAccountName] from [dbo].[tbl_Account]";
$ws->CreateXML($SQL);

$ws->ExecuteSQL();

$xml = DOMDocument::loadXML( $ws->get_XMLResult() );

$params = $xml->getElementsByTagName('R');
$k=0;

foreach ($params as $param)
{
echo $params->item($k)->getAttribute('F0')."
";
$k++;
}
$ws->CloseConfiguration();
?>

Имеем следующую ошибку:

Fatal error: Uncaught SoapFault exception: [SOAP-ENV:Server] No SQL statement provided in C:\srv\www\terrasoft\itsTerrasoftClass.php:159 Stack trace: #0 C:\srv\www\terrasoft\itsTerrasoftClass.php(159): SoapClient->__call('PrepareSendPack...', Array) #1 C:\srv\www\terrasoft\itsTerrasoftClass.php(159): SoapClient->PrepareSendPackages('9064664010F3D1E...', 'PAA/AHgAbQBsACA...', false, -1, 51200000) #2 C:\srv\www\terrasoft\itsTerrasoftClass.php(165): itsTerrasoftWS->PrepareSendPackages() #3 C:\srv\www\terrasoft\index.php(32): itsTerrasoftWS->ExecuteSQL() #4 {main} thrown in C:\srv\www\terrasoft\itsTerrasoftClass.php on line 159

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

Добрый день, Андрей

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

С уважением, Павел

Павел, думаю, все же стоит попробовать написать в ту тему. Также проверьте, подходят ли имя пользователя и пароль и к той ли конфигурации выполняется подключение.
Также можете ознакомиться с примером на SDK:
http://www.terrasoft.ru/sdk/IDatasetExample_js.html
он не на PHP, но, я думаю, что адаптировать не составит Вам большого труда.

Добрый день, Андрей

Пытаемся реализовать аналогичный пример на С#.
Ссылка: http://www.community.terrasoft.ru/blogs/7482
Но служба Terrasoft Web Services HTTP Server, отвечает в кодировке:
HTTP/1.1 200 OK
Connection: close
Content-Type: text/xml; charset=ISO-8859-1
Content-Length: 576

Есть ли возможность каким-то образом настроить ответ в UTF-8?

Полный запрос:

POST http://192.168.0.4/soap/IServer HTTP/1.1
Content-Type: text/xml; charset=utf-8
VsDebuggerCausalityData: uIDPo78/6OVekaNJswdxScc0uIEAAAAA5SP2bc+OeUqw8iMfL1ptLCBS9yGhu+RHod56QvUhwZAACQAA
SOAPAction: "urn:TSWebServicesServerLibraryInternal-IServer#Get_ServerConfigurationNames"
Host: 192.168.0.166
Content-Length: 345
Expect: 100-continue
Connection: Keep-Alive

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><q1:Get_ServerConfigurationNames xmlns:q1="urn:TSWebServicesServerLibraryInternal-IServer"/></s:Body></s:Envelope>

Полный ответ:

HTTP/1.1 200 OK
Connection: close
Content-Type: text/xml; charset=ISO-8859-1
Content-Length: 576

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS1="urn:TSWebServicesServerLibraryInternal-IServer"><NS1:Get_ServerConfigurationNamesResponse><return xsi:type="xsd:string">Samo Soft;Demo</return></NS1:Get_ServerConfigurationNamesResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>

Спасибо.

Здравствуйте, Павел!
Проще всего будет уже на Вашем приложении конвертировать ответ, полученный в ISO-8859-1.
Вот несколько ссылок, которые Вам помогут:
http://stackoverflow.com/questions/1922199/c-sharp-convert-string-from-…
http://php.net/manual/en/function.utf8-encode.php

Добрый день, Андрей

Мы используем следующий пример:

ws.IServer sc = new ws.ServerClient();
ws.Get_ServerConfigurationNamesRequest rqGet_ServerConfigurationNames = new ws.Get_ServerConfigurationNamesRequest();
ws.Get_ServerConfigurationNamesResponse rsGet_ServerConfigurationNames = new ws.Get_ServerConfigurationNamesResponse();                        
rsGet_ServerConfigurationNames = sc.Get_ServerConfigurationNames(rqGet_ServerConfigurationNames);

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

Сообщение об ошибке:

Тип содержимого text/xml; charset=ISO-8859-1 ответного сообщения не соответствует типу содержимого привязки (text/xml; charset=utf-8). При использовании особого кодировщика необходимо правильно реализовать метод IsContentTypeSupported. Первые 562 байтов ответного сообщения: "

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS1="urn:TSWebServicesServerLibraryInternal-IServer"><NS1:Get_ServerConfigurationNamesResponse><return xsi:type="xsd:string"></return></NS1:Get_ServerConfigurationNamesResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>

Ждем ваших комментариев.
Спасибо.

Павел, вероятно, класс настроен на работу только с кодировкой charset=ISO-8859-1, в том числе и на приеме сообщений, а Вы посылаете запрос в charset=utf-8. Попробуйте посылать в ISO-8859-1.

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

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

Подскажите, как получить значения при исполнении ADOCommand:

Есть простой ADOCommand для работы с MySQL, с текстом SQL:

SELECT ID,post_date,post_content FROM posts
WHERE ID = :ID

Выполняю в скрипте:

var Command = GetSingleItemByCode('sq_adocmd');
         var ID= 57;
         SetParameterValue(Command.Parameters, 'ID', ID);
         Command.Execute();

Все работает. Только не знаю, как получить (примерно как dataset.Values('post_content')) после выполнения Command значения:
post_date и post_content

Подскажите, как это сделать.

Нравится

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

Не уверен, но попробуйте так:

var ds = Command.Open();
var ID = ds('ID');
var post_date = ds('post_date');
var post_content = ds('post_content');

На

var ds = Command.Open();

Выводит:

 Объект не поддерживает это свойство или метод

Тоже самое, если:

Command.Fields('post_date').Value();

Я так думаю, что ADOCommand предназначена для выполнения команд без получения каких-либо значений (обновление и удаление записей и др.).
Для того, чтобы получить значения, используйте ADODataset.

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

Здравствуйте, возник вопрос по MemoryDataset - есть ли возможность непосредственно в коде добавить в него столбцы для данных? И как (тоже в коде) выводить эти столбцы в грид?

Нравится

3 комментария
var DataField = AddStringDataField(Mds.DataFields, 'Name' + i, 'Заголовок колонки', 100);
DataField.Tag = 'UniversalReport' + i;
AddGridColumnsByDataset(dgvMain, Mds, false);
Mds.Close();
Mds.Open();

Отлично, колонки вроде добавляет.

['Name' + i] - это имя столбца в MemoryDataset-е, который потом можно заполнить на AfterOpen? И как его очистить при очередном изменении числа колонок (ругается что дублируется свойство Name в AddStringDataField)?

Перед каждым выполнением конечно нужно эти столбцы чистить:

Mds.DataFields.Clear();

А в остальном вы правы.
Единственное, на AfterOpen() лично я обращался не по имени, а по порядку:

Dataset.DataFields.Items(k).Value = 'SomeValue';
Показать все комментарии

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

Нравится

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

Это называется «фильтрация», вот пример с описанием.

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

и в событие - OnPrepareSelectWindow , я больше не попадаю.

У Вас, вероятно, данные отображаются в виде выпадающего списка.
LookupDataControl, если он отображает данные в виде выпадающего списка, считывает из БД и запоминает перечень показанных значений. Затем использует для показа этот список без обращения в базу.
Чтобы отключить данный механизм, достаточно в нужный момент вызвать метод UnprepareDropDownList().
Этот вопрос уже поднимался, Вы можете ознакомиться с его обсуждением в темах: 1, 2

спасибо. плохо искал.

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

Добрый день.
У меня в разделе Операции есть созданная деталь PaymentInCashflowDetail, которая позволяет добавлять записи для связи с новым разделом Payment. Есть карточка добавления на деталь новой записи. В ней всего три поля - собственно Операция, запись раздела Payment, и тип их отношения (выбор из справочника). Все хорошо работает.
Проблема в рутине заполнения. Потому что например надо пройтись по деталям 40 операций и внести туда однотипную связь. А потом пройтись по еще 30 и добавить еще одну однотипную связь. И так далее.

Поэтому вопрос как изменить стандартно работающую деталь таким образом, чтобы при выборе в реестре нескольких Операций после добавления записи на деталь она добавлялась для всех выбранных операций?

P.S. В коробочной версии нет ни одной детали , которая бы работала таким образом.
Когда-то , используя материалы форума (никак не могу найти ту тему), я вносила изменения в стандартную деталь Доступ, и поэтому при выборе нескольких записей в реестре, указанный доступ раздается сразу на все выбранные записи. Возможно дело в специфике детали Доступ, но аналогичным образом изменить мою созданную деталь не получается.

Нравится

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

Здравствуйте, Виктория!

Уточните, пожалуйста, какую версию продукта Вы используете? Если разговор идет о версии выше 3.4.0.x то данный функционал присутствует в базовой логике. Например можно добавлять по нескольким записям пользователей на деталь "Доступ". Соответственно, реализацию можно посмотреть в базовой конфигурации. Если же версия клиента, ниже 3.4, то там навряд ли получится реализовать такую вещь, так частично данный функционал используется в ядре.

версия 3.3.2.
И даже в ней я делала добавление на детали Доступ сразу по нескольким записям. Но так же не получается сделать здесь

А чем не устраивает тупо в лоб действовать?
1) Добавить на гриде детали кнопку "Добавить для выделенных" (можно даже объединить ее с кнопкой "Добавить", ну как "Удалить" и "Удалить все")
2) Считать с главного реестра id выделенных записей и записать их в массив IDs
3) На кнопку "Добавить для выделенных" поставить логику запуска окна карточки добавления на деталь, добавив параметр IDs
4) Переопределить логику кнопки OK (если параметр пуст или нет такого, то действуй как обычная кнопка ОК, если что-то есть то пройтись по всем id и добавить)

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

function btnAddOnDetailOnClick(Control) {
 
	 var ArrayIDs = GetArrayByCollection(grdData.SelectedIDs);
 var Attributes = GetNewDictionary();
 	AddRequiredValuesToDictionary(Attributes, GUID_NULL, true, BaseGridArea);
	for (i = 0; i < ArrayIDs.length; i++) {
	var SourceRecordID = ArrayIDs[i];
	Attributes('SourceRecordID') = SourceRecordID;
 
	   }
 	var DefaultValues = GetNewDictionary();
  	ShowEditWindowEx('wnd_PaymentInCashflowEdit',Attributes, DefaultValues);
}

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

Здравствуйте, Виктория!
Неправильно передаете аттрибуты. У Вас в итоге получается, что в Attributes('SourceRecordID') будет ID последней выделенной записи.
Лучше сделать так, например:

var SelectedIDs = new ActiveXObject('TSObjectLibrary.StringsList');
SelectedIDs.AssignObject(grdData.SelectedIDs);
Attributes('SelectedIDs') = SelectedIDs;

Андрей, вы правы, но это не объясняет почему "Ошибка копирования записи. Оригинальное сообщение об ошибке: запись удалена". Строчка AddRequiredValuesToDictionary(Attributes, GUID_NULL, true, BaseGridArea); не нужна, как раз из-за нее, наверное, эта ошибка.

Виктория, вопрос уже к вам, где вы поставили кнопку, на гриде раздела или в детали?
Я считаю ее правильно все таки на разместить на детали.
Чтобы взять и передать все id в окно wnd_PaymentInCashflowEdit используйте такой скрипт (надеюсь, что разъяснять что есть что не надо)

var MainWindow = Connector.Attributes('MainWindow');
var WorkspaceWindow = MainWindow.ComponentsByName('wndWorkspace').Window;
var wndGridData = WorkspaceWindow.ComponentsByName('wndGridData').Window;
var grdDataAccount = wndGridData.ComponentsByName('grdData');
var SelectedIDs = grdDataAccount.SelectedIDs.CommaText.split(',');
var Attributes = GetNewDictionary();
Attributes('NotifyObject') = Self;
Attributes('SelectedIDs') = SelectedIDs;   
var DefaultValues = GetNewDictionary();
ShowEditWindowEx('wnd_PaymentInCashflowEdit',Attributes, DefaultValues);

В wnd_PaymentInCashflowEdit допишите на кнопку ОК скрипт (точнее немного переделать)

if (Self.Attributes('SelectedIDs') == null) {
	//Нет такого атрибута, значит действует как обычная кнопка ОК
	//Сюда вписать то, что было на этой кнопке, скорее всего просто scr_BaseDBEdit.btnOKOnClick(Control);
} else {
	//здесь добавляем ко всем выделенным записям
	//можно через Append-Post, можно через Insert Query, можете придумать еще какой-то способ
	//пример с Append-Post
	var Dataset = dlData.Dataset;
	var PaymentDataset = Services.GetNewItemByUSI('ds_AccountIndustry') //замените на свой датасет детали
	for (var i = 0; i < Self.Attributes('SelectedIDs').length; i++) {
		//по одной добавляем записи
		PaymentDataset.Append();			
                //тут пройдем по всем полям на окне
		for(var j = 0; j < Self.ComponentCount; ++j) {
			var Field = Self.Components(j);
			if (Field.DataFieldName) {
				PaymentDataset(Field.DataFieldName) = Dataset(Field.DataFieldName);
			}
		}
		PaymentDataset('AccountID') = Self.Attributes('SelectedIDs')[i]; //AccountID - замените на свое поле
		PaymentDataset.Post();
	}
        //закрываем окно
	PaymentDataset = null;
	Self.Close();
        //обновляем датасет на детали
	var NotifyObject = Self.Attributes('NotifyObject');
	var DetailDataset = NotifyObject.ComponentsByName('dlData').Dataset;
	DetailDataset.Close();
	DetailDataset.Open();
}

Продвигаюсь к цели. Исправила здесь.

function btnAddOnDetailOnClick(Control) {
 
	 var ArrayIDs = GetArrayByCollection(grdData.SelectedIDs);
 var Attributes = GetNewDictionary();
 
 
 var SelectedIDs = new ActiveXObject('TSObjectLibrary.StringsList');
SelectedIDs.AssignObject(grdData.SelectedIDs);
Attributes('SelectedIDs') = SelectedIDs;
 
 		var DefaultValues = GetNewDictionary();
  	ShowEditWindowEx('wnd_PaymentInCashflowEdit',Attributes, DefaultValues);
}

Создала специальный InsertQuery. Теперь пишу код для кнопки ОК.

var InsertObject = {};
 
function btnOKOnClick(Control) {
	var Dataset = dlData.Dataset;
 
		 var Attributes = GetNewDictionary();
		Attributes = Self.Attributes('SelectedIDs');
 
if 	(!IsEmptyValue(Attributes)) {
		for (i = 0; i < Attributes.length; i++) {
 
           var PaymentID = Dataset.Values('PaymentID');
	       var PrincipleID = Dataset.Values('PrincipleID');
	       var ContactID = Connector.CurrentUser.ContactID;
           var CashflowID = Attributes[i];
 
           	if (!Assigned(InsertObject.iq_Insert)) {
		     InsertObject.iq_Insert = Services.GetNewItemByUSI('iq_InsertPaymentInCashflow');
	               }
	var IQ = InsertObject.iq_Insert;
	IQ.ColumnsValues('ID').Value = Connector.GenGUID();
	IQ.ColumnsValues('PaymentID').Value = PaymentID;
    IQ.ColumnsValues('PrincipleID').Value = PrincipleID;
    IQ.ColumnsValues('CashflowID').Value = CashflowID;
      IQ.ColumnsValues('ModifiedByID').Value = ContactID;
    IQ.Execute();
}  
 
 
}   else {
 scr_BaseDBEdit.btnOKOnClick(Control);
 }
		    }
 

Дает открыть окно, заполнить значения.
Но по нажатию кнопки просто ничего не происходит и даже окно не закрывается.

Виктория, очевидно, Вы не добавили функцию закрытия окна после выполнения InsertQuery.
Во-первых, нужно закрывать окно после выхода из цикла. Во-вторых, не уверен, что Self.Attributes('SelectedIDs'); в Вашем случае корректно обрабатывается. попробуйте так:

var InsertObject = {};
 
function btnOKOnClick(Control) {
    var Dataset = dlData.Dataset;
 
    var SelectedIDs = Window.Attributes('SelectedIDs');
    if ((IsEmptyValue(SelectedIDs)) || (SelectedIDs.Count == 0)) {
        scr_BaseDBEdit.btnOKOnClick(Control);
    }
    else {
        for (i = 0; i < SelectedIDs.Count; i++) {
            var PaymentID = Dataset.Values('PaymentID');
            var PrincipleID = Dataset.Values('PrincipleID');
            var ContactID = Connector.CurrentUser.ContactID;
            var CashflowID = SelectedIDs.Items(i);
 
            if (!Assigned(InsertObject.iq_Insert)) {
                InsertObject.iq_Insert = Services.GetNewItemByUSI('iq_InsertPaymentInCashflow');
            }
            var IQ = InsertObject.iq_Insert;
            IQ.ColumnsValues('ID').Value = Connector.GenGUID();
            IQ.ColumnsValues('PaymentID').Value = PaymentID;
            IQ.ColumnsValues('PrincipleID').Value = PrincipleID;
            IQ.ColumnsValues('CashflowID').Value = CashflowID;
            IQ.ColumnsValues('ModifiedByID').Value = ContactID;
            IQ.Execute();
        }
        Self.Close();
    }
}

Поменяла все же
var SelectedIDs = Window.Attributes('SelectedIDs'); на
var SelectedIDs =Self.Attributes('SelectedIDs');

И так теперь все работает! Спасибо всем, кто помогал.

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

Здравствуйте.
Добавляю в базу MySQL данные из Террасофт (3.3.2) с помощью ADO сервисов:
ADOCommand:

INSERT INTO post (ID, post)
VALUES (NULL,  'Краткое описание);

Данные добавляются, но возникает проблема с кодировкой, текст добавляется крякообразный (см скриншот).
Также, если отображаем данные в гриде из MySQL, то также текст отображается с проблемами в кодировке (см. скриншот).
MySQL кодировка сервера UTF8, кодировка столбцов таблиц MySQL utf8_general_ci.

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

Нравится

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

Добрый день,
как можно "поймать" событие закрытия окна, т.е. можно закрыть через крестик, можно через кнопку "Cancel" или "Ok", или клавишой "Esc". Как можно узнать каким именно образом оно было закрыто?

Нравится

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

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

По сути способа два - это "ОК", т.е. запись изменений в БД, и остальное - отмена записи в БД.
Для "ОК" есть свое событие - btnOkOnClick(Control), либо OnDatasetBefore(After)Post. Для всего остального - OnCloseQuery(Window).

Спасибо за ответ, но это не совсем то, что нужно. Событие OnCloseQuery(Window) срабатывает и на кнопках Ок и Cancel. Мне же нужно знать что окно именно закрыто кнопкой Cancel, крестиком или клавишой Esc, и если это так, делать какие-то действия.

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

Можно на событии OnPrepare окна установить какую-то глобальную переменную в False, в btnOKOnClick установить ее в True, в OnCloseQuery проверить, если False – значит крестиком, Cancel или Esc.

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

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

Возник вопрос почему в такой конструции

                Dataset.Close();
                EnableDatasetFields(Dataset, true, ['MyField1', 'MyField2', 'MyField3',]);
                Dataset.Open();
                Dataset('MyField1') = 1;

ПОСЛЕДНЯЯ СТРОЧКА периодически вызывает ошибку "поле не активно"?
Может быть потому, что использую датасет из лукап-поля?

Нравится

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

Ммм... ну вообще было бы неплохо для присвоения значения поля сделать Dataset.Edit() :smile:

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

"Александр Кудряшов" написал:сделать Dataset.Edit()

Александр, спасибо! Респект!
"Александр Кудряшов" написал:always select

вполне неплохой вариант :smile:

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

Добрый день

Подскажите как можно создать примерно такой запрос
и затем выводить результат в Excel

select ac.name , count(op.programid), count( distinct (contactid))

from tbl_Opportunity op, tbl_account ac
where op.createdon >'09.10.2014'
and op.stateid='4660F3C8-F340-4BC4-864A-67237D6023F2'
and op.accountckpid=ac.id
group by ac.name

в сервисе sq_SelectQuery не нашел альтернативу DISTINCT
в сервисе cq_CustomQuery не нашел как затем связать с dataset

Нравится

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

В SQ можно добавить custom SQL column.

таким образом? рисунок экрана в файле

а каким образом тогда передать параметры запроса,
период дат?

SQL-колонки и SQL-фильтры нужно использовать так, чтобы итоговый SQL-запрос получился подобным обычному. Вот пример.

спасибо с колонками разобрался.

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

Добрый день
Почему не работает условие описанное в коде

var Dataset = DataGrid.DatasetLink.Dataset;
var data= '30.09.2014'

if (Dataset ('CreatedOn') > StrToDate(data))
{
Color.Value= clPink; }

правильно ли пытаюсь сравнить даты?

Нравится

2 комментария
var Dataset = DataGrid.DatasetLink.Dataset;
var data= '30.09.2014'
 
if (new Date(Dataset('CreatedOn')) > StrToDateEx(data))
{
Color.Value= clPink; }
function StrToDateEx(stringDate) {
	stringDate = stringDate.split('.');
        if(stringDate.length != 3) {
              return null;
        }	
	return new Date(stringDate[2], stringDate[1]-1, stringDate[0]);
}

спасибо!

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