Показать сообщение отдельно
Старый 03.03.2011, 17:22   #2  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,914 / 5737 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от Zabr Посмотреть сообщение
Возможно, мой вопрос неправильный, но спрошу всё же.Закрытие склада, класс InventCostClosing, метод createInventCostList() (версия Ax4.0), там 4 похожих куска кода:
X++:
    while select forceplaceholders ItemId from inventTable
        index hint TypeIdx
        where inventTable.ItemType == ItemType::Item
    exists join inventTrans
        index hint OpenItemIdx
        where inventTrans.ValueOpen == InventTransOpen::Yes     &&
              inventTrans.ItemId    == inventTable.ItemId
    {
        this.createInventCostListItem(inventTable.ItemId,recordInsertList);
    }
Вопрос: может, стоит добавить еще условие по попаданию inventTrans.DateFinancial в закрываемый период? например, для ускорения расчета. Или это ничего не даст и вообще неправильно?
Это даст большие проблемы с доначислением накладных расходов в прошлом периоде. Например - была у вас продажа и покупка в прошлом периоде. Они при каком-то закрытии склада сопоставились и закрылись. Потом на закупку доначислили накладные расходы или просто переоценили. Проводка (приходная) оказалась открытой.При нормальном закрытии склада, коррекция будет перетащена на расходную проводку. Но если вы добавите условие по дате, то система (если других движений по этой номенклатуре не было), эту проводку проигнорирует и сальдо так и зависнет на складском счете.

Во вторых - я не думаю что вы что-то сильно ускорите. В текущей реализации вы просто создаете запись в inventCostList, потом система загружает только приходные проводки (поскольку если расходные проводки в открытом периоде есть, то ваше предложение точно не сработало бы и мы можем этот вариант в рассмотрение не брать), а потом не найдя расходных проводок просто тихо забывает про данную номенклатуру. То есть - сэконоите вы от силы процентов 10-15 времени и только на НУЛЕВОЙ итерации закрытия. Которая сама по себе обычно занимает процентов 15 времени закрытия. Соответственно, сэкономите вы 2-3 процента общего времени закрытия, а всяких рисков дополнительных получите по полной программе.

Вообще мне кажется что проблемы производительности правильнее решать просто увеличивая число хелперов. Задача неплохо масштабируется в ширь и решать ее нужно именно таким образом.

Последний раз редактировалось fed; 03.03.2011 в 17:31.