示例#1
0
 public void Add(OLE Sotr, OLE Rasch, decimal rez)
 {
     if (Rasch.Property("ВидРасч").Method("ВходитВГруппу", Rasch.EvalExpr("ГруппаРасчетов.ОсновныеНачисления")).ToBool())
     {
         MainRaschet(Sotr, Rasch, rez);
         return;
     }
     if (СистемныйВидРасч(Rasch))
     {
         return;                                 // системные виды расчета (нач.сальдо, к выплате за месяц) не эспортируем
     }
     AtherRaschet(Sotr, Rasch, rez);
     return;
 }
示例#2
0
        public string СпрШкалаКод;   // код налога в справочнике шкалы ставок
        /// <summary>
        ///  Проверить использутся ли данный вид расчета в даном налоге
        /// </summary>
        /// <param name="Rasch">Пороверяемый расчет </param>
        public bool ВходитВНалог(OLE Rasch)
        {
            switch (СпрШкалаКод)
            {
            case "ФЗППенс":
                return(Rasch.Property("ВидРасч").Method("ВходитВГруппу", Rasch.EvalExpr("ГруппаРасчетов.БазаПенсионныйФЗП2004")).ToBool());

            case "ФЗППенсЛет":
                return(Rasch.Property("ВидРасч").Method("ВходитВГруппу", Rasch.EvalExpr("ГруппаРасчетов.БазаПенсионныйФЗП2004")).ToBool());

            case "ФЗППенсИнв":
                return(Rasch.Property("ВидРасч").Method("ВходитВГруппу", Rasch.EvalExpr("ГруппаРасчетов.БазаПенсионныйФЗП2004")).ToBool());

            case "ФЗПСоцСтрах":
                return(Rasch.Property("ВидРасч").Method("ВходитВГруппу", Rasch.EvalExpr("ГруппаРасчетов.БазаСоцСтрахФЗП2004")).ToBool());

            case "ФЗПСоцСтрахИнв":
                return(Rasch.Property("ВидРасч").Method("ВходитВГруппу", Rasch.EvalExpr("ГруппаРасчетов.БазаСоцСтрахФЗП2004")).ToBool());

            case "ФЗПБезраб":
                return(Rasch.Property("ВидРасч").Method("ВходитВГруппу", Rasch.EvalExpr("ГруппаРасчетов.БазаБезработицаФЗП2004")).ToBool());

            case "ФЗПБезрабИнв":
                return(Rasch.Property("ВидРасч").Method("ВходитВГруппу", Rasch.EvalExpr("ГруппаРасчетов.БазаБезработицаФЗП2004")).ToBool());

            case "ФЗПСоцСтрахНесч":
                return(Rasch.Property("ВидРасч").Method("ВходитВГруппу", Rasch.EvalExpr("ГруппаРасчетов.БазаСоцСтрахНесчФЗП2004")).ToBool());

            case "ФЗПРезервОтп":
                return(Rasch.Property("ВидРасч").Method("ВходитВГруппу", Rasch.EvalExpr("ГруппаРасчетов.ВключатьВСреднююДляОтпуска")).ToBool());

            case "ФЗПБезрабГПХ":
                return(Rasch.Property("ВидРасч").Property("CODE").ToString().Trim() == "ОплатаПоДоговору");
            }
            return(false);
        }
