gifts2017

Универсальный Обмен между базами с использованием Automation-сервера

Опубликовал Serg (nkp14108) в раздел Обмен - Перенос данных из 1C8 в 1C8

В организации появилась необходимость обмена между разными базами. При этом пользователь в онлайн режиме хочет отбирать, какие документы переносить ("принесли одну накладную в бухгалтерию и соответственно я хочу перенести только этот документ из УТ в свою БУХ"), а также видеть и одновременно открывать документ источника и приемника. Поискал обработки, думал, что нашел, но она оказалась слишком упрощенной и для конкретных конфигураций. Пришлось, взяв за основу визуальный интерфейс обработки, глобально её переделать.

Обработка создана для организации обмена между базами, используя Automation-сервер, с претензией на универсальность!!!

Пока это BETA-версия, которая проверялась на обмен БГУ-УТ11, БГУ-УП. Но по идее должна работать из любой конфы 8.2 и выше, неуправляемый интерфейс.

Правила работы с обработкой:

1.Теоретически запуск подключаемой конфигурации возможен начиная с платформы 8.1.

2. Обработка использует некоторые стандартные процедуры, функции и формы (в частности "ОбщаяФорма.ВыборОбъектовМетаданных" и др), но в минимальном количестве.

3. Сохранение и восстановление настроек производится с использованием "Справочники.СохраненныеНастройки" и соответственно доступны другим пользователям при предоставлении им такого права.

4. Таблицы настроек доступны пользователям с полными правами.

5. Имя пользователя удаленной базы и пароль хранятся только последние, введённые в соответствующие поля, и только для локального пользомателя.

6. Для записи соответствий используется  "РегистрыСведений.СоответствиеОбъектовДляОбмена".

7. Если хотите вести обмены с множеством баз, то необходимо в конфигураторе создать План обмена "РТК_Обмен"(не обязательно), но тогда запись в "РегистрыСведений.СоответствиеОбъектовДляОбмена" будет производиться раздельной записи(будет куча соответствий не известно к какой базе(узлу) относится). Страдает визуализация.

8. Если решили вести по плану  обмена "РТК_Обмен",  от можно создать множество узлов для подключения. Важно чтобы имя Узла совпадало с Путем подключения к соответствующей базе.

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

10. Загруженные документы всегда сохраняются в "РегистрыСведений.СоответствиеОбъектовДляОбмена" с узлом = неопределено, для того чтобы видеть все загруженные документы не важно из какой они базы, а хранение соответствий справочников и перечислений осуществляется с именем узла = путю подключения к базе (если ведётся по плану обмена "РТК_Обмен") или в одной куче с документами с именем узла = неопределено (если не ведётся по плану обмена "РТК_Обмен").

11. Просмотр и создание настроек соответствий объектов баз в разрезе узла (если ведётся по плану обмена "РТК_Обмен") можно увидеть установив на вкладке "Обслуживание" флаг "Cоздание  соответствий для конкретных объектов(перечислений,справочников) узела обмена".

12. Создание соответствий конкретных объектов баз производится в табличной части вкладки "Обслуживание":

Нажав "Добавить"("Скопировать"):

в поле "СобственнаяСсылка" выбераете сначала тип обекта приемника, а потом и конкретный объект базы приемника;

в поле "СсылкаВДругойИБ" выбераете сначала тип обекта источника, а потом и конкретный объект базы источника;

Так же можно заполнить соответствия "перечислений" двух баз автоматически нажав кнопку "АвтоНастройка соответствий перечислений" (заполнение производится по полному соответствию имен перечислений).

13. Создание соответствий типов объектов баз производится в табличной части "Параметры загрузки в приёмник (в эту базу)" вкладки "Настройка":

Поиск по настройке осуществляется в следующем порядке:

-значение по умолчанию;

-по соответствию ИД в "РегистрыСведений.СоответствиеОбъектовДляОбмена";

-по реквизитам из поля "1 вариант поиска";

-по реквизитам из поля "2 вариант поиска";

Нажав "Добавить"

в поле "Тип источника" выбераете сначала тип обекта источника;

в поле "Вид пиемника" выбераете сначала тип обекта приемника;

в поле "Значение по умолчанию" выбераете значение обекта приемника, если ничего не найдено и если не установлены флаги "Добавлять если не существует" и "Переписывать если существует";

