Оглавление
1 Механизмы и транспорт обмена данными существующие в 1С.
1.1 Механизмы обмена данными существующие в 1С:
1.2 Транспорт для обмена данными:
2 Примеры выбора транспорта обмена данным
2.1 Задача: обмен между 1С:ЗУП 2.5 и 1С БП КОРП 3.0
2.2 Задача: обмен между 1С:ERP 2.0 и 1С:Документооборотом КОРП
2.3 Задача: обмен между конфигурацией 1С и порталом на MS SharePoint
2.4 Задача: обмен между конфигурацией 1С и SAP
4.1 Вносим изменения в конфигурации Источника и Приёмника, если того требует задача
4.2. Загружаем в конфигурацию КД 2.1 структуры метаданных
4.3. Создаем правила выгрузки данных (ПВД)
4.4 Создаем Правила Конвертации Объектов (ПКО) и Правила Конвертации Свойств (ПКС).
4.6.1 Инициализация параметров в процедуре «Перед выгрузкой данных»
4.6.2 Заполнение параметров в процедуре «Перед выгрузкой объекта» на стороне Источника
4.6.3 Анализ параметров в Приемнике в процедуре «После загрузки данных»
5 Тестируем правила выгрузки данных
5.1 Тест выгрузки Ведомости по банку-участнику зарплатного проекта.
5.2 Тест выгрузки Ведомости по служебному банку «Другие банки»
1 Механизмы и транспорт обмена данными существующие в 1С.
1.1 Механизмы обмена данными существующие в 1С
1) РИБ - между идентичными конфигурациями, реализован на уровне платформы.
2) Универсальный механизм обмена между конфигурациями - основан на объекте платформы 1С 8.х именуемым «план обмена»; обмен данными осуществляется с помощью правил xml, которые создаются в специальной конфигурации — Конвертация данных (ред. 2.х и 3.х). С помощью данного механизма можно реализовать как одноразовый обмен, так и постоянный обмен между 1С конфигурациями. Механизм реализован на уровне конфигурации, встроить в свою конфигурацию можно из технологической конфигурации БСП.
1.2 Транспорт для обмена данными:
1) Локальный или сетевой каталог;
2) FTP-ресурс;
3) Почтовые сообщения или E-mail;
4) Прямое подключение (COM) — обмен осуществляется через прямое подключение одной базы к другой по средствам COM соединения;
Особенности и ограничения СОМ :
а) при различных версиях платформы Источника и Приемника COM подключение может давать ошибку, решение проблемы описывается в статье: //infostart.ru/public/393642/
б) долгое время на повторное COM подключение, решение проблемы тут: //infostart.ru/public/331683/
в) дружит COM только с ОС Windows.
5) Интернет (Web service)— транспортом является веб-служба. Одна информационная база подключается к веб-сервису, веб-сервис подключается к второй базе и транспортирует сообщение. Для осуществления такого транспорта необходимо иметь установленный веб-сервер (IIS или Apache).
2 Примеры выбора транспорта обмена данным
Транспорт для обмена данными не бывает «плохим или хорошим», «устаревшим или передовым». Бывает транспорт оптимально подобранный для решения задачи или не оптимально.
2.1 Задача: обмен между ЗУП 2.5 и БП КОРП 3.0
Оптимально будет использовать для транспорта данных прямое СОМ подключение к базе Приёмнику: в этом случае нам не придется вносить изменения в конфигурации Источника и Приемника, и нам не нужно беспокоиться за передачу файлов и их безопасность, т.к. данные будут выгружаться напрямую.
Последовательность действий тут такая: создаем правила обмена данными, настраиваем планы обмена для регистраций изменений данных в базах, включаем расписание выгрузки данных. Данные выгружать можно по расписанию или по желанию пользователя.
Более подробно о создании правил обмена данными с помощью конфигурации «1С:Ковертация данных» ред. 2.1 расскажу ниже.
2.2 Задача: обмен между ERP 2.0 и Документооборотом КОРП
Поскольку обе конфигурации 1С имеют внутри специально созданные Web-сервисы, оптимально будет их и использовать. Остается настроить так называемую бесшовную интеграцию между базами 1С, настройки которой посвящена публикация: //infostart.ru/public/541608/.
Важно понимать, что возможности Web-сервисов, заложенные в этих типовых конфигурациях, не безграничны, и что может появиться задача, которую будет быстрее / проще решить, используя COM или что-то еще.
2.3 Задача: обмен между конфигурацией 1С и порталом на MS SharePoint
Коробочная конфигурация на базе 1С, как правило, не содержит никаких специализированых средств интеграции с порталом на MS SP, поскольку порталы это штучная «костомная» вещь. Однако, платформа 1С поддерживает такие типы метаданных, как Web-сервисы и XDTO-пакеты. Мы можем создать в конфигураторе 1С Web-сервис задать для него URI пространства имен и пакет XDTO, добавить для Web-сервиса нужные операции и параметры операций, описать для каждой операции функции желательно с названиями на латинице в модуле Web-сервиса, которые будут доступны со стороны MS SP.
Рисунок 2.3.1 – Настройки Web-сервиса в конфигураторе 1С
Далее из конфигуратра 1С делаем публикацию на Web-сервере.
Администратор MS SharePoint создает интеграционный пакет, подключается к публикации на Web-сервере (как пользователь с полными правами, которого специально создали в конфигураторе 1С) и используя функции, которые создал программист в 1С в модуле Web-сервиса, получает необходимые данные.
Рисунок 2.3.2 – Пример ннтеграционного пакет в MS SharePoint
В примере на рисунке администратор MS SharePoint данные с web-сервера получает в формате XML через файл, хотя может читать данные напрямую в параметр. Конечно, лучше не в формате XML, а JSON, но не принципиально.
2.4 Задача: обмен между 1C и SAP
Когда в штате нет специалистов по SAP и/или когда мы имеем доступ к SAP только как пользователи, и требуется выгрузить консолидированные данные из 1С в SAP:
обмен данными реализуется через выгрузку/загрузку excel файла. Делал так: из SAP выгружал нужный набор данных в excel файл, смотрел его структуру и на стороне 1С имитировал заполнение файла аналогичной структуры. Более масштабный пример миграции данных из ЗУП 2.5 (УПП 1.3) в SAP HCM описан в этой статье: //infostart.ru/public/689794/
Если же в штате есть программист SAP: SAP поддерживает внешнее подключение - аналог хранимых процедур sql, который позволяет получать данные напрямую из Sap, без промежуточных выгрузок/загрузок в Excel. На ABAP в Sap пишется функция, а далее программисты 1с получают через нее необходимые данные и далее обрабатывают их в своих учетных системах. Спсб aspirator 23, который написал это в комментариях.
3 Постановка задачи
3.1 Постановка задачи
* Если текст тяжело воспринимать, то смотрите сразу пункт 3.2, там задание визуализировано.
1. Из программы ЗУП 2.5 (Источника) в БП КОРП 3.0 (Приемник) требуется выгружать выбранные пользователем документы типа «Зарплата к выплате организаций» (далее ЗкВО), которые должны быть проведены и со способом выплаты «Через банк».
2. Если в документе ЗкВО реквизит «Банк» заполнен служебным элементом «Другие банки», то в Приемнике создается столько же документов, сколько строк в табличной части одного документа ЗкВО в базе Источнике. Если в документе ЗкВО реквизит «Банк» заполнен любым другим конкретным значением, тогда один документ Источника выгружается в один документ Приемника. Другими словами, выгрузка должна идти по правилам "один в несколько документов" или "один в один документ" в зависимости от банка, заданного в документе ЗкВО в Источнике.
3. Для всех физ лиц из табличной части документа ЗкВО Источника требуется выгрузить лицевые счета в базу Приемник, но только если в документе ЗкВО реквизит «Банк» заполнен конкретным значением (не «Другие банки»).
4. В базе Приемнике требуется для выгруженных физ лиц из документа, которые в базе Источнике имеют строго один лицевой счет по указанной в документе организации, установить реквизит «Основной счет», но только в том случае, если базе Приемнике у физ лица в банковских счетах не более одного счета с тем же номером, который был перегружен из Источника (банк значения не играет).
Комментарий по 4 пункту задания: если в базе Приемнике у физ лица несколько счетов с одинаковым номером счета, но с разными банками (головной и филиалы в городе проживания физ лица), то обмен не должен менять флаг "Основной счет" - потому, что физ лицо имело действующий мастер счет ранее открытый в городе проживания в филиале банка, имеющий БИК который отличается от БИКа банка-участника зарплатного проекта.
Последовательность действий при выгрузки данных визуализирована на блок-схеме, Рисунок 3.2.1.
Рисунок 3.2.1 – Блок-схема выгрузки данных
Текст всех процедур содержится в правилах выгрузки данных, которые можно скачать внизу статьи.
4 Решение задачи с помощью создания правил обмена данными из ЗУП 2.5 в БП 3.0 в конфигурации «1С:Конвертация данных» ред. 2.1
4.1 Вносим изменения в конфигурации Источника и Приёмника, если того требует задача
Для реализации повторного поиска ранее выгруженных документов и для реализации пометки на удаления документов в базе Приемнике, для реализации выгрузки типа "один документ во много документов", в базе Приемнике нужно в документе "Ведомость в банк" в режиме конфигуратора создать два реквизита типа строка длиной 36 символов и назвать их: УИДДокументаЗУП и УИДСотрудникаТабЧастиДокументаЗУП.
4.2. Загружаем в конфигурацию КД 2.1 структуры метаданных
Загружаем в конфигурацию КД 2.1 структуры метаданных конфигураций Источника (ЗУП 2.5) и Приемника (БП КОРП 3.0). Подробно как это сделать читайте тут: //infostart.ru/public/690292/
В справочнике «Конвертации» создаем папку «ЗУП 2.5 -> БП КОРП 3.0», а в нее добавляем новый элемент:
При записи новой конвертации появится окно помощника создания правил. Откажитесь от автоматического создания правил! Перед вами откроется окошко с пустыми закладками, в которых мы будем создавать правила обмена.
4.3. Создаем правила выгрузки данных (ПВД)
Определим сколько Правил Выгрузки Данных (ПВД) нам нужно создать. Для этого ответим на один вопрос: какие данные нам может потребоваться фильтровать по ссылке при выгрузке данных? – Только документ «Зарплата к выплате организаций» (ЗкВО). Остальные данные (банковские счета, физ лица и пр.) будут тоже выгружаться, но ТОЛЬКО потому, что ссылки на них содержаться внутри документа «Зарплата к выплате организаций». Т.е. мы никак не должны руками фильтровать физ лица, они должны выгружаться поскольку содержаться в табличной части документа. ПВД – подтягивается в специальную таблицу обработки «Универсальный обмен данными». Обратите внимание, что в обработке можно задать фильтр на ссылку документа ЗкВО (или подчиненные ему реквизиты Ссылки).
4.4 Создаем Правила Конвертации Объектов (ПКО) и Правила Конвертации Свойств (ПКС).
На закладке ПКО нажмем кнопку Добавить
При попытке записать новое ПКО появится окно «Создать ПКС?», в котором нажимаем ДА.
Сразу после появится окно «Создать ПВД?» - нажимаем НЕТ.
В результате на зкладке ПКО будет созданы элементы:
Символ «Лупа» означает, что при загрузке документа поиск ранее выгруженного документа в Приемнике будет делаться по УИДу. Нам так не надо! У нас задача сделать выгрузку один ко многим или один в один. Поэтому кликаем дважды по ПКО «ВедомостьНаВыплатуЗарплатыВБанк», открываем закладку «Настройки», снимаем флаг «Искать объект приемника по внутреннему идентификатору» и ставим флаг «Автоматически генерировать номер и код».
Аналогично рассуждаем нужно ли искать по УИД справочники: у моего заказчика исторически ключевым полем поиска элементов всех справочников был «КОД». Это не очень хорошо, поскольку КОД пользователи могут менять в отличие от УИДа. Но ничего не поделаешь – если я оставлю настройку поиска по УИД, то это может привести к задвоению справочников в Приемнике. Заходим в ПКО справочников и снимаем флаг «Искать объект приемника по внутреннему идентификатору». Поскольку новые элементы справочников создаются в базе БП КОРП (Приемник) и эта база является главной по отношению в ЗУП (Источник), то для справочников ставим флажки «Не замещать существующие объекты в приемнике, а только создавать новые» и «Не создавать новый объект, если он НЕ найден». У вас может быть иная специфика. Справочники «Организации» и «Пользователи» содержат мало элементов (до 1000), поэтому поставим флаг «Использовать быстрый поиск объекта при выгрузке и загрузке».
Создадим ПКС для ПКО «ВедомостьНаВыплатуЗарплатыВБанк». Колонку «Источник» для всех ПКС очистим, а в колонке «Получать из входящий данных» поставим везде флажок – мы это делаем потому, что выгружать документ будем используя процедуру ВыгрузитьПоПравилу(, , ИсходящиеДанные, , " ВедомостьНаВыплатуЗарплатыВБанк "); , которую поместим в обработчик «Перед выгрузкой» ПВД (об этом подробнее ниже). Мы полностью берем на себя подготовку исходящих данных на стороне Источника, отказываясь от конструктора – только так мы сможем реализовать выгрузку «один во много» или «один в один» в зависимости от наполнения выгружаемого документа.
Добавляем ПКС для ПКО «ВедомостьНаВыплатуЗарплатыВБанк» исходя из условия задачи, и ставим флажки «Поиск» в строчках с ПКС «УИДДокументаЗУП», «УИДСотрудникаТабЧастиДокументаЗУП», «Организация». В результате должно получиться как показано на рисунке ниже.
Если у вас не получилась так, как показано на рисунке выше, то скачайте себе из этой статьи (в самом низу) уже сделанные правила обмена данными и подгрузите их в вашу конфигурацию «Конвертация данных» ред. 2.1.
Зайдем в ПКО «ВедомостьНаВыплатуЗарплатыВБанк» и напишем код в процедуре «После загрузке». Его смысл в том, что реквизит «Округление» в Приемнике одинаков для всех документов, поэтому проще заполнить его непосредственно на стороне Приемника после загрузки данных. Та же логика и для установки нового номера.
4.5 В ПВД реализуем две логики выгрузки данных документа в процедуре «Перед выгрузкой», используя процедуру ВыгрузитьПоПравилу(…)
В ПВД в процедуре «Перед выгрузкой» подготавливаем структуру «ИсходящиеДанные» и реализуем две логики выгрузки «один во много документов» и «один в один» в зависимости от содержания документа.
После заполнения структуры ИсходящиеДанные , вызываем процедуру
ВыгрузитьПоПравилу(, , ИсходящиеДанные, , "СозданиеВедомостейВБанк");
которая инициирует выгрузку экземпляра документа.
4.6 В глобальных обработчиках событий конвертации заполняем параметры, которые передаем из Источника в Приемник, используя процедуру ПередатьОдинПараметрВПриемник(…)
4.6.1 Инициализация параметров в процедуре «Перед выгрузкой данных»
Инициализация глобальных параметров, значения которых не нужно заполнять руками, реализуется только программно в процедуре «Перед выгрузкой данных», НЕ НУЖНО создавать их на закладке Параметры (как ошибочно пишут некоторые коллеги на форумах).
Пока просто создадим два параметра, зачем они нужны написано ниже.
//Инициализируем параметры, на закладке "Параметры" их создавать не нужно
Параметры.Вставить("СтрокаТаблицаКодовФизЛицИБанковСоСчетом", "");
Параметры.Вставить("СтрокаТаблицаУИДовВедомостиИФизЛиц", "");
4.6.2 Заполнение параметров в процедуре ПередВыгрузкой объекта на стороне Источника
Параметр «СтрокаТаблицаУИДовВедомостиИФизЛиц»
Для случая "один в несколько документов": если после выгрузки документа в базу Приёмник, из табличной части документа Источника удалить строку, то в базе Приёмника соответствующий ей документ должен пометиться на удаление. Для этой цели создан параметр обмена "СтрокаТаблицаУИДовВедомостиИФизЛиц" типа неограниченная строка, который заполняется в процедуре "Перед выгрузкой объекта", выгружается в файл, затем анализируется в процедуре "После загрузки данных" на стороне Приемника и по результатам анализа.
Основная хитрость заключается в наполнении Параметра «СтрокаТаблицаУИДовВедомостиИФизЛиц»: в этот параметр помещаются значения «УИДДокумента» и «УИДСотрудникаТабЧасти» так, чтобы после выгрузки на стороне Приемника можно было собрать из них таблицу значений.
Вызов процедуры:
ПередатьОдинПараметрВПриемник("СтрокаТаблицаУИДовВедомостиИФизЛиц", Параметры.СтрокаТаблицаУИДовВедомостиИФизЛиц);
приводит к записи параметра «СтрокаТаблицаУИДовВедомостиИФизЛиц» в XML файл .
* Я специально не использовал конструкцию «ЗначениеВСтрокуВнутр(<Значение>)» поскольку в СП написано, что ее можно использовать «для сохранения функциональной совместимости с 1С:Предприятием 7.7. Использовать для других целей не рекомендуется», на its.1c.ru так же написано, что «сериализацию ЗначениеВСтрокуВнутр следует использовать для хранения и передачи значений в рамках информационной базы 1С:Предприятия и не следует использовать для обмена с другими информационными базами и другими программными системами».
Параметр «СтрокаТаблицаКодовФизЛицИБанковСоСчетом»
При выгрузки ведомости требуется обновлять "Основной счет" у всех физ лиц в Приёмнике, которые содержаться в таб части документа. Лицевые счета по физ лицам, у которых в базе Источника несколько лицевых счетов в одной организации, не выгружаются в базу Приемник ( т.к. нельзя однозначно определить на какой из счетов перечислять зп). При загрузке данных в базу Приемник, для физ лиц не должен обновляется основной счет физ лица, если есть несколько банковских счетов с те же номером, который выгрузился из базы Источника. Для этой цели создан параметр обмена "СтрокаТаблицаКодовФизЛицИБанковСоСчетом" типа неограниченная строка.
4.6.3 Анализ параметров в Приемнике в процедуре ПослеЗагрузкиДанных
В процедуре «После загрузки данных» на стороне Приемника реализован анализ переданных из Источника параметров «СтрокаТаблицаУИДовВедомостиИФизЛиц» и «СтрокаТаблицаКодовФизЛицИБанковСоСчетом», их парсинг в таблицы значений, передача этих таблиц в качестве параметров в текст запросов, обход выборки которых позволяет:
1) установить основной счет физ лицам
2) пометить на удаление при необходимости требуемые документы на стороне Приемника.
5 Тестируем правила выгрузки данных
5.1 Тест выгрузки Ведомости по банку-участнику зарплатного проекта.
В базе Источнике ЗУП 2.5 в ведомости три физ лица, при чем у Иванова А.С. в регистре «Лицевые счета сотрудников» есть несколько записей.
Запускаем выгрузку данных, например, с помощью обработки «Универсальный обмен данными», подключаясь напрямую к базе Приемнику. Почитать, как пользоваться обработкой можно тут.
После выгрузки данных на экране появилось сообщение:
Начало выгрузки: 02.11.2017 19:54:31
В базе ЗУП у физ лица Иванов с кодом 0000028 в организации АО "Н" в базе ЗУП найдено несколько лицевых счетов, которые будут синхронизированны с базой БП КОРП, но невозможно установить какой из них Основной счет в базе БП КОРП.
Синхронизируем банковские счета физ лица: Иванов Александр Сергеевич
Синхронизируем банковские счета физ лица: Петров Иван Юрьевич
Синхронизируем банковские счета физ лица: Сидоров Денис Александрович
Окончание выгрузки: 02.11.2017 19:55:03
Выгружено объектов: 15
Открываем базу Приемник БП КОРП 3.0 и находим документ перегруженный документ «Ведомость на выплату зарплаты в банк», замечаем что номер документа в БП КОРП присвоился по правилам бухгалтерии, номер ведомости из ЗУПа указан в комментарии, в табличной части только одна запись со служебным обезличенным элементом «Все сотрудники».
Убедимся, что банковские счета в БП КОРП перегружены из ЗУПа (на сриншоте счетов в БП КОРП больше, чем в ЗУПе и это правильно, т.к. некоторые счета были созданы в БП КОРП раньше):
Проверим как у физ лиц заполнился реквизит «Основной счет» и не забудем, что при выгрузки данных было сообщение о невозможности установки Основного счета у физ лица Иванов, поскольку в ЗУПе у него было несколько лицевых счетов.
Замечаем, что основной счет установлен только у Сидорова. У Петрова основной счет не заполнился, поскольку в базе БП КОРП у него уже был создан банковский счет с таким же номером, но в другом банке, по условию задачи в этом случае мы не меняем основной счет.
Вернемся в базу Источник и изменим суммы в ранее выгруженном документе и удалим Иванова из табличной части, затем выгрузим документ повторно в базу Приемник и убедиться, что сумма документа изменилась.
Тест выгрузки Ведомости по банку-участнику зарплатного проекта завершен успешно.
5.2 Тест выгрузки Ведомости по служебному банку «Другие банки»
Создаем в базе Источнике ЗУП 2.5 в ведомости три физ лица с суммами как показано на рисунке:
Запускаем выгрузку данных, например, с помощью обработки «Универсальный обмен данными», подключаясь напрямую к базе Приемнику. Почитать, как пользоваться обработкой можно тут.
После выгрузки данных на экране появилось сообщение:
Начало выгрузки: 02.11.2017 20:54:48
Если в ведомости контрагент Другие банки , то синхронизация банковских счетов физ лиц не происходит.
Окончание выгрузки: 02.11.2017 20:55:16
Выгружено объектов: 7
Открываем базу Приемник БП КОРП 3.0 и находим три документа (по числу физ лиц в документе Источника) «Ведомость на выплату зарплаты в банк», замечаем что номера документов в БП КОРП присвоились по правилам бухгалтерии, номер ведомости из ЗУПа и ФИО физ лица указаны в комментарии, в табличной части только одна запись со служебным обезличенным элементом «Все сотрудники».
Поскольку для служебного банка «Другие банки» банковские счета не перегружаются, то проверять мы их не будем.
Теперь вернемся в базу ЗУП, изменим сумму Иванову с 500 на 600 рублей, а Сидорова удалим из табличной части. Выгрузим ведомость повторно в БП КОРП. Смотрим результат:
Сумма в документе с Ивановым изменилась на 600 рублей. А документ с Сидоровым помечен на удаление (пометка на удаление возможна только, если документ в БП КОРП не делал движений на момент повторной выгрузки).
Если пользователь первый раз выгрузил ведомость с банком «Другие банки», а потом понял, что он ошибся, изменил банк на «ВТБ» и выгрузил ведомость повторно, то все созданные при первой выгрузки документы в базе Приемнике будут помечены на удаление, и будет создан один документ.
Если пользователь первый раз выгрузил ведомость с банком «ВТБ», а потом понял, что он ошибся, изменил банк на «Другие банки» и выгрузил ведомость повторно, то созданный при первой выгрузки документ в базе Приемнике будет помечен на удаление, и будет создано столько документов, сколько физ лиц в документе Источника.
Описанный способ решения задачи не является единственным.
Практический пример создания правил выгрузки данных в КД 2.1 лицевые счета из ЗУП 2.5 в банковские счета БП КОРП 3.0 с описанием некоторых эффективных приемов: //infostart.ru/public/702086/
Буду рад узнать ваше мнение о статье в комментариях.
Вопросы, предложения сотрудничества и замечания пишите в комментариях, в личку или по адресу Panteleev@Inbox.ru
Резюме автора: //infostart.ru/job/resume/537490/
С пожеланием творческих успехов всем посетителям сайта ИС, Пантелеев Иван.