Может кто знает?!

Можно ли как-то нажать на лупу LookupDataControl-а программно?

Заранее благодарен за ответ

Нравится

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

Можно:

var Dataset = Services.GetNewItemByUSI('ds_Contact');
var SearchFieldNames = 'Name;Communication1;Communication2';
var DisplayFieldNames = 'Name;Communication1;Communication2';
var KeyFieldName = 'ID';
var KeyValue = '';
var SearchFieldName = 'Name';
var SearchValue = '';
ApplyDatasetFilter(Dataset, 'AccountID', dlData.Dataset('AccountID'), true);
Dataset.Open();
ShowSelectDataWindow(Dataset, SearchFieldNames, DisplayFieldNames,
	KeyFieldName, KeyValue, SearchFieldName, SearchValue, Self,
	'', false, true, null, null, false, null, false);

Ловить "ответ" на OnNotify у окна, и записывать его в нужное поле.

спасибо, но это немного не то

хотелось бы что-то типа метода DropDown() или схожих
мне нужно просто как бы нажать на лупу программно, а не создавать другое окно с выбором такими хардкодными методами

может можно как-то углубится в компоненты лукап-контрола и выделить среди них кнопку?
и сделать бы на ней .Click() !?

По клику собственно и отображается окно выбора :)

Понял) прошу прощения

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

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

Решаю тестовые задания, основанные на работе с 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 не было указано. Благодарю, Валерий.

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

Есть поле 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.

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

Добрый день, можете подсказать. Существует таблица скажем с названием товара и его стоимостью. В карточке добавлены 2 поля LookupDataControl с названием и FloatDataControl для его стоимости. Как сделать так чтобы, когда мы выбираем товар из лукапа в флоат заносилось его значение. Ясно что нужно ловить событие OnDatasetDataChange датасета, Но вот как взять значение цены к названию не понятно. Спасибо.

Нравится

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

как-то так

Dataset('Price') = GetFieldValueFromDisabledField(DataField.LookupDataset, 'Price')

где DataField- поле справочника

или даже лучше вот так

GetFieldValueFromLookupDataset(DataField.LookupDataset, DataField.Value, 'Price')

Здравствуйте, Илья!

в данном случае исчерпывающий ответ предоставил Дмитрий. В некоторых случаях можно реализовать это также на уровне подзапроса в sq

Спасибо, разобрался.

А как из скрипта dataseta добраться до фрейма окна редактора? И изменить один из его атрибутов?

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

Self.ComponentsByName('Имя фрейма')

Спасибо попробуем.

Илья, напрямую нельзя, но к датасету можно обращаться из скрипта окна.

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

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

Есть форма с множеством полей. Одно из них - "Бренд" - реализовано через LookupDataControl. При выборе Бренда открывается стандартное окно wnd_SelectData. Всё хорошо)
Однако, если попытаться отредактировать текущую запись Бренда, то открывается стандартное окно с двумя полями: Название и Описание, хотя я добавил кучу полей в карточку редактирования Бренда.
Возможно, это связано с тем, что в справочнике Брендов не указано "Окно редактирования". Но указать я его не могу, т.к. это системный справочник!
В-общем, где и что надо прописать, чтобы при редактировании Бренда открывалось нужное окно редактирования?

Нравится

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

запросом напрямую в бд. У Вас какая СУБД?
Если скул, то запрос такой:

update tbl_Dictionary set EditWindowUSI='wnd_XXXEdit'--ЮСИ Вашего окна
where id='{ид справочника Бренды}'

Аналогично прописывается и грид, если надо.
список всех полей (и записей) таблицы Справочники можно посмотреть "стандартно":smile:

select * from tbl_Dictionary

Понятия не имею какая СУБД. Есть только Terrasoft Press и Terrasoft Press Администратор.
Как работать с БД, не записывая запросы в скриптах?

"Ольга Прилипко" написал:

запросом напрямую в бд. У Вас какая СУБД?

Если скул, то запрос такой:

UPDATE tbl_Dictionary SET EditWindowUSI='wnd_XXXEdit'--ЮСИ Вашего окна

WHERE id='{ид справочника Бренды}'


Сработало!

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

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

Нравится

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

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

Уточните пожалуйста несколько вопросов:
Сервис карточки инцидента используется из коробочной версии?
Такое поведение с выбором записи из поля типа LookupDataControl наблюдается только в карточке инцидента и только для поля контакт?

Отправьте нам, пожалуйста, сервисы для анализа:
tbl_Incident, ds_Incident, sq_Incident, ds_IncidentScript, wnd_IncidentEditScript

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

