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

На простой форме есть возможность воспользоваться указанными в теме функциями с помощью мыши, т.е. кликаем правой кнопкой в элементе редактирования и выпадает контекстное меню с пунктами, по мимо прочего, Копировать и Вставить, если же на форме лежит компонент Pages с несколькими закладками, то при клике правой кнопкой выпадает меню с названиями этих закладок... но селяви такова, что некоторые пользователи слишком сильно избалованы мышью, так вот вопрос - такое поведение выпадающего меню, это неизбежное зло, или его можно победить?

Нравится

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

совсем забыл - версия 3.0.2.244

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

Если я правильно понял Вы имеете ввиду это:

дело в том, что так и должно быть по логике системы. А что Вы хотите там видеть?

"Олейник Дмитрий" написал:...дело в том, что так и должно быть по логике системы. А что Вы хотите там видеть?

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

Извините, не правильно Вас понял, спасибо за скриншот.
Изменения внесены начиная с 3.3.2. Можно обновиться на новое ядро.

"Олейник Дмитрий" написал:
Изменения внесены начиная с 3.3.2. Можно обновиться на новое ядро.

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

Хорошо, передам Ваше обращение в департамент разработки. Сообщу по результатам доп. информацию здесь же.

Добрый день!

Данная проблема поправлена уже в 3.0.4.
К сожалению, в 3.0.2 изменения переноситься не будут. Пожалуйста, обновитесь как минимум до 3.0.4 - переход достаточно безболезненный.

каким образом это можно сделать?

Обратитесь в службу поддержки, они вышлют новые бинарники. Старые на всякий случай сохраните и сделайте бэкап БД. Запустите TSClient из папки с новыми, настройте вход на свою базу и дождитесь загрузки всех библиотек. Возможно, но не обязательно, надо будет перезаказать лицензии.

Показать все комментарии
Администрирование – Доступ к объектам
доступ
права
Установка и Администрирование
Разработка

Добрый день! Поднялся такой вопрос: есть группа менеджеров, у них стоит доступ к карточке "Контрагента" - только на чтение. Такая задача: нужно что бы появился доступ на поле "Ответственный", а на все остальные остались права "Только на чтение". Подскажите как это можно реализовать.

Нравится

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

Эм, ну как бы тема сама за себя говорит. Дайте этой группе менеджеров права на изменение записей в администрировании права по умолчанию (но это будет действовать только на новые записи), что бы раздать права на существующие, тут нужна хитрость, поищите на форуме. И на вкладке "права доступа к полям" поставьте у них права со всех полей кроме Ответственный "только чтение"

Здравствуйте, Николай Николаевич!

Александр абсолютно верно говорит.

Необходимо раздать доступ группе менеджеров на нужные записи в разделе "Контрагенты", после чего в Настройке прав доступа к полям карточки Контрагента установить право "Только на чтение" для всех полей, кроме поля "Ответственный".

Раздать право на изменение группе менеджеров для всех записей в разделе "Контрагенты" можно следующим скриптом:

update tbl_AccountRight set CanWrite = 1 where AdminUnitID = (select ID from tbl_AdminUnit where Name = 'Группа менеджеров')

Если на детали "Доступ" Группа Менеджеров отсутствует вовсе, Вы можете ее добавить для всех записей следующим скриптом:

insert into tbl_AccountRight (RecordID, AdminUnitID, CanRead, CanWrite, CanDelete, CanChangeAccess)
select A.ID, AU.ID, 1, 1, 0, 0
from tbl_Account A
join tbl_AdminUnit AU on AU.ID = (select ID from tbl_AdminUnit where Name = 'Группа менеджеров') 
Показать все комментарии
количество продукта
списание
средневзвешенный
Технические вопросы
Разработка

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

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

Проблема решилась созданием ещё одной расходной накладной (2 единицы продукта списываются по одной накладной, а оставшаяся 1 единица по другой).

Террасофт 3.3.2.290 не умеет списывать количество продукта большее чем размер максимальной партии? Что же тогда такое средневзвешенный способ списания?

Нравится

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

Спасибо за Ваше обращение.

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

Прошу прощения, забыл скриншоты прикрепить:


Здравствуйте, Алексей!

Уточнил у аналитиков, вероятнее всего это ошибка. Прошу предоставить Вашу базу для дальнейшего расследования.

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

