예제 #1
0
        public static List <MEMReferences> CopyOLERefToMEMRef(OLE OLERef, string Index, bool ISMethodIndex, bool NoDeleted, bool NoGroup)
        {
            List <MEMReferences> MEMRef = new List <MEMReferences>();

            OLERef.Method("¬ыбратьЁлементы");
            while (OLERef.Method("ѕолучитьЁлемент").ToBool())
            {
                if (NoDeleted)
                {
                    if (OLERef.Method("DeleteMark").ToBool())
                    {
                        continue;
                    }
                }

                if (NoGroup)
                {
                    if ((double)OLERef.Method("IsGroup") == 1.0)
                    {
                        continue;
                    }
                }

                MEMReferences MR = new MEMReferences();
                try
                {
                    if (ISMethodIndex)
                    {
                        MR.INDEX = OLERef.Method(Index).ToString().Trim();
                    }
                    else
                    {
                        MR.INDEX = OLERef.Property(Index).ToString().Trim();
                    }
                }
                catch
                {
                    throw new Exception("ќшибка копировани¤ справочника");
                }

                MR.CODE        = OLERef.Property("Code").ToString().Trim();
                MR.DESCRIPTION = OLERef.Property("Description").ToString().Trim();
                MR.Reference   = OLERef.Method("CurrentItem");
                MR.FULLCODE    = OLERef.Method("FullCode").ToString().Trim();
                MEMRef.Add(MR);
            }
            return(MEMRef);
        }
예제 #2
0
        public static OLE ПолучитьСотрудникаПУБ(string СотрудникКод)
        {
            OLE           SotrZIK = GetReferenceElementZIK("Сотрудники", СотрудникКод);
            string        TIN     = SotrZIK.Property("ФизическоеЛицо").Property("ИНН").ToString().Trim();
            MEMReferences MR      = new MEMReferences();

            MR.INDEX = TIN;
            int i   = 0;
            OLE PUB = V7B.CreateObject("Справочник.Сотрудники");

            do
            {
                i = MEMPUBWoker.BinarySearch(MR);
                if (i < 0)
                {
                    // Нет сотрудника в ПУБ
                    MR.DESCRIPTION = SotrZIK.Property("Description").ToString().Trim();
                    if (AutoInsertUser)
                    {
                        MR.Reference = SotrZIK;
                        PUB.Method("New");
                        PUB.Property("ИНН", MR.INDEX);
                        PUB.Property("Description", MR.DESCRIPTION);
                        PUB.Method("Write");
                        MR.CODE     = PUB.Property("Code").ToString().Trim();
                        MR.FULLCODE = PUB.Method("FullCode").ToString().Trim();
                        MEMPUBWoker.Add(MR);
                        MEMPUBWoker.Sort();
                        Trace.WriteLine("Вставим сотрудника в Бухгалтерию - " + MR.CODE + "  " + MR.DESCRIPTION + " ИНН - " + MR.INDEX);
                        return(PUB.Method("CurrentItem"));
                    }
                    DialogResult result = MessageBox.Show("В 1С7.7 Бух отсутствует сотрудник " + MR.DESCRIPTION + " с кодом ИНН - " + MR.INDEX +
                                                          ". Загрузите не монопольно 1С7.7 и введите даного пользователя, после чего нажмите ОК.",
                                                          "Ошибка в справочнике Сотрудники.",
                                                          MessageBoxButtons.OKCancel);
                    if (result == DialogResult.Cancel)
                    {
                        return(null);
                    }
                    CommonVariables.MEMPUBWoker = MEMReferences.CopyOLERefToMEMRef(PUB, "ИНН");
                    MEMPUBWoker.Sort();
                }
            } while (i < 0);
            PUB.Method("FindByCode", MEMPUBWoker[i].CODE);
            return(PUB.Method("CurrentItem"));
        }
예제 #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
        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);
        }
예제 #5
0
        public int CompareTo(object obj)
        {
            MEMReferences b = (MEMReferences)obj;

            return(string.Compare(this.INDEX, b.INDEX));
        }