Добрый день!
Подскажите пожалуйста как модифицировать функцию копирования продуктов при копировании счета таким образом чтобы не копировались определенные поля продукта(например стоимость).
Если я правильно понимаю следует модифицировать след. ф-цию, добавив проверку на имя поля:
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
Заранее спасибо!
Нравится
Добавьте после блока
[javascript]
ExcludedFieldsList('ID') = true;
ExcludedFieldsList(SourceParentItemIDFieldName) = true;
ExcludedFieldsList(ParentIDFieldName) = true;
[/javascript]
такой код:
[javascript]
if (SourceDataset.USI.indexOf('ds_OfferingInInvoice') != -1) {
ExcludedFieldsList(<Название поля1>) = true;
...
ExcludedFieldsList(<Название поляN>) = true;
}
[/javascript]
Пробую в срипте scr_DB в функции:
[javascript]
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();
}
[/javascript]
заменить
[javascript]
if (!IsSystemField(Name) && (DataField.FieldType != dftCalc) && (DataField.Value != null))
[/javascript]
на
[javascript]
if (!IsSystemField(Name) && (DataField.FieldType != dftCalc) && (DataField.Value != null) && (DataField.Name != 'BillStatusID'))
[/javascript]
но тоже не помогает (