Подскажите, пожалуйста, как найти причину зависания?

В разделе склад, документ с типом "Расходная накладная", в документе несколько продуктов.
Пытаюсь провести документ, зависает без ошибки. (Часть документов проводится нормально)
Зависает при попытке выполнить var Result = CustomQuery.Execute()
в :

function ConductSelectedOfferingMovements(Data) {
        Data.OfferingIDs = GetOfferingIDs(Data.OfferingMovementIDs);

        var CustomQuery = GetSingleItemByCode('cq_CounductOfferingMovements',
                'OfferingMovementGridAreaScript');

        SetParameterValue(CustomQuery.Parameters, 'pIsRecalcPrimeCost', Data.IsRecalcPrimeCost);
        SetParameterValue(CustomQuery.Parameters, 'pOfferingMovementIDs', Data.OfferingMovementIDs.join(';'));
        SetParameterValue(CustomQuery.Parameters, 'pUserID', Connector.CurrentUser.ContactID);
        SetParameterValue(CustomQuery.Parameters, 'pIsConduct', Data.IsConduct);
        SetParameterValue(CustomQuery.Parameters, 'pOfferingMovementStatusID', Data.OfferingMovementStatus);
        SetParameterValue(CustomQuery.Parameters, 'pIsRecalcOfferingPrices', Data.IsRecalcOfferingPrices);
        SetParameterValue(CustomQuery.Parameters, 'pOfferingIDs', Data.OfferingIDs.join(';'));
        SetParameterValue(CustomQuery.Parameters, 'pDate', GetLocalDateTime());
        SetParameterValue(CustomQuery.Parameters, 'pIsUpdateShipmentState', Data.IsUpdateShipmentState);
        SetParameterValue(CustomQuery.Parameters, 'pIsUpdatePurchaseState', Data.IsUpdatePurchaseState);
        SetParameterValue(CustomQuery.Parameters, 'pIsReserveOrderOfferings', Data.IsReserveOfferingsFromOrders);
        SetParameterValue(CustomQuery.Parameters, 'pIsAddSupplierInOffering', Data.IsAddSupplierInOffering);
        SetParameterValue(CustomQuery.Parameters, 'pParams', FormatStr('%1;%2', "Вес", "Объем"));
       
       
        try {   debugger;
                var Result = CustomQuery.Execute();     debugger;

Нравится

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

Какой установлен метод списания? Средневзвешенный?

"Молчанов Дмитрий Павлович" написал:

Какой установлен метод списания? Средневзвешенный?


а где это?

Файл->Настройки->Системные настройки->Склад->Метод списания

Найти причину зависания можно выполнив хранимую процедуру (которая запускается через CustomQuery) с передаваемым набором параметров.
Т.е. Вам необходимо:
- посмотреть какие значения передаются в параметры хранимой процедуры (через отладку либо профайлер)
- выполнить хранимую процедуру с значениями параметров, при которых возникает зависание.
С описанием, как выполнить хранимую процедуру можно ознакомиться здесь

"Молчанов Дмитрий Павлович" написал:

Файл->Настройки->Системные настройки->Склад->Метод списания


у меня такого нету
"Бондарь Наталия" написал:

Найти причину зависания можно выполнив хранимую процедуру (которая запускается через CustomQuery) с передаваемым набором параметров.

Т.е. Вам необходимо:

- посмотреть какие значения передаются в параметры хранимой процедуры (через отладку либо профайлер)

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

С описанием, как выполнить хранимую процедуру можно ознакомиться здесь


процедура запускается и все, и идет выполнение

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

"Змитрук Т.Ю." написал:Молчанов Дмитрий Павлович пишет:
Файл->Настройки->Системные настройки->Склад->Метод списания

у меня такого нету

В используемой Вами версии метод списания задается не в системной настройке, а непосредственно в карточке редактирования записи раздела [Продукты] (поле "Метод списания").

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

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

Поскольку на основании описанной в теме информации достаточно сложно определить причину зависания.


базу предоставить не могу, есть другие способы?
"Бондарь Наталия" написал:
Змитрук Т.Ю. пишет:

Молчанов Дмитрий Павлович пишет:

Файл->Настройки->Системные настройки->Склад->Метод списания

у меня такого нету

В используемой Вами версии метод списания задается не в системной настройке, а непосредственно в карточке редактирования записи раздела [Продукты] (поле "Метод списания").


он на что-то влияет?

У меня была подобная проблема, но она воспроизводилась только при установленном методе списания - "Средневзвешенный"

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

"Змитрук Т.Ю." написал:базу предоставить не могу, есть другие способы?

Другой способ помимо получения копии БД - удаленный доступ.

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

Как то можно повлиять на выгрузку в Excel из DataGrid? Не устраивает как даты выгружаются, хотелось бы дописать логику выгрузки. Еще есть необходимость проставлять типы ячеек.

Нравится

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

Здравствуйте, Михаил Евгеньевич!

Механизм экспорта записей из реестра в MS Excel реализован на уровне ядра приложения Terrasoft.

В связи с этим, возможности внести конфигурационные изменения в него нет.

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

Добрый день! Столкнулись с такой проблемой: при выборе двух записей для объединения в контрагентах, через "Действия"-"Объединить выделенные записи". После выбора данных которые должны отображаться в итоговой записи и нажатии на кнопку "Объединить", вылетает ошибка "При слиянии записей произошла ошибка - Error converting data type nvarchar to int". Смысле ошибки понятен, что какие-то поля не конвертируются к нужному типу. Но проблема в том, что не получается отследить из-за каких полей могут быть косяки.
Может кто сталкивался с такой проблемой или знает как можно решить её, буду очень признателен!

Нравится

1 комментарий
Закрыть окно
закрыть приложение
Технические вопросы
Разработка

Добрый день!

Никто не сталкивался с проблемой - как закрыть окно приложения сразу же после логина?

Т.е. при логине я проверяю некоторые условия и не хочу чтобы продолжался запуск и инициализация разделов и пр.
в OnPrepare окна wnd_Main вызов метода Close() не помогает - остается "шапка" приложения без разделов внутри.

Спасибо!

Нравится

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

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

Выключиться можно так:

Connector.Attributes('ForceClose') = true;
Connector.Logoff();

Спасибо, Максим, попробую сделать так.

Я перенес логику на событие wnd_MainOnActivate, вроде все закрывается, единственное - все равно отрисовывается "шапка". Но цель - не дать пользователю работать, выполняется :)

Хитрый пользователь может в пошаговом режиме перешагнуть проверку и выход.

К счастью, у наших хитрых пользователей не было, нет и не будет Visual Studio на машинах :)

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