示例#3
0
        void Sinchro(OLE refmain, OLE refchild)
        {
            #region INSERT ELEMENTS
            List <MEMReferences> MEMRef;
            bool FullCod = (refmain.EvalExpr("ћетаданные.—правочник(\"" + refmain.Method("¬ид").ToString() + "\").—ерии одов").ToString().Trim().ToUpper() == ("¬ѕределахѕодчинени¤").ToUpper());
            if (FullCod)
            {
                MEMRef = MEMReferences.CopyOLERefToMEMRef(refmain, "FullCode", FullCod, true, true);
            }
            else
            {
                MEMRef = MEMReferences.CopyOLERefToMEMRef(refmain, "Code", FullCod, true, true);
            }

            // Count elements
            CommonVariables.ProgressBarInitialize(0, MEMRef.Count, 0);
            //refmain.Method("¬ыбратьЁлементы");
            foreach (MEMReferences MRef in MEMRef)
            {
                if (!(bool)refchild.Method("Ќайтиѕо–еквизиту", " ј”", MRef.INDEX, 0))
                {
                    IncInsertCounter();
                    refchild.Method("New");
                    refchild.Property("Description", MRef.DESCRIPTION);
                    refchild.Property(" ј”", MRef.INDEX);
                    refchild.Method("Write");
                    System.Diagnostics.Trace.WriteLine("¬ставлен елемент - " + MRef.INDEX + " " + MRef.DESCRIPTION);
                }
                else
                {
                    if ((bool)refchild.Method("DeleteMark"))
                    {
                        refchild.Method("ClearDeleteMark");
                        //refchild.Method("Write");
                    }
                }

                CommonVariables.ProgressBarInc();
            }
            #endregion
            #region DELEDE ELEMENTS
            // Count elements
            int refchildCount = 0;
            refchild.Method("¬ыбратьЁлементы");
            while (refchild.Method("ѕолучитьЁлемент").ToBool())
            {
                if ((bool)refchild.Method("DeleteMark"))
                {
                    continue;
                }
                refchildCount++;
            }

            CommonVariables.ProgressBarInitialize(0, refchildCount, 0);
            refchild.Method("¬ыбратьЁлементы");
            MEMRef.Sort();
            while (refchild.Method("ѕолучитьЁлемент").ToBool())
            {
                if ((bool)refchild.Method("DeleteMark"))
                {
                    continue;
                }
                CommonVariables.ProgressBarInc();
                MEMReferences mr = new MEMReferences();
                mr.INDEX = refchild.Property(" ј”").ToString().Trim();

                if (MEMRef.BinarySearch(mr) < 0)
                {
                    IncDeleteCounter();
                    refchild.Method("Delete", 0);
                    refchild.Method("Write");
                    System.Diagnostics.Trace.WriteLine("ѕомечен к удалению елемент - " +
                                                       refchild.Property("Code").ToString() + " " +
                                                       refchild.Property("Description").ToString());
                }
            }
            #endregion
        }
示例#4
0
        /// <summary>
        ///  Получить зарегистрированный элемент справочника "фирмы"
        /// </summary>
        /// <param name="handle">Ссылка на активную 1С7.7 </param>
        public static OLE GetFirm(OLE handle)
        {
            if (handle == null)
            {
                return(null);
            }
            OLE temp = handle.Global.CreateObject("Справочник.Фирмы");

            temp.Method("ВыбратьЭлементы");
            while (temp.Method("ПолучитьЭлемент").ToBool())
            {
                if (temp.Method("DeleteMark").ToBool())
                {
                    continue;
                }
                if (temp.Property("ЕДРПОУ").ToString().Trim() == conf.CommonAllConfig.ЕДРПОУ)
                {
                    return(temp.Method("CurrentItem"));
                }
            }
            System.Diagnostics.Trace.WriteLine("Программа не зарегистрирована для даной базы: " + handle.EvalExpr("SystemCaption()").ToString());
            temp.Dispose();
            return(null);
        }