флаг "Добавлять если не существует" устанавливается если хотите создать новый объект в базе приёмнике по данным реквизитов из базы источника;

флаг "Переписывать если существует" устанавливается если хотите переписывать найденный объект в базе приёмнике по данным реквизитов из базы источника;

флаг "Не искать по ИД" устанавливается если не хотите осуществлять поиск по соответствию ИД в "РегистрыСведений.СоответствиеОбъектовДляОбмена;

флаг "Всегда по умолчанию" устанавливается если хотите при любом поиске для данного типа источника устанавливалось значение из поля "Значение по умолчанию";

в поле "запрос" указывается текст запроса для выполнения перед заполнением объекта приемника. Результат можно использовать в алгоритме по имени "Результат".

в поле "алгоритм" указывается текст кода для выполнения перед записью объекта приемника. В алгоритме можно использовать вновь созданный объект по имени "Объект" и для отказа от записи "Отказ".

ПРИМЕР:

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

Нажав кнопку "Показать(скрыть) соответствия" отображается вторая таблица соответствия реквизитов обекта источика и приемника (активной строки таблицы "Параметры загрузки в приёмник (в эту базу)" )

в поле "Источник" можно указать:

имя реквизита объекта источника (например "Наименование"); 

имя реквизита табличной части объекта источника (например "Товары.Номенклатура"); 

пустое значение.

в поле "Приемник" (обязательно для заполнения) нужно указать:

имя реквизита объекта приёмника(например "Наименование"); 

имя реквизита табличной части объекта приёмника(например "Товары.Номенклатура"); 

в поле "Алгоритм" указывается текст кода для выполнения после записи реквизита из поля "Приемник". В алгоритме можно использовать для чтения и записи данные создаваемого объекта по имени "Объект" и если поле "Приемник" содержит имя реквизита табличной части объекта источника (например "Товары.Номенклатура"), то в алгоритме можно использовать для чтения и записи данные создаваемой строки, обращаясь по имени "СтрокаТаблицыПриемника". Также доступны данные для чтения объекта(ссылки) источника по имени "СсылкаУБ" и если поле "Источник" содержит имя реквизита табличной части объекта "Источника"(например "Товары.Номенклатура"), то в алгоритме можно использовать для чтения данные считываемой строки из табличной части источника, обращаясь по имени "СтрокаТЧ".

НО ДАННЫЕ ИСТОЧНИКА ЭТО "COM-объекты" И ПО ЭТОМУ ИХ ИСПОЛЬЗОВАНИЕ ТРЕБУЕТ БОЛЬШОГО ВНИМАНИЯ!!!

ТАКЖЕ ДЛЯ ПРОФИ ИМЯ "Коннект" ЭТО "COM-объект" ПОДКЛЮЧЁННОЙ БАЗЫ.

При использовании алгоритма обратите внимание когда он должен запуститься, для этого указывайте текст алгоритма в строке после заполнения которой он должен запуститься. Можно использовать в алгоритме при создании строки приёмника параметр "Отказ" с типом булево. Если указать "Отказ=истина;", то строка не запишется.

ПРИМЕР АЛГОРИТМА:

 СтруктураРеквизитов = Новый Структура;
 СтруктураРеквизитов.Вставить("ЕдиницаИзмерения","ЕдиницаИзмерения");
 СтруктураРеквизитов.Вставить("СтавкаНДС","СтавкаНДС");
 ПолучениеНСИ.ПолучитьЗначенияРеквизитовСправочника(СтрокаТаблицыПриемника.Номенклатура, СтруктураРеквизитов);
    СтрокаТаблицыПриемника.ЕдиницаИзмерения = СтруктураРеквизитов.ЕдиницаИзмерения;
 Если СтрокаТаблицыПриемника.КоличествоМест = 0 Тогда
   СтрокаТаблицыПриемника.КоличествоМест = 1;
 КонецЕсли; 
 Если СтрокаТаблицыПриемника.Коэффициент = 0 Тогда
  СтрокаТаблицыПриемника.Коэффициент = 1;
 КонецЕсли;
 
 ОбработкаТабличныхЧастей.РассчитатьВсегоТабЧасти(СтрокаТаблицыПриемника, Объект); //обращение к общей процедуре
    Объект.СуммаДокумента =Объект.СуммаДокумента + СтрокаТаблицыПриемника.всего;