З карточки контакта розкриваю LookupDataControl поля AccountID

function edtAccountOnPrepareSelectWindow(LookupDataControl, SelectWindow) {
        var Dataset = LookupDataControl.DataField.LookupDataset;
        EnableDatasetFilters(Dataset, false);
        if (Dataset && (Dataset.State == dstInactive)) {
                Dataset.Open();
        }
}

Перший раз вікно порожнє, а на другий вже наповнюється табличними даними.
І точно така ж ситуація на деталі Кар'єра:

function edtAccountOnPrepareSelectWindow(LookupDataControl, SelectWindow) {
        var Dataset = LookupDataControl.DataField.LookupDataset;
        EnableDatasetFilters(Dataset, false);
        if (Dataset && (Dataset.State == dstInactive)) {
                Dataset.Open();
        }
}

В чому причина такої поведінки LookupDataControl-елемента ?
І як заставити його показувати табличні дані з першого разу ?

Нравится

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

Какой смысл в этом коде?

        if (Dataset && (Dataset.State == dstInactive)) {
                Dataset.Open();
        }

Событие OnPrepareSelectWindow позволяет применить фильтры к датасету выбора, но открывать датасет не надо, он сам откроется

То, власне, залишок пошуків причини такої поведінки елемента, - я намагався якось простимулювати процес :). Насправді там було всього більше, залишилось тільки це.
Тож сенсу в цьому і справді ніякого, бо ніяк не змінює реакцію елемента.

По идее не должно быть такого, что первый раз грид окна выбора пустой, а второй раз - уже с данными.
Проверьте, есть ли у ds_Account обработчик события OnBeforeOpen (может там фильтр включается).
И надо посмотреть профайлером, какой запрос идет к базе при открытии окна выбора.

OnBeforeOpen на ds_Account не активовано.
Користуюся SQLExpress 2008R2, профайлер відсутній.

Здравствуйсте Игорь,
Попробуйте дописать в функцию edtAccountOnPrepareSelectWindow строку

 PrepareLookupDataControl(LookupDataControl, dlData.Dataset);

предварительно проверив, подключен ли скпипт scr_WindowUtils

Группа компаний Terrasoft

Взявся подивитися на текст SQL-запиту

function edtAccountOnPrepareSelectWindow(LookupDataControl, SelectWindow) {
	var Dataset = LookupDataControl.DataField.LookupDataset;
	EnableDatasetFilters(Dataset, false);
 
	MessageBox(Connector.DBEngine.GetSelectQuerySQLText(Dataset.SelectQuery));
 
}

То видно, що при першому відкритті запит формується по повній структурі sq_Account,