示例#5
0
        private void MainRaschet(OLE Sotr, OLE Rasch, decimal rez)
        {
            OLE Сот = Rasch.Property("Объект");
            OLE Наз = Rasch.Property("Назначение");
            OLE Хоз = Rasch.Property("ХозОперация");

            if (OLE.IsEmtyValue(Наз))
            {
                throw new Exception("По сотруднику " + Sotr.Property("Наименование") + " в журнале расчетов обнаружены записи по основным начислениям с незаполненным реквизитом Назначение! Проводки по ним не сформированы!");
            }

            if (OLE.IsEmtyValue(Хоз))
            {
                // хозоперация не выбрана, распределяем между хозоперациями
                аспределить(Сот, Наз, null, rez, Rasch);
            }
            else
            {
                // хозоперация выбрана непосредственно в журнале расчетов, используем именно ее
                // для распределения по заказам
                OLE спрПроводки = Sotr.CreateObject("Справочник.Проводки");
                спрПроводки.Method("ИспользоватьВладельца", Хоз);
                спрПроводки.Method("ВыбратьЭлементы");
                while (спрПроводки.Method("ПолучитьЭлемент").ToBool())
                {
                    if (спрПроводки.Method("ПометкаУдаления").ToBool())
                    {
                        continue;
                    }
                    //глТрассировка("Обрабатываю проводку "+спрПроводки.ТекущийЭлемент());
                    //НомерПроводки = НомерПроводки + 1;

                    if (НужноРаспределятьПоЗаказам(спрПроводки.Method("ТекущийЭлемент")))
                    {
                        // есть субконто, значения которых нужно определить автоматически
                        if ((Rasch.Method("CalculKind").ToObject() == Rasch.EvalExpr("ВидРасчета.СдельныйНаряд").ToObject()) || (Rasch.Method("CalculKind").ToObject() == Rasch.EvalExpr("ВидРасчета.БригадныйНаряд").ToObject()))
                        {
                            // распределение по заказам хранится в документе (СдельныйНаряд или НарядБригады)
                            OLE    Наряд  = Rasch.Property("Документ");
                            string ВидДок = Наряд.Method("Вид").ToString();
                            if (ВидДок == "СдельныйНаряд")
                            {
                                // СдельныйНаряд - в документе несколько строк по разным хозоперациям и заказам
                                decimal ИтогПоХозоперации = 0;
                                Наряд.Method("ВыбратьСтроки");
                                while (Наряд.Method("ПолучитьСтроку").ToBool())
                                {
                                    if (Наряд.Property("ХозОперация").ToObject() != Хоз.ToObject())
                                    {
                                        continue;                                                                                            // пропускаем с другими хозоперациями
                                    }
                                    ИтогПоХозоперации = ИтогПоХозоперации + Наряд.Property("Сумма").ToDecimal();
                                }

                                if (ИтогПоХозоперации != 0)
                                {
                                    Наряд.Method("ВыбратьСтроки");
                                    while (Наряд.Method("ПолучитьСтроку").ToBool())
                                    {
                                        if (Наряд.Property("ХозОперация").ToObject() != Хоз.ToObject())
                                        {
                                            continue;                                                                                                 // пропускаем с другими хозоперациями
                                        }
                                        decimal СуммаПоЗаказу = Наряд.Property("Сумма").ToDecimal() * rez / ИтогПоХозоперации;
                                        New(Сот, Наз, спрПроводки.Method("ТекущийЭлемент"), Rasch, СуммаПоЗаказу, null);
                                    }
                                }
                                continue;
                            }
                            if (ВидДок == "НарядБригады")
                            {     // НарядБригады - в документе один заказ в шапке
                                if (OLE.IsEmtyValue(Наряд.Property("Заказ")))
                                { // распределяем по заказам
                                    аспределить(Сот, Наз, спрПроводки.Method("ТекущийЭлемент"), rez, Rasch);
                                }
                                else
                                {// известны и заказ, и хозоперация
                                    New(Сот, Наз, спрПроводки.Method("ТекущийЭлемент"), Rasch, rez, null);
                                }
                                continue;
                            }
                            // неизвестный документ - распределяем обычным способом
                            аспределить(Сот, Наз, спрПроводки.Method("ТекущийЭлемент"), rez, Rasch);
                        }
                        else
                        {// остальные основные начисления (оклад)
                            аспределить(Сот, Наз, спрПроводки.Method("ТекущийЭлемент"), rez, Rasch);
                        }
                    }
                    else
                    {
                        New(Сот, Наз, спрПроводки.Method("ТекущийЭлемент"), Rasch, rez, null);
                    }
                }
            }
        }
