Прозрачная интеграция 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С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Прозрачная интеграция 1С82 с 1С77.doc
.doc 1,36Mb
29
29 Скачать (1 SM) Купить за 1 850 руб.

Данную методику интеграции 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! 10%

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

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

55778 50200 руб.

04.08.2015    166797    334    278    

375

SALE! 10%

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

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.236.x) и БП 3.0 (3.0.164.x). Правила подходят для версии ПРОФ и КОРП.

35000 31500 руб.

15.12.2021    24198    171    51    

130

SALE! 15%

Перенос данных 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 руб.

12.06.2017    141875    798    297    

420

SALE! 10%

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

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

35000 31500 руб.

23.07.2020    51589    229    70    

187

SALE! 10%

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

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    171317    303    257    

378

SALE! 15%

Внешние источники данных Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

28500 руб.

15.11.2022    20912    20    49    

38

SALE! 10%

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

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

55778 50200 руб.

29.10.2018    56310    59    105    

61

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

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

15300 руб.

18.02.2016    187045    590    509    

527
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 206 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 724 15.01.14 09:02 Сейчас в теме
Плюсую, большая работа!
9. Fenicss 18.01.14 05:50 Сейчас в теме
А как со скоростью работы? Просто я сталкивался с проблемой долгой работы обмена данными через ОЛЕ?
14. sdf1979 206 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 206 23.03.17 09:49 Сейчас в теме
СУБД для 1с77 какая? Файловая или MS SQL? Какой тип поля на СУБД 1с77 SP1008?
Оставьте свое сообщение