Не устанавливается значение поля таблицы

Пытаюсь установить значение для текстового поля таблицы:

var FileName = System.CreateObject('TSObjectLibrary.Value');
if (System.PromptForFileName(FileName, '*.*', '', "Выберите файл(ы)", '',false))
{
        if (Assigned(FileName) && !IsEmptyValue(FileName.Value))
        {
                Control.DataField.Value = FileName.Value;
        }
}

Выкидывает исключение о несовместимости типов. Это из-за разных форматов строк? Если так, то как выполнить преобразование?

Нравится

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

Возможно, причина в том, что в результате свойство FileName.Value содержит строку, разделённую символом '\', который в языке JScript является специальным.

Попробуйте так:

var FileName = System.CreateObject('TSObjectLibrary.Value');
if (System.PromptForFileName(FileName, '*.*', '', "Выберите файл(ы)", '',false)) 
{
        if (Assigned(FileName) && !IsEmptyValue(FileName.Value))
        {
                Control.DataField.Value = FileName.Value.replace(/\\/g, '\\\\');
        }
}

Все равно пишет Invalid value for field

Добавьте debugger; перед строкой Control.DataField.Value = FileName.Value.replace(/\\/g, '\\\\'); и посмотрите, какое значение принимает FileName.Value. Также проверьте, какого типа у Вас Control и какого Control.DataField (возможно, в датасете это поле имеет другой тип).

Контрол - TextControl. Значение вида "C:\directory\file.xml". Тип - строка. Уже проверял.
Данная функция вызывается в обработчике двойного клика.

Необходимо смотреть удалённо. Вышлите, пожалуйста, параметры удалённого доступа на support@tscrm.com, как я уже писал по проблеме с напоминаниями.

Данная проблема возникла в службе "Custom\Workspaces\OfferingCs\General\Main Grid\wnd_OfferingCEdit" и связанной с ней службе скрипта. Код находится в конце скрипта.

Проблема действительно воспроизводится, но без .replace(/\\/g, '\\\\'). Если это выполнение добавить, у меня всё работало корректно.

Тем не менее, поскольку результат отображается с двумя слэшами, я заменил в коде это выражение на такое:

Control.DataField.Value = FileName.Value.toString();

Так тоже работает корректно.

Странно, потому что у меня с вашей правкой по-прежнему выдается та же ошибка.

Может, попробуйте почистить Cashe?

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

Да, действительно, так и было.

Проблема была в том, что в запросе sq_OfferingC почему-то слетели поля LocalUrl..., GlobalUrl..., а также PublicInWeb, SpecialOffering и HotOffering. Не знаю, почему у меня проблема не воспроизвелась в первый раз. Сейчас должно работать нормально.

Внезапно... И снова большое спасибо)

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