Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 ноя 2024, 20:38

Настройка обмена 1С 8.2

Автор Шурик_1985, 29 мар 2012, 15:46

0 Пользователей и 1 гость просматривают эту тему.

Шурик_1985

Здравствуйте уважаемые программисты!

Ребят есть не большая проблема, никак не обойтись без Вашего совета!
Есть центральный офис, «Главный офис»
Есть филиал, там тоже офис " офис филиал", удалены территориально и нужно создать РИБ так, что бы в филиале видели свои остатки и документы. С этой задачей вроде справился.

Следующей задачей мне надо было сделать, такой план обмена, чтоб в филиал попадали только те документы относящиеся к "офис филиала", то есть сделать отбор по организации. С этой задачей тоже вроде справился 

Потом надо было сделать автообмен между базами.
Что бы заданной расписании, в соответствии с которым автоматически запускалась автообмен с некоторой периодичностью.
Еще есть одно но, проблема, на главной офисе стоит SQL сервер.

Как мне это реализовать?, тут понадобиться помощь Регламентные задания? или Батник нужно писать???
И еще очень хотелось бы узнать ваше мнение о моем коде.

Всем спасибо за внимание!


   //Отбор по "Организациям" между базами
Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза)
   МетаЭлемент = ЭлементДанных.Метаданные();
   
   Если Метаданные.Документы.Содержит(МетаЭлемент)
      И МетаЭлемент.Реквизиты.Найти("Организация")<> Неопределено
      И ЭлементДанных.Организация<>ЭтотОбъект.Организация  Тогда
         ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить;
      ИначеЕсли Метаданные.РегистрыНакопления.Содержит(МетаЭлемент) ИЛИ Метаданные.РегистрыБухгалтерии.Содержит(МетаЭлемент)
      И Метаданные.РегистрыСведений.Содержит(МетаЭлемент) Тогда
         
            Регистратор = ЭлементДанных.Отбор.Регистратор.Значение;
         Если Метаданные().Состав.Содержит(МетаЭлемент) Тогда
             Если Регистратор.Метаданные().Реквизиты.Найти("Организация")<>Неопределено
                 И Регистратор.Организация<> ЭтотОбъект.Организация Тогда
                  ЭлементДанных.Очистить();
              КонецЕсли;
            Иначе  ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;   
      КонецЕсли;             
   КонецЕсли;    
КонецПроцедуры