SELECT
	[tbl_Account].[ID] AS [ID],
	[tbl_Account].[Name] AS [Name],
	[tbl_Account].[OfficialAccountName] AS [OfficialAccountName],
	[tbl_Account].[AnnualRevenue] AS [AnnualRevenue],
	[tbl_Account].[EmployeesNumber] AS [EmployeesNumber],
	[tbl_Account].[Address] AS [Address],
	[tbl_Account].[AddressTypeID] AS [AddressTypeID],
	[tbl_Account].[Communication1] AS [Communication1],
	[tbl_Account].[Communication1TypeID] AS [Communication1TypeID],
	[tbl_Account].[Communication2] AS [Communication2],
	[tbl_Account].[Communication2TypeID] AS [Communication2TypeID],
	[tbl_Account].[Communication3] AS [Communication3],
	[tbl_Account].[Communication3TypeID] AS [Communication3TypeID],
	[tbl_Account].[Communication4] AS [Communication4],
	[tbl_Account].[Communication4TypeID] AS [Communication4TypeID],
	[tbl_Account].[Communication5] AS [Communication5],
	[tbl_Account].[Communication5TypeID] AS [Communication5TypeID],
	[tbl_City].[Name] AS [CityName],
	[tbl_Account].[CityID] AS [CityID],
	[tbl_Account].[ZIP] AS [ZIP],
	[tbl_Campaign].[Name] AS [CampaignName],
	[tbl_Account].[CampaignID] AS [CampaignID],
	[tbl_Contact].[Name] AS [PrimaryContactName],
	[tbl_Account].[PrimaryContactID] AS [PrimaryContactID],
	[tbl_Country].[Name] AS [CountryName],
	[tbl_Account].[CountryID] AS [CountryID],
	[tbl_State].[Name] AS [StateName],
	[tbl_Account].[StateID] AS [StateID],
	[tbl_Territory].[Name] AS [TerritoryName],
	[tbl_Account].[TerritoryID] AS [TerritoryID],
	[Owner].[Name] AS [OwnerName],
	[tbl_Account].[OwnerID] AS [OwnerID],
	[tbl_Account].[ActivityID] AS [ActivityID],
	[tbl_Activity].[Name] AS [ActivityName],
	[tbl_Account].[FieldID] AS [FieldID],
	[tbl_Field].[Name] AS [FieldName],
	[tbl_Account].[AccountTypeID] AS [AccountTypeID],
	[tbl_AccountType].[Name] AS [AccountTypeName],
	[tbl_AddressType].[Name] AS [AddressTypeName],
	[CommunicationType1].[Name] AS [Communication1TypeName],
	[CommunicationType2].[Name] AS [Communication2TypeName],
	[CommunicationType3].[Name] AS [Communication3TypeName],
	[CommunicationType4].[Name] AS [Communication4TypeName],
	[CommunicationType5].[Name] AS [Communication5TypeName],
	[tbl_Account].[Code] AS [Code],
	[tbl_Account].[TaxRegistrationCode] AS [TaxRegistrationCode],
	[tbl_Account].[CreatedOn] AS [CreatedOn],
	[tbl_Account].[CreatedByID] AS [CreatedByID],
	[CreatedBy].[Name] AS [CreatedByName],
	[tbl_Account].[ModifiedOn] AS [ModifiedOn],
	[tbl_Account].[ModifiedByID] AS [ModifiedByID],
	[ModifiedBy].[Name] AS [ModifiedByName],
	[tbl_Job].[NameOf] AS [JobNameOf],
	[tbl_Account].[SettledCredit] AS [SettledCredit],
	[tbl_Account].[PostponementPayment] AS [PostponementPayment],
	[tbl_Account].[LegalPersonID] AS [LegalPersonID],
	[tbl_LegalPersons].[Name] AS [LegalPersonName],
	[tbl_LegalPersons].[FullName] AS [LegalPersonFullName],
	[tbl_Account].[StreetTypeID] AS [StreetTypeID],
	[tbl_StreetTypes].[Name] AS [StreetTypeName],
	[tbl_Account].[StreetID] AS [StreetID],
	[tbl_Streets].[Name] AS [StreetName],
	[tbl_Account].[House] AS [House],
	[tbl_Account].[Corps] AS [Corps],
	[tbl_Account].[Flat] AS [Flat]
FROM
	[dbo].[tbl_Account] AS [tbl_Account]
LEFT OUTER JOIN
	[dbo].[tbl_Contact] AS [tbl_Contact] ON [tbl_Contact].[ID] = [tbl_Account].[PrimaryContactID]
LEFT OUTER JOIN
	[dbo].[tbl_Territory] AS [tbl_Territory] ON [tbl_Territory].[ID] = [tbl_Account].[TerritoryID]
LEFT OUTER JOIN
	[dbo].[tbl_Contact] AS [Owner] ON [Owner].[ID] = [tbl_Account].[OwnerID]
LEFT OUTER JOIN
	[dbo].[tbl_Campaign] AS [tbl_Campaign] ON [tbl_Campaign].[ID] = [tbl_Account].[CampaignID]
LEFT OUTER JOIN
	[dbo].[tbl_City] AS [tbl_City] ON [tbl_City].[ID] = [tbl_Account].[CityID]
LEFT OUTER JOIN
	[dbo].[tbl_State] AS [tbl_State] ON [tbl_State].[ID] = [tbl_Account].[StateID]
LEFT OUTER JOIN
	[dbo].[tbl_Country] AS [tbl_Country] ON [tbl_Country].[ID] = [tbl_Account].[CountryID]
LEFT OUTER JOIN
	[dbo].[tbl_Activity] AS [tbl_Activity] ON [tbl_Activity].[ID] = [tbl_Account].[ActivityID]
LEFT OUTER JOIN
	[dbo].[tbl_Field] AS [tbl_Field] ON [tbl_Field].[ID] = [tbl_Account].[FieldID]
LEFT OUTER JOIN
	[dbo].[tbl_Contact] AS [CreatedBy] ON [CreatedBy].[ID] = [tbl_Account].[CreatedByID]
LEFT OUTER JOIN
	[dbo].[tbl_Contact] AS [ModifiedBy] ON [ModifiedBy].[ID] = [tbl_Account].[ModifiedByID]
LEFT OUTER JOIN
	[dbo].[tbl_AddressType] AS [tbl_AddressType] ON [tbl_AddressType].[ID] = [tbl_Account].[AddressTypeID]