Что нужно сделать, что бы DataGrid уже привязанный к DataSet даталинка отобразил данные. В любом месте проинициализировать DataSet и DataGrid автоматом все отобразит(колонки настроены)?

P.S. вопрос решен, действительно нужно просто правильно DataSet инициализировать

Нравится

1 комментарий
OnClick вкладка
Скрипты
Разработка

Скриншот:

*версия 0.141
**изменения всех сервисов сохранены
***преплогаю, что событие должно срабатывать по клику на вкладку

Нравится

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

Для начало тупой вопрос, но у меня часто бывало, что сохранял скрипт, но забывал сохранять окно (поэтому оно не видило, что должно отрабатываться), а в результате тоже маялся не один час.
Собственно вопрос: и скрипт, и окно сохранены?

Посмотрел, да не отрабатывается, думаю надо поступить как с воркспейсом и прописать на событие
OnChangedActivePage объекта, скорее всего, у вас этот объект называется pgData

function pgDataOnChangedActivePage(Pages) {
     if (pgData.ActivePage.Name == pgHistory.Name) {
           //что надо выполнять
     }
}

Александр, спасибо.

А на счет, сохранения - это да, классика. Но жать Ctrl+S перед каждым переключеним окна рефлекс уже выработался.

Михаил, событие OnClick у элемента Page срабатывает при клике не по заголовку страницы, а по рабочей области страницы (такова логика работы компонента).
Однако, обратите внимание, когда на странице расположены другие элементы (Frame с набором полей) - они перекрывают вызов события OnClick у родительского Page.
Если добавить новый Page (без перекрывающего область страницы наполнения) и создать обработчик события, при клике на область страницы событие отработает.

Александр прав, для решения Вашей задачи необходимо воспользоваться событием OnChangeActivePage компонента Pages.

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

