|
![]() |
#1 |
Участник
|
|
|
![]() |
#2 |
Участник
|
Прежде всего хотел сказать что форма SalesQuickQuote работает не правильно.
Причина в классе InventDimCtrl_Frm_QuickQuote метод initQuery строчка X++: queryBuildDs.addSelectionField(FieldNum(InventSum, inventDimId), SelectionField::MIN); Пусть есть номенклатура 1. По ней 3 остатка в inventsum(1, 2, 3). остаток 1 - 100 шт. остаток 2 - 50 шт. остаток 3 - 40 шт. Так вот когда у нас в отображение аналитики все галки сняты кроме itemId(номенклатуры). У нас они отображаются в виде 190 шт. Если мы поставим в edit-поле количество 190 шт. То они проставятся, но как. Заходим в отображение аналитики. Ставим все галки. Грид распахнулся, физ доступно расщепилось на состовляющие, но мы видим что это количество стоит только в одном строке. В какой? В отсатке 1. Т.к. причина та строка которую я написал. Вообщем такой финт ушами, только не правильный. В проекте я изменил edit метод X++: edit Qty Qty(boolean set, InventSum _inventSum, Qty _qty) { InventTrans inventTrans; Qty qty; MRD_SelectQtyFromInventTrans selectQtyFromInventTrans; Map map; MapEnumerator mapEnumerator; InventDim inventDimLoc; InventDim inventDimLoc2; InventDimParm inventDimParm; ; inventDimParm = inventDimFormSetup.dimParmVisibleGrid(); //чтобы знать какие аналитики отмечены галачками inventDimLoc2 = InventDim::find(_inventSum.InventDimId); //всэ то же min inventdim навязаный системой, но из него мы возмём то что нам нужно select sum (Qty) from tmpFrmVirtual where tmpFrmVirtual.ItemId == _inventSum.itemId join inventDimLoc where inventDimLoc.inventDimId == tmpFrmVirtual.inventDimId && ((inventDimParm.InventBatchIdFlag && inventDimLoc.inventBatchId == inventDimLoc2.inventBatchId) || !inventDimParm.InventBatchIdFlag) && ((inventDimParm.WMSLocationIdFlag && inventDimLoc.wMSLocationId == inventDimLoc2.wMSLocationId) || !inventDimParm.WMSLocationIdFlag) && ((inventDimParm.WMSPalletIdFlag && inventDimLoc.wMSPalletId == inventDimLoc2.wMSPalletId) || !inventDimParm.WMSPalletIdFlag) && ((inventDimParm.InventSerialIdFlag && inventDimLoc.inventSerialId == inventDimLoc2.inventSerialId) || !inventDimParm.InventSerialIdFlag) && ((inventDimParm.InventLocationIdFlag && inventDimLoc.inventLocationId ==inventDimLoc2.InventLocationId) || !inventDimParm.InventLocationIdFlag) && ((inventDimParm.ConfigIdFlag && inventDimLoc.configId == inventDimLoc2.configId) || !inventDimParm.ConfigIdFlag) && ((inventDimParm.InventSizeIdFlag && inventDimLoc.InventSizeId == inventDimLoc2.InventSizeId) || !inventDimParm.InventSizeIdFlag) && ((inventDimParm.InventColorIdFlag && inventDimLoc.InventColorId == inventDimLoc2.InventColorId) || !inventDimParm.InventColorIdFlag) && ((inventDimParm.InventGTDIdFlag_RU && inventDimLoc.InventGtdId_RU == inventDimLoc2.InventGtdId_RU) || !inventDimParm.InventGTDIdFlag_RU) && ((inventDimParm.MRD_DefectFlag && inventDimLoc.MRD_DefectId == inventDimLoc2.MRD_DefectId) || !inventDimParm.MRD_DefectFlag) && ((inventDimParm.MRD_UnitFlag && inventDimLoc.MRD_UnitID == inventDimLoc2.MRD_UnitID) || !inventDimParm.MRD_UnitFlag) && ((inventDimParm.MRD_BusinessDirectionFlag && inventDimLoc.MRD_BusinessDirectionId == inventDimLoc2.MRD_BusinessDirectionId) || !inventDimParm.MRD_BusinessDirectionFlag); // В tmp в отличие от стандарта я пишу не минимальный, а реальный inventdimId по этому мне нужно узнавать сумму количеств в зависимости от тех галочек которые выбраны if (tmpFrmVirtual) { qty = tmpFrmVirtual.qty; } else { tmpFrmVirtual.tableNum = _inventSum.tableId; tmpFrmVirtual.itemId = _inventSum.itemId; tmpFrmVirtual.inventDimId = _inventSum.inventDimId; tmpFrmVirtual.insert(); } if (set) //еслт пользователь вставил новое значение начинается подбор { delete_from tmpFrmVirtual where tmpFrmVirtual.ItemId == _inventSum.itemId;// прежние результаты подбора по номенклатуре удаляем if (_qty > 0) {//сам подбор происходит в класса MRD_SelectQtyFromInventTrans.(я подбираю аналитики и количества из проводок, хоть это и не правильно сточки зрения архитиктуры, но на этом настоял аналитик, вы можете изменить и подбирать из InventSum) selectQtyFromInventTrans = new MRD_SelectQtyFromInventTrans(_inventSum.itemId, _qty, _inventSum.InventDimId, inventDimParm); selectQtyFromInventTrans.run(); map = selectQtyFromInventTrans.getRezult();//возращается map InventDimId и количество, больше вам и не надо номенклатура у вас уже есть error("Не удалось подобрать " + num2str(selectQtyFromInventTrans.getRemain(),2,2,2,2) + " единиц номенклатуры: " + _inventSum.itemId); mapEnumerator = map.getEnumerator(); while (mapEnumerator.moveNext()) { tmpFrmVirtual.tableNum = _inventSum.tableId; tmpFrmVirtual.itemId = _inventSum.itemId; tmpFrmVirtual.inventDimId = mapEnumerator.current(); tmpFrmVirtual.qty = mapEnumerator.currentValue(); tmpFrmVirtual.insert();//заполнили подобранными аналитиками tmp } } else qty = 0; InventSumAuto_ds.research(); } return qty; } X++: public boolean modified() { boolean ret; str strDimId; QueryBuildDataSource qbdsInventSumHand; QueryBuildRange qbrInventDimIdHand; ; qbdsInventSumHand = InventSumHand_ds.query().dataSourceTable(tablenum(InventSum)); qbrInventDimIdHand = qbdsInventSumHand.findRange(fieldnum(InventSum, InventDimId)); if (!qbrInventDimIdHand) qbrInventDimIdHand = qbdsInventSumHand.addRange(fieldnum(InventSum, InventDimId)); ret = super(); if (this.value() == NoYes::Yes)//если поставили галочку отобразить { while select tmpFrmVirtual where tmpFrmVirtual.Qty > 0 { strDimId = strDimId ? strDimId + ', ' + tmpFrmVirtual.InventDimId : tmpFrmVirtual.InventDimId; }//отбираем inventdimId у которых количество проставлено, кстати узкий момент ели inventdim-ом будет много, могут в range все не уместится(надо будет подумать как исправить) if (strDimId)//строим по ним range { qbrInventDimIdHand.value(strDimId); } else { qbrInventDimIdHand.value("0"); } } else { qbrInventDimIdHand.value(SysQuery::valueUnlimited()); } InventSumHand_ds.executeQuery(); return ret; } X++: public void displayOption(Common _record, FormRowDisplayOption _options) { InventSum inventSumLoc; InventDim inventDimLoc; InventDimParm inventDimParm; InventDim inventDimLoc2; ; inventSumLoc = _record; inventDimParm = inventDimFormSetup.dimParmVisibleGrid(); inventDimLoc2 = InventDim::find(inventSumLoc.InventDimId); select sum (Qty) from tmpFrmVirtual where tmpFrmVirtual.ItemId == inventSumLoc.itemId join inventDimLoc where inventDimLoc.inventDimId == tmpFrmVirtual.inventDimId && ((inventDimParm.InventBatchIdFlag && inventDimLoc.inventBatchId == inventDimLoc2.inventBatchId) || !inventDimParm.InventBatchIdFlag) && ((inventDimParm.WMSLocationIdFlag && inventDimLoc.wMSLocationId == inventDimLoc2.wMSLocationId) || !inventDimParm.WMSLocationIdFlag) && ((inventDimParm.WMSPalletIdFlag && inventDimLoc.wMSPalletId == inventDimLoc2.wMSPalletId) || !inventDimParm.WMSPalletIdFlag) && ((inventDimParm.InventSerialIdFlag && inventDimLoc.inventSerialId == inventDimLoc2.inventSerialId) || !inventDimParm.InventSerialIdFlag) && ((inventDimParm.InventLocationIdFlag && inventDimLoc.inventLocationId ==inventDimLoc2.InventLocationId) || !inventDimParm.InventLocationIdFlag) && ((inventDimParm.ConfigIdFlag && inventDimLoc.configId == inventDimLoc2.configId) || !inventDimParm.ConfigIdFlag) && ((inventDimParm.InventSizeIdFlag && inventDimLoc.InventSizeId == inventDimLoc2.InventSizeId) || !inventDimParm.InventSizeIdFlag) && ((inventDimParm.InventColorIdFlag && inventDimLoc.InventColorId == inventDimLoc2.InventColorId) || !inventDimParm.InventColorIdFlag) && ((inventDimParm.InventGTDIdFlag_RU && inventDimLoc.InventGtdId_RU == inventDimLoc2.InventGtdId_RU) || !inventDimParm.InventGTDIdFlag_RU) && ((inventDimParm.MRD_DefectFlag && inventDimLoc.MRD_DefectId == inventDimLoc2.MRD_DefectId) || !inventDimParm.MRD_DefectFlag) && ((inventDimParm.MRD_UnitFlag && inventDimLoc.MRD_UnitID == inventDimLoc2.MRD_UnitID) || !inventDimParm.MRD_UnitFlag) && ((inventDimParm.MRD_BusinessDirectionFlag && inventDimLoc.MRD_BusinessDirectionId == inventDimLoc2.MRD_BusinessDirectionId) || !inventDimParm.MRD_BusinessDirectionFlag); if (tmpFrmVirtual && tmpFrmVirtual.Qty > 0) _options.backColor(WinApi::RGB2int(0, 255, 0)); else _options.backColor(winapi::RGB2int(255, 255, 255 )); super(_record, _options); } Последний раз редактировалось miklenew; 27.11.2007 в 20:43. |
|
![]() |
#3 |
Участник
|
Цитата:
Сообщение от miklenew
![]() Пусть есть номенклатура 1. По ней 3 остатка в inventsum(1, 2, 3).
остаток 1 - 100 шт. остаток 2 - 50 шт. остаток 3 - 40 шт. Так вот когда у нас в отображение аналитики все галки сняты кроме itemId(номенклатуры). У нас они отображаются в виде 190 шт. Если мы поставим в edit-поле количество 190 шт. То они проставятся, но как. Заходим в отображение аналитики. Ставим все галки. Грид распахнулся, физ доступно расщепилось на состовляющие, но мы видим что это количество стоит только в одном строке. В какой в отсатке 1. Т.к. причина та строка которую я написал. ![]() |
|
![]() |
#4 |
Участник
|
Молодцы. Значит исправили. А мне вот руками пришлось исправлять.
Четвёрки у меня нет посмотреть не могу. Но вот в тройке есть. Ну раз исправили хорошо. Только вот посоветовать теперь мне сложно что-то вам. Я не знаю, как они это исправили. Рискну предположить, что в tmp у них теперь всё нормально тогда смело берить код modif-айд галки и у вас поидее должно всё работать. Хотя вот думаю как исправить возможный косяк c переполнением range. Прийдётся наврное не все значения в один range через запятую. А сколько inventDimId столько и range формировать. |
|
|
![]() |
||||
Тема | Ответов | |||
лукап-форма с доп. фильтром | 10 | |||
Как передать параметры из одной web форма в другую | 9 | |||
новая форма расчета авансовых платежей | 4 | |||
LookUp форма и параметры | 7 | |||
Произвольная Lookup форма | 0 |
|