public override string LimitFunction2SQLWhere(ICSSoft.STORMNET.FunctionalLanguage.Function LimitFunction, StorageStructForView[] StorageStruct, string[] asnameprop, bool MustNewGenerate) { translateFunction(LimitFunction); ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.OptimizeINOperator = false; return (ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.ToSQLString(LimitFunction, new ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.delegateConvertValueToQueryValueString(ConvertValueToQueryValueString), new ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.delegatePutIdentifierToBrackets(PutIdentifierIntoBrackets))); }
public override string LimitFunction2SQLWhere(STORMFunction LimitFunction) { translateFunction(LimitFunction); ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.OptimizeINOperator = false; return (ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.ToSQLString(LimitFunction, new ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.delegateConvertValueToQueryValueString(ConvertValueToQueryValueString), new ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.delegatePutIdentifierToBrackets(PutIdentifierIntoBrackets))); }
private void translateFunction(STORMFunction LimitFunction) { if (LimitFunction.FunctionDef.StringedView == "=") { LimitFunction.FunctionDef.StringedView = "IN"; } for (int i = 0; i < LimitFunction.Parameters.Count; i++) { if (LimitFunction.Parameters[i] is STORMFunction) { translateFunction((STORMFunction)LimitFunction.Parameters[i]); } } }
// *** Start programmer edit section *** (Period CustomMembers) /// <summary> /// Загрузить вложенные периоды. /// </summary> /// <param name="pВложенныеПериоды"></param> public void LoadВложенныеПериоды(System.Collections.ArrayList pВложенныеПериоды) { IDataService ds = DataServiceProvider.DataService; LoadingCustomizationStruct lcs = new LoadingCustomizationStruct(null); lcs.View = Information.GetView("PeriodL", typeof(Period)); lcs.LoadingTypes = new Type[] { typeof(Period) }; SQLWhereLanguageDef langdef = SQLWhereLanguageDef.LanguageDef; ICSSoft.STORMNET.FunctionalLanguage.Function lf = langdef.GetFunction(langdef.funcEQ, new VariableDef(langdef.NumericType, "Ierarhiia"), this.__PrimaryKey); lcs.LimitFunction = lf; ICSSoft.STORMNET.DataObject[] tmpПериоды = ds.LoadObjects(lcs); foreach (Period dobject in tmpПериоды) { pВложенныеПериоды.Add(dobject); ((Period)dobject).LoadВложенныеПериоды(pВложенныеПериоды); } }
// *** Start programmer edit section *** (ПроверкаНаличияТоваров CustomMembers) // *** End programmer edit section *** (ПроверкаНаличияТоваров CustomMembers) // *** Start programmer edit section *** (OnUpdateЗаказ CustomAttributes) // *** End programmer edit section *** (OnUpdateЗаказ CustomAttributes) public virtual ICSSoft.STORMNET.DataObject[] OnUpdateЗаказ(АСУ_Склад.Заказ UpdatedObject) { // *** Start programmer edit section *** (OnUpdateЗаказ) // Определим массив, который будем возвращать для обновления. DataObject[] ret = new DataObject[0]; // Проверим на то, что пришедший объект - это именно то, что нам нужно (создан или изменён и статус установлен в Оплачено). if ((UpdatedObject.GetStatus() == ICSSoft.STORMNET.ObjectStatus.Created || UpdatedObject.GetStatus() == ICSSoft.STORMNET.ObjectStatus.Altered) && Array.IndexOf(UpdatedObject.GetAlteredPropertyNames(), "Статус") >= 0 && UpdatedObject.Статус == Состояние_Заказа.Оплаченный) { // Построим ограничение и вычитаем все объекты ТоварНаСкладе, которые нам подходят. Заказ заказ = UpdatedObject; SQLWhereLanguageDef langdef = SQLWhereLanguageDef.LanguageDef; ICSSoft.STORMNET.FunctionalLanguage.Function lf = null; for (int i = 0; i < заказ.Строка_Заказа.Count; i++) { if (lf != null) { if (заказ.Строка_Заказа[i].Товар != null) { lf = langdef.GetFunction(langdef.funcOR, lf, langdef.GetFunction(langdef.funcEQ, new VariableDef(langdef.GuidType, "Товар"), заказ.Строка_Заказа[i].Товар.__PrimaryKey)); } } else { if (заказ.Строка_Заказа[i].Товар != null) { lf = langdef.GetFunction(langdef.funcEQ, new VariableDef(langdef.GuidType, "Товар"), заказ.Строка_Заказа[i].Товар.__PrimaryKey); } } } ICSSoft.STORMNET.Business.LoadingCustomizationStruct lcs = ICSSoft.STORMNET.Business.LoadingCustomizationStruct.GetSimpleStruct(typeof(Товар_на_Складе), "ТоварНаСкладеE"); lcs.LimitFunction = lf; ICSSoft.STORMNET.DataObject[] objs = ICSSoft.STORMNET.Business.DataServiceProvider.DataService.LoadObjects(lcs); // Разместим вычитанные объекты в отсортированном списке для удобного доступа в дальнейшем. System.Collections.SortedList sl = new System.Collections.SortedList(); //for (int i = 0; i < objs.Length; i++) //{ // if (sl.ContainsKey(((Товар_на_Складе)objs[i]).Товар.__PrimaryKey)) // { // ((System.Collections.ArrayList)sl[objs[i].__PrimaryKey]).Add(objs[i]); // } // else // { // System.Collections.ArrayList списокТоваров = new System.Collections.ArrayList(); // списокТоваров.Add(objs[i]); // sl.Add(((Товар_на_Складе)objs[i]).Товар.__PrimaryKey, списокТоваров); // } //} // Определим строчку для сообщения об ошибке. string errStr = string.Empty; ArrayList retObjs = new ArrayList(); // Проверим наличие товара на складах, если не хватает, то выдадим сообщение об ошибке, если хватает, то вычитаем количество. for (int i = 0; i < заказ.Строка_Заказа.Count; i++) { if (sl.ContainsKey(заказ.Строка_Заказа[i].Товар.__PrimaryKey)) { ArrayList arl = ((System.Collections.ArrayList)sl[заказ.Строка_Заказа[i].Товар.__PrimaryKey]); int количествоНаСкладах = 0; for (int j = 0; j < arl.Count; j++) { количествоНаСкладах += ((Товар_на_Складе)arl[j]).Количество; } if (количествоНаСкладах < заказ.Строка_Заказа[i].Количество) { errStr += " Не хватает товара \"" + заказ.Строка_Заказа[i].Товар.Название + "\" в наличии: " + количествоНаСкладах + ", требуется " + заказ.Строка_Заказа[i].Количество + Environment.NewLine; } else { int колич = заказ.Строка_Заказа[i].Количество; for (int j = 0; j < arl.Count; j++) { if (колич > 0 && ((Товар_на_Складе)arl[j]).Количество > колич) { ((Товар_на_Складе)arl[j]).Количество -= колич; колич = 0; retObjs.Add(arl[j]); } else { if (колич > 0) { колич -= ((Товар_на_Складе)arl[j]).Количество; ((Товар_на_Складе)arl[j]).Количество = 0; retObjs.Add(arl[j]); } } } } } else { errStr += "Товар \""+ заказ.Строка_Заказа[i].Товар.Название + "\" в наличии отсутствует." + Environment.NewLine; } } // В случае, если чего-то не хватило, сообщаем об этом пользователю. if (errStr != string.Empty) { throw new Exception(errStr); } // Если всё нормально, то возвращаем массив объектов, которые надо обновить. ret = new DataObject[retObjs.Count]; retObjs.CopyTo(ret, 0); } return(ret); // *** End programmer edit section *** (OnUpdateЗаказ) }