А тут пример загрузки и выгрузки
Процедура Выгрузка(НастройкаОбмена)
   
   НетОшибок = Истина;
   УзелОтправки = НастройкаОбмена.УзелИнформационнойБазы;
   ЭтотУзел = ПланыОбмена.РИБ.ЭтотУзел();
   
   ТекстЛога = Символы.ПС + "Начало выгрузки: "+ТекущаяДата();
   
   //выгружаем изменения
      ИмяФайлаXML = ПолучитьИмяВременногоФайла(".xml");   
      ЗаписьВXML = Новый ЗаписьXML;
   Попытка
      ЗаписьВXML.ОткрытьФайл(ИмяФайлаXML);
      //Сообщить(ОписаниеОшибки());
   Исключение
      ТекстЛога = ТекстЛога + Символы.ПС + "Не удалось создать XML файл: "+ОписаниеОшибки();
      НетОшибок = Ложь;
   КонецПопытки;   
   
   Если НетОшибок Тогда
      Попытка
         ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
         ЗаписьСообщения.НачатьЗапись(ЗаписьВXML, УзелОтправки);
         ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения);
         ЗаписьСообщения.ЗакончитьЗапись();
         ЗаписьВXML.Закрыть();
         
      Исключение
         ТекстЛога = ТекстЛога + Символы.ПС + "Не удалось выгрузить данные в файл XML: "+ОписаниеОшибки();
         НетОшибок = Ложь;
      КонецПопытки;
   КонецЕсли;   
   Если НетОшибок Тогда
      
      Попытка
      //архивируем файл
         ИмяФайлаZIP = ПолучитьИмяВременногоФайла(".zip");
         Архиватор = Новый ЗаписьZipФайла(ИмяФайлаZIP,, "Файл обмена данными");
         Архиватор.Добавить(ИмяФайлаXML);
         Архиватор.Записать();

         
      Исключение
         ТекстЛога = ТекстЛога + Символы.ПС + "Не удалось упаковать файл данных: "+ОписаниеОшибки();
         НетОшибок = Ложь;
      КонецПопытки;
   КонецЕсли;   
   
   Если НетОшибок  Тогда
      Попытка
         //отправляем по FTP
         ИмяФайлаFTP = СокрЛП(ЭтотУзел.Наименование)+"_"+СокрЛП(УзелОтправки.Наименование)+".zip";
         
         
         Сервер=Константы.РБД_Адрес_FTP_ресурса.Получить();
         Порт=21;
         ИмяПользователя=Константы.РБД_Имя_пользователя_FTP_ресурса.Получить();
         ПарольПользователя=Константы.РБД_Пароль_пользователя_FTP_ресурса.Получить();
         ФТП = Новый FTPСоединение(Сервер,Порт,ИмяПользователя,ПарольПользователя);
         ФТП.УстановитьТекущийКаталог(Константы.РБД_Папка_на_FTP_ресурсе.Получить());
         //Сообщить(ИмяФайлаZIP);
         ФТП.Записать(ИмяФайлаZIP, ИмяФайлаFTP);
      Исключение
         ТекстЛога = ТекстЛога + Символы.ПС + "Не удалось отправить файл на FTP: "+ОписаниеОшибки();
         НетОшибок = Ложь;
      КонецПопытки;
   КонецЕсли;      
   Попытка
      //удаляем временные файлы
      УдалитьФайлы(ИмяФайлаXML);
      УдалитьФайлы(ИмяФайлаZIP);
      Сообщить("Выгрузка информационной базы успешно завершена");
   Исключение
   КонецПопытки;   
   
   ТекстЛога = ТекстЛога + Символы.ПС + "Выгрузка закончилась: "+ТекущаяДата();
   Объект = НастройкаОбмена.ПолучитьОбъект();
   Объект.ДатаПоследнейВыгрузки = ТекущаяДата();
   Объект.РезультатПоследнейВыгрузки = НетОшибок;
   ТекстЛога = "" + Объект.ХранилищеЛог.Получить() + ТекстЛога;
   Объект.ХранилищеЛог = Новый ХранилищеЗначения(ТекстЛога, Новый СжатиеДанных(9));
   Объект.Записать();
   
   
КонецПроцедуры

