Exemplo n.º 1
0
        /// <summary>
        /// удалить строку состава отсутсвующего после переноса
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        protected int DeleteOutputSostav(List <Oracle_OutputSostav> list)
        {
            if (list == null | list.Count == 0)
            {
                return(0);
            }
            int delete = 0;
            int errors = 0;

            foreach (Oracle_OutputSostav or_os in list)
            {
                // Удалим вагоны из системы RailCars
                transfer_rc.DeleteVagonsToDocOutput(or_os.DocNum);
                // TODO: Сделать код удаления вагонов из RailWay

                or_os.Close  = DateTime.Now;
                or_os.Status = (int)statusSting.Delete;
                int res = oos.SaveOracle_OutputSostav(or_os);
                if (res > 0)
                {
                    delete++;
                }
                if (res < 1)
                {
                    LogRW.LogError(String.Format("[KISTransfer.DeleteOutputSostav] :Ошибка удаления данных из таблицы учета прибытия составов (копирование по отправке из внутрених станций), ID: {0}", or_os.ID), this.eventID);
                    errors++;
                }
            }
            LogRW.LogWarning(String.Format("Определено для удаленния прибывших составов (копирование по отправке из внутрених станций) {0}, удалено {1}, ошибок удаления {2}", list.Count(), delete, errors), this.eventID);
            return(delete);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Добавить новые составы появившиеся после переноса
        /// </summary>
        /// <param name="list"></param>
        protected int InsertOutputSostav(List <NumVagStpr1OutStDoc> list)
        {
            if (list == null | list.Count == 0)
            {
                return(0);
            }
            int insers = 0;
            int errors = 0;

            foreach (NumVagStpr1OutStDoc out_s in list)
            {
                int res = SaveOutputSostav(out_s, statusSting.Insert);
                if (res > 0)
                {
                    insers++;
                }
                if (res < 1)
                {
                    LogRW.LogError(String.Format("[KISTransfer.InsertOutputSostav] :Ошибка добавления данных в таблицу учета прибытия составов (копирование по отправке из внутрених станций), номер документа: {0}", out_s.ID_DOC), this.eventID);
                    errors++;
                }
            }
            LogRW.LogWarning(String.Format("Определено для добавленных новых составов (копирование по отправке из внутрених станций) {0}, добавлено {1}, ошибок добавления {2}", list.Count(), insers, errors), this.eventID);
            return(insers);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Удалить ранее перенесеные составы
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        protected int DeleteArrivalSostav(List <Oracle_ArrivalSostav> list)
        {
            if (list == null | list.Count == 0)
            {
                return(0);
            }
            int delete = 0;
            int errors = 0;

            foreach (Oracle_ArrivalSostav or_as in list)
            {
                // Удалим вагоны из системы RailCars
                transfer_rc.DeleteVagonsToNaturList(or_as.NaturNum, or_as.DateTime);
                // TODO: Сделать код удаления вагонов из RailWay

                or_as.Close  = DateTime.Now;
                or_as.Status = (int)statusSting.Delete;
                int res = oas.SaveOracle_ArrivalSostav(or_as);
                if (res > 0)
                {
                    delete++;
                }
                if (res < 1)
                {
                    LogRW.LogError(String.Format("[KISTransfer.DeleteArrivalSostav] :Ошибка удаления данных из таблицы учета прибытия составов на АМКР, IDOrcSostav: {0}", or_as.IDOrcSostav), this.eventID);
                    errors++;
                }
            }
            LogRW.LogWarning(String.Format("Определено удаленных ранее прибывших составов в системе КИС {0}, удалено из таблицы учета прибытия составов на АМКР {1}, ошибок удаления {2}", list.Count(), delete, errors), this.eventID);
            return(delete);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Добавить новые составы появившиеся после переноса
        /// </summary>
        /// <param name="list"></param>
        protected int InsertArrivalSostav(List <PromSostav> list)
        {
            if (list == null | list.Count == 0)
            {
                return(0);
            }
            int insers = 0;
            int errors = 0;

            foreach (PromSostav ps in list)
            {
                int res = SaveArrivalSostav(ps, statusSting.Insert);
                if (res > 0)
                {
                    insers++;
                }
                if (res < 1)
                {
                    LogRW.LogError(String.Format("[KISTransfer.InsertArrivalSostav] :Ошибка добавления данных в таблицу учета прибытия составов на АМКР, натурный лист: {0}, дата:{1}-{2}-{3} {4}:{5}", ps.N_NATUR, ps.D_DD, ps.D_MM, ps.D_YY, ps.T_HH, ps.T_MI), this.eventID);
                    errors++;
                }
            }
            LogRW.LogWarning(String.Format("Определено добавленных прибывших составов в системе КИС {0}, добавлено таблицу учета прибытия составов на АМКР {1}, ошибок добавления {2}", list.Count(), insers, errors), this.eventID);
            return(insers);
        }
Exemplo n.º 5
0
        public void OnTimer(object sender, System.Timers.ElapsedEventArgs args)
        {
            try
            {
                if (!runTimer)
                {
                    DateTime dt_start = DateTime.Now;
                    LogRW.LogInformation(String.Format("Сервис {0} - активен", this.ServiceName), this.eventID);
                    ArrivalMT amt = new ArrivalMT();
                    amt.Transfer();
                    ArrivalKIS akis = new ArrivalKIS();
                    akis.Transfer();
                    SynchronizeKIS skis = new SynchronizeKIS();
                    skis.Synchronize();
                    CopyingInlandKIS cikis = new CopyingInlandKIS();
                    cikis.Copy();

                    TimeSpan ts = DateTime.Now - dt_start;
                    LogRW.LogInformation(String.Format("Сервис {0} - время выполнения: {1} мин {2} сек {3} мсек", this.ServiceName, ts.Minutes, ts.Seconds, ts.Milliseconds), this.eventID);
                }
                else
                {
                    LogRW.LogWarning(String.Format("Сервис {0} - занят", this.ServiceName), this.eventID);
                }
            }
            catch (Exception e)
            {
                LogRW.LogError(String.Format("[RWServiceArrival.OnTimer] : Общая ошибка выполнения сервиса {0} (источник: {1}, № {2}, описание:  {3})", this.ServiceName, e.Source, e.HResult, e.Message), this.eventID);
            }
            finally
            {
                runTimer = false;
                //LogRW.LogInformation(String.Format("Сервис {0} - не активен", this.ServiceName), this.eventID);
            }
        }
Exemplo n.º 6
0
        public int Synchronize()
        {
            if (error_settings)
            {
                LogRW.LogWarning("Выполнение метода SynchronizeKIS.Synchronize() - отменено, ошибка нет данных Settings.", this.eventID);
            }
            if (!this.activeWagons)
            {
                LogRW.LogWarning(String.Format("Синхронизация справочника вагонов classa:{0} - отключена. (Settings:activeSynchronizeWagons).", this.className), this.eventID);
                return(0);
            }
            KIS_Transfer kist = new KIS_Transfer();

            LogRW.LogInformation(String.Format("Сервис синхронизации справочников между системами КИС и RailWay :{0} - запущен", this.className), this.eventID);
            try
            {
                if (activeWagons)
                {
                    int res_swagons = kist.SynchronizeWagons(this.dayControllingWagons);
                }
            }
            catch (Exception e)
            {
                LogRW.LogError(String.Format("[SynchronizeKIS.Synchronize]: Общая ошибка синхронизации справочников между системами КИС и RailWay (источник: {0}, № {1}, описание:  {2})", e.Source, e.HResult, e.Message), this.eventID);
            }
            return(0); // TODO: исправить возврат
        }
Exemplo n.º 7
0
        /// <summary>
        /// Зачистить список вагонов в закладках прибытие и ожидают зачисления
        /// </summary>
        /// <param name="day"></param>
        /// <returns></returns>
        public int ClearArrivingWagons(int day)
        {
            //TODO: ВЫПОЛНИТЬ чистку  в системе RailWay
            int res_ca = transfer_rc.ClearArrivingWagons(new int[] { 1, 3, 9, 10, 11, 14, 18, 19, 21, 22, 25, 26 }, day);
            int res_cp = transfer_rc.ClearPendingWagons(new int[] { 1, 3, 9, 10, 11, 14, 18, 19, 21, 22, 25, 26 }, day);

            LogRW.LogWarning(String.Format("Очищено – закладка прибытие: {0} строк, закладка ожидают зачисления: {1} строк.", res_ca, res_cp), this.eventID);
            return(res_ca + res_cp);
        }
Exemplo n.º 8
0
        /// <summary>
        /// Перенести состав в справочник САП входящие поставки
        /// </summary>
        /// <param name="sostav"></param>
        /// <returns></returns>
        public int PutInSapIncomingSupply(trSostav sostav)
        {
            if (sostav == null)
            {
                return(0);
            }
            List <int> list_new_wag = new List <int>();
            List <int> list_old_wag = new List <int>();

            //if (sostav.Wagons != null)
            //{
            list_new_wag = GetWagonsToListInt(sostav.Wagons);
            //}
            ResultTransfers result = new ResultTransfers(list_new_wag.Count(), 0, 0, 0, 0, 0);

            if (sostav.ParentID != null)
            {
                list_old_wag = sapis.GetSAPIncSupplyToNumWagons((int)sostav.ParentID);
            }
            DeleteExistWagon(ref list_new_wag, ref list_old_wag);
            // Удалим вагоны которых нет в новом составе
            foreach (int wag in list_old_wag)
            {
                result.SetResultDelete(sapis.DeleteSAPIncSupply((int)sostav.ParentID, wag));
            }
            // Добавим вагоны которых нет в старом составе
            foreach (int wag in list_new_wag)
            {
                trWagon new_wag = GetWagons(sostav.Wagons, wag);
                result.SetResultInsert(sapis.SaveSAPIncSupply(ConvertWagonToSAPSupply(new_wag, sostav.id)));
            }
            // если есть старый состав обновим id и исправим нумерацию вагонов
            if (sostav.ParentID != null)
            {
                if (sostav.Wagons != null)
                {
                    int res_upd = sapis.UpdateSAPIncSupplyIDSostav(sostav.id, (int)sostav.ParentID);
                    foreach (trWagon wag in sostav.Wagons)
                    {
                        result.SetResultUpdate(sapis.UpdateSAPIncSupplyPosition(sostav.id, wag.CarriageNumber, wag.Position));
                    }
                }
                else
                {
                    int res_del = sapis.DeleteSAPIncSupplySostav((int)sostav.ParentID);
                }
            }
            LogRW.LogWarning(String.Format("Определено для переноса в справочник САП входящие поставки {0} вагонов, удалено предыдущих вагонов: {1}, добавлено новых вагонов:  {2}, обновлено позиций вагонов : {3}, общее количество ошибок: {4}.",
                                           result.counts, result.deletes, result.inserts, result.updates, result.errors), eventID);
            return(result.ResultInsert);
        }
Exemplo n.º 9
0
        public int CopySFTPFile(string fromFilePaths, string fromFileFiltr, string toTMPDirPath, string toDirPath, bool fromDeleteFile, bool toRewriteFile)
        {
            if (String.IsNullOrWhiteSpace(fromFilePaths) | String.IsNullOrWhiteSpace(toTMPDirPath))
            {
                LogRW.LogError(String.Format("[SFTPClient.CopySFTPFile] :Не определен путь копирования fromFilePaths:{0}, toDirPath:{1}.", fromFilePaths, toDirPath), this.eventID);
                return(-1);
            }
            if (toDirPath == toTMPDirPath)
            {
                LogRW.LogError(String.Format("[SFTPClient.CopySFTPFile] :Путь для постоянного хранения перенесённых файлов toDirPath:{0}, совпадает с временным хранилищем для обработки toTMPDirPath:{1}.", toDirPath, toTMPDirPath), this.eventID);
                return(-1);
            }
            string[] listfromFile = this.client_sftp.GetFileList(fromFilePaths + "//" + fromFileFiltr);
            if (listfromFile == null | listfromFile.Count() == 0)
            {
                //LogRW.LogInformation(String.Format("На сервере SFTP отсутствуют файлы для копирования"), this.eventID);
                return(0);
            }
            int count = 0;
            int cdel  = 0;

            foreach (string file in listfromFile)
            {
                // Если указана папка перенос в постоянное хранилище
                if (!String.IsNullOrWhiteSpace(toDirPath))
                {
                    client_sftp.Get(fromFilePaths + "//" + file, toDirPath + "\\");
                }
                // Переносим во временное хранилище
                if ((toRewriteFile) | (!toRewriteFile & !ExistFile(toTMPDirPath + "\\" + file)))
                {
                    client_sftp.Get(fromFilePaths + "//" + file, toTMPDirPath + "\\");
                    count++;
                }
                // Удалим файлы из host
                if (fromDeleteFile)
                {
                    client_sftp.Rm(fromFilePaths + "//" + file);
                    cdel++;
                }
            }
            string mess = String.Format("На сервере SFTP:{0} найдено {1} файлов, перенесено {2}", connect_SFTP.Host, listfromFile.Count(), count);

            if (fromDeleteFile)
            {
                mess = String.Format(mess + ", удаленно {0}", cdel);
            }
            LogRW.LogWarning(mess, this.eventID);
            return(count);
        }
Exemplo n.º 10
0
        public int Copy()
        {
            if (error_settings)
            {
                LogRW.LogWarning("Выполнение метода CopyingInlandKIS.Copy() - отменено, ошибка нет данных Settings.", this.eventID);
                return(0);
            }
            if (!this.activeCopyInput)
            {
                LogRW.LogWarning(String.Format("Копирование по внутреним станциям, вагонов по прибытию, classa:{0} - отключено. (Settings:activeCopyInput).", this.className), this.eventID);
            }
            if (!this.activeCopyOutput)
            {
                LogRW.LogWarning(String.Format("Копирование по внутреним станциям, вагонов по отправке, classa:{0} - отключено. (Settings:activeCopyOutput).", this.className), this.eventID);
            }


            KIS_Transfer kist = new KIS_Transfer();

            LogRW.LogInformation(String.Format("Сервис копирования по внутреним станциям системамы КИС в систему RailWay :{0} - запущен", this.className), this.eventID);
            try
            {
                //TODO: перенести необходимые переменные
                if (activeCopyInput)
                {
                    // Перенесем или обновим информацию о составах защедших на АМКР по системе КИС
                    int result_ci = kist.CopyInputSostavToRailway(this.dayControllingCopyInput_ins);
                    int result_pi = kist.PutInputSostavToStation();
                }
                if (activeCopyOutput)
                {
                    int result_co = kist.CopyOutputSostavToRailway(this.dayControllingCopyOutput_ins);
                    int result_po = kist.PutOutputSostavToStation();
                }
                if (activeDelete)
                {
                    int res_del = kist.ClearArrivingWagons(dayControllingDelete);
                }
            }
            catch (Exception e)
            {
                LogRW.LogError(String.Format("[CopyingInlandKIS.Copy]: Общая ошибка копирования по внутреним станциям системамы КИС в систему RailWay (источник: {0}, № {1}, описание:  {2})", e.Source, e.HResult, e.Message), this.eventID);
            }
            return(0); // TODO: исправить возврат
        }
Exemplo n.º 11
0
        protected override void OnStart(string[] args)
        {
            // Update the service state to Start Pending.
            ServiceStatus serviceStatus = new ServiceStatus();

            serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING;
            serviceStatus.dwWaitHint     = 100000;
            SetServiceStatus(this.ServiceHandle, ref serviceStatus);
            LogRW.LogWarning(String.Format("Сервис {0} - запущен. Интервал выполнения - {1} мсек.", this.ServiceName, this.Interval.ToString()), this.eventID);
            // Set up a timer to trigger every minute.
            System.Timers.Timer timer = new System.Timers.Timer();
            timer.Interval = this.Interval; // 60 seconds
            timer.Elapsed += new System.Timers.ElapsedEventHandler(this.OnTimer);
            timer.Start();

            // Update the service state to Running.
            serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING;
            SetServiceStatus(this.ServiceHandle, ref serviceStatus);
        }
Exemplo n.º 12
0
        /// <summary>
        /// Перенести вагоны
        /// </summary>
        /// <returns></returns>
        public int Transfer()
        {
            if (!this.active)
            {
                LogRW.LogWarning(String.Format("Сервис переноса данных из КИС :{0} - отключен. (Settings:activeArrivalKIS).", this.className), this.eventID);
                return(0);
            }
            if (error_settings)
            {
                LogRW.LogWarning("Выполнение метода ArrivalKIS.Transfer() - отменено, ошибка нет данных Settings.", this.eventID);
                return(0);
            }
            KIS_Transfer kist = new KIS_Transfer();

            LogRW.LogInformation(String.Format("Сервис переноса данных из КИС в БД RailWay :{0} - запущен, режим копирования: {1}", this.className, this.mode), this.eventID);
            try
            {
                // Перенесем или обновим информацию о составах защедших на АМКР по системе КИС
                int result_cs = kist.CopyArrivalSostavToRailway(this.dayControllingAddNatur);
                int res_pc    = 0;
                switch (this.mode)
                {
                //case 0:
                //    // Полное копирование из КИС
                //    res_pc = kist.PutCarsToStations(0);
                //    break;
                case 1:
                    // Обновление данных скопированных из МТ с переносом из прибытия на станцию
                    res_pc = kist.PutCarsToStations(1);
                    break;

                default:
                    break;
                }
            }
            catch (Exception e)
            {
                LogRW.LogError(String.Format("[ArrivalKIS.Transfer]: Общая ошибка переноса данных из БД КИС (источник: {0}, № {1}, описание:  {2})", e.Source, e.HResult, e.Message), this.eventID);
            }
            return(0); // TODO: исправить возврат
        }
Exemplo n.º 13
0
        /// <summary>
        /// Перенос вагонов
        /// </summary>
        public int Transfer()
        {
            MT mettrans;

            if (error_settings)
            {
                LogRW.LogWarning("Выполнение метода ArrivalMT.Transfer() - отменено, ошибка нет данных Settings.", this.eventID);
                return(0);
            }
            LogRW.LogInformation(String.Format("Сервис переноса вагонов из МТ в БД Railway :{0} - запущен", this.className), this.eventID);
            try
            {
                SFTPClient csftp = new SFTPClient(connect_SFTP);
                csftp.fromPathsHost  = fromPathHost;
                csftp.FileFiltrHost  = FileFiltrHost;
                csftp.toDirPath      = toDirPath;
                csftp.toTMPDirPath   = toTMPDirPath;
                csftp.DeleteFileHost = DeleteFile;
                csftp.RewriteFile    = RewriteFile;
                csftp.CopyToDir();
            }
            catch (Exception e)
            {
                LogRW.LogError(String.Format("[ArrivalMT.Transfer]: Общая ошибка выполнения копирования из SFTP (источник: {0}, № {1}, описание:  {2})", e.Source, e.HResult, e.Message), this.eventID);
            }
            try
            {
                mettrans                     = new MT();
                mettrans.FromPath            = toTMPDirPath;
                mettrans.DeleteFile          = DeleteFile;
                mettrans.DayMonitoringTrains = dayMonitoringTrains;
                return(mettrans.Transfer());
            }
            catch (Exception e)
            {
                LogRW.LogError(String.Format("[ArrivalMT.Transfer]: Общая ошибка переноса xml-файлов в БД Railway (источник: {0}, № {1}, описание:  {2})", e.Source, e.HResult, e.Message), this.eventID);
            }
            return(0);
        }
Exemplo n.º 14
0
        /// <summary>
        /// Перенос информации о составах по внутреним станциям по отправке
        /// </summary>
        /// <param name="day_control_ins"></param>
        /// <returns></returns>
        public int CopyOutputSostavToRailway(int day_control_ins)
        {
            int errors  = 0;
            int normals = 0;
            // список новых составов в системе КИС
            List <NumVagStpr1OutStDoc> list_newsostav = new List <NumVagStpr1OutStDoc>();
            // список уже перенесенных в RailWay составов в системе КИС (с учетом периода контроля dayControllingAddNatur)
            List <NumVagStpr1OutStDoc> list_oldsostav = new List <NumVagStpr1OutStDoc>();
            // список уже перенесенных в RailWay составов (с учетом периода контроля dayControllingAddNatur)
            List <Oracle_OutputSostav> list_outputsostav = new List <Oracle_OutputSostav>();

            try
            {
                // Считаем дату последненго состава
                DateTime?lastDT = oos.GetLastDateTime();
                if (lastDT != null)
                {
                    // Данные есть получим новые
                    list_newsostav    = GetNumVagStpr1OutStDocIsRules(((DateTime)lastDT).AddSeconds(1), DateTime.Now, false).ToList();
                    list_oldsostav    = GetNumVagStpr1OutStDocIsRules(((DateTime)lastDT).AddDays(day_control_ins * -1), ((DateTime)lastDT).AddSeconds(1), false).ToList();
                    list_outputsostav = oos.GetOutputSostav(((DateTime)lastDT).AddDays(day_control_ins * -1), ((DateTime)lastDT).AddSeconds(1)).ToList();
                }
                else
                {
                    // Таблица пуста получим первый раз
                    list_newsostav = GetNumVagStpr1OutStDocIsRules(DateTime.Now.AddDays(day_control_ins * -1), DateTime.Now, false).ToList();
                }
                // Переносим информацию по новым составам
                if (list_newsostav.Count() > 0)
                {
                    foreach (NumVagStpr1OutStDoc inps in list_newsostav)
                    {
                        int res = SaveOutputSostav(inps, statusSting.Normal);
                        if (res > 0)
                        {
                            normals++;
                        }
                        if (res < 1)
                        {
                            errors++;
                        }
                    }
                    LogRW.LogWarning(String.Format("Определено для переноса новых составов из базы данных КИС в таблицу учета прибытия составов (копирование по отправке из внутренних станций): {0}, перенесено {1}, ошибок переноса {2}", list_newsostav.Count(), normals, errors), this.eventID);
                }
                // Обновим информацию по составам которые были перенесены
                if (list_oldsostav.Count() > 0 & list_outputsostav.Count() > 0)
                {
                    List <NumVagStpr1OutStDoc> list_os = new List <NumVagStpr1OutStDoc>();
                    list_os = list_oldsostav;
                    List <Oracle_OutputSostav> list_oos = new List <Oracle_OutputSostav>();
                    list_oos = list_outputsostav.Where(a => a.Status != (int)statusSting.Delete).ToList();
                    DelExistOutputSostav(ref list_os, ref list_oos);
                    int ins = InsertOutputSostav(list_os);
                    int del = DeleteOutputSostav(list_oos);
                    LogRW.LogWarning(String.Format("Определено для добавления {0}, добавлено {1}. Определено для удаления {2}, удалено {3}  в таблице учета прибытия составов (копирование по отправке из внутренних  станций)",
                                                   list_os.Count(), ins, list_oos.Count(), del), this.eventID);
                    normals += ins;
                }
            }
            catch (Exception e)
            {
                LogRW.LogError(String.Format("[KISTransfer.CopyOutputSostavToRailway]: Ошибка, источник: {0}, № {1}, описание:  {2}", e.Source, e.HResult, e.Message), this.eventID);
                return(-1);
            }

            return(normals);
        }
Exemplo n.º 15
0
 protected override void OnStop()
 {
     LogRW.LogWarning(String.Format("Сервис {0} - остановлен", this.ServiceName), this.eventID);
 }
Exemplo n.º 16
0
        /// <summary>
        /// Синхронизировать справочник вагонов (тип, владелец, аренда, страна владельца)
        /// </summary>
        /// <param name="day"></param>
        /// <returns></returns>
        public int SynchronizeWagons(int day)
        {
            List <KometaVagonSob> list_shange = kc.GetChangeVagonsSob(day).ToList();

            if (list_shange.Count() == 0)
            {
                return(0);
            }
            int updates  = 0;
            int errors   = 0;
            int skippeds = 0;

            foreach (KometaVagonSob kvs in list_shange)
            {
                int?   owner   = DefinitionIDOwner(kvs.SOB, null); // Определим id владельца (системы railCars)
                VAGONS wag_new = null;
                VAGONS wag     = rs_vag.GetVagons(kvs.N_VAGON, kvs.DATE_AR);
                if (wag == null)
                {
                    wag = rs_vag.GetNewVagons(kvs.N_VAGON, kvs.DATE_AR);
                    if (wag == null)
                    {
                        // создадим новую строку с этой арендой
                        wag_new = new VAGONS()
                        {
                            id_vag      = 0,
                            num         = kvs.N_VAGON,
                            id_ora      = null,
                            id_owner    = owner,
                            id_stat     = null,
                            is_locom    = null,
                            locom_seria = null,
                            rod         = kvs.ROD,
                            st_otpr     = "-",
                            date_ar     = kvs.DATE_AR,
                            date_end    = kvs.DATE_END,
                            date_in     = null,
                            IDSostav    = null,
                            Natur       = null,
                            Transit     = false,
                        };
                    }
                    else
                    {
                        // обновим аренду на вновь сосзданом
                        wag_new = new VAGONS()
                        {
                            id_vag      = wag.id_vag,
                            num         = wag.num,
                            id_ora      = wag.id_ora,
                            id_owner    = owner,
                            id_stat     = wag.id_stat,
                            is_locom    = wag.is_locom,
                            locom_seria = wag.locom_seria,
                            rod         = kvs.ROD,
                            st_otpr     = wag.st_otpr,
                            date_ar     = kvs.DATE_AR,
                            date_end    = kvs.DATE_END,
                            date_in     = wag.date_in,
                            IDSostav    = wag.IDSostav,
                            Natur       = wag.Natur,
                            Transit     = wag.Transit,
                        };
                    }
                }
                else
                {
                    if (wag.date_ar < kvs.DATE_AR | wag.id_owner != owner)
                    {
                        // создадим новую строку с этой арендой старую закроем
                        wag_new = new VAGONS()
                        {
                            id_vag      = 0,
                            num         = kvs.N_VAGON,
                            id_ora      = null,
                            id_owner    = owner,
                            id_stat     = null,
                            is_locom    = null,
                            locom_seria = null,
                            rod         = kvs.ROD,
                            st_otpr     = "-",
                            date_ar     = kvs.DATE_AR,
                            date_end    = kvs.DATE_END,
                            date_in     = null,
                            IDSostav    = null,
                            Natur       = null,
                            Transit     = false,
                        };
                        if (wag.date_end == null)
                        {
                            wag.date_end = kvs.DATE_AR.AddMinutes(-1);
                            rs_vag.SaveVAGONS(wag);
                        }
                    }
                    else
                    {
                        skippeds++;
                    }
                }
                if (wag_new != null)
                {
                    int res = rs_vag.SaveVAGONS(wag_new);
                    if (res > 0)
                    {
                        updates++;
                    }
                    if (res < 0)
                    {
                        errors++;
                    }
                }
            }
            LogRW.LogWarning(String.Format("Определено для синхронизации справочника RailWay: {0} строк, синхронизировано: {1}, пропущено: {2}, ошибок синхронизации: {3}.",
                                           list_shange.Count(), updates, skippeds, errors), eventID);
            return(updates);
        }