"Залипание" данных в справочнике

Создан справочник. Открываю справочник, выбираю данные, сохраняю "ОК". После повторного открытия справочника-открывается только прежний выбранный продукт. Приходится перезагружать TS.
Что нужно прописать в function dlDataOnDatasetDataChange(DataField), чтобы не происходило "залипание"?

Нравится

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

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

Уточните, пожалуйста, каким образом Вы создавали справочник?

Какая версия, используемого приложения Terrasoft CRM?

Если можете, предоставьте сервисы справочника.

Добрый день!Версия 3.4.1.142
В разделе "Продажи" (я переименовал в Накладные), созданы стандартные луповидные справочники Продукт и Документ. При первом открытии всё подгружается, при повторном - открывается только ранее открываемый. В файле на 10 листе отмечен алгоритм синим цветом

Здравствуйте, Михаил!

Конечно, сложно дать точные рекомендации по одному только коду, однако по тому, что Вы предоставили есть такое замечание.

В обработчике OnDatasetDataChange для поля 'OfferingID' Вы написали такой код:

if (!IsEmptyValue(Dataset('OfferingID'))) {
var LookupDataset = Dataset.DataFields('OfferingID').LookupDataset;
var Price = edtBasicPriceValue.Value; // Цена, руб
ApplyDatasetIDFilter(LookupDataset, Dataset('OfferingID'), true);
LookupDataset.Open();

var PriceSR = GetFieldValueFromDisabledField(LookupDataset, 'Price'); // Цена, руб
var Customer = GetFieldValueFromDisabledField(LookupDataset, 'SupplierID');
LookupDataset.Close();

dlData.Dataset.Values('PriceSR')= PriceSR;
dlData.Dataset.Values('CustomerID')= Customer;
}

Если Вам нужно получить значения из датасета ds_Offering по полю ID, то делать это нужно по-другому - брать нужно не LookupDataset, а отдельный экземпляр датасета, который можно получить следующим образом:
var Dataset = GetSingleItemByCode('ds_Offering', 'OfferingDataset')
Для него и нужно применять фильтры и получать нужные значения.

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

Доброе время суток, Алла! Большое спасибо, что написали.
Вы мне очень помогли!!!
Я "чайник" в программировании, но методом тыка, проб и ошибок - немного получается. Обычно копирую уже созданные алгоритмы и подставляю в разные разделы.
Есть ещё один вопрос!
-На основании Инцидента создаю Документ.
-При открытии Инцидента в полях справочника Документ и справочника Состояние Документа дублируются значения созданного Документа.
-При изменении состояния Документа, автоматически меняется показатели в Инциденте scr_DocumentEdit :
//-------------------------//-----------------------//------------------------
function btnOKOnClick(Control) {
var Dataset = BaseDBEdit.Dataset;
if (CheckItemNumberDuplicate('Document', Dataset, 'DocumentNumber', "Документ")) {
//-------------------------------Подгрузка данных Документа в Инцидент !!!
var IncNumber = Dataset.Values('IncidentID');
var DocumentID = Dataset.Values('ID');
var DocumentStateID = Dataset.Values('StateID');
}
var IncDataset = Services.GetNewItemByUSI('ds_Incident');
if (!IsEmptyValue(IncNumber)){
ApplyDatasetFilter(IncDataset, 'ID', IncNumber, true);
IncDataset.Open();
IncDataset.Edit();

IncDataset.Values('DocumentID') = DocumentID;
IncDataset.Values('DocumentStateID') = DocumentStateID;
IncDataset.Post();
IncDataset.Close();
}
//---------------------------------------------------------------------------------------------------------

-Повторил данный код в wnd_IncidentEditScript :
//------------------------//-------------------------//------------- //1
function btnOKOnClick(Control) {
var Dataset = BaseDBEdit.Dataset;
if (CheckItemNumberDuplicate('Incident', Dataset, 'IncidentNumber', "Инцидент")){ // !!!

//------------------------Подгрузка данных Инцидента в Документ !!!
var DocNumber = Dataset.Values('DocumentID');
var Incident = Dataset.Values('ID');
var IncidentStatus = Dataset.Values('StatusID');
}
var DocDataset = Services.GetNewItemByUSI('ds_Document');
if (!IsEmptyValue(DocNumber)){
ApplyDatasetFilter(DocDataset, 'ID', DocNumber, true);
DocDataset.Open();
DocDataset.Edit();

DocDataset.Values('IncidentID') = Incident;
DocDataset.Values('IncidentStatusID') = IncidentStatus;
DocDataset.Post();
DocDataset.Close();
}
//------------------------------------------------------------
- но действий не происходит...

Здравствуйте, Михаил!

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

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

Аналогично для инцидента.

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

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