Добрый день!
Подскажите пожалуйста как модифицировать функцию копирования продуктов при копировании счета таким образом чтобы не копировались определенные поля продукта(например стоимость).
Если я правильно понимаю следует модифицировать след. ф-цию, добавив проверку на имя поля:
function CopyTreeDetail(SourceDataset, DestinationDataset,
SourceParentItemIDFieldName, DestinationParentItemIDFieldName,
DestinationParentItemID) {
SourceDataset.Open();
if (IsDatasetEmpty(SourceDataset)) {
SourceDataset.Close();
return;
}
var ParentIDFieldName = 'ParentID';
var DestinationID;
var DestinationIDs = GetNewDictionary();
var SourceID;
var SourceParentID;
var DestinationParentID;
var SourceIDDataField = SourceDataset.DataFields('ID');
var DestinationIDDataField = DestinationDataset.DataFields('ID');
var SourceParentIDDataField = SourceDataset.DataFields(ParentIDFieldName);
var DestinationParentIDDataField = DestinationDataset.DataFields(ParentIDFieldName);
var DestinationParentItemIDDataField = DestinationDataset.DataFields(DestinationParentItemIDFieldName);
var SourceParentIDs = GetNewDictionary();
var ExcludedFieldsList = GetNewDictionary();
ExcludedFieldsList('ID') = true;
ExcludedFieldsList(SourceParentItemIDFieldName) = true;
ExcludedFieldsList(ParentIDFieldName) = true;
while (!SourceDataset.IsEOF) {
SourceID = SourceIDDataField.Value;
DestinationID = Connector.GenGUID();
DestinationIDs(SourceID) = DestinationID;
SourceParentID = SourceParentIDDataField.Value;
SourceParentIDs(DestinationID) = SourceParentID;
DestinationDataset.Append();
CopyRowDataEx(SourceDataset, DestinationDataset, ExcludedFieldsList);
DestinationIDDataField.Value = DestinationID;
DestinationParentItemIDDataField.Value = DestinationParentItemID;
DestinationDataset.Post();
SourceDataset.GotoNext();
}
SourceDataset.Close();
DestinationDataset.Close();
ApplyDatasetFilter(DestinationDataset, DestinationParentItemIDFieldName,
DestinationParentItemID, true);
DestinationDataset.Open();
while (!DestinationDataset.IsEOF) {
DestinationID = DestinationIDDataField.Value;
SourceParentID = SourceParentIDs(DestinationID);
if (SourceParentID != null) {
DestinationParentID = DestinationIDs(SourceParentID);
DestinationDataset.Edit();
debugger;
DestinationParentIDDataField.Value = DestinationParentID;
DestinationDataset.Post();
}
DestinationDataset.GotoNext();
}
DestinationDataset.Close();
}
SourceParentItemIDFieldName, DestinationParentItemIDFieldName,
DestinationParentItemID) {
SourceDataset.Open();
if (IsDatasetEmpty(SourceDataset)) {
SourceDataset.Close();
return;
}
var ParentIDFieldName = 'ParentID';
var DestinationID;
var DestinationIDs = GetNewDictionary();
var SourceID;
var SourceParentID;
var DestinationParentID;
var SourceIDDataField = SourceDataset.DataFields('ID');
var DestinationIDDataField = DestinationDataset.DataFields('ID');
var SourceParentIDDataField = SourceDataset.DataFields(ParentIDFieldName);
var DestinationParentIDDataField = DestinationDataset.DataFields(ParentIDFieldName);
var DestinationParentItemIDDataField = DestinationDataset.DataFields(DestinationParentItemIDFieldName);
var SourceParentIDs = GetNewDictionary();
var ExcludedFieldsList = GetNewDictionary();
ExcludedFieldsList('ID') = true;
ExcludedFieldsList(SourceParentItemIDFieldName) = true;
ExcludedFieldsList(ParentIDFieldName) = true;
while (!SourceDataset.IsEOF) {
SourceID = SourceIDDataField.Value;
DestinationID = Connector.GenGUID();
DestinationIDs(SourceID) = DestinationID;
SourceParentID = SourceParentIDDataField.Value;
SourceParentIDs(DestinationID) = SourceParentID;
DestinationDataset.Append();
CopyRowDataEx(SourceDataset, DestinationDataset, ExcludedFieldsList);
DestinationIDDataField.Value = DestinationID;
DestinationParentItemIDDataField.Value = DestinationParentItemID;
DestinationDataset.Post();
SourceDataset.GotoNext();
}
SourceDataset.Close();
DestinationDataset.Close();
ApplyDatasetFilter(DestinationDataset, DestinationParentItemIDFieldName,
DestinationParentItemID, true);
DestinationDataset.Open();
while (!DestinationDataset.IsEOF) {
DestinationID = DestinationIDDataField.Value;
SourceParentID = SourceParentIDs(DestinationID);
if (SourceParentID != null) {
DestinationParentID = DestinationIDs(SourceParentID);
DestinationDataset.Edit();
debugger;
DestinationParentIDDataField.Value = DestinationParentID;
DestinationDataset.Post();
}
DestinationDataset.GotoNext();
}
DestinationDataset.Close();
}
Но не могу разобрать где именно.
Версия 3.1.0.23
Заранее спасибо!
Нравится
4 комментария
31 августа 2010 16:10
Добавьте после блока
ExcludedFieldsList('ID') = true; ExcludedFieldsList(SourceParentItemIDFieldName) = true; ExcludedFieldsList(ParentIDFieldName) = true;
такой код:
if (SourceDataset.USI.indexOf('ds_OfferingInInvoice') != -1) { ExcludedFieldsList(<Название поля1>) = true; ... ExcludedFieldsList(<Название поляN>) = true; }
7 сентября 2010 12:25
Пробую в срипте scr_DB в функции:
function SetDefaultValuesByDataset(Dictionary, Dataset) { var DatasetCopy = Services.GetNewItemByUSI(Dataset.USI); ApplyDatasetFilter(DatasetCopy, 'ID', Dataset.ValAsStr('ID'), true); DatasetCopy.Open(); for (var i = 0; i < DatasetCopy.DataFields.Count; i++) { var DataField = DatasetCopy.DataFields.Items(i); var Name = DataField.Name; if (!IsSystemField(Name) && (DataField.FieldType != dftCalc) && (DataField.Value != null)) { var Key = Name; Dictionary.Add(Key, DataField.Value); } } DatasetCopy.Close(); }
заменить
if (!IsSystemField(Name) && (DataField.FieldType != dftCalc) && (DataField.Value != null))
на
if (!IsSystemField(Name) && (DataField.FieldType != dftCalc) && (DataField.Value != null) && (DataField.Name != 'BillStatusID'))
но тоже не помогает (
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать