示例#1
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);
        }
示例#2
0
        protected override bool doExecute()
        {
            Refresh();
            Trace.WriteLine("Начата синхронизация даных");
            Base DataBase = new Base();

            conf.RestopeBase(ref DataBase);
            OLE temp;

            // Активируем соединения с 1С7.7
            if (CommonVariables.ZConnection != null)
            {
                CommonVariables.ZConnection.Dispose();
            }
            try
            {
                CommonVariables.ZConnection = new NTICS.OLE1C77.OLEConnection(conf.CONNECTION_BasePatchZ, (NTICS.OLE1C77.V77Servers)conf.CONNECTION_ServerType, false, conf.UserName, conf.PassWord);
            }
            catch (Exception e)
            {
                Trace.WriteLine("Неудачная попытка подключения к  " + conf.CONNECTION_BasePatchZ + "\n" + e.Message);
                CommonVariables.ZConnection = null;
                return(false);
            }
            System.Diagnostics.Trace.WriteLine("Вы подключились к Зик.");
            if (CommonVariables.ZConnection == null)
            {
                return(false);
            }

            OLE FirmZ = CommonVariables.GetFirm(CommonVariables.ZConnection.Global);

            if (FirmZ == null)
            {
                System.Diagnostics.Trace.WriteLine("Отсутствует хотябы одна зарегистрированая фирма в ЗиК !!!");
                return(false);
            }


            if (CommonVariables.BConnection != null)
            {
                CommonVariables.BConnection.Dispose();
            }
            try
            {
                CommonVariables.BConnection = new NTICS.OLE1C77.OLEConnection(conf.CONNECTION_BasePatchB, (NTICS.OLE1C77.V77Servers)conf.CONNECTION_ServerType, false, conf.UserName, conf.PassWord);
            }
            catch
            {
                Trace.WriteLine("Неудачная попытка подключения к  " + conf.CONNECTION_BasePatchB);
                CommonVariables.BConnection = null;
                return(false);
            }
            System.Diagnostics.Trace.WriteLine("Вы подключились к Бухгалтерии.");
            if (CommonVariables.BConnection == null)
            {
                return(false);
            }
            OLE FirmB = CommonVariables.GetFirm(CommonVariables.BConnection.Global);

            if (FirmB == null)
            {
                System.Diagnostics.Trace.WriteLine("Отсутствует хотябы одна зарегистрированая фирма в Бухгалтерии !!!");
                return(false);
            }

            System.Diagnostics.Trace.WriteLine("Соединение прошло успешно");



            CommonVariables.ДатаПериода = new NTICS.Period(selectPeriod.Period);

            // Справочник Сотрудников ПУБ
            PUBRefWoker = V7B.CreateObject("Справочник.Сотрудники");

            // Заполним список сотрудников
            CommonVariables.MEMPUBWoker = MEMReferences.CopyOLERefToMEMRef(PUBRefWoker, "ИНН");
            CommonVariables.MEMPUBWoker.Sort();

            Проводка.МаксКоличествоСубконто = 4;


            // Перебираем всех сотрудников
            OLE Сотрудники     = V7Z.CreateObject("Справочник.Сотрудники");
            OLE ЖурналЗарплата = V7Z.CreateObject("ЖурналРасчетов.Зарплата");


            Сотрудники.Method("ВыбратьЭлементы");
            Проводки prov = new Проводки();

            //НалогиНаФОП nalogs = new НалогиНаФОП();
            CommonVariables.аспределения = new  аспределения(V7Z);

            // Список действующих налогов на фоп
            List <НалогНаФОП> NalogsFOP = НалогНаФОП.ПолучитьСписокТекущихНалоговНаФОП();

            #region Create Entries and nalogs on FOP
            while (Сотрудники.Method("ПолучитьЭлемент").ToBool())
            {
                Trace.WriteLine("Сотрудник - " + Сотрудники.Property("Description").ToString().Trim());

                // Пропустим сотрудника без начислений
                if (!ЖурналЗарплата.Method("SelectPeriodByObject", Сотрудники.Method("CurrentItem"), ДатаПериода).ToBool())
                {
                    continue;
                }

                SotrFOP Сотрудник = new SotrFOP();
                Сотрудник.INN = Сотрудники.Property("ФизическоеЛицо").Property("ИНН").ToString();
                while (ЖурналЗарплата.Method("GetRecord").ToBool()) // Выведем проводки по даному начислению
                {
                    decimal rez = (decimal)ЖурналЗарплата.Property("Результат");
                    if (rez == 0)
                    {
                        continue;           // пропустим нулевые
                    }
                    if (Проводки.СистемныйВидРасч(ЖурналЗарплата))
                    {
                        continue;                                            // пропустим системные расчёты
                    }
                    Trace.WriteLine("Вид расчёта - " + ЖурналЗарплата.Property("ВидРасч").Property("Code").ToString().Trim() + " на сумму - " + rez);
                    prov.Add(Сотрудники.Method("CurrentItem"), ЖурналЗарплата, rez);
                    Сотрудник.Add(ЖурналЗарплата, rez, NalogsFOP);
                }
                Сотрудник.GenEntries(ref prov, Сотрудники, NalogsFOP);  // Сгенегируем проводки для налогов ФОП
                Trace.WriteLine("Проводок - " + prov.Item.Count.ToString());
                Application.DoEvents();
            }
            #endregion
            Trace.WriteLine("Проводок - " + prov.Item.Count.ToString());

            #region Generate Entries

            OLE Operation = CreateOperation();
            OLE DOC       = GenDoc231();

            int WriteCount = 0;
            foreach (Проводка provodka in prov.Item)
            {
                if (provodka.Debit == null)
                {
                    continue;
                }
                if (provodka.Debit.Account == null)
                {
                    continue;
                }
                if (provodka.Credit.Account == null)
                {
                    continue;
                }
                // счёт 231
                if (provodka.Debit.Account.Property("CODE").ToString().Trim() == "231")
                {
                    SetLineDoc(ref DOC, provodka, WriteCount);
                    WriteCount++;
                    continue;
                }

                Operation.Method("НоваяПроводка");
                Trace.WriteLine(WriteCount + " Проводка - Д(" + provodka.Debit.Account.Property("Код").ToString() +
                                ") K(" + provodka.Credit.Account.Property("Код").ToString() +
                                ") SUMM(" + (double)provodka.Summ + ")");

                Operation.Property("Дебет").Property("Счет", provodka.Debit.Account);
                int i;
                for (i = 0; i < provodka.Debit.Subconto.Length; i++)
                {
                    if (provodka.Debit.Subconto[i] != null)
                    {
                        Operation.Property("Debit").Method("Subconto", i + 1, provodka.Debit.Subconto[i]);
                    }
                }


                Operation.Property("Кредит").Property("Счет", provodka.Credit.Account);
                for (i = 0; i < provodka.Credit.Subconto.Length; i++)
                {
                    if (provodka.Credit.Subconto[i] != null)
                    {
                        Operation.Property("Credit").Method("Subconto", i + 1, provodka.Credit.Subconto[i]);
                    }
                }

                Operation.Property("Сумма", (double)provodka.Summ);
                Operation.Property("Комментарий", provodka.Comment);
                Operation.Property("НашаФирма", CommonVariables.GetFirm(Operation) /* CommonVariables.BFirm.CurrentItem */);
                WriteCount++;

                if (WriteCount % 100 == 0)
                {
                    try
                    {
                        Operation.Method("Записать");
                        Debug.WriteLine("WRITE OK");
                    }
                    catch
                    {
                        Debug.WriteLine("WRITE ERROR");
                    }
                }
            }
            try
            {
                Operation.Method("Записать");
                DOC.Method("Провести");
                DOC.Method("Записать");
                Debug.WriteLine("WRITE OK");
            }
            catch
            {
                Debug.WriteLine("WRITE ERROR");
            }
            Operation.Dispose();
            Operation = null;



            #endregion

            CommonVariables.MEMPUBWoker = null;
            PUBRefWoker = null;
            CommonVariables.ZConnection = null;
            CommonVariables.BConnection = null;
            Trace.WriteLine("Сохраним базу даных ...");
            conf.StoreBase(DataBase);
            GC.Collect();
            GC.WaitForPendingFinalizers();
            Trace.WriteLine("ОК");
            Trace.WriteLine("Перенос проводок выполнен.", Traces.Status);
            return(true);
        }