Прозрачная интеграция 1С8.2 с 1С7.7 (Внешние источники, OLE)

10.01.14

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Прозрачная интеграция 1С8.2 с 1С7.7 через внешние источники и OLE. Данные из 1С7.7 читаем посредством внешних источников, изменения данных передаем в 1С7.7 по OLE путем отправки xml.

Скачать файлы

Наименование Файл Версия Размер
Прозрачная интеграция 1С82 с 1С77.doc
.doc 1,36Mb
28
.doc 1,36Mb 28 Скачать

Данную методику интеграции 1С82 с 1С77 пришлось разрабатывать при плановом переходе с самописной конфигурации на 1С77 в конфигурацию 1С82 УПП. Т.к. предприятие не маленькое, есть удаленные филиалы, то скачкообразный переход не то что не возможен, но скажем так – довольно затруднительно. Так еще и в самописной конфигурации на 1С77 много вещей, которых просто нет в 1С82 УПП. Переводить предприятие решили отделами. В данной ситуации необходимо параллельно работать в двух учетных системах и работать не такой уж короткий срок. Необходимо было обеспечить методику однократного ввода информации, но так что бы данная информация в realtime отображалась в двух учетных системах (1С82 и 1С77). Можно было пойти простым путем, т.е. путем написания обработок по миграции данных, но это уже не realtime и лишние телодвижения либо со стороны пользователя, либо со стороны системных администраторов.
Всю задачу разбиваем на этапы:
1. Получение данных из 1С77 через внешние источники (см. публикацию //infostart.ru/public/170534/)
2. Возможность редактирования данных из 1С77 в среде 1С82
3. Подключение к 1С77 из 1с82 через OLE с сохранением подключения между вызовами сервера
4. Отправка измененных данных в 1С77 и их сохранение

 

Возможность редактирования данных из 1С77 в 1С82

Данную возможность буду рассматривать все так же на примере справочника «Клиенты». Что у нас получилось после подключения справочника «Клиенты» и создания формы списка (Рис. 1).

Рис. 1

 

Но есть особенность, если мы произведем выбор элемента (двойным щелчком или Enter), то форма элемента справочника не откроется, а мы войдем в режим редактирования (рис. 2).

Рис. 2

Для того что бы можно было открыть форму элемента необходимо немного изменить код из публикации //infostart.ru/public/170534/.

 

  • ОбщиеМодули.ОбщийМодульСправочники77
  • Ищем процедуру «ДобавитьДерево(пФорма, пСтруктураОтображенияДерева, пСтруктураДействий) Экспорт»
  • Ранее в цикле создания элементов для каждой колонки мы создавали элемент «ПолеВвода», а теперь нам надо «ПолеНадписи», что бы можно было перехватить процедуру «Выбор».
  • Поэтому меняем «НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;» на «НовыйЭлемент.Вид = ВидПоляФормы.ПолеНадписи;»

 

Следующий шаг – перехватить процедуру выбор у формы списка внешнего источника данных «Справочник_Клиенты». Открываем форму списка внешнего источника данных «Справочник_Клиенты» и меняем

 

СТАРУЮ ВЕРСИЮ

 

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

            СтруктураОтображенияДерева = Новый Структура;

            СтруктураОтображенияДерева.Вставить("ПутьКДанным","Дерево");

            СтруктураОтображенияДерева.Вставить("Отображение",ОтображениеТаблицы.ИерархическийСписок);

            СтруктураОтображенияДерева.Вставить("КартинкаСтрок",БиблиотекаКартинок.ГруппаИЭлемент);

            СтруктураОтображенияДерева.Вставить("ПутьКДаннымКартинкиСтроки","Дерево.ЭтоГруппа");

           

            СтруктураДействий = Новый Структура;

            СтруктураДействий.Вставить("ПриСменеТекущегоРодителя","ЭлементДеревоПриСменеТекущегоРодителя");

           

            ОбщийМодульСправочники77.ДобавитьДерево(ЭтаФорма, СтруктураОтображенияДерева, СтруктураДействий);

КонецПроцедуры

 

НА НОВУЮ

 

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

            СтруктураОтображенияДерева = Новый Структура;

            СтруктураОтображенияДерева.Вставить("ПутьКДанным","Дерево");

            СтруктураОтображенияДерева.Вставить("Отображение",ОтображениеТаблицы.ИерархическийСписок);

            СтруктураОтображенияДерева.Вставить("КартинкаСтрок",БиблиотекаКартинок.ГруппаИЭлемент);

            СтруктураОтображенияДерева.Вставить("ПутьКДаннымКартинкиСтроки","Дерево.ЭтоГруппа");

           

            СтруктураДействий = Новый Структура;

            СтруктураДействий.Вставить("ПриСменеТекущегоРодителя","ЭлементДеревоПриСменеТекущегоРодителя");

            СтруктураДействий.Вставить("Выбор","ЭлементДеревоВыбор");

           

            ОбщийМодульСправочники77.ДобавитьДерево(ЭтаФорма, СтруктураОтображенияДерева, СтруктураДействий);

КонецПроцедуры

 

Так же в код формы списка добавляем процедуру обработки выбора

 

&НаКлиенте

Процедура ЭлементДеревоВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

            Параметр = Новый Структура("Ключ", Элемент.ТекущиеДанные.Элемент);

            Форма = ПолучитьФорму("ВнешнийИсточникДанных.Торговля_77.Таблица.Справочник_Клиенты.ФормаОбъекта",Параметр);

            Форма.Открыть();

            СтандартнаяОбработка = Ложь;

КонецПроцедуры

 

После вышеприведенных манипуляций после выбора элемента в форме списка открывается автоматически сгенерированная форма для элемента внешнего источника «Справочники_Клиенты» (Рис. 3)

Рис. 3

У данной формы несколько недостатков. Отсутствует кнопка записи объекта и это объяснимо – это же форма элемента внешнего источника данных. Так же все реквизиты, как простых типов, так и ссылочных, закрыты для изменения. Будем конструировать форму сами. Создаем форму объекта, удаляем все автоматически сгенерированные реквизиты с формы и отключаем стандартную командную панель (Рис. 4).

Рис. 4

Для того что бы можно было редактировать данные элемента необходимо добавить реквизиты формы и связать их изменения с реквизитами объекта. Добавляем реквизиты формы. Для реквизитов ссылочного типа оставляем только кнопки выбора и очистки (Рис. 5).

Рис. 5

Но при открытии данной формы из списка элементов – данных нет. Поэтому добавляем для формы элемента процедуру «ПриСозданииНаСервере»:

 

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

            ЭтаФорма.РеквИНН = СокрЛП(Объект.ИНН);

            ЭтаФорма.РеквНаименование = СокрЛП(Объект.Наименование);

            Если Объект.Регион.ID <> "         " Тогда

                        ЭтаФорма.РеквРегион = Объект.Регион;

            КонецЕсли;

            Если Объект.ПочтРегион.ID <> "         " Тогда

                        ЭтаФорма.РеквПочтРегион = Объект.ПочтРегион;

            КонецЕсли;

            Если Объект.ЮрРегион.ID <> "         " Тогда

                        ЭтаФорма.РеквЮрРегион = Объект.ЮрРегион;

            КонецЕсли;

КонецПроцедуры

 

Что у нас получилось при открытии элемента (Рис. 6)

Рис. 6

Но теперь, если мы записывали данные, то заметили бы, что значения реквизитов объекта не равны значениям реквизитам формы. Поэтому для реквизитов формы простых типов мы добавляем процедуры «ПриИзменении», а для реквизитов формы ссылочных типов мы добавляем процедуры «ОбработкаВыбора».

 

&НаКлиенте

Процедура РеквИННПриИзменении(Элемент)

            Объект.ИНН = Элемент.ТекстРедактирования;

КонецПроцедуры

 

&НаКлиенте

Процедура РеквНаименованиеПриИзменении(Элемент)

            Объект.Наименование = Элемент.ТекстРедактирования;

КонецПроцедуры

 

&НаКлиенте

Процедура РеквРегионОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

            Объект.Регион = ВыбранноеЗначение;

КонецПроцедуры

 

&НаКлиенте

Процедура РеквЮрРегионОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

            Объект.ЮрРегион = ВыбранноеЗначение;

КонецПроцедуры

 

&НаКлиенте

Процедура РеквПочтРегионОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

            Объект.ПочтРегион = ВыбранноеЗначение;

КонецПроцедуры

 

Так же для реквизитов ссылочного типа необходимо добавить процедуры «Очистка»

 

&НаКлиенте

Процедура РеквРегионОчистка(Элемент, СтандартнаяОбработка)

            Объект.Регион = Неопределено;

КонецПроцедуры

 

&НаКлиенте

Процедура РеквЮрРегионОчистка(Элемент, СтандартнаяОбработка)

            Объект.ЮрРегион = Неопределено;

КонецПроцедуры

 

&НаКлиенте

Процедура РеквПочтРегионОчистка(Элемент, СтандартнаяОбработка)

            Объект.ПочтРегион = Неопределено;

КонецПроцедуры

 

Теперь форма элемента функционирует как надо. Открывается из списка элементов, отображает данные из 1С77 и позволяет их редактировать. Теперь осталось добавить команды записи. Но перед тем как добавлять команды записи, необходимо решить по какой технологии мы будем отправлять данные в 1С77. Я выбрал следующую схему. Работать с 1С77 мы будем через OLE, данные в 1С77 будем отправлять путем передачи xml-пакета OLE объекту, а OLE объект будет обрабатывать xml-данные внешней обработкой, которую положим в каталог базы данных 1С77.

Данная схема имеет следующие преимущества: распараллеливание работ по разработке между 1С8.2 и 1С7.7. Имея шаблон xml-данных параллельно можно дорабатывать 8.2 для отправки данных, а так же можно вести разработку в 1С7.7 по обработке полученных данных. Т.к. база 1С77 распределенная и имеется большое количество филиалов, то код в 1С77 по обработке полученных данных решено было вынести во внешнюю обработку, тем самым мы себя защитим от непредвиденных смен конфигураций при возникновении ошибок при обработке xml-пакета.

Но есть у данной схемы большой минус - состояние OLE объекта при вызовах серверных процедур не сохраняется. Поэтому предварительно нам необходимо научиться подключать 1С77 через OLE и сохранять данное подключение. Сохранять подключение будем во временном хранилище.

Подключение к 1С77 из 1с82 через OLE с сохранением подключения между вызовами сервера

 

Для подключения к 1С77 через OLE введем следующие параметры сеанса:

  • Connector1C77 (Уникальный идентификатор) – уникальный идентификатор коннектора к 77, нужен будет при помещении OLE объекта во временное хранилище
  • АдресConnector1C77 (Строка(0), переменная) – адрес OLE объекта во временном хранилище
  • Пользователь77 (Строка(0), переменная) – пользователь 1С77, под которым будет происходить авторизация
  • Пароль77 (Строка(0), переменная) – пароль пользователя 1С77
  • Путь77 (Строка(0), переменная) – путь к базе 1С77

 

 

Открываем модуль сеанса и добавляем следующую процедуру (заменяем звездочки на свои параметры J)

 

Процедура УстановкаПараметровСеанса()

               ПараметрыСеанса.Connector1C77 = Новый УникальныйИдентификатор();

               ПараметрыСеанса.АдресConnector1C77 = "";

               ПараметрыСеанса.Пользователь77 = "***";

               ПараметрыСеанса.Пароль77 = "***";

               ПараметрыСеанса.Путь77 = "\\***\***";

КонецПроцедуры

 

Далее добавляем новый общий модуль «ОбщийМодульОЛЕ77» с параметрами: Клиент(управляемое приложение), Сервер, Вызов сервера.

 

В данный модуль добавляем три функции:

  • Подключить77() – осуществляет подключение к 1С77 через OLE
  • ЕстьПодключение() – осуществляет проверку наличие подключения
  • ОтправитьДанные(пДанные) – отправляет xml-данные в 1С77

 

Код данных функций смотрим ниже

 

&НаСервере

Функция Подключить77() Экспорт

Если ЭтоАдресВременногоХранилища(ПараметрыСеанса.АдресConnector1C77) Тогда

                        БазаОле = ПолучитьИзВременногоХранилища(ПараметрыСеанса.АдресConnector1C77);

            КонецЕсли;

           

            Если БазаОле = Неопределено Тогда

                        БазаОле = Новый COMОбъект("V77s.Application");

                        СтрокаПодключения = "/D"""+ПараметрыСеанса.Путь77+""" /N"""+ПараметрыСеанса.Пользователь77+""" /P"""+ПараметрыСеанса.Пароль77+"""";

                        Connection = БазаОле.Initialize(БазаОле.RMTrade , СтрокаПодключения,"NO_SPLASH_SHOW");

                        Если Connection Тогда

                                   ПараметрыСеанса.АдресConnector1C77 = ПоместитьВоВременноеХранилище(БазаОле, ПараметрыСеанса.Connector1C77);

                        КонецЕсли;

            КонецЕсли;

КонецФункции

 

&НаСервере

Функция ЕстьПодключение() Экспорт

            Подключение = Ложь;

            Если ЭтоАдресВременногоХранилища(ПараметрыСеанса.АдресConnector1C77) Тогда

                        БазаОле = ПолучитьИзВременногоХранилища(ПараметрыСеанса.АдресConnector1C77);

            КонецЕсли;

           

            Если БазаОле <> Неопределено Тогда

                        Подключение = Истина;

            КонецЕсли;

           

            Возврат Подключение;

КонецФункции

 

&НаСервере

Функция ОтправитьДанные(пДанные) Экспорт

            Если ЕстьПодключение() = Ложь Тогда

                        Возврат Ложь;

            КонецЕсли;

           

            БазаОле = ПолучитьИзВременногоХранилища(ПараметрыСеанса.АдресConnector1C77);

            Путь = БазаОле.КаталогИБ()+"ExtForms\Connector1C82.ert";

            Результат = пДанные;

            БазаОле.ОткрытьФормуМодально("Отчет",Результат,Путь);

           

            Возврат Результат;

КонецФункции

 

 

Для того что бы данные нормально обрабатывались в 1С77 необходимо в каталог базы в ExtForms положить обработку «Connector1C82.ert». Об этой обработке поговорим чуть позже.

 

Отправка измененных данных в 1С77 и их сохранение

 

Отправлять данные будем путем формирования xml-пакета и передачи его OLE объекту 1С77.

 

Для этого идем в модуль формы объекта внешнего источника данных «Справочник_Клиенты» и добавляем следующую функцию

 

&НаСервере

Функция СформироватьХМЛ()

   ХМЛ = Новый ЗаписьXML;

   ХМЛ.УстановитьСтроку("UTF-8");

   ХМЛ.ЗаписатьОбъявлениеXML();

   ХМЛ.ЗаписатьНачалоЭлемента("ОТ_1С82");

               ХМЛ.ЗаписатьНачалоЭлемента("Справочники");

                          ХМЛ.ЗаписатьНачалоЭлемента("Клиенты");

                                      ХМЛ.ЗаписатьНачалоЭлемента("Элемент");

                                                  ХМЛ.ЗаписатьАтрибут("ID", Объект.ID);

                                                  Если СокрЛП(Объект.ИНН) <> "" Тогда

                                                              ХМЛ.ЗаписатьАтрибут("Код", СокрЛП(Объект.ИНН));

                                                  КонецЕсли;

                                                  Если СокрЛП(Объект.Наименование) <> "" Тогда

                                                              ХМЛ.ЗаписатьАтрибут("Наименование", СокрЛП(Объект.Наименование));

                                                  КонецЕсли;

                                                  Если СокрЛП(Объект.Регион.ID) <> "" Тогда

                                                              ХМЛ.ЗаписатьАтрибут("Регион", Объект.Регион.ID);

                                                  КонецЕсли;

                                                  Если СокрЛП(Объект.ЮрРегион.ID) <> "" Тогда

                                                              ХМЛ.ЗаписатьАтрибут("ЮрАдрес_Регион", Объект.ЮрРегион.ID);

                                                  КонецЕсли;

                                                  Если СокрЛП(Объект.ПочтРегион.ID) <> "" Тогда

                                                              ХМЛ.ЗаписатьАтрибут("ПочтАдр_Регион", Объект.ПочтРегион.ID);

                                                  КонецЕсли;

                                      ХМЛ.ЗаписатьКонецЭлемента();

                          ХМЛ.ЗаписатьКонецЭлемента();

               ХМЛ.ЗаписатьКонецЭлемента();

   ХМЛ.ЗаписатьКонецЭлемента();

   Результат = ХМЛ.Закрыть();

  

   Возврат Результат;

КонецФункции

 

Следующий шаг – добавить на форму элемента команды записи и подключения к 1С77.

 

Добавляем команды формы: «ЗаписатьЗакрыть», «ЗаписатьМоя», «Подключить77» (Рис. 7)

Рис. 7

Добавляем программный код выполнения команд:

 

&НаСервере

Функция ЗаписатьНаСервере()

   Результат = СформироватьХМЛ();

   Возврат ОбщийМодульОЛЕ77.ОтправитьДанные(Результат);

КонецФункции

 

&НаКлиенте

Процедура ЗаписатьЗакрыть(Команда)

   ЗаписатьНаСервере();

КонецПроцедуры

 

&НаКлиенте

Процедура ЗаписатьМоя(Команда)

   Результат = ЗаписатьНаСервере();

   Сообщить(Результат);

КонецПроцедуры

 

&НаСервере

Процедура Подключить77_НаСервере()

   Если (НЕ ОбщийМодульОЛЕ77.ЕстьПодключение()) Тогда

               ОбщийМодульОЛЕ77.Подключить77();

   КонецЕсли;

  

   Если ОбщийМодульОЛЕ77.ЕстьПодключение() Тогда

               ЭтаФорма.Элементы.Подключить77.Заголовок = "Есть подключение";

               ЭтаФорма.Элементы.ЗаписатьЗакрыть.Доступность = Истина;

               ЭтаФорма.Элементы.ЗаписатьМоя.Доступность = Истина;

   Иначе

               Сообщить("Не удалось подключиться к 1С77");

   КонецЕсли;

КонецПроцедуры

&НаКлиенте

Процедура Подключить77(Команда)

   Подключить77_НаСервере();

КонецПроцедуры

 А так же добавляем проверку наличия подключения при создании формы на сервере, что бы не вводить в заблуждение пользователя

 

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

   ЭтаФорма.РеквИНН = СокрЛП(Объект.ИНН);

   ЭтаФорма.РеквНаименование = СокрЛП(Объект.Наименование);

   Если Объект.Регион.ID <> "         " Тогда

               ЭтаФорма.РеквРегион = Объект.Регион;

   КонецЕсли;

   Если Объект.ПочтРегион.ID <> "         " Тогда

               ЭтаФорма.РеквПочтРегион = Объект.ПочтРегион;

   КонецЕсли;

   Если Объект.ЮрРегион.ID <> "         " Тогда

               ЭтаФорма.РеквЮрРегион = Объект.ЮрРегион;

   КонецЕсли;

  

   Если ОбщийМодульОЛЕ77.ЕстьПодключение() Тогда

               ЭтаФорма.Элементы.Подключить77.Заголовок = "Есть подключение";

   Иначе

               ЭтаФорма.Элементы.ЗаписатьЗакрыть.Доступность = Ложь;

               ЭтаФорма.Элементы.ЗаписатьМоя.Доступность = Ложь;

   КонецЕсли;

КонецПроцедуры

 

 

Теперь для проверки корректности работы всего механизма обмена мы создадим внешнюю обработку на 1С77. Напоминаю, что данную обработку необходимо положить в каталог базы 77 ExtForms, т.к. эту обработку мы открываем следующим кодом:

 

&НаСервере

Функция ОтправитьДанные(пДанные) Экспорт

            Если ЕстьПодключение() = Ложь Тогда

                        Возврат Ложь;

            КонецЕсли;

           

            БазаОле = ПолучитьИзВременногоХранилища(ПараметрыСеанса.АдресConnector1C77);

            Путь = БазаОле.КаталогИБ()+"ExtForms\Connector1C82.ert";

            Результат = пДанные;

            БазаОле.ОткрытьФормуМодально("Отчет",Результат,Путь);

           

            Возврат Результат;

КонецФункции

 

 Для начала она будет возвращать обратно тот же параметр, что и получит. Ниже код обработки.

 

Процедура ПриОткрытии()

   Если ПустоеЗначение(Форма.Параметр) = 0 Тогда

               ХМЛ = Форма.Параметр;

               Форма.Параметр = "";

               Форма.Параметр = ХМЛ;

               СтатусВозврата(0);

   КонецЕсли;

КонецПроцедуры

 

При подключении к 1С77 будет довольно длительная и неприятная задержка. Но затем обработка xml данных будет проводиться практически с той же длительностью, если бы вы работали напрямую в 1С77. (Рис. 8).

Рис. 8

Как мы видим, все прекрасно работает. Теперь доработаем обработку в 1С77 для записи изменений, переданных из 1с82 xml-пакетом. Т.к. конфигурация в 1С77 практически полностью переделана под функционал 1cpp.dll, то как же без нее… Разборку xml-пакета выполняем с помощью v7plus.dll. Код обработки 1С77 ниже. Переменная фХМЛ – многострочное окно текста на форме. Для удобства отладки.

 

Перем мМД;

 

Функция ОбъектПоИД(пИД, пВид)

   лЭлемент = мМД.ЗначениеИзСтрокиБД(пВид, пИД);

   Если ТипЗначенияСтр(лЭлемент) = "Справочник" Тогда

               лОбъект = СоздатьОбъект(пВид);

               лОбъект.НайтиЭлемент(лЭлемент);

   КонецЕсли;

  

   Возврат лОбъект.ТекущийЭлемент();

КонецФункции

 

Функция ОбработатьОТ_1С82СправочникКлиенты(пДанные)

   лВозврат = "Элемент записан...";

  

   Попытка

               лСпрКлиенты = СоздатьОбъект("Справочник.Клиенты");

              

               Для ТекСтр = 1 По пДанные.КоличествоПодчиненных() Цикл

                          ТекУзел = пДанные.ПолучитьПодчиненныйПоНомеру(ТекСтр);

                          лИД = ТекУзел.ПолучитьАтрибут("ID");

                          лКод = ТекУзел.ПолучитьАтрибут("Код");

                          лНаименование = ТекУзел.ПолучитьАтрибут("Наименование");

                          лРегион = ОбъектПоИД(ТекУзел.ПолучитьАтрибут("Регион"), "Справочник.Регионы");

                          лЮрРегион = ОбъектПоИД(ТекУзел.ПолучитьАтрибут("ЮрАдрес_Регион"), "Справочник.Регионы");

                          лПочтРегион = ОбъектПоИД(ТекУзел.ПолучитьАтрибут("ПочтАдр_Регион"), "Справочник.Регионы");

                         

                          лЭлемент = ОбъектПоИД(лИД, "Справочник.Клиенты");

                          лСпрКлиенты.НайтиЭлемент(лЭлемент);

                          лСпрКлиенты.Код = лКод;

                          лСпрКлиенты.Наименование = лНаименование;

                          лСпрКлиенты.СНАЗВ = лНаименование;

                          лСпрКлиенты.Регион = лРегион;

                          лСпрКлиенты.ЮрАдрес_Регион = лЮрРегион;

                          лСпрКлиенты.ПочтАдр_Регион = лПочтРегион;

                          лСпрКлиенты.Записать();

               КонецЦикла;

   Исключение

               лВозврат = ОписаниеОшибки();

   КонецПопытки;

  

   Возврат лВозврат;

КонецФункции

 

Функция ОбработатьОТ_1С82Справочники(пДанные)

   лВозврат = "";

   Для ТекСтр = 1 По пДанные.КоличествоПодчиненных() Цикл

               ТекУзел = пДанные.ПолучитьПодчиненныйПоНомеру(ТекСтр);

               Если ТекУзел.Наименование = "Клиенты" Тогда

                          лВозврат = ОбработатьОТ_1С82СправочникКлиенты(ТекУзел);

               КонецЕсли;

   КонецЦикла;

  

   Возврат лВозврат;

КонецФункции

 

Функция ОбработатьОТ_1С82(пДанные)

   лВозврат = "";

   Для ТекСтр = 1 По пДанные.КоличествоПодчиненных() Цикл

               ТекУзел = пДанные.ПолучитьПодчиненныйПоНомеру(ТекСтр);

               Если ТекУзел.Наименование = "Справочники" Тогда

                          лВозврат = ОбработатьОТ_1С82Справочники(ТекУзел);

               КонецЕсли;

   КонецЦикла;

  

   Возврат лВозврат;

КонецФункции

 

 

Функция Сформировать()

   лВозврат = "";

   Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы()+"v7plus.dll")<>1 Тогда

               Возврат("Error: Не удалось загрузить внешнюю компоненту v7plus.dll!");        

   КонецЕсли;

  

   ХМЛАнализатор                        =          СоздатьОбъект("AddIn.XMLParser");

   ВерсияАнализатора      =          ХМЛАнализатор.ВерсияАнализатора;

   Если ВерсияАнализатора <> "2.0" Тогда 

               Возврат("Error: ХМЛ Анализатор не той версии");

   КонецЕсли;

 

   ХМЛ_ДОМ         = ХМЛАнализатор.СоздатьДокумент();

   ХМЛ_ДОМ.Кодировка="UTF-8";

   ХМЛ_ДОМ.ЗагрузитьИзСтроки(фХМЛ);

   Источники = ХМЛ_ДОМ.ВыбратьУзлы("ОТ_1С82");

   Для ТекНом = 0 По Источники.КоличествоУзлов() - 1 Цикл

               ТекИсточник = Источники.ПолучитьУзел(ТекНом);

              

               Если ТекИсточник.Наименование = "ОТ_1С82" Тогда

                          лВозврат = ОбработатьОТ_1С82(ТекИсточник);

               КонецЕсли;

   КонецЦикла;

  

   Возврат лВозврат;

КонецФункции

 

Процедура ПриОткрытии()

   Если ПустоеЗначение(Форма.Параметр) = 0 Тогда

               фХМЛ = Форма.Параметр;

               лВозврат = Сформировать();

               Форма.Параметр = лВозврат;

               СтатусВозврата(0);

   КонецЕсли;

КонецПроцедуры

 

мМД = СоздатьОбъект("MetaDataWork");

 

 

Данной методикой можно не только корректировать данные 1с77, полученные через внешние источники, но и подписавшись на события документов и справочников 1с82 в режиме realtime работать в двух учетных системах. Пользователь даже не заметит этого.

См. также

SALE! 20%

Перенос данных из УПП 1.3 в ERP 2 / УТ 11 / КА 2. Переносятся документы, справочная информация и остатки

Обмен между базами 1C Платформа 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) в продаже с 2015 года, постоянно работаем над их развитием | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

45650 36520 руб.

04.08.2015    159669    363    267    

345

SALE! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 22572 руб.

12.06.2017    134921    722    291    

388

Перенос данных из Парус 8 в ЗГУ 3

Зарплата Внешние источники данных Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    22446    19    1    

22

SALE! 20%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

34650 27720 руб.

15.04.2019    68413    178    138    

111

SALE! 20%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Воспользовались более 79 предприятий! | Предлагаем приобрести готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | В продаже с 2020г. | Оперативно обновляем правила до актуальных релизов 1С | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

43450 34760 руб.

03.12.2020    34168    80    58    

78

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.87.x) и УТ 11.5 (11.5.16.x).

28000 25200 руб.

23.07.2020    46285    196    64    

158

SALE! 10%

Перенос данных из БП 3.0 в УТ 11 / КА 2 / ERP 2. Переносятся начальные остатки, документы и справочники

Обмен между базами 1C Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

В продаже с 2014г. | Воспользовались более 122 предприятий! | Перенос данных из БП 3.0 в УТ 11 | из БП 3.0 в КА 2 | из БП 3.0 в ERP | Сэкономьте свое время - используйте готовое решение для перехода! | Постоянно работаем над развитием переноса данных | Обновляем на новые релизы 1С | Есть фильтр выгрузки по организациям | Переносятся начальные остатки на выбранную дату, документы за период времени и вся возможная справочная информация | Перенос сделан на технологии КД 2 (правила конвертации данных)

50722 45650 руб.

31.10.2014    231389    124    327    

295

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9206    9    8    

10
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Rothschild 09.01.14 17:06 Сейчас в теме
А зачем через глюкастые "ВнешниеИсточникиДанных" ?
Почему не напрямую через ADO ???
***
Если ничего не изменилось, "ВнешниеИсточникиДанных" работают только через интерфейс ODBC.
А через ADO можно использовать и более современный OLEDB.
2. Rothschild 09.01.14 17:11 Сейчас в теме
(1)
плюс - за прямой доступ к базе 1С, хоть и 7.7
;)
3. Rothschild 09.01.14 17:14 Сейчас в теме
(0)
что за танк у тебя на фотке?
в "танчики" режешься в инете???
8. Nuuq 76 15.01.14 17:45 Сейчас в теме
(3) Rothschild, это не танк, а ПТ-САУ !!! ;)
4. sdf1979 194 09.01.14 17:17 Сейчас в теме
Внешние источники не "глюкастые", а даже очень ничего, а уж в 8.3 вообще отлично
5. Rothschild 09.01.14 17:56 Сейчас в теме
(4) ну дело вкуса...


а что там "отличного" появилось в 8.3 ???
1. через OLEDB "ВнешниеИсточникиДанных" заработали?
2. а операции записи ими поддерживаются??
6. Serj1C 483 10.01.14 07:00 Сейчас в теме
(5) Rothschild, Запись будет поддерживаться, говорили на партнерском семинаре
10. Rothschild 18.01.14 08:08 Сейчас в теме
(6) Serj1C, дай бог, дай бог - мжет тогда я их полюблю (если глючить не будут при этом)
:)
...
но почему ADO не устраивает?

как пить дать сами "ВнешниеИсточникиДанных"
работаю через ADO с внешними данными.

Зачем весь этот костыль городить???
11. Rothschild 18.01.14 08:14 Сейчас в теме
(10)
Лутше бы до логического конца систему компоновки данных довели:
Как известно у СКД есть,
так называемая коллекция "ИсточникиДанных" (непутать с "НаборамиДанных"!):

СхемаКомпоновкиДанных (DataCompositionSchema)
ИсточникиДанных (DataSources)

Использование:

Только чтение.
Описание:

Тип: ИсточникиДанныхСхемыКомпоновкиДанных.
Содержит источники, описанные в схеме.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Показать
12. Rothschild 18.01.14 08:17 Сейчас в теме
(11)
Явно задумана для реализации доступа к внешним данным
причем к самым разным, судя по документации:

ИсточникДанныхСхемыКомпоновкиДанных (DataCompositionSchemaDataSource)
Свойства:

Имя (Name)
СтрокаСоединения (ConnectionString)
ТипИсточникаДанных (DataSourceType)

13. Rothschild 18.01.14 08:27 Сейчас в теме
(12)
но благие намерения так и остались намерениями

ИсточникДанныхСхемыКомпоновкиДанных (DataCompositionSchemaDataSource)
ТипИсточникаДанных (DataSourceType)

Использование:

Чтение и запись.
Описание:

Тип: Строка.
Тип источника данных. Для текущей информационной базы - "Local".

единственный поддерживаемый в настоящее время
тип источников данных для СКД - "Local"
7. MRAK 723 15.01.14 09:02 Сейчас в теме
Плюсую, большая работа!
9. Fenicss 18.01.14 05:50 Сейчас в теме
А как со скоростью работы? Просто я сталкивался с проблемой долгой работы обмена данными через ОЛЕ?
14. sdf1979 194 20.01.14 10:28 Сейчас в теме
Я предполагаю, что внешние источники будут доведены до ума. Что то типа entity framework от майкрософта.
15. kos 46 21.03.17 05:36 Сейчас в теме
платформа 8.3.8.2088
при подключении к 1с77 для полей "Строка(Х), Х>100" выдает сообщение

ВнешнийИсточникДанных Поле XXX: Для строки фиксированной длины запрещено задавать длину строки более 100 символов

Что делать ?
Прикрепленные файлы:
16. sdf1979 194 23.03.17 09:49 Сейчас в теме
СУБД для 1с77 какая? Файловая или MS SQL? Какой тип поля на СУБД 1с77 SP1008?
Оставьте свое сообщение