Процедура Загрузка(НастройкаОбмена)
   НетОшибок = Истина;
   УзелОбмена = НастройкаОбмена.УзелИнформационнойБазы;
   ЭтотУзел = ПланыОбмена.РИБ.ЭтотУзел();
   
    ДатаПоследнегоФайлаОбмена = НастройкаОбмена.ДатаПоследнегоФайлаОбмена;
   
   ТекстЛога = Символы.ПС + "Начало загрузки: "+ТекущаяДата();
   
   Попытка
      //получаем с FTP
      ИмяФайлаZIP = ПолучитьИмяВременногоФайла(".zip");
      
      
      ИмяФайлаFTP = СокрЛП(УзелОбмена.Наименование)+"_"+СокрЛП(ЭтотУзел.Наименование)+".zip";

         
      Сервер=Константы.РБД_Адрес_FTP_ресурса.Получить();
      Порт=21;
      ИмяПользователя = Константы.РБД_Имя_пользователя_FTP_ресурса.Получить();
      ПарольПользователя = Константы.РБД_Пароль_пользователя_FTP_ресурса.Получить();
      FTP = Новый FTPСоединение(Сервер,Порт,ИмяПользователя,ПарольПользователя);
      FTP.УстановитьТекущийКаталог(Константы.РБД_Папка_на_FTP_ресурсе.Получить()); 
      МассивFTP = FTP.НайтиФайлы(ИмяФайлаFTP,);
      Если МассивFTP.Количество()= 0 Тогда
       Сообщить("На FTP не загружен файл обмена базы:" + УзелОбмена.Наименование);
          Возврат;  // на сервере есть не загруженный файл
      КонецЕсли;
      
      FTP.Получить(ИмяФайлаFTP, ИмяФайлаZIP);
      Исключение
         ТекстЛога = ТекстЛога + Символы.ПС + "Не удалось получить файл на FTP: "+ОписаниеОшибки();
         НетОшибок = Ложь;
      КонецПопытки;
   
   Если НетОшибок Тогда
      Попытка
         //разархивируем файл
         КаталогРазпаковки = КаталогВременныхФайлов();
         Архиватор = Новый ЧтениеZipФайла(ИмяФайлаZIP);
         Архиватор.Извлечь(Архиватор[0], КаталогРазпаковки);
         ИмяФайлаXML = КаталогРазпаковки + Архиватор[0].Имя
      Исключение
         ТекстЛога = ТекстЛога + Символы.ПС + "Не удалось разпаковать файл данных: "+ОписаниеОшибки();
         НетОшибок = Ложь;
      КонецПопытки;
   КонецЕсли;   
   
   //загружаем изменения
   Если НетОшибок Тогда
      Попытка
         
      
      ЧтениеXML = Новый ЧтениеXML;
      ЧтениеXML.ОткрытьФайл(ИмяФайлаXML);
      
      Исключение
         ТекстЛога = ТекстЛога + Символы.ПС + "Не удалось прочитать XML файл: "+ОписаниеОшибки();
         НетОшибок = Ложь;
      КонецПопытки;   
   КонецЕсли;   
   
   Если НетОшибок Тогда
      Попытка
         ЧтениеСообщения=ПланыОбмена.СоздатьЧтениеСообщения();
         ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
         ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения);
         ЧтениеСообщения.ЗакончитьЧтение();
         ЧтениеXML.Закрыть();
      Исключение
         
      КонецПопытки;
   КонецЕсли;   
      
   Если НетОшибок Тогда
      Попытка
         //получаем дату и время создания файла;
         Файл = Новый Файл(ИмяФайлаXML);
         ДатаПоследнегоФайлаОбмена = Файл.ПолучитьВремяИзменения();
      Исключение
      КонецПопытки;
   КонецЕсли;
   
   Если НетОшибок Тогда
      //если обмен прошел без ошибок тогда удалим файл с ФТП
      Попытка
         FTP.Удалить(ИмяФайлаFTP);      
      Исключение
      КонецПопытки;   
   КонецЕсли;
   
   Попытка
      //удаляем временные файлы
      УдалитьФайлы(ИмяФайлаXML);
      УдалитьФайлы(ИмяФайлаZIP);
      Сообщить("Загрузка информационной базы успешно завершена");
   Исключение
   КонецПопытки;   
   
   ТекстЛога = ТекстЛога + Символы.ПС + "Загрузка закончилась: "+ТекущаяДата();
   
   Объект = НастройкаОбмена.ПолучитьОбъект();
   Объект.ДатаПоследнегоФайлаОбмена = ДатаПоследнегоФайлаОбмена;
   Объект.ДатаПоследнейЗагрузки = ТекущаяДата();
   Объект.РезультатПоследнейЗагрузки = НетОшибок;
   ТекстЛога = "" + Объект.ХранилищеЛог.Получить() + ТекстЛога;
   Объект.ХранилищеЛог = Новый ХранилищеЗначения(ТекстЛога, Новый СжатиеДанных(9));
   Объект.Записать();
   
   
КонецПроцедуры



Ko$tello

Шурик, не мог бы по подробней объяснить куда прикрутить эти процедуры?
Мне поставили на 100% аналогичную ситуацию. Конфа у меня Комплексная автоматизация 1.1.
Я пытался решить стандартными средствами, пока получается не очень.

Настроил через Обмен данными с "1С: Комплексная автоматизация". Там имеется возможность отбора по организации. Все работает, все выгружается, ошибок не выдает. вот только данные переливаются как то криво. Вместо исключения всего что не касается выбранной организации почему то загружаются пустые строки. Скрин прилагаю. И так везде... В справочниках... В списках документов...

Хотел попробовать настроить через РИБ, но не нашел там возможность отбора по организации.


Подскажи вообще какой способ обмена явлется более предпочтительным в данной ситауции? Я не совсем четко представляю различия между Обмен данными с "1С: Комплексная автоматизация" и РИБ.

Заранее спасибо...


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск