示例#1
0
        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);
            }
        }