Если СтрокаТаблицыПриемника.всего = 0 тогда отказ=Истина; КонецЕсли;

 

14. Для переноса документов используется вкладка "Документы".

ОБЯЗАТЕЛЬНО в таблице "Документы источника" должны быть добавлены имена объектов (документов) например "АктПриемкиНФА" (есть в БГУ).

Флаг определяет какие виды документов будут переноситься.

Период определяет интервал дат считываемых документов (по умолчанию весь период по текущую дату).

15. Для переноса элементов справочника используется вкладка "Справочники".

ОБЯЗАТЕЛЬНО в поле "Справочник" укажите данные какого справочника источника вы хотите перенести.

В нижней таблице указавается (если необходимо) отбор (только "Код" и "Наименование"), вид сравнения и значение(тип строка);

Данный раздел пока экспериментальный!!!

16. Если все настройки сделаны, то действия пользователя просты.

Кнопка "Подключить базу", далее находясь на нужной вкладке("Документы" или "Справочники") нажать кнопку "Прочитать данные" и на соответствующей вкладке появится список (в соответствии с отбором) предлагаемых к загрузке данных. Указываете ( устанавливая, снимая) флаг в Колонке "Переносить" и далее нажав кнопку "Перенос данных (согласно настройкам)" осуществляется перенос данных.

Возможен просмотр данных источника и приёмника из табличной части нажав "лупу".

Обработка в стадии развития, есть идеи. Также жду ваши замечания и предложения!!!

Обновленная версия практически отлажена на многих типовых конфигурациях. Важные условия работы обработки указаны выше(наличие РегистрыСведений.СоответствиеОбъектовДляОбмена, РегистрыСведений.СоответствиеОбъектовДляОбмена и т.д.)

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

Наименование Файл Версия Размер Кол. Скачив.
ПереносДокументовИзБазыВБазу82_версия_1.4.3.epf
.epf 117,49Kb
22.01.15
54
.epf 117,49Kb 54 Скачать
Скрипт активизации окна
.zip 14,04Kb
26.03.15
6
.zip 14,04Kb 6 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Павел (Yimaida) 04.06.14 01:10
В чем отличие от типового инструмента для обмена "Конвертации данных" (КД)?
Для тех, кто тоже искал и не нашел - попробуйте КД...
2. Serg (nkp14108) 04.06.14 09:12
(1) Yimaida, Практически небо и земля! Здесь вы работаете напрямую с другой базой, без промежуточных файлов выгрузок-загрузок. Открываете выгружаемый документ в другой базе (источнике, приемнике) просматриваете и сравниваете. Да есть схожие принципы построения обмена и не более.
3. mikhailovaew (mikhailovaew) 04.06.14 11:34
Обработка использует некоторые стандартные процедуры, функции и формы( в частности "ОбщаяФорма.ВыборОбъектовМетаданных" и др)

В типовом ЗУПе, например, такой формы нет. Лучше вынести весь типовой функционал непосредственно в обработку, в противном случае обмен получается не очень "универсальный".
4. Serg (nkp14108) 04.06.14 15:08
(3) mikhailovaew, жалко, придется со временем переделать. Это же из стандартных подсистем, получается ЗУП ущемлен. А регистр "СоответствиеОбъектовДляОбмена", и справочник "СохраненныеНастройки" хоть есть.
5. Павел (Yimaida) 04.06.14 16:34
(2) nkp14108, онлайн-обмен тоже позволяет напрямую подключаться к базе. Скажем так, при наличии уже существующих механизмов обмена, надо хотя бы выделить явные преимущества и отличия Вашей обработки (при условии что известны возможности той же КД). Написав статью, Вы же хотите поделиться опытом, помочь другим, но может получиться наоборот. Если есть похожие инструменты о которых известно, то как минимум о них надо обмолвится и хотя бы провести небольшое сравнение.
6. Андрей Тарлыков (Tarlich) 21.01.15 23:05
при открытии ругнулось
{ВнешняяОбработка.ПереносДокументовИзУТВБП20.МодульОбъекта}: Переменная не определена (СохранениеНастроек)
7. Андрей Тарлыков (Tarlich) 21.01.15 23:07
при запуске из розницы то же ругнулось но
{Форма.Форма.Форма(102)}: Поле объекта не обнаружено (ВалютаРегламентированногоУчета)
Если Не ЗначениеЗаполнено(Константы.ВалютаРегламентированногоУчета.Получить().ВерсияДанных) Тогда
8. Serg (nkp14108) 22.01.15 09:44
(7) Tarlich, Интереса никто особо не проявлял поэтому я не выкладывал более новые версии, обновил файл, можно скачать. Про "Розницу" не знаю нет конфы чтобы проверить. Мин. требования к конф. указаны выше по тексту.
9. Саўка Збянтэжаны (Збянтэжаны Саўка) 24.03.15 12:12
[0]
Процедура АктивироватьОкно(ЗаголовокОкна) Экспорт
	
	Попытка
		Файл = "c:\vbscripts\win_act.vbs";
		Shell = Новый ComObject("WScript.Shell");
		СтрокаЗапуска = """" + Файл + """ """ + ЗаголовокОкна + """";
		
		Shell.Run(СтрокаЗапуска);
	Исключение
	КонецПопытки;
	
