private void НайтиРаспределение(OLE ПоЧемИщем, ref OLE аспределение, ref OLE ХозОперация) { // процедура предназначена для поиска документа-распределения и хозоперации в списке // ПоЧемИщем - назначение, сотрудник, подразделение или категория, по которой ищем в списке // Распределение - найденный документ "Распределение основных начислений" // ХозОперация - найденная хозоперация if (!OLE.IsEmtyValue(аспределение)) { return; // распределение уже выбрано } // собственно поиск аспределение r = new аспределение(); r.DocNumber = ПоЧемИщем.Global.Method("ЗначениеВСтрокуВнутр", ПоЧемИщем).ToString(); r.Doc = ПоЧемИщем; int Инд = аспределения.Items.BinarySearch(r); if (Инд >= 0) { // получилось найти документ-распределение в списке аспределение = аспределения.Items[Инд].Doc; } else { if (OLE.IsEmtyValue(ХозОперация)) { // найдем хозоперацию // возможно для элемента справочника ПоЧемИщем хозоперация задана явно try { ХозОперация = ПоЧемИщем.Property("ХозОперация"); } catch { } } } }
public аспределения(OLE obj) { OLE V7Z = obj.Global; FRaspr = new List <аспределение>(); FRaspr.Sort(); // заполняет список спРаспределения документами Распределения за указанный период string ТекстЗапр = "Период с '" + ДатаПериода.Begin.ToShortDateString() + "' по '" + ДатаПериода.End.ToShortDateString() + "';" + "Обрабатывать НеПомеченныеНаУдаление;" + "Рас = Документ.РаспределениеОсновныхНачислений.ТекущийДокумент;" + "Фир = Документ.РаспределениеОсновныхНачислений.Фирма;" + "Сот = Документ.РаспределениеОсновныхНачислений.Сотрудник;" + "Наз = Документ.РаспределениеОсновныхНачислений.Назначение;" + "Под = Документ.РаспределениеОсновныхНачислений.Подразделение;" + "Кат = Документ.РаспределениеОсновныхНачислений.Категория;" + "Группировка Рас без упорядочивания;" + "Условие(Фир.Code = \"" + CommonVariables.GetFirm(obj).Property("CODE").ToString().Trim() /*ZFirm.Code*/ + "\");"; OLE зРаспределения = V7Z.CreateObject("Запрос"); if (!(bool)зРаспределения.Method("Выполнить", ТекстЗапр)) { throw new Exception("ОШИБКА!!! Не выполнился запрос по распределениям основных начислений!"); } while ((double)зРаспределения.Method("Группировка", "Рас") == 1.0) { // в список нужно добавить либо назначение, либо сотрудника, либо подразделение, либо категорию OLE ЧтоДобавляем = null; if (!OLE.IsEmtyValue(зРаспределения.Property("Кат"))) { ЧтоДобавляем = зРаспределения.Property("Кат"); // priore 3 } if (!OLE.IsEmtyValue(зРаспределения.Property("Под"))) { ЧтоДобавляем = зРаспределения.Property("Под"); // priore 2 } if (!OLE.IsEmtyValue(зРаспределения.Property("Сот"))) { ЧтоДобавляем = зРаспределения.Property("Сот"); // priore 1 } if (!OLE.IsEmtyValue(зРаспределения.Property("Наз"))) { ЧтоДобавляем = зРаспределения.Property("Наз"); // priore 0 } if (ЧтоДобавляем == null) { System.Diagnostics.Trace.WriteLine("В документе " + (string)зРаспределения.Property("Рас") + " не указано ни назначение, ни сотрудник, ни подразделение, ни категория! Документ не учитывается при формировании проводок!"); continue; } аспределение r = new аспределение(); r.DocNumber = V7Z.Method("ЗначениеВСтрокуВнутр", ЧтоДобавляем).ToString(); r.Doc = ЧтоДобавляем; int Инд = Items.BinarySearch(r); if (Инд >= 0) { // информация о распределении для данного объекта уже есть System.Diagnostics.Trace.WriteLine("Документ РаспределениеОсновныхНачислений " + (string)зРаспределения.Property("Рас").Property("НомерДок") + " дублирует информацию о " + (string)ЧтоДобавляем + ", внесенную документом " + Items[Инд].DocNumber); continue; } Items.Add(r); } }