Приветствую.
У меня поле LookupDataControl отображает список одного из полей датасета(Description).
Допустим, я выбрал из списка одно из значений.
Как мне получить соответствующия этому Description значения из других колонок(например его ID и т.д.)?

Нравится

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

То есть, как мне можно обратиться, каким методом к полю LookupDataControl, забрать из него значения соответствующие соседней другим колонкам в записи?
Что я только не перепробовал...

edt...LookupDataset.DataFields('ID').Value...
Миллион этих вариаций. Не могу никак угадать и попасть в метод. Выручайте...)

Как вообще зацепиться за лукап датасет какого-то поля и обращаться к его колоночкам?
В функции OnPrepareSelectWindow всё просто, там этот лукапДС передается в виде параметра, а самому как его взять...Туплю)

Поле справочного типа (Lookup) содержит идентификатор (ID) и отображаемое значение.
Код вида:

var OfferingID = dlData.Dataset.Values('OfferingID');

вернет идентификатор выбранного значения.
Такой код:

var OfferingName = dlData.Dataset.DisplayValues('OfferingID');

вернет отображаемое значение.
Где OfferingID - название поля в датасете.

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

var OffDataset = Services.GetNewItemByUSI('ds_Offering');
ApplyDatasetFilter(OffDataset, 'OfferingID', OfferingID, true);
OffDataset.Open();
var OfferingCode = OffDataset.Values('Code');
OffDataset.Close();

Наталья, у меня чуть замороченее ситуация:

Упрощу для рассказа:
Есть поле ввода Индекса(IntegerDataControl) скажем для датасета dlData.
Второе поле - LookupDataControl для датасета dlContact.

После ввода числа в поле Индекса на событии выхода из поля OnExit происходит присваивание переменной Index, равной соответственно введенному значению.

На событии OnPrepareSelectWindow для LookupDataControl'a поля у меня происходит ApplyDatasetFilter(LookupDataset, 'Index', Index, true), после чего лукапдатасет рефрешется, и в выпадающем списке остаются уже отфильтрованные по индексу строчки.

Мне требуется:
1. Выбрать одну любую строчку
2. Получить значение этой строчки(которое отображается) (Description)
3. Получить соответствующую этому Description запись из другого столбца, к примеру(ID), либо (City) и т.д.

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

Что-то как-то запутано объясняете.
У вас это все происходит в карточке редактирования?
Наталья объяснила основы, я попробую показать на примере, может яснее станет либо для вас, либо для нас, что же вы хотите.

Допустим надо узнать первое средство связи основного контакта из карточки контрагента, тогда нам надо
посмотреть, что из себя представляет lookup-поле "основной контакт"


DatasetLink = dlData
DataFieldName = PrimaryContactID

тогда

//узнаем id основного контакта
var ContactID = dlData.Dataset.Values('PrimaryContactID');
//проверка на то, что в поле указан основной контакт
if (ContactID !=null) {
     //берем запись контакта из датасета, к которому он привязан, это можно узнать в ds_Account
     var ContactDataset = GetOpenedDatasetByUSIWithFilter('ds_Contact','ID', ContactID);
     //записываем в переменные значения интересующих нас полей
     var Communication1 = ContactDataset.Values('Communication1');
     var Communication1TypeName = GetDatasetFieldValueByID('ds_CommunicationType', ContactDataset('Communication1TypeID'), 'Name') //зная id записи с помощью этой функции можно вынуть значения нужного нам поля
     //в итоге можно вывести, например "Телефон: 123456" или "e-mail: 123123.ru"
     Log.Write(1, Communication1TypeName + ': ' + Communication1);
}

Вот так можно получать нужную вам информацию.

Наталья, строчка dlData.Datset.Values('Value') возвращает то что нужно, но проблема в том, что когда я меняю значение в поле LookupDataControl - значение остается прежним(для поля, которое выбирается по умолчанию), а не переписывается на новое выбранное. Как возможно это решить?

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

Когда меняете значение поля скриптом, поле у вас выделено (находится в активном состоянии)?

"Сазанов Александр Владимирович" написал:

Когда меняете значение поля скриптом, поле у вас выделено (находится в активном состоянии)?


Оно активируется в случае наличия записей в датасете после фильтрации. Если есть записи ->dlDataset.Open();

Видимо не так меня поняли, или я не так вас понял, может быть у вас похожая проблема как эта?

