// OLE Проводка - элемент справочника ЭП_Проводки, на основании которого формируется проводка // decimal Сумма - сумма проводки // string СотрудникКод - код сотрудника, по которому формирует проводка // string ПодразделениеКод - код подразделения по которому формируется проводка // DateTime Period - Период формируемой проводки // bool ЭтоНачисленияНаОтпуск - Прзнак начисления на отпуск public Проводка(OLE ШаблонПроводки, decimal Сумма, string СотрудникКод, string ПодразделениеКод, DateTime Period, bool ЭтоНачисленияНаОтпуск) { if (OLE.IsEmtyValue(ШаблонПроводки.Property("СчетДебета")) && OLE.IsEmtyValue(ШаблонПроводки.Property("СчетКредита"))) { Error = "В проводке " + ШаблонПроводки.Property("Код") + " хоз. операции " + ШаблонПроводки.Property("Владелец").Property("Description") + " не заданы счета! Проводка не формируется!"; return; } Сумма = decimal.Round(Сумма, 2); if (Сумма == 0) { Error = "По проводке №" + ШаблонПроводки.Property("Код") + " хоз. операции " + ШаблонПроводки.Property("Владелец").Property("Description") + " сумма 0! Проводка не формируется!"; return; } if (ШаблонПроводки.Property("УказанПроцент").ToBool()) { Summ = decimal.Round(Сумма * ШаблонПроводки.Property("Процент").ToDecimal() / 100, 2); } else { Summ = Сумма; } Debit = new Debit(ШаблонПроводки, СотрудникКод, ПодразделениеКод, Period, ЭтоНачисленияНаОтпуск); Credit = new Credit(ШаблонПроводки, СотрудникКод, ПодразделениеКод, Period, ЭтоНачисленияНаОтпуск); Comment = " "; }
public static bool СистемныйВидРасч(OLE Вир) { // Возвращает 1, если вид расчета является системным (нач. сальдо, к выплате за месяц) if ((Вир.Property("ВидРасч").Property("CODE").ToString() == "НачальноеСальдо") || (Вир.Property("ВидРасч").Property("CODE").ToString() == "КВыплатеЗаМесяц") || (Вир.Property("ВидРасч").Property("CODE").ToString() == "ВыплатаЧерезКассу") || (Вир.Property("ВидРасч").Property("CODE").ToString() == "ВыплатаЧерезБанк")) { return(true); } return(false); }
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 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 НалогиНаФОП() { 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 ПолучитьСотрудникаПУБ(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")); }
public decimal Procent(DateTime onDate) { OLE СпрШкала = V7Z.CreateObject("Справочник.ШкалаСтавок"); if (!СпрШкала.Method("НайтиПоКоду", СпрШкалаКод).ToBool()) { throw new Exception("Ошибка позиционирования по коду ШкалаСтавок."); } return((decimal)СпрШкала.Property("Ставка").Method("Получить", onDate)); }
private void New(OLE Сотрудник, OLE Назначение, OLE Проводка, OLE Rasch, decimal Сумма, OLE Comu) { // Процедура предназначена для добавления проводки к списку проводок // Сотрудник, Назначение - используются для выдачи сообщений и проводок // Проводка - уже найденная проводка // Сумма - сумма для распределения между заказами // Распределение - документ "Распределение основных начислений", согласно которому выполняется распределение string СотрудникКод = Сотрудник.Property("Code").ToString().Trim(); string ПодразделениеКод = Rasch.Property("Объект").Property("Подразделение").Property("Code").ToString().Trim(); // Вводим поддержку подразделений из назначения if (!OLE.IsEmtyValue(Rasch.Property("Назначение"))) { ПодразделениеКод = Rasch.Property("Назначение").Property("МестоРаботы").Property("Владелец").Property("Code").ToString().Trim(); } DateTime period = Rasch.Property("ДатаНачала").ToDateTime(); Item.Add(new Проводка(Проводка, Сумма, СотрудникКод, ПодразделениеКод, period)); }
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); }
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)); }
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; }
public void Add(OLE Rasch, decimal rez, List <НалогНаФОП> NalogsFOP) { string PodrCod = Rasch.Property("Объект").Property("Подразделение").Property("Code").ToString().Trim(); // Вводим поддержку подразделений из назначения if (!OLE.IsEmtyValue(Rasch.Property("Назначение"))) { PodrCod = Rasch.Property("Назначение").Property("МестоРаботы").Property("Владелец").Property("Code").ToString().Trim(); } FOPDivision Division; if (FOPDivision.ContainsKey(PodrCod)) { Division = FOPDivision[PodrCod]; } else { Division = new FOPDivision(); FOPDivision.Add(PodrCod, Division); } Division.Add(Rasch, rez, NalogsFOP); }
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); }
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); }
// Ищем документ // 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); }
public Debit(OLE Проводка, string СотрудникКод, string ПодразделениеКод, DateTime Period, bool ЭтоНачисленияНаОтпуск) { this.TemplateEntry = Проводка; string tAccount = Проводка.Property("Счет" + Marker + "а").Property("Code").ToString().Trim(); if (tAccount == "") { throw new Exception(""); } if (tAccount == "ВТ") {// Спецподстановка tAccount = СчётЗатрат(ПодразделениеКод); if (tAccount == "") { tAccount = "91"; //throw new Exception(""); } } this.Account = CommonVariables.BConnection.Global.EvalExpr("СчетПоКоду(\"" + tAccount + "\")"); tAccount = this.Account.Property("Code").ToString().Trim(); if (tAccount == "") { tAccount = "91"; this.Account = CommonVariables.BConnection.Global.EvalExpr("СчетПоКоду(\"" + tAccount + "\")"); //throw new Exception(""); } // если начисление на отпуск то if (ЭтоНачисленияНаОтпуск && (Marker == "Дебет") && ЭтоСчетЗатрат(tAccount)) { this.Account = CommonVariables.BConnection.Global.EvalExpr("СчетПоКоду(\"" + "471" + "\")"); Subconto = new OLE[this.Account.Method("КоличествоСубконто").ToInt()]; Subconto[0] = ВидДеятельности(ПодразделениеКод); Subconto[1] = GetReferenceElementPUB("подразделения", ПодразделениеКод); Subconto[2] = GetReferenceElementPUB("видызатрат", "0014"); //Отпускные return; } Subconto = new OLE[this.Account.Method("КоличествоСубконто").ToInt()]; for (int i = 0; i < Subconto.Length; i++) { Subconto[i] = Analiz(this.Account.Method("ВидСубконто", i + 1).Method("Идентификатор").ToString().Trim().ToLower(), i, СотрудникКод, ПодразделениеКод, Period); } }
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 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 { } } } }
/// <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); }
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); }
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); }
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 }
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); } }
void аспределитьПоПроводке(OLE Сотрудник, OLE Назначение, OLE Проводка, OLE Rasch, OLE аспределение, decimal Сумма) { // Процедура предназначена для распределения суммы по уже известной проводке и документу // "Распределение основных начислений" между заказами, либо просто для формирования проводки, // когда по заказам распределять не нужно // Сотрудник, Назначение - используются для выдачи сообщений и проводок в ДБФ // Проводка - уже найденная проводка // Сумма - сумма для распределения между заказами // Распределение - документ "Распределение основных начислений", согласно которому выполняется распределение OLE ХозОперация = Проводка.Property("Владелец"); if (OLE.IsEmtyValue(аспределение)) { // а распределения-то нет if (НужноРаспределятьПоЗаказам(Проводка)) { // есть субконто, значения которых нужно определить автоматически System.Diagnostics.Trace.WriteLine("Для хоз. операции " + ХозОперация.Property("Description") + " в проводках указано автоматическое определение субконто, однако по Назначению " + Назначение.Property("Description") + "\n сотрудника " + Сотрудник.Property("Description") + " найти документ-распределение не удалось! Проводка не сформирована!"); return; } else { New(Сотрудник, Назначение, Проводка, Rasch, Сумма, null); } } else { // распределение есть, выполняем следующее: распределяем по известной проводке суммы по субконто-заказам // будем оперировать локальными таблицами значений для увеличения скорости OLE тбПолная = V7Z.CreateObject("ТаблицаЗначений"); OLE тбСвернутая = V7Z.CreateObject("ТаблицаЗначений"); throw new Exception("Stop point Проводки ----------"); // Распределение.Method("ВыгрузитьТабличнуюЧасть", тбПолная.Handle); // тбПолная.Method("Выгрузить", тбСвернутая.Handle); // // свернутая таблица нужна для получения промежуточного итога весовых коэффициентов только по одной хозоперации // // сначала сворачиваем, а потом ищем // тбСвернутая.Method("Свернуть", "ХозОперация", "ВесовойКоэф"); // decimal ИтогПоХозОперации = 0; // double чНомерСтроки = 0; // if ((double)тбСвернутая.Method("НайтиЗначение", ХозОперация.Handle, чНомерСтроки, "ХозОперация") != 0) // { // // нужная нам ХозОперация присутствует в документе // тбСвернутая.Method("ПолучитьСтрокуПоНомеру", чНомерСтроки); // ИтогПоХозОперации = (decimal)(double)тбСвернутая.Method("ВесовойКоэф"); // } // if (ИтогПоХозОперации == 0) // { // Static.ShowInfo("В документе " + (string)Распределение.Property("Description") + " сумма весовых коэффициентов по хоз. операции " + ХозОперация.Property("Description") + " равна 0! Не удается выполнить распределение для Назначения " + (string)Назначение.Property("Description") + " Сотрудника " + (string)Сотрудник.Property("Description") + "! Проводка не сформирована!"); // } // // теперь обыкновенное распределение по весовым коэффициентам, только // // учитываем, что для последней строки сумму определяем не округлением, а как остаток // // между общей суммой и уже распределенной суммой // OLE ПоследнийЗаказ = null; // decimal УжеРаспределено = 0; // decimal ПоследняяСумма = 0; // тбПолная.Method("ВыбратьСтроки"); // while ((double)тбПолная.Method("ПолучитьСтроку") == 1.0) // { // if (тбПолная.Property("ХозОперация") != ХозОперация.Handle) // { // continue; // пропускаем другие хозоперации // } // if (ПоследняяСумма != 0) // { // // на предыдущей итерации определили некую сумму и заказ // ПроводкуВДБФ(Сотрудник, Назначение, Проводка, ПоследняяСумма, ПоследнийЗаказ, Вир, null, НомерПроводки); // УжеРаспределено = УжеРаспределено + ПоследняяСумма; // } // decimal Коэф = (decimal)(double)тбПолная.Property("ВесовойКоэф") / ИтогПоХозОперации; // ПоследняяСумма = decimal.Round(Коэф * Сумма, 2); // ПоследнийЗаказ = тбПолная.Property("Заказ"); // } // if (ПоследняяСумма != 0) // { // // на последней итерации определили заказ, а сумму берем так, чтобы избежать округлений // ПроводкуВДБФ(Сотрудник, Назначение, Проводка, Сумма - УжеРаспределено, ПоследнийЗаказ, Вир, null, НомерПроводки); // } } }
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); } } }
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); }
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, НомерПроводки); // } // } // по строкам документа } }
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); } } } }
private bool IsAutoSubconto(int NumberSubconto) { return(TemplateEntry.Property("АвтоСубконто" + Marker + NumberSubconto).ToBool()); }