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 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); }
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 }
/// <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 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 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); } } }