Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> План обмена и выгрузка/загрузка из XML          
boobzx Подменю пользователя
сообщение 19.04.13, 19:52
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

Добрый день! Прошу объяснить и рассказать, и не казнить. я начинающий 1с-ник.. Вот наконец-то и я дошел до темы, обмен между базами. Суть проблемы такая. Есть 2 базы(конфигурации). Написанные полностью с нуля. И сейчас моя задача это сделать выгрузку документов из одной базы в другую. В интернете примеров я не нашел которые подходят именно для меня. Но нашел одну интересную статью. Руководствуясь ней, у меня получилось выгрузить документ XML..Почти как надо.. только в место названий справочников товаров... выгрузились ихние ссылки "гуйды" или как их там:). Но это не суть и тут я пробую делать на копии своей же базы загрузку этой этого же XML файла на что в ответ получаю что файл не найден...ок.. делаем дальше..я переименовываю файл... файл находится но при чтении именно этого файла ругается на второй параметр... не найден получатель. Прошу подсказать почему не может найтись получатель??????? Дальше я в картинках опишу что именно делаю.

База1 - Филиал. Там я создаю план обмена. Потом захожу в отладчик и в плане обмена завожу два элемента: на скрине ниже:



А сам план обмена имеет имя ОбменСЦО (обмен с центральным офисом). Состав его, я определяю, как, все справочники и 1 документ, который нужно перенести (Авторегистрация у них везде стоит "разрешить"). Далее в этом плане обмене я перехожу на вкладку прочие. И там модуль объекта и ввожу такой код.

Перем РегистрацияВНовыйУзел Экспорт;

Процедура ПриЗаписи(Отказ)
    
    Если РегистрацияВНовыйУзел Тогда
        // Регистрация изменений всех данных для узла
        ПланыОбмена.ЗарегистрироватьИзменения(Ссылка);
    КонецЕсли;
    
КонецПроцедуры

Процедура ПередЗаписью(Отказ)
    
    РегистрацияВНовыйУзел = ЭтоНовый();
    
КонецПроцедуры


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

&НаКлиенте
Процедура ЗапуститьВыгрузкуXML(Команда)
    
    ОбработаемВыгрузкуНаСервере();
    
КонецПроцедуры


&НаСервере
Процедура ОбработаемВыгрузкуНаСервере()

    ВыборкаУзлов = ПланыОбмена.ОбменСЦО.Выбрать();
    Пока ВыборкаУзлов.Следующий() Цикл
        // Произвести обмен данными со всеми узлами, кроме текущего (ЭтотУзел) и кроме тех у
        //которых нет галочки быстрого отключения обмена
        Если ВыборкаУзлов.Ссылка <> ПланыОбмена.ОбменСЦО.ЭтотУзел() И ВыборкаУзлов.ВыполнятьОбмен = Истина Тогда
            УзелОбъекта = ВыборкаУзлов.ПолучитьОбъект();
            // Сформировать сообщение
            УзелОбъекта.ЗаписатьСообщениеСИзменениями();
        КонецЕсли;
    КонецЦикла;

КонецПроцедуры // ОбработаемВыгрузкуНаСервере();¶()


Далее переходим по процедуре, которая находится также в модуле объекта Плана обмена.
Цитата
УзелОбъекта.ЗаписатьСообщениеСИзменениями();


Процедура ЗаписатьСообщениеСИзменениями() Экспорт
    
    Сообщить("-------- Выгрузка в узел " + Строка(ЭтотОбъект) + " ---------");
    Каталог = КаталогВременныхФайлов();
     // Сформировать имя временного файла
    ИмяФайла = Каталог +?(Прав(Каталог, 1) = "\","", "\") + "Message"
                    + СокрЛП(ПланыОбмена.ОбменСЦО.ЭтотУзел().Код) + "_" +
                    СокрЛП(Ссылка.Код) + ".xml";
    // Создать объект записи XML
    // *** Запись XML-документов
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл(ИмяФайла);
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    // *** Инфраструктура сообщений
    ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
    ЗаписьСообщения.НачатьЗапись(ЗаписьXML, Ссылка);
    Сообщить("Номер сообщения: " + ЗаписьСообщения.НомерСообщения);
    // Получить выборку измененных данных
    // *** Механизм регистрации изменений
    ВыборкаИзменений =ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель,
                                            ЗаписьСообщения.НомерСообщения);
    Пока ВыборкаИзменений.Следующий() Цикл
        // Записать данные в сообщение
        // *** XML-сериализация
        ЗаписатьXML(ЗаписьXML, ВыборкаИзменений.Получить());
    КонецЦикла;
    ПланыОбмена.УдалитьРегистрациюИзменений(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения);
    ЗаписьСообщения.ЗакончитьЗапись();
    ЗаписьXML.Закрыть();
    Сообщить("-------- Конец выгрузки------------");
    