示例#6
0
        private void AtherRaschet(OLE Sotr, OLE Rasch, decimal rez)
        {
            OLE спрВидыРасчетов = Sotr.CreateObject("Справочник.ВидыРасчетов");

            if (!спрВидыРасчетов.Method("НайтиПоРеквизиту", "Расчет", Rasch.Property("ВидРасч"), 1).ToBool())
            {
                throw new Exception("Вид расчета " + Rasch + " не найден в справочнике \"Виды расчетов\". Нужно добавить его в справочник и установить для него хоз. операцию!" +
                                    "   Проводка не сформирована!");
            }

            OLE Хоз = Rasch.Property("ХозОперация");

            if (OLE.IsEmtyValue(Хоз))
            {
                Хоз = спрВидыРасчетов.Property("Хозоперация");
            }
            if (OLE.IsEmtyValue(Хоз))
            {
                if (Rasch.Property("ВидРасч").Method("ВходитВГруппу", Rasch.EvalExpr("ГруппаРасчетов.ВсеНачисления")).ToBool() ||
                    Rasch.Property("ВидРасч").Method("ВходитВГруппу", Rasch.EvalExpr("ГруппаРасчетов.ВсеУдержания")).ToBool() ||
                    Rasch.Property("ВидРасч").Method("ВходитВГруппу", Rasch.EvalExpr("ГруппаРасчетов.ВсеВыплаты")).ToBool() ||
                    (Rasch.Property("ВидРасч").ToObject() == Rasch.EvalExpr("ВидРасчета.ВозвратВКассу").ToObject()))
                {
                    // для этих видов расчетов имеет смысл задавать хозоперацию в справочнике
                    // то, что она не задана, скорее всего ошибка
                    System.Diagnostics.Trace.WriteLine("В справочнике \"Виды расчетов\" для " + спрВидыРасчетов.Method("ТекущийЭлемент").Property("Description").ToString() + " не задана хоз. операция!" +
                                                       "   Проводка не сформирована!");
                }
                return;
            }

            OLE спрПроводки = Rasch.CreateObject("Справочник.Проводки");

            спрПроводки.Method("ИспользоватьВладельца", Хоз);
            спрПроводки.Method("ВыбратьЭлементы");
            while (спрПроводки.Method("ПолучитьЭлемент").ToBool())
            {
                if (спрПроводки.Method("ПометкаУдаления").ToBool())
                {
                    continue;
                }
                if (НужноРаспределятьПоЗаказам(спрПроводки.Method("ТекущийЭлемент")) &&
                    (Rasch.Property("ВидРасч").Method("ВходитВГруппу", Rasch.EvalExpr("ГруппаРасчетов.ИсполнительныеЛисты")).ToBool() || (Rasch.Property("ВидРасч").ToObject() == Rasch.EvalExpr("ВидРасчета.ПроцентПочтыБанка").ToObject())))
                {
                    // получим аналитику по исполнительным листам непосредственно
                    // из документа
                    OLE жрнЗарплата = Rasch.CreateObject("ЖурналРасчетов.Зарплата");
                    жрнЗарплата.Method("ВыбратьПериодПоОбъекту", Sotr, ДатаПериода.Begin);
                    while (жрнЗарплата.Method("ПолучитьЗапись").ToBool())
                    {
                        if (жрнЗарплата.Property("ВидРасч").ToObject() != Rasch.Property("ВидРасч").ToObject())
                        {
                            continue;                                                                                                            // отбираем только записи по "нашему" виду расчета
                        }
                        if (OLE.IsEmtyValue(жрнЗарплата.Property("ХозОперация")))
                        {
                            continue;                                                                              // отбираем только записи по "нашей" хоз операции
                        }
                        if (жрнЗарплата.Property("Документ").Property("Вид").ToString() != "ИсполнительныйЛист")
                        {
                            System.Diagnostics.Trace.WriteLine("По сотруднику " + Sotr.Property("Description").ToString() + " найдены записи по исполнительным листам (алиментам), которые внесены не документом \"Исполнительный лист\". Автоматически определить аналитику для проводок невозможно!" +
                                                               "    Проводка не сформирована!");
                        }
                        else
                        {
                            OLE Кому = жрнЗарплата.Property("Документ").Property("Кому");
                            OLE Наз  = Rasch.Property("Назначение");
                            New(Sotr, Наз, спрПроводки.Method("ТекущийЭлемент"), Rasch, rez, Кому);
                        }
                    }
                }
                else
                {
                    OLE Наз = Rasch.Property("Назначение");
                    New(Sotr, Наз, спрПроводки.Method("ТекущийЭлемент"), Rasch, rez, null);
                }
            }
        }