Не совсем понятно, зачем вы получаете новый датасет, если вы работаете в скрипте карточки.
Для вашего случая измените строку var Dataset2 = Services.GetNewItemByUSI('ds_Account');
Так же необходимо сделать цикл (хочу отметить, чтобы не использовать оператор условия if можно отфильтровать записи при помощи фун-ции ApplyDatasetFilter(Dataset, FilterName, FilterValue, true)):
while(!Dataset2.IsEOF){
if (Dataset2('FieldName')) {
Dataset2.Open();
Dataset2.Edit();
Dataset2.Values('OwnerID') = '{...}';
Dataset2.Post();
Dataset2.Close();
}
Dataset2.GoToNext();
}
Возможно, я не совсем правильно понял, что именно требуется сделать...
Если вам необходимо поменять ответственного у текущей записи, то:
var Dataset = dlData.Dataset;
if (Dataset('FieldName')){
Dataset('OwnerID') = '{...}';
}
Это, к сожалению, не работает со сменой ответственного.
С другими полями ds_Account - да, значения сохраняются. Из-за чего это может быть?
Опишу подробнее то, что необходимо сделать.
В wnd_AccountEdit есть edtVacantClient (BoolDataControl от поля VacantClient) - признак свободного клиента.
Если признак установлен в 1, то поменять ответственного за контрагента на SYSDBA.
"Москаленко Евгения Аркадьевна" написал:btnOKOnClick()
теперь понятно, почему у Вас писало:
"Москаленко Евгения Аркадьевна" написал:TSObjectLibrary.StringDataField: Источник данных'Accounts\General\Main Grid\ds_Account' не открыт
при нажатии на Ок карточки датасет сохраняется и закрывается.
Вы либо пропишите изменение ответственного ДО базового кода scr_BaseDBEdit.btnOnClick(), где-нибудь выше, либо напишите на событии OnDatasetDataChange(), код примерно такой, как написал Павел (второй вариант), т.е. при нажатии на галочку -- менять ответственного.
Ольга, спасибо, перенесла в OnDatasetDataChange().
Сейчас при смене недостаточно памяти для завершения операции.
function dlDataOnDatasetDataChange(DataField){//смена ответственного
var Dataset = dlData.Dataset;if( edtVacantClient.DataField.Value==1){
Dataset('OwnerID')='{EAB3D8EC-5400-4A26-8634-ACA9203EEB8E}';}}
Циклится процесс. Выглядеть должно примерно так:
switch(FieldName){
case 'Здесь название вашего буллевского поля, что-то вроде 'VacantClient'':
if (Dataset('VacantClient')){
Dataset('OwnerID') = '{EAB3D8EC-5400-4A26-8634-ACA9203EEB8E}';
}
break;
}
Это работает так: "В момент изменения поля "VacantClient" и если поле == true, тогда меняется ответственный". Но я не рекомендовал бы это делать на DataChange, хотя будет работать и так.
function dlDataOnDatasetDataChange(DataField){
var Dataset = dlData.Dataset;
var DataFieldName = DataField.Nameswitch(DataFieldName){case('VacantClient'):if(edtVacantClient.DataField.Value){
Dataset('OwnerID')='{EAB3D8EC-5400-4A26-8634-ACA9203EEB8E}';}break;}}
dlDataOnDatasetDataChange работает только при изменении данных. Если "галочка" у вас не сохраняется в БД, то работать не будет.
Для информации конструкция switch: http://javascript.ru/switch