LEFT OUTER JOIN
	[dbo].[tbl_CommunicationType] AS [CommunicationType1] ON [CommunicationType1].[ID] = [tbl_Account].[Communication1TypeID]
LEFT OUTER JOIN
	[dbo].[tbl_CommunicationType] AS [CommunicationType2] ON [CommunicationType2].[ID] = [tbl_Account].[Communication2TypeID]
LEFT OUTER JOIN
	[dbo].[tbl_CommunicationType] AS [CommunicationType3] ON [CommunicationType3].[ID] = [tbl_Account].[Communication3TypeID]
LEFT OUTER JOIN
	[dbo].[tbl_CommunicationType] AS [CommunicationType4] ON [CommunicationType4].[ID] = [tbl_Account].[Communication4TypeID]
LEFT OUTER JOIN
	[dbo].[tbl_CommunicationType] AS [CommunicationType5] ON [CommunicationType5].[ID] = [tbl_Account].[Communication5TypeID]
LEFT OUTER JOIN
	[dbo].[tbl_Job] AS [tbl_Job] ON [tbl_Job].[ID] = [tbl_Contact].[JobID]
LEFT OUTER JOIN
	[dbo].[tbl_AccountType] AS [tbl_AccountType] ON [tbl_AccountType].[ID] = [tbl_Account].[AccountTypeID]
LEFT OUTER JOIN
	[dbo].[tbl_LegalPersons] AS [tbl_LegalPersons] ON [tbl_LegalPersons].[ID] = [tbl_Account].[LegalPersonID]
LEFT OUTER JOIN
	[dbo].[tbl_StreetTypes] AS [tbl_StreetTypes] ON [tbl_StreetTypes].[ID] = [tbl_Account].[StreetTypeID]
LEFT OUTER JOIN
	[dbo].[tbl_Streets] AS [tbl_Streets] ON [tbl_Streets].[ID] = [tbl_Account].[StreetID]

а наступні - по скороченій:

SELECT TOP 40
	[tbl_Account].[ID] AS [ID],
	[tbl_Account].[Name] AS [Name],
	[tbl_Account].[OfficialAccountName] AS [OfficialAccountName],
	[tbl_Account].[Address] AS [Address],
	[tbl_Account].[Communication1] AS [Communication1],
	[tbl_City].[Name] AS [CityName],
	[tbl_Account].[CityID] AS [CityID],
	[tbl_Account].[CountryID] AS [CountryID],
	[tbl_Account].[StateID] AS [StateID],
	[tbl_Account].[TaxRegistrationCode] AS [TaxRegistrationCode]
FROM
	[dbo].[tbl_Account] AS [tbl_Account]
LEFT OUTER JOIN
	[dbo].[tbl_City] AS [tbl_City] ON [tbl_City].[ID] = [tbl_Account].[CityID]

Добавив у варіанті:

function edtAccountOnPrepareSelectWindow(LookupDataControl, SelectWindow) {
	PrepareLookupDataControl(LookupDataControl, dlData.Dataset);
	var Dataset = LookupDataControl.DataField.LookupDataset;
	EnableDatasetFilters(Dataset, false);
}

На жаль це не змінило стану речей.

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

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

http://www.community.terrasoft.ru/system/files/files_1.rar
Запрашиваемая страница не найдена

Просьба прикрепить еще раз

Прикріпив заново

http://www.community.terrasoft.ru/system/files/files_0.rar
Запрашиваемая страница не найдена

Игорь, как вариант напишите нам письмо на support@tscrm.com, или загрузите файл на файлообменник.

Написав

Игорь, к сожалению на ваших сервисах не удалось воспроизвести проблему описанную вами/
Если есть возможность, отправьте, пожалуйста, ссылку на копию базы данных на адрес Службы поддержки Terrasoft (support@tscrm.com) для анализа проблемы.

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

Намагаюсь очистити дані в контролі використовую:

if(edtLookupData.Text) edtLookupData.Text = '';
edtLookupData.Value = null;

бо, іноді дані заносяться скриптом не через датасет, а напряму в edtLookupData.Text.

Чомусь edtLookupData.SetValueAndText() викликає помилку "не соответсвие типа".
Нпр:
edtLookupData.SetValueAndText(null, '');
або
edtLookupData.SetValueAndText(null, null);

Підскажіть чому, якщо хто знає?

Нравится

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

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

edtLookupData.SetValueAndText(GUID_NULL, '');

Дякую, Олег. Помогло :)

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

Добрый день!
Никак не пойму, в чём может быть дело: при выборе элемента LookupDataControl, текст первичного поля для отображения соответствующего ему набора данных выводится корректно, однако после сохранения в БД и повторном открытии карточки, содержимое LookupDataControl оказывается пустым. Это при всём при том, что в БД значение первичного ключа сохраняется корректно, при открытии окна выбора записи подсвечивается именно выбранная ранее запись, в реестрах текст также отображается, а первичные для отображения поля правильно настроены не только в наборах данных, но и в сервисах, соответствующих таблицам СУБД. И вообще, все экземпляры LookupDataControl работают корректно, кроме одного. Я неоднократно пробовал пересоздавать этот элемент управления, в то время как кода, работающего с его содержимым, в карточке нет. Подскажите, с чем может быть связанно это умолчание о выбранном значении?

Нравится

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

Егор, проверьте пожалуйста, поля, касающиеся данного контрола в запросе (сервисе SelectQuery) карточки. Судя по описанию ситуации, возможно, для отображения указано не совсем то поле, что нужно, либо же присоединена не та таблица. Например, возможна ситуация:

select
    tbl_Contact.ID as ID,
    ...,
    tbl_Contact.CityID as CityID,
    City.Name as CityName,
    ...
from tbl_Contact
  left outer join tbl_Country as City
  ...

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

Пять баллов, маэстро! :smile: Только ошибка была в предикате пересечения. Утрируя,

left outer join tbl_City on tbl_Contact.CountryID = tbl_City.ID

Большое спасибо!

Всегда пожалуйста :).

Обычно такое происходит, когда установил поля для JOIN'a, а потом случайно скроллом дернул и не заметил, что поле уже другое...

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

Подскажите, как проверить выбранное значение до вставки его в поле LookupDataControl?

У меня есть справочное поле "Личный склад". При выборе значения склада из окна выбора мне необходимо проверить есть ли у этого склада владелец. Если есть, то я показываю сообщение типа "Склад занят" и не даю выбрать данный склад. Я использую элемент LookupDataControl.

Нравится

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

Может лучше отфильтровать занятые склады. Так юзеру удобнее будет. А проверить можно на DataChange. Если занят - сбрасываем поле в null и выдаем предупреждение. Но так кривовато, как по мне.

"Underscore a.k.a. _" написал:Если занят - сбрасываем поле в null и выдаем предупреждение.

Если мне не изменяет память, то нельзя на событие изменения поля менять его же значение, то есть оно сбросится в null, но в карточке Вы будете видеть старое значение все равно.
Я тоже за фильтрацию складов на OnPrepareSelectWindow.

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

А когда возникает событие OnDatasetChangeDataField в датасете? Может это поможет.

Ладно, решил сделать как вы советуете. Просто наложу фильтр. Тогда и проверку не нужно будет делать.

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

"Раловец Ольга" написал:Попробуйте делать проверку на событие потери фокуса Вашего элемента управления

эм.. а как это вы так лихо собираетесь это сделать?
у меня вот, к примеру, событие OnFocusedControl формы не работает.
Как вариант перекрыть OnEnter каждого контрола? но на OnEnter не видно контрола, который был в фокусе до события.

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

Фильтрация :twisted:
А с очисткой, мы обошли это только на нажатие Ок.
На событие BeforePost проверяем, очищаем значение и выводим сообщение!
Дальше - DoPost.Value = false

--
www.it-sfera.com.ua

"Доленко Юрий" написал:эм.. а как это вы так лихо собираетесь это сделать?
у меня вот, к примеру, событие OnFocusedControl формы не работает.
Как вариант перекрыть OnEnter каждого контрола? но на OnEnter не видно контрола, который был в фокусе до события.

Я имела ввиду на OnEnter элемента управления, изменение которого мы хотим проследить, запоминать значение, а на OnExit, если значение изменилось, делать проверку, можно ли выбрать данный склад. Но в таком случае, если закрыть карточку не с помощью нажатия мышкой на кнопку "ОК", а с помощью клавиши "Enter", то событие OnExit не произойдет.

Можно в OnCloseQuery продублировать.

Раловец Ольга, простите сначала не понял, что имелось ввиду.
Кстати, вот еще вариант решения. Если нужно видеть все склады, то можно слегка поломать функционал базового wnd_SelectData. Можно занятые склады красить, скажем в красный и если Ок нажимается при выбранном занятом складе вместо базовой отработки выводить сообщение, проверяя, к примеру USI текущего датасета ...

"Доленко Юрий" написал:Раловец Ольга, простите сначала не понял, что имелось ввиду.

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

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