КонецПроцедуры
...Показать Скрыть


а можно глянуть, что в файле win_act.vbs ?
10. Алексей Ермилов (Alex_E) 24.03.15 17:20
Пичалька - хотел посмотреть:

{Форма.Форма.Форма(748)}: Поле объекта не обнаружено (РТК_Обмен)
ПутьКУБ = Строка(ПланыОбмена.РТК_Обмен.ПолучитьФормуВыбора().ОткрытьМодально());

Вопрос, подключение только к серверной базе, хотел файловую открыть:

ВнешняяОбработка.ПереносДокументов.МодульОбъекта(37)}: Ошибка при вызове метода контекста (Connect): Произошла исключительная ситуация (1C:Enterprise 8.3.5.1517): Неверные или отсутствующие параметры соединения с информационной базой
Ошибка соединения

Модуль запаролен, даже не попробовать и не исправить....

P.S. Пробовал в БП 2.0
11. Serg (nkp14108) 26.03.15 10:38
(10) Alex_E, по первой проблеме читайте выше текст:
8. Если решили вести по плану обмена "РТК_Обмен", от можно создать множество узлов для подключения. Важно чтобы имя Узла совпадало с Путем подключения к соответствующей базе.

9. Все поля являются текстовыми и следовательно можно не использовать кнопки выбора, а набивать текст в ручную.
Набивайте путь вручную.
По второй, я работаю с 8.3, проблем нет. проверте настройки (пароль, логин, путь, № платформы).
12. Саўка Збянтэжаны (Збянтэжаны Саўка) 23.04.15 11:28
(0)(8) спасибо за скрипт и за обработку
мне понравилось - хорошее начало, развивайте ее дальше и может получиться, по-моему, очень и очень не плохой продукт.
13. Саўка Збянтэжаны (Збянтэжаны Саўка) 23.04.15 14:31
(0) что за реквизит "СоздаватьДажеЕслиЭлемент"?...
не понятен его смысл, не закончено имя: ЕслиЭлемент... что?...
тем более, что уже есть реквизиты:
ПереписыватьЕслиСуществует
ДобавлятьЕслиНеСуществует

что же имелось в виду: СоздаватьДажеЕслиЭлемент "существует"? - нет смысла.
Не могли бы Вы прояснить этот момент: каким же должно быть имя этого реквизита, чтобы понятно стало для чего он служит?
Спасибо.

14. Serg (nkp14108) 06.05.15 15:55
(13) Збянтэжаны Саўка,
Принцип переноса данных в обработке почти бесконечный вложенный перенос, т.е. переносим документ в нем ссыкка на справочник которого нет,то переносим(создаем). В справочнике ссылка на справочник которого нет,то переносим(создаем) и т.д. Так получилось, в строках документа есть партия(ссылка на документ) и без галочки СоздаватьДажеЕслиЭлемент, если его нет начинает его создавать. А в начале работы и чтобы не насоздавать кучу новых документов, которые забыли выставить соответствия, добавили это поле.
По развитию, постепенно появляется необходимость в управляемых формах, если и будет(время) то развивать будем на них.
15. Саўка Збянтэжаны (Збянтэжаны Саўка) 06.05.15 17:06
(14) nkp14108, спасибо
а новые изменения выкладывать не планируете?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа