private void SetLineDoc(ref OLE DOC, Проводка provodka, int WriteCount) { DOC.Method("НоваяСтрока"); Trace.WriteLine(WriteCount + " Проводка - Д(" + provodka.Debit.Account.Property("Код").ToString() + ") K(" + provodka.Credit.Account.Property("Код").ToString() + ") SUMM(" + (double)provodka.Summ + ")"); DOC.Property("ВидДеятельности", provodka.Debit.Subconto[0]); DOC.Property("Подразделение", provodka.Debit.Subconto[1]); if (provodka.Debit.Zatrat != null) { DOC.Property("ВидЗатрат", provodka.Debit.Zatrat); } else { DOC.Property("ВидЗатрат", provodka.Credit.Zatrat); } DOC.Property("Счет", provodka.Credit.Account); int i; for (i = 0; i < provodka.Credit.Subconto.Length; i++) { if (provodka.Credit.Subconto[i] != null) { DOC.Method("НазначитьТип", "Субконто" + (i + 1), provodka.Credit.Account.Method("ВидСубконто", i + 1)); DOC.Property("Субконто" + (i + 1), provodka.Credit.Subconto[i]); } } DOC.Property("Сумма", (double)provodka.Summ); DOC.Property("Примечание", provodka.Comment); //Operation.Property("НашаФирма", CommonVariables.FirmB /* CommonVariables.BFirm.CurrentItem */); }
public static OLE GetReferenceElementZIK(string ReferenceType, string Code) { OLE reference = V7Z.CreateObject("Справочник." + ReferenceType); if (reference.Method("FindByCode", Code).ToBool()) { return(reference.Method("CurrentItem")); } return(null); }
// Ищем документ // Global - глобальный контекст конфигурации // DocName - название документа // DateStart - начальная дата // DateEnd - конечная дата // LabelDoc - метка документа // Возврат: // Найденый документ или null private OLE FindDoc(OLE Global, string DocName, DateTime DateStart, DateTime DateEnd, string LabelDoc) { OLE doc = Global.CreateObject("Документ." + DocName); if (!doc.Method("ВыбратьДокументы", DateStart, DateEnd).ToBool()) { return(null); } while (doc.Method("Получитьдокумент").ToBool()) { if (doc.Property("Операция").Property("Description").ToString().Trim() == OperationDescription) { return(doc); } } return(null); }
private bool FindOperation(ref OLE Oper) { if ((double)Oper.Method("SelectOpers", CommonVariables.ДатаПериода.End, CommonVariables.ДатаПериода.End) == 0) { return(false); } while ((double)Oper.Method("GetOper") == 1.0) { string s = (string)Oper.Property("Description"); if (s.Trim() == OperationDescription) { return(true); } } return(false); }
public НалогиНаФОП() { Sotrs = new List <SotrFOP>(); List <НалогНаФОП> NalogsFOP = new List <НалогНаФОП>(); OLE ноЗПФонды; OLE СпрШкала = V7Z.CreateObject("Справочник.ШкалаСтавок"); if (СпрШкала.Method("НайтиПоКоду", (object)"ЗПФонды").ToBool()) { ноЗПФонды = СпрШкала.Method("ТекущийЭлемент"); } else { throw new Exception("ОШИБКА !!! Не могу найти сведения о налогах с фонда оплаты труда \n В справочнике 'Шкалы ставок' не обнаружен элемент с кодом 'ЗПФонды'"); } СпрШкала.Method("ИспользоватьРодителя", ноЗПФонды); СпрШкала.Method("ИспользоватьДату", ДатаПериода.End); СпрШкала.Method("ПорядокКодов"); СпрШкала.Method("ВыбратьЭлементы"); while (СпрШкала.Method("ПолучитьЭлемент").ToBool()) { НалогНаФОП nalog = new НалогНаФОП((string)СпрШкала.Property("Код")); NalogsFOP.Add(nalog); } }
public static OLE ПолучитьСотрудникаПУБ_IHH(string TIN) { 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")); }
private bool НужноРаспределятьПоЗаказам(OLE Пров) { // Назначение: // По проводке определяет, нужно ли распределять сумму между заказами // Аргументы: // Пров - проводка, элемент справочника // Возвращает: // true - нужно, false - нет string стрДебетКредит = "Дебет"; for (int Инд = 1; Инд < 2; Инд++) { for (int ИндСубк = 1; ИндСубк < Проводка.МаксКоличествоСубконто; ИндСубк++) { // дебет if ((double)Пров.Method("ПолучитьАтрибут", "АвтоСубконто" + стрДебетКредит + ИндСубк) == 1.0) { OLE Счет = Пров.Method("ПолучитьАтрибут", "Счет" + стрДебетКредит + "а"); if (!OLE.IsEmtyValue(Счет)) { // автоматически могут определяться также сотрудники и подразделения OLE ВидСубк = Счет.Method("ПолучитьАтрибут", "ВидСубконто" + ИндСубк); if (OLE.IsEmtyValue(ВидСубк)) { continue; } string ИдентВидСубк = ВидСубк.Property("Идентиф").ToString().Trim().ToLower(); if ((double)V7Z.Property("глСпецВидыСубконто").Method("НайтиЗначение", ИдентВидСубк) == 0) { return(true); } } else { return(true); } } } стрДебетКредит = "Кредит"; } return(false); }
private OLE GenDoc231() { OLE doc = FindDoc(V7B, "ЗатратыПроизводственногоХарактера", CommonVariables.ДатаПериода.End, CommonVariables.ДатаПериода.End, OperationDescription); if (doc != null) { if (doc.Method("Проведен").ToBool()) { doc.Method("СделатьНеПроведенным"); } doc.Method("УдалитьСтроки"); } else { doc = V7B.CreateObject("Документ.ЗатратыПроизводственногоХарактера"); doc.Method("New"); V7B.Method("глУстановитьФирму", doc); doc.Property("ПроводитьПоЭлементамЗатрат", V7B.EvalExpr("?(ИспользоватьСчетаРасходов <> Класс9,1,0)")); doc.Property("ДатаДок", CommonVariables.ДатаПериода.End); doc.Property("Операция").Property("Description", OperationDescription); } doc.Property("Примечание", "Генерація проводок " + DateTime.Now); // Проверим на пригодность к записи bool entr_ok = true; do { try { doc.Method("Записать"); entr_ok = true; } catch { entr_ok = false; doc.Property("НомерДок", int.Parse(doc.Property("НомерДок").ToString()) + 1); } } while (!entr_ok); return(doc); }
public decimal Procent(DateTime onDate) { OLE СпрШкала = V7Z.CreateObject("Справочник.ШкалаСтавок"); if (!СпрШкала.Method("НайтиПоКоду", СпрШкалаКод).ToBool()) { throw new Exception("Ошибка позиционирования по коду ШкалаСтавок."); } return((decimal)СпрШкала.Property("Ставка").Method("Получить", onDate)); }
public void Add(OLE Rasch, decimal rez, List <НалогНаФОП> NalogsFOP) { PeriodFOP p = new PeriodFOP(Rasch.Method("НачалоПериодаПоДате", Rasch.Property("ДатаНачала")).ToDateTime(), Rasch.Property("Объект"), NalogsFOP); int i = Period.BinarySearch(p); if (i < 0) // New Period { Period.Add(p); Period.Sort(); i = Period.BinarySearch(p); } Period[i].Add(Rasch, rez); }
private OLE CreateOperation() { OLE Operation = V7B.CreateObject("Operation"); if (FindOperation(ref Operation)) { while (Operation.Method("SelectEntries").ToBool()) { Operation.Method("DeleteEntry"); } } else { Operation.Method("New"); Operation.Property("OperDate", CommonVariables.ДатаПериода.End); Operation.Property("Description", OperationDescription); } Operation.Property("Документ").Property("Фирма", CommonVariables.GetFirm(Operation) /*CommonVariables.BFirm.CurrentItem*/); Operation.Property("Документ").Property("Примечание", "Генерація проводок " + DateTime.Now); // Проверим на пригодность к записи bool entr_ok = true; do { try { Operation.Method("Записать"); entr_ok = true; } catch { entr_ok = false; Operation.Property("Документ").Property("НомерДок", int.Parse(Operation.Property("Документ").Property("НомерДок").ToString()) + 1); } } while (!entr_ok); return(Operation); }
public decimal Predel(DateTime onDate) { OLE СпрШкала = V7Z.CreateObject("Справочник.ШкалаСтавок"); if (!СпрШкала.Method("НайтиПоКоду", СпрШкалаКод).ToBool()) { throw new Exception("Ошибка позиционирования по коду ШкалаСтавок."); } string s = (string)СпрШкала.Property("Дополнительно").Method("Получить", onDate); int start = s.LastIndexOf('=') + 1; s = s.Substring(start, s.IndexOf(';', start) - start); return(decimal.Parse(s)); }
/// <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); }
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); }
public void GenEntries(ref Проводки prov, OLE Sotr, List <НалогНаФОП> NalogsFOP) { foreach (FOPDivision Division in FOPDivision.Values) { foreach (PeriodFOP per in Division.Period) { for (int i = 0; i < per.Nalogs.Count; i++) { OLE спрПроводки = V7Z.CreateObject("Справочник.Проводки"); спрПроводки.Method("ИспользоватьВладельца", per.Nalogs[i].НалогНаФОП.ХозОперация); спрПроводки.Method("ВыбратьЭлементы"); System.Diagnostics.Trace.WriteLine("Налог на фонд " + per.Nalogs[i].НалогНаФОП.СпрШкалаКод + " за период " + per.PerD.ToShortDateString() + " - " + per.Nalogs[i].Налог.ToString() + " с отпуска - " + per.Nalogs[i].Налог_с_Отпуска.ToString()); while (спрПроводки.Method("ПолучитьЭлемент").ToBool()) { if (спрПроводки.Method("ПометкаУдаления").ToBool()) { continue; } // Проведём деление на отпускные if (NalogFOP.ИспользоватьРезервОтпусков) { prov.Item.Add(new Проводка(спрПроводки.Method("CurrentItem"), //Проводка per.Nalogs[i].Налог_с_Отпуска, //Сумма Code, //Сотрудник FOPDivision.Keys[FOPDivision.IndexOfValue(Division)], //Division per.PerD, //Период true)); //471 счёт } prov.Item.Add(new Проводка(спрПроводки.Method("CurrentItem"), //Проводка per.Nalogs[i].Налог, //Сумма Code, //Сотрудник FOPDivision.Keys[FOPDivision.IndexOfValue(Division)], /*Division*/ per.PerD)); //Период } } } } }
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); } }
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); } } }
private void аспределить(OLE Сотрудник, OLE Назначение, OLE Проводка, decimal Сумма, OLE Вир) { // процедура предназначена для распределения указанной суммы между хозоперациями и заказами // Сотррудник,Назначение - сотрудник и назначение, для которых распределяем (Подразделение и Категорию получаем по Назначению) // Проводка - задает проводку (и соответственно Хозоперацию) по которой распределяется сумма (может быть не выбрана) // Сумма - сумма, которую необходимо распределить //Static.ShowInfo("Распределить:" + (string)Сотрудник.Property("Description") + ":" + (string)Назначение.Property("Description") + ":" + Проводка + ":" + Сумма); OLE аспределение = null; OLE ХозОперация = null; if (!OLE.IsEmtyValue(Проводка)) { ХозОперация = Проводка.Property("Владелец"); } // начинаем поиск с самого подробного, т.е. с Назначения и двигаемся вплоть до Категории НайтиРаспределение(Назначение, ref аспределение, ref ХозОперация); НайтиРаспределение(Сотрудник, ref аспределение, ref ХозОперация); // теперь Подразделение OLE Подразделение = null; try { Подразделение = Назначение.Property("МестоРаботы").Property("Владелец"); } catch { System.Diagnostics.Trace.WriteLine("Не могу определить Подразделение по Назначению " + (string)Назначение.Property("Description") + " для Сотрудника " + (string)Сотрудник.Property("Description")); Подразделение = null; } if (!OLE.IsEmtyValue(Подразделение)) { // справочник Подразделения многоуровневый for (int Уровень = 1; Уровень < (int)(double)V7Z.EvalExpr("Метаданные.Справочник(\"Подразделения\").КоличествоУровней"); Уровень++) { НайтиРаспределение(Подразделение, ref аспределение, ref ХозОперация); try { Подразделение = Подразделение.Property("Родитель"); } catch { break; } if (OLE.IsEmtyValue(Подразделение)) { break; } } } // и, наконец, Категория OLE Категория = null; try { Категория = Назначение.Property("МестоРаботы").Property("Должность").Property("Категория"); } catch { System.Diagnostics.Trace.WriteLine("Не могу определить Категорию по Назначению " + (string)Назначение.Property("Description") + " для Сотрудника " + Сотрудник.Property("Description")); Категория = null; } if (!OLE.IsEmtyValue(Категория)) { НайтиРаспределение(Категория, ref аспределение, ref ХозОперация); } // теперь найдены распределение и хозоперация (причем должно быть хотя бы одно из них) //глТрассировка("Распределение = "+Распределение+": Хозоперация = "+Хозоперация); if (OLE.IsEmtyValue(аспределение) && OLE.IsEmtyValue(ХозОперация)) { System.Diagnostics.Trace.WriteLine("Для Назначения " + Назначение.Property("Description") + " Сотрудника " + Сотрудник.Property("Description") + " не внесена информация о распределении основных начислений," + " а также не заданы хоз. операции в справочниках! Проводки по основным начислениям сотрудника не сформированы!"); return; } if (!OLE.IsEmtyValue(ХозОперация)) { // хозоперация задана явно if (!OLE.IsEmtyValue(Проводка)) { // значит, проводку передали в качестве параметра в функцию // требуется обработать именно ее аспределитьПоПроводке(Сотрудник, Назначение, Проводка, Вир, аспределение, Сумма); } else { // проводка не выбрана, но хозоперация выбрана OLE спрПроводки = V7Z.CreateObject("Справочник.Проводки"); спрПроводки.Method("ИспользоватьВладельца", ХозОперация.ToObject()); спрПроводки.Method("ВыбратьЭлементы"); while ((double)спрПроводки.Method("ПолучитьЭлемент") == 1.0) { if ((double)спрПроводки.Method("ПометкаУдаления") == 1.0) { continue; } // распределяем для каждой проводки аспределитьПоПроводке(Сотрудник, Назначение, спрПроводки.Method("ТекущийЭлемент"), Вир, аспределение, Сумма); } } } else { // если не задана хозоперация, то должно быть задано Распределение, // это мы проверили выше OLE тбПолная = V7Z.CreateObject("ТаблицаЗначений"); // Распределение.Method("ВыгрузитьТабличнуюЧасть", тбПолная.Handle); // decimal ИтогПоДокументу = (decimal)(double)Распределение.Method("Итог", "ВесовойКоэф"); // if (ИтогПоДокументу == 0) // { // Static.ShowInfo("В документе " + Распределение + " итоговая сумма весовых коэффициентов равна 0!" + " Не могу сформировать проводки для Назначения " + Назначение + " Сотрудника " + Сотрудник + "!"); // return; // } // decimal УжеРаспределено = 0; // int Ном = 1; // тбПолная.Method("ВыбратьСтроки"); // while ((double)тбПолная.Method("ПолучитьСтроку") == 1.0) // { // decimal Коэф = (decimal)(double)тбПолная.Property("ВесовойКоэф") / ИтогПоДокументу; // decimal ТекСумма = decimal.Round(Коэф * Сумма, 2); // if ((int)(double)тбПолная.Method("КоличествоСтрок") == Ном) // { // // для последней строки берем остаток, чтобы избежать округлений // ТекСумма = Сумма - УжеРаспределено; // } // УжеРаспределено = УжеРаспределено + ТекСумма; // Ном = Ном + 1; // // для каждой строки документа нужно просмотреть хозоперацию и проводки по ней // OLE спрПроводки = V7Z.CreateObject("Справочник.Проводки"); // спрПроводки.Method("ИспользоватьВладельца", тбПолная.Property("ХозОперация")); // спрПроводки.Method("ВыбратьЭлементы"); // НомерПроводки = 0; // while ((double)спрПроводки.Method("ПолучитьЭлемент") == 1.0) // { // if ((double)спрПроводки.Method("ПометкаУдаления") == 1.0) continue; // НомерПроводки++; // ПроводкуВДБФ(Сотрудник, Назначение, спрПроводки.Property("ТекущийЭлемент"), ТекСумма, тбПолная.Property("Заказ"), Вир, null, НомерПроводки); // } // } // по строкам документа } }
protected override bool doExecute() { OLE ZIKReferences = V7Z.CreateObject("—правочник.¬иды—убконто"); OLE ZIKRefChild = V7Z.CreateObject("—правочник.ќбъектыјналит”чета"); #region ашиƒенежные—чета OLE PUBRefMain = V7B.CreateObject("—правочник.Ќашиƒенежные—чета"); PUBRefMain.Method("»спользовать¬ладельца", CommonVariables.GetFirm(V7B) /* CommonVariables.BFirm.CurrentItem */); if ((double)ZIKReferences.Method("Ќайтиѕо–еквизиту", (object)"»дентиф", (object)"Ќашиƒенежные—чета", (object)1) != 1.0) { MessageBox.Show("Ќе могу найти в «и субконто Ќашиƒенежные—чета", "ќшибка текущей формы !!!", MessageBoxButtons.OK, MessageBoxIcon.Hand); return(false); } ZIKRefChild.Method("»спользовать¬ладельца", ZIKReferences.Method("“екущийЁлемент")); System.Diagnostics.Trace.WriteLine("ќбрабатываем справочник Ќашиƒенежные—чета"); Sinchro(PUBRefMain, ZIKRefChild); cbƒенежные—редства.Checked = true; #endregion #region Ўкала—тавок PUBRefMain = V7B.CreateObject("—правочник.Ўкала—тавок"); if ((double)ZIKReferences.Method("Ќайтиѕо–еквизиту", (object)"»дентиф", (object)"Ўкала—тавок", (object)1) != 1.0) { MessageBox.Show("Ќе могу найти в «и субконто Ўкала—тавок", "ќшибка текущей формы !!!", MessageBoxButtons.OK, MessageBoxIcon.Hand); return(false); } ZIKRefChild.Method("»спользовать¬ладельца", ZIKReferences.Method("“екущийЁлемент")); System.Diagnostics.Trace.WriteLine("ќбрабатываем справочник Ўкала—тавок"); Sinchro(PUBRefMain, ZIKRefChild); cbЎкала—тавок.Checked = true; #endregion #region онтрагенты PUBRefMain = V7B.CreateObject("—правочник. онтрагенты"); if ((double)ZIKReferences.Method("Ќайтиѕо–еквизиту", (object)"»дентиф", (object)" онтрагенты", (object)1) != 1.0) { MessageBox.Show("Ќе могу найти в «и субконто онтрагенты", "ќшибка текущей формы !!!", MessageBoxButtons.OK, MessageBoxIcon.Hand); return(false); } ZIKRefChild.Method("»спользовать¬ладельца", ZIKReferences.Method("“екущийЁлемент")); System.Diagnostics.Trace.WriteLine("ќбрабатываем справочник онтрагенты"); Sinchro(PUBRefMain, ZIKRefChild); cb онтрагенты.Checked = true; #endregion #region ¬иды«атрат PUBRefMain = V7B.CreateObject("—правочник.¬иды«атрат"); if ((double)PUBRefMain.Method("FindByDescr", (object)"«арплата") == 0) { MessageBox.Show("Ќе могу найти в сравочнике ¬иды«атрат ѕ”Ѕ папку «арплата", "ќшибка текущей формы !!!", MessageBoxButtons.OK, MessageBoxIcon.Hand); return(false); } object zarp = PUBRefMain.Method("CurrentItem"); PUBRefMain.Method("UseParent", zarp, 0); if ((double)ZIKReferences.Method("Ќайтиѕо–еквизиту", (object)"»дентиф", (object)"¬иды«атрат", (object)1) == 0) { MessageBox.Show("Ќе могу найти в «и субконто ¬иды«атрат", "ќшибка текущей формы !!!", MessageBoxButtons.OK, MessageBoxIcon.Hand); return(false); } ZIKRefChild.Method("»спользовать¬ладельца", ZIKReferences.Method("“екущийЁлемент")); System.Diagnostics.Trace.WriteLine("ќбрабатываем справочник ¬иды«атрат"); Sinchro(PUBRefMain, ZIKRefChild); cb¬иды«атрат.Checked = true; #endregion CommonVariables.ProgressBarHide(); return(true); }
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); } } } }
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 }
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); }