8.х ОБМЕН Обмен между базами

Тема в разделе "Обмен данными в "1С:Предприятие 8"", создана пользователем xxx949, 29 авг 2014.

  1. TopicStarter Overlay
    xxx949
    Offline

    xxx949 Опытный в 1С

    Регистрация:
    29 июл 2010
    Сообщения:
    302
    Симпатии:
    1
    Баллы:
    29
    Подскажите пожалуйста, как лучше сделать, в общем есть база УПП в ней есть справочник "Контрагенты", это основная база в ней все работают.

    Я создаю совершенно новую чистую базу, и из основной в неё копирую этот справочник "Контрагенты" справочники идентичны, т.е. конфигурация только с одним справочником, в последствии она будет дополняться.

    Так вот мне нужно, чтобы периодически из основной базы контрагенты попадали в новую базу, т.е. пока настроить обмен в одну сторону, из основной в новую.

    Спасибо.
  2. nbIpKuH_BaH9I
    Online

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.980
    Симпатии:
    398
    Баллы:
    104
    Автоматом чтоли?
    --- Объединение сообщений, 29 авг 2014 ---
    Ставьте регламентное задание, которое будет по правилам выгружать нужные вам данные. И все. Делов то. Пример надо?
  3. TopicStarter Overlay
    xxx949
    Offline

    xxx949 Опытный в 1С

    Регистрация:
    29 июл 2010
    Сообщения:
    302
    Симпатии:
    1
    Баллы:
    29
    да, хочется атоматом, я примерно представляю, действительно хочу через регламентные задания, и я так понимаю нужно создать объект ПланОбмена, я просто не разу еще такого не делал, хочется попробовать, возникла необходимость. Пример было бы здорого, огромное спасибо.
    --- Объединение сообщений, 29 авг 2014 ---
    попробовал по интернету поискать, но пока не могу найти хорошей инструкции по настройке обмена. :(
  4. nbIpKuH_BaH9I
    Online

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.980
    Симпатии:
    398
    Баллы:
    104
    Я опишу как в моей базе это происходит. Дальше уже все на ваше усмотрение. Создал обычные правила обмена. У меня есть справочник Внешние обработки и т.д. Там я храню все свои правила. Затем создал регл задание и в общем модуле просто прописал этот код.
    Код:
    Процедура ВыгрузкаПоступленийВБухгалтериюОбщепита()
    
        НачатьТранзакцию();
        ЗапросПравил = Новый Запрос;
        ЗапросПравил.Текст =
        "ВЫБРАТЬ
        |    НастройкаРаботыСистемы.Аналитика1 КАК ИмяИнформационнойБазы,
        |    НастройкаРаботыСистемы.Аналитика2 КАК ПравилаОбмена,
        |    НастройкаРаботыСистемы.Аналитика3 КАК Организация,
        |    НастройкаРаботыСистемы.Аналитика4 КАК ДатаНачала,
        |    НастройкаРаботыСистемы.Аналитика5 КАК ДатаОкончания
        |ИЗ
        |    РегистрСведений.НастройкаРаботыСистемы КАК НастройкаРаботыСистемы
        |ГДЕ
        |    НастройкаРаботыСистемы.НомерНастройки = 18
        |
        |СГРУППИРОВАТЬ ПО
        |    НастройкаРаботыСистемы.Аналитика1,
        |    НастройкаРаботыСистемы.Аналитика2,
        |    НастройкаРаботыСистемы.Аналитика3,
        |    НастройкаРаботыСистемы.Аналитика4,
        |    НастройкаРаботыСистемы.Аналитика5";
        РезультатЗапросаПравил = ЗапросПравил.Выполнить();
        Если НЕ РезультатЗапросаПравил.Пустой() Тогда
            ВыборкаЗапросаПравил = РезультатЗапросаПравил.Выбрать();
            Пока ВыборкаЗапросаПравил.Следующий() Цикл
                ЗапросДоступа = Новый Запрос;
                ЗапросДоступа.Текст =
                "ВЫБРАТЬ
                |    НастройкаРаботыСистемы.Аналитика1 КАК ИмяИнформационнойБазы,
                |    НастройкаРаботыСистемы.Аналитика2 КАК ИмяСервера,
                |    НастройкаРаботыСистемы.Аналитика3 КАК ИмяПользователя,
                |    НастройкаРаботыСистемы.Аналитика4 КАК Пароль
                |ИЗ
                |    РегистрСведений.НастройкаРаботыСистемы КАК НастройкаРаботыСистемы
                |ГДЕ
                |    НастройкаРаботыСистемы.НомерНастройки = 19
                |    И НастройкаРаботыСистемы.Аналитика1 = &ИмяИнформационнойБазы
                |
                |СГРУППИРОВАТЬ ПО
                |    НастройкаРаботыСистемы.Аналитика1,
                |    НастройкаРаботыСистемы.Аналитика2,
                |    НастройкаРаботыСистемы.Аналитика3,
                |    НастройкаРаботыСистемы.Аналитика4";
                ЗапросДоступа.УстановитьПараметр("ИмяИнформационнойБазы", ВыборкаЗапросаПравил.ИмяИнформационнойБазы);
                РезультатЗапросаДоступа = ЗапросДоступа.Выполнить();
                Если НЕ РезультатЗапросаДоступа.Пустой() Тогда
                    ВыборкаЗапросаДоступа = РезультатЗапросаДоступа.Выбрать();
                    Пока ВыборкаЗапросаДоступа.Следующий() Цикл
                        ПравилаОбмена  = ВыборкаЗапросаПравил.ПравилаОбмена;
                        ДвоичныеДанные = ПравилаОбмена.ХранилищеВнешнейОбработки.Получить();
                        ИмяФайла       = ОбщиеФункции.УдалитьЗапрещенныеСимволыИмени(ПравилаОбмена.Наименование);
                        ПолноеИмяФайла = КаталогВременныхФайлов() + ИмяФайла + ".xml";
                        Попытка
                            ДвоичныеДанные.Записать(ПолноеИмяФайла);
                        Исключение
                            #Если Клиент Тогда
                                Сообщить(ОписаниеОшибки());
                            #КонецЕсли
                        КонецПопытки;
                        мУниверсальнаяВыгрузкаДанных = Обработки.УниверсальныйОбменДаннымиXML.Создать();
                        мУниверсальнаяВыгрузкаДанных.ИмяФайлаПравилОбмена = ПолноеИмяФайла;
                        мУниверсальнаяВыгрузкаДанных.ЗагрузитьПравилаОбмена();
                       
                        // Получим дату начала
                        ДатаНачала = '00010101';
                        ПолучитьПериод(ВыборкаЗапросаПравил.ДатаНачала, ДатаНачала);
                        мУниверсальнаяВыгрузкаДанных.ДатаНачала    = ДатаНачала;
                        // Получим дату окончания
                        ДатаОкончания = '00010101';
                        ПолучитьПериод(ВыборкаЗапросаПравил.ДатаОкончания, ДатаОкончания);
                        мУниверсальнаяВыгрузкаДанных.ДатаОкончания = ДатаОкончания;
                       
                        #Если Клиент Тогда
                            ОбработкаПрерыванияПользователя();
                        #КонецЕсли
                       
                        ВременнаяТаблицаПравил = мУниверсальнаяВыгрузкаДанных.ТаблицаПравилВыгрузки.Скопировать();
                        // Устанавливается отбор по организации...
                        Для каждого ТекСтрока Из мУниверсальнаяВыгрузкаДанных.ТаблицаНастройкиПараметров Цикл
                            Если ТекСтрока.Имя = "Организация" Тогда
                                ТекСтрока.Значение = ВыборкаЗапросаПравил.Организация;
                            КонецЕсли;
                        КонецЦикла;
                        мУниверсальнаяВыгрузкаДанных.НепосредственноеЧтениеВИБПриемнике              = Истина;
                        мУниверсальнаяВыгрузкаДанных.ТипИнформационнойБазыДляПодключения             = Ложь;
                        мУниверсальнаяВыгрузкаДанных.ВерсияПлатформыИнформационнойБазыДляПодключения = "V82";
                        мУниверсальнаяВыгрузкаДанных.ПользовательИнформационнойБазыДляПодключения    = ВыборкаЗапросаДоступа.ИмяПользователя;
                        мУниверсальнаяВыгрузкаДанных.ПарольИнформационнойБазыДляПодключения          = ВыборкаЗапросаДоступа.Пароль;
                        мУниверсальнаяВыгрузкаДанных.ИмяИнформационнойБазыНаСервереДляПодключения    = ВыборкаЗапросаДоступа.ИмяИнформационнойБазы;
                        мУниверсальнаяВыгрузкаДанных.ИмяСервераИнформационнойБазыДляПодключения      = ВыборкаЗапросаДоступа.ИмяСервера;
                        мУниверсальнаяВыгрузкаДанных.ТаблицаПравилВыгрузки                           = ВременнаяТаблицаПравил.Скопировать();
                        мУниверсальнаяВыгрузкаДанных.ВыполнитьВыгрузку();
                       
                        // Удаление временного файла, чтобы не занимать место на диске
                        Попытка
                            УдалитьФайлы(ПолноеИмяФайла);
                        Исключение
                            #Если Клиент Тогда
                                Сообщить(ОписаниеОшибки());
                            #КонецЕсли
                        КонецПопытки;
                    КонецЦикла;
                Иначе
                    #Если Клиент Тогда
                        Сообщить("Администратор: необходимо заполнить НРС. Настройка №19. Настройки доступа к базе БО для выгрузки поступлений.");
                    #КонецЕсли
                    Возврат;
                КонецЕсли;
            КонецЦикла;
        Иначе
            #Если Клиент Тогда
                Сообщить("Администратор: необходимо заполнить НРС. Настройка №18. Указать актуальные правила обмена для выгрузки поступлений.");
            #КонецЕсли
        КонецЕсли;
        ЗафиксироватьТранзакцию();
    
    КонецПроцедуры
    
    --- Объединение сообщений, 29 авг 2014 ---
    Думаю, план обмена в Вашем, и в моем случае не нужен.
  5. TopicStarter Overlay
    xxx949
    Offline

    xxx949 Опытный в 1С

    Регистрация:
    29 июл 2010
    Сообщения:
    302
    Симпатии:
    1
    Баллы:
    29
    Спасибо, попробую поразбираться...
    --- Объединение сообщений, 29 авг 2014 ---
    А вообще странно и как-то все сложно, нет чтобы упростить жизнь, есть объект ПланыОбмена, там создаешь новый план, в нем галочками выбираешь нужные справочники, и выбираешь папку обмена, во второй конфигурации также создаешь план новый, выбираешь справочники, и указываешь эту же папку. Ну и еще у каждого справочника указываешь галочками принимать или отправлять. И все делов-то, система должна сама полностью данные справочника в виде xml выгрузить в папку, а другая конфигурация должна забрать из этой папки. Зачем так сложно придумали обмен :)
    Последнее редактирование: 29 авг 2014
  6. nbIpKuH_BaH9I
    Online

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.980
    Симпатии:
    398
    Баллы:
    104
    Ок. Вопрос. А если Вам вдруг потребуется, чтобы какой нибудь реквизит справочника менял свое значение в базе приемнике. Т.е. чтобы оно было отлично от базы источника. Что тогда делать будете?
  7. TopicStarter Overlay
    xxx949
    Offline

    xxx949 Опытный в 1С

    Регистрация:
    29 июл 2010
    Сообщения:
    302
    Симпатии:
    1
    Баллы:
    29
    это да, это я уже подумал. просто они сделали очень гибкую систему обмена, чтобы его использовать в разных сферах, с разными объектами и по разному, от того и схема усложняется, это действительно так.
  8. nbIpKuH_BaH9I
    Online

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.980
    Симпатии:
    398
    Баллы:
    104
    Ну вот тогда и все. По моему методу, вам остается лишь написать свои правила обмена. И все. И чуток мой код подпилить под себя. Задача реально на пару часов. + отладка.
  9. TopicStarter Overlay
    xxx949
    Offline

    xxx949 Опытный в 1С

    Регистрация:
    29 июл 2010
    Сообщения:
    302
    Симпатии:
    1
    Баллы:
    29
    ok, спасибо

Поделиться этой страницей