Цитата:
Сообщение от
EVGL
... На этом месте сразу же сталкиваемся с доработкой #1: профиль по умолчанию хорошо присоединяется в модулях заказов и закупок, однако в журналах склада и производства профиль каждый раз надо указывать руками. Казалось бы, в записи склада есть поля для профиля по умолчанию, но его указание не приводит к автоматическому выбору профиля в журналах. Лечится тремя строками в методе \Data Dictionary\Maps\InventStorageDimMap\Methods\initFromInventLocation:
X++:
if (_inventLocation.InventProfileId_RU && (! dimSearch || dimSearch.findActive(_dimGroupId, fieldnum(InventDim, InventProfileId_RU))))
{
this.InventProfileId_RU = _inventLocation.InventProfileId_RU;
}
на мой взгляд тут доработка немного посложней, а именно:
1. В map InventStorageDimMap добавляем поле InventProfileId_RU.
2. В mappings для таблиц: CustTable, InventDim, PurchTable, SalesTable, VendTable добавляем соответствующие связи полей.
3. В map InventStorageDimMap изменяем методы:
1. modifiedField(). А именно добавляем в case по изменению поля InventLocationId проверку на незаполненность профиля учета. В результате этот case будет выглядеть так:
X++:
if (this.InventLocationId && (!this.InventSiteId || // No site. Hence default site might be applicable
!this.InventProfileId_RU)) // Добавлена проверка профиля
{
if (this.isFormDataSource())
{
this.InventStorageDimMap::modifiedInventLocationFromParent(this.InventStorageDimMap::formDataSourceJoinParent());
}
}
2. modifiedInventLocationFromParent(). А именно добавляем переменную InventJournalTrans (строки складских журналов), и в switch по parent.TableId добавляем новый case. В итоге этот метод будет выглядеть так:
X++:
fieldId fieldId;
ProdJournalProd prodJournalProd;
ProdJournalRoute prodJournalRoute;
InventJournalTrans inventJournalTrans; // Добавлена переменная строк складских журналов
;
if (parent.TableId && parent.TableId != tablenum(Common)) // A parent is found
{
switch (parent.TableId)
{
case tablenum(InventItemLocation):
break;
case tablenum(ProdJournalProd):
prodJournalProd = parent;
this.InventStorageDimMap::initFromInventLocation(this.InventStorageDimMap::inventLocation(),
prodJournalProd.prodTable().inventTable().DimGroupId);
break;
case tablenum(ProdJournalRoute):
prodJournalRoute = parent;
this.InventStorageDimMap::initFromInventLocation(this.InventStorageDimMap::inventLocation(),
prodJournalRoute.prodTable().inventTable().DimGroupId);
break;
// Добавлен case по строкам складских журналов -->
case tablenum(InventJournalTrans) :
inventJournalTrans =parent;
this.InventStorageDimMap::initFromInventLocation(this.InventStorageDimMap::inventLocation(),
inventJournalTrans.inventTable().DimGroupId);
break;
// Добавлен case по строкам складских журналов <--
default:
fieldId = fieldname2id(parent.TableId,fieldstr(InventTable,ItemId));
if (fieldId)
{
this.InventStorageDimMap::initFromInventLocation(this.InventStorageDimMap::inventLocation(),
InventTable::find(parent.(fieldId)).DimGroupId);
}
else
{
this.InventStorageDimMap::initFromInventLocation(this.InventStorageDimMap::inventLocation());
}
break;
}
}
else // No parent exist
{
this.InventStorageDimMap::initFromInventLocation(this.InventStorageDimMap::inventLocation());
}
3. initFromInventLocation(). А именно в конце метода добавляем проверку активности аналитики "Профили учета", и инициализацию профиля (собственно те две строки, про которые говорил
EVGL):
X++:
if (!dimSearch || dimSearch.findActive(_dimGroupId, fieldnum(InventDim, InventProfileId_RU)))
{
this.InventProfileId_RU = _inventLocation.InventProfileId_RU;
}