В общем конкретизирую и объясню задачу:

Имеется поле для ввода данных(Index) в ручную.
Имеется поле LookupDataControl(привязан к датасету dlData).

При вводе данных вполе Index после выхода из него на событии OnExit происходит присваивание переменной Index в соответствии с введенным значением, сразу же активируется фильтр ApplyDatasetFilter(dlData.Dataset, 'Index', Index, true).
После чего, выполяется условие
if (dlData.Dataset.RecordsCount > 0){
dlData.Dataset.Open();
}

Отсюда поле становится активным.
На событии OnPrepareSelectWindow у данного LookupDataControl выполняется функция:

PrepareLookupDataControl(LookupDataControl, dlDemand.Dataset);
var Dataset = dlDemand.Dataset;
var DataFieldName = LookupDataControl.DataFieldName;
var DataField = Dataset.DataFields.ItemsByName(DataFieldName);
var Index = dlNewContactClient.Dataset.DataFields('Index').Value;
var LookupDataset = DataField.LookupDataset;
ApplyDatasetFilter(LookupDataset , 'Index', Index, true);
edtDemandAdress.UnprepareDropdownList();
RefreshDataset(LookupDataset );

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

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

Да-с, запутливый у вас код, для начала

"Нестеров Артем Валерьевич" написал:ApplyDatasetFilter(dlData.Dataset, 'Index', Index, true).
После чего, выполяется условие
if (dlData.Dataset.RecordsCount > 0){
dlData.Dataset.Open();
}

Если у вас записей больше 0, то датасет dlData.Dataset уже открыт, то зачем его открывать второй раз или это уже надо открыть с фильтром? Либо переоткрыть, либо это вообще не надо.

if (dlData.Dataset.RecordsCount > 0) {
    ApplyDatasetFilter(dlData.Dataset, 'Index', Index, true);
   RefereshDataset(dlData.Dataset);
}

Следующее, кто мешает получить LookupDataset в одну строчку?

var LookupDataset = LookupDataControl.DataField.LookupDataset;

Идем дальше, вы случаем не edtDemandAdressOnPrepareSelectWindow описали?
Только этим я могу объяснить строчки:

edtDemandAdress.UnprepareDropdownList();//тут вы сбрасываете список?
RefreshDataset(LookupDataset );//а тут вы его переоткрываете?

Если это так, то edtDemandAdress.UnprepareDropdownList(); надо вешать туда, где вы считаете индекс, а тут он не нужен. Если не так, то я ничего не понял.
Следующее, что меня смущяет: dlData, dlDemand, dlNewContactClient. Такое количество датасетов обычно только в воркспейсе, но писать это там самоубийство, в скрипте какого окна все пишется грид или эдит?
Короче, на словах ничего не понятно, не видно. Надо подключаться, через teamviewer например.

Как обращаться я писал в комментарии 5 и Наталья в комментарии 3:
LookupControl.Value - будет содержать id записи
Допустим у вас к lookupControl привязаны контакты, выбираете, отображается "Иванов Иван", но их может быть 2-3, а то и более штук, поэтому в LookupControl храниться id контакта
получить датасет этого контакта можно так

var ContactDataset = GetOpenedDatasetByUSIWithFilter('ds_Contact', //USI датасета, к которому должен быть привязан lookup-поле
'ID', //название фильтра, он должен быть в sq_Contact
LookupControl.Value //Id записи, которое мы получили
);

потом получайте, что хотите
ContactDataset('Name')
ContactDataset('Address') и т.д.

"Нестеров Артем Валерьевич" написал:Блин, вот даже если скажем заменяем поле на обычный LookupControl, там нажимаем на лупу, открывается справочник, в нем есть записи и все столбцы, выбираем запись, отображается скажем описание, как получить соответствующее этому описанию значение из другой колонки, как обратиться...

В случае LookupControl получить значения можно так:

var Dataset = LookupControl.LookupDatasetLink.Dataset;
Dataset.Locate('ID', LookupControl.Value);
var FieldValue = GetFieldValueFromDisabledField(Dataset, 'FieldName')

Наталья, а LookupControl это имя поля получается?

Да, LookupControl - это имя добавленного контрола.

Дальше появилась вообще непонятная проблема.

Ввожу индекс, выхожу из поля, на событии OnExit происходит фильтрация датасета и его рефреш, в поле LookupControl выбираю одно из отфильтрованных значений(всё работает как надо).
Если после этого я снова ввожу индекс, то появляется неопознанная ошибка. Пробовал уже и закрывать датасет - ничего не помогает. Проще говоря, если что-то выбрано в поле LookupControl, то при изменении индекса появляется ошибка(на моменте выполнения рефреша). Также пробовал присвоить LookupControl.Value = null - проблема также остается. Прошу помощи.

P.S. Как я понял, может помочь деинициализация этого LookupControl'a, но не знаю как этого сделать и возможно ли это...

Артем, вложите, пожалуйста, сервисы.

Наталья, может ЛукапКонтрол прописывается куда-то в атрибуты окна? Как вернуть его состояние до захода?

Наталья, так сможете посмотреть?

function edtIndexOnExit(Control) {          //Ловим значение на OnExit из вводимого поля индекса
                var Index = dlNewContactClient.Dataset.DataFields('Index').Value;      //Само значение
                var DemandDataset = dlDemand.Dataset;          //Датасет по которому производится фильтрация для просмотра лукап поля
                edtDemand.Value = null;            //Обнуляю значение лукап поля для случая изменения индекса
                if (Index != null){  
                               var IsDemand = CheckIsDemandPossible(DemandDataset, Index);      //Ну собственно, начали
                }     
}
 
 
function CheckIsDemandPossible(DemandDataset, Index){       
                DemandDataset.Close();             //Закрыл датасет для фильтрации(на случай если уже открывали при обращении к лукапу)
                ApplyDatasetFilter(DemandDataset, 'Index', Index, true);         //Включили фильтр
                DemandDataset.Open();         //---Здесь и идет сваливание,если поле лукапа было открыто пользователем---                                                 
                if (DemandDataset.RecordsCount != 0){              //Это уже возвращаемые значения для дальнейшей работы
                                               if (System.MessageDialog("Индекс запрещен к отправке.\r\nОформить до востребования - нажмите 'да', \r\nотменить заказ - нажмите 'нет'", mdtWarning,
                                                               (mdbYes + mdbNo), 0) == wmrYes) {
                                                                 return 1;
                                               }
                                               else return 0;    
                }
                return 2;              
}
 
 
/*Не понятно почему он не хочет открываться в нужном месте. Если придется убирать оттуда это открытие – это потянет за собой переработку логики модуля. Может быть есть способ деинициализировать лукапконтрол, т.е. перевести его в то состояние, каким он является до начала работы с ним? Всё комьюнити перерыл – ничего не нашел.*/

Когда в лукапконтрол не заходишь - всё отрабатывает великолепно. Но стоит туда зайти, даже не обязательно выбирая запись просто выйти - при следующем OnExit датасет уже не открывается в том месте где я указал сваливание

Артем попробуйте переделать функцию так (если фильтр применяется для чего-то еще, то не подойдет, если только узнать кол-во, то можно работать с копией):

function CheckIsDemandPossible(DemandDataset, Index) {       
                var DemandDatasetCopy = Services.GetNewItemByUSI(DemandDataset.USI);
                DemandDatasetCopy.Close();             //Закрыл датасет для фильтрации(на случай если уже открывали при обращении к лукапу)
                ApplyDatasetFilter(DemandDatasetCopy, 'Index', Index, true);         //Включили фильтр
                DemandDatasetCopy.Open();         //все еще есть сваливание?                                                 
                if (DemandDatasetCopy.RecordsCount != 0) {              //Это уже возвращаемые значения для дальнейшей работы
                                               if (System.MessageDialog("Индекс запрещен к отправке.\r\nОформить до востребования - нажмите 'да', \r\nотменить заказ - нажмите 'нет'", mdtWarning,
                                                               (mdbYes + mdbNo), 0) == wmrYes) {
                                                                 return 1;
                                               }
                                               else return 0;    
                }
                return 2;              
}

Вернул аналогичным

Артем, отладчик ставили перед Dataset.Open?
Можно увидеть текст запроса (Dataset.SelectQuery.SQLText) который будет отправлен на сервер?
Также советую перед Dataset.Open() делать EnableDatasetFilters(Dataset, false);

PS: а какая ошибка при свале на Dataset.Open() ?

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

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