КонецПроцедуры


Все, после всех этих махинации, документ выгрузился.

Далее беру копию своей базы.. Называем ее ЦентральныйОфис. И делаю те же самые махинации Только Завожу другой План обмена - называется обмен с филиалами. Завожу в нем те же 2 элемента как на первой картинке... только элементы меняю местами. и в обработке завожу кнопку с кодом которая обращается как и в первом случае в модуль объекта плана обмена только на чтение XML файла:

Процедура ПрочитатьСообщениеСИзменениями() Экспорт
    Каталог = КаталогВременныхФайлов();
    // Сформировать имя файла
    ИмяФайла = Каталог +?(Прав(Каталог, 1) = "\", "", "\") + "Message"
                    + СокрЛП(Ссылка.Код) + "_" +
                    СокрЛП(ПланыОбмена.ОбменСЦО.ЭтотУзел().Код) + ".xml";
    Файл = Новый Файл(ИмяФайла);
    Если Не Файл.Существует() Тогда
        Возврат;
    КонецЕсли;
    // *** Чтение документов XML    
    // Попытаться открыть файл
    ЧтениеXML = Новый ЧтениеXML;
    Попытка
        ЧтениеXML.ОткрытьФайл(ИмяФайла);
    Исключение
        Сообщить("Невозможно открыть файл обмена данными.");
        Возврат;
    КонецПопытки;
    Сообщить("-------- Загрузка из " + Строка(ЭтотОбъект) + "------------");
    Сообщить(" - Считывается файл " + ИмяФайла);
    // Загрузить из найденного файла
    // *** Инфраструктура сообщений
    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
    // Читать заголовок сообщения обмена данными - файла XML
    ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
    // Сообщение предназначено не для этого узла
    Если ЧтениеСообщения.Отправитель <> Ссылка Тогда
        ВызватьИсключение "Неверный узел";
    КонецЕсли;
    // Удаляем регистрацию изменений
    // для узла отправителя сообщения
    // *** Служба регистрации изменений
    ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель,ЧтениеСообщения.НомерПринятого);
    // Читаем данные из сообщения
    // *** XML-сериализация
    Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл
        // Читаем очередное значение
        Данные = ПрочитатьXML(ЧтениеXML);    
        // Записать полученные данные
        Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель;
        Данные.ОбменДанными.Загрузка = Истина;
        Данные.Записать();
    КонецЦикла;
    ЧтениеСообщения.ЗакончитьЧтение();
    ЧтениеXML.Закрыть();
    УдалитьФайлы(ИмяФайла);
    Сообщить("-------- Конец загрузки------------");
КонецПроцедуры


И вот тут самое главное когда нажимаю считать файл то доходя до этого момент он не находи файл.
Каталог = КаталогВременныхФайлов();
    // Сформировать имя файла
    ИмяФайла = Каталог +?(Прав(Каталог, 1) = "\", "", "\") + "Message"
                    + СокрЛП(Ссылка.Код) + "_" +
                    СокрЛП(ПланыОбмена.ОбменСЦО.ЭтотУзел().Код) + ".xml";
    Файл = Новый Файл(ИмяФайла);
    Если Не Файл.Существует() Тогда
        Возврат;
    КонецЕсли;

Хочу спросить..ЧТО НЕ ТАК Я ДЕЛАЮ???? почему не находится файл.

Ладно... далее я его переименовывают и когда он доходит до этого момента
ЧтениеСообщения.НачатьЧтение(ЧтениеXML);


он пишет
Цитата
{ПланОбмена.ЦкнтральныйОфис.МодульОбъекта(76)}: Ошибка при вызове метода контекста (НачатьЧтение)
ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
по причине:
Неизвестный получатель


В общем куда копать даже не знаю.

Vofka Подменю пользователя
сообщение 19.04.13, 19:59
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4521 раз
Рейтинг: 3644.1

Коды у узлов обмена в разных базах совпадают?

boobzx Подменю пользователя
сообщение 19.04.13, 20:01
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Vofka @ 19.04.13, 19:59) *
Коды у узлов обмена в разных базах совпадают?


Ну в первой базе это выглядит как 0001 База магазина 0002 База офиса.... а во второй базе.... 0001 база офиса 0002 база магазина

Я в них очень мало понимаю... но такое ощущение что проблема именно в них

Vofka Подменю пользователя
сообщение 19.04.13, 20:09
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4521 раз
Рейтинг: 3644.1

Сделайте в обеих базах коды узлов одинаковые.

boobzx Подменю пользователя
сообщение 19.04.13, 20:37
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

Да. Только что сделал полную копию базы выгрузки... те документы которые я выгрузил я их удалил... и нажал на кнопку загрузить... таже самая ошибка.. и как то вообще странно при определении процедуры в момент останова... ничего нет.. так и должно быть? хрень какая-то даже при команде открыть файл(имяфайла) в отладчике пишет ошибку.. обращение к процедуре как к функции


Vofka Подменю пользователя
сообщение 19.04.13, 20:43
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4521 раз
Рейтинг: 3644.1

Вы во второй базе сделали 0001 база магазина, 0002 база офиса? Жмете там "загрузить"? Та же ошибка?

Спасибо сказали: boobzx,

boobzx Подменю пользователя
сообщение 19.04.13, 20:59
Сообщение #7

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

Все разобрался... эта такая путаница....мало того файл переименовать надо так и еще кое какие параметры в файле [необходимо зарегистрироваться для просмотра ссылки]
Теперь не могу понять как вообще назвать элементы в плане обмена.. Теперь у меня в базе магазина 2 элемента с кодом 0001База магазина и 0002 база ЦО

В в базе Цо 0001 База магазина 0002 База ЦО... Капец а мне надо их местами поменать я хочу что бы элементы в базе центрального офиса назывались на оборот. 0001 базаЦО 0002 База Магаза


Ну и тут же второй вопрос не отходя от темы это документ в котором содержится список товаров с ценой.. Соответственно он выгружаеся по гуиду.. можно ли как-то сделать так что бы он выгружался не по гуиду.. а по ШК например или по наименованию хотя бы?? Это уже XML сериализация?? Просто я предполагаю что надо (когда идет запись) обращаться через запрос в нужное место и забирать штрих код и уже напрямую в xml объявлять как текст.. и вставлять этот ШК

Vofka Подменю пользователя
сообщение 19.04.13, 21:10
Сообщение #8

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4521 раз
Рейтинг: 3644.1

Цитата(boobzx @ 19.04.13, 21:59) *
мне надо их местами поменать я хочу что бы элементы в базе центрального офиса назывались на оборот

Зачем? Ответ на этот вопрос мне хочется услышать, но забегая наперёд спешу вас огорчить, что вам прийдётся смириться с текущим положением дел.

Цитата(boobzx @ 19.04.13, 21:59) *
Ну и тут же второй вопрос не отходя от темы это документ в котором содержится список товаров с ценой.. Соответственно он выгружаеся по гуиду.. можно ли как-то сделать так что бы он выгружался не по гуиду.. а по ШК например или по наименованию хотя бы?? Это уже XML сериализация?? Просто я предполагаю что надо (когда идет запись) обращаться через запрос в нужное место и забирать штрих код и уже напрямую в xml объявлять как текст.. и вставлять этот ШК

Нафига все это?

Сообщение отредактировал Vofka - 19.04.13, 21:10

boobzx Подменю пользователя
сообщение 19.04.13, 21:39
Сообщение #9

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

Все. первый вопрос решил. Просто Базу офиса назвал код АА а базу магазинов Назвал ВВ СС ДД и т.д... Все просто. Зачем по ШК.... я подозреваю что в другой базе гуид у товара может быть совсем другой.... и соответственно товар не найдется... а вот ШК товара един во всех базах... быо бы надежнее передавать товар по ШтрихКоду. Но так как я ничего не знаю по XMl возможно он и найдет товар в другой базе..по гуиду.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 20.05.24, 23:49
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!