1с как получить данные из другой 1с
Обмен данными между прикладными решениями 1С 8 — это то, без чего не возможно построение полноценного информационного пространства предприятия.
- Зачем нужны обмены данных и как их использовать?
- Виды обменов между 1С.
- Как произвести настройку обмена данными между базами 1С?
Ответы на эти вопросы Вы узнаете ниже.
Если Вас интересуют услуги по настройке обмена данными между 1С и не только, подробности на странице Услуги 1С программиста.
Зачем нужны обмены данных между 1С?
Причин для внедрения обменов, как правило, две:
Организация имеет филиальную сеть
В этом случае Вам просто необходимо настраивать обмен между различными филиалами. Для этого в системе 1С 8.3 предприятие существует механизм Распределенных информационных баз (РИБ). С помощью которого можно гибко настроить обмен информацией. Например, для филиалов можно отключить видимость документов по другим филиалам и в тоже время центральный офис будет видеть документы всех филиалов. Другой пример — настройка обмена между базами 1С Розница офиса и магазинов.
Разделение по видам учета
Как правило, это означает, что в организации разный учет ведется в различных информационных базах. Такое разделение позволяет фильтровать «ненужную» для другого вида учета информацию для различных информационных баз. Пример: т.н. «управленческий учет» введется в базе «Управление торговлей», где отражаются все операции, и руководство видит полную картину событий, а в базу регламентированного учета «Бухгалтерия предприятия» выгружаются лишь нужные для ведения бухгалтерского и налогового учета документы.
Какие бывают механизмы обмена между базами 1С?
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Обмены данных можно классифицировать по двум направлениям: используемые механизмы и используемый транспорт для обмена.
Механизмы обмена данными 1С
Как правило, при обмене используется два механизма:
- Распределенная информационная база (РИБ) — механизм, позволяющий настроить обмен данными между филиалами. Механизм подразумевает, что обмениваются абсолютно идентичные конфигурации БД. Механизм умеет передавать изменения конфигурации баз данных. Механизм реализован на уровне технологической платформы.
- Универсальный механизм обмена между конфигурациями — механизм является разработкой фирмы 1С для прикладных решения. Он универсален и основан на планах обмена. Обмен данными осуществляется с помощью правил xml, которые создаются в специальной конфигурации — Конвертация данных. С помощью данного механизма можно реализовать как одноразовый обмен, так и постоянный обмен между 1С конфигурациями. Механизм реализован на уровне конфигурации, встроить в свою конфигурацию можно из технологической конфигурации БСП.
Транспорт для обмена данными
Транспортом может выступать достаточно широкий спектр технологий. Рассмотрим основные, реализованные в универсальном механизме обмена 1С:
Как настроить обмен данными между базами 1С?
Рассмотрим настройку 1С для обмена данными между типовыми конфигурациями 1С — Бухгалтерия и Управление торговлей.
Первым делом необходимо создать узлы информационных баз:
Синхронизация происходит по коду, пиктограмма с кругом — обозначение текущей информационной базы. Т.е. настраивая обмен в бухгалтерии — присваиваем текущему узлу код «БП», настраивая обмен в торговле — код «УТ».
Следующий шаг — создание справочника «Настройки обмена данных»:
Если обмен настраивается через каталог, электронную почту или FTP, настройки необходимо настраивать в двух базах данных.
Если обмен происходит прямым подключением или через веб-сервис, достаточно настройки с одной стороны (важно не забыть указать правила загрузки в базу обмена).
Тут важно обратить внимание на следующие моменты:
Всё, настройка закончена. Теперь для запуска обмена достаточно лишь нажать на кнопку выполнения обмена.
Азы настройки обмена данными в 1С с помощью конфигурации «1С Конвертации данных» на примере смотрите в видео:
Обмен данными 1С по расписанию в 1С
Если необходимо настроить автоматическую выгрузку по расписанию, достаточно настроить регламентные задания.
Для клиент-серверного варианта
В справочнике «Настройки обмена данными», на вкладке «Автоматический обмен» необходимо создать новое регламентное задание, где указать расписание:
Для файлового варианта
В справочнике «Настройки обмена данными», на вкладке «Автоматический обмен» необходимо создать новое регламентное задание, где на вкладке «Обмен по событиям» указать события, по котором будет выполняться запуск обмена. Например, при старте определенного пользователя:
Статьи для программиста по обмену данными в 1С
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
Одним из способов перенести данные из одной конфигурации 1С в другую является программное подключение с помощью COM. Многие компании используют несколько различных баз, между которыми должны быть определенные связи и зависимости. Если необходимо не только перенести данные, но и выполнить определенную обработку данных, то COM соединение будет оптимальным механизмом. Умение анализировать данные из другой базы 1С пригодиться любому разработчику.
Подключаемся через COM к базе 1С
Помните, что на время COM соединения к базе тратиться лицензия – не стоит увлекаться одновременным выполнением нескольких подключений. Особенно это важно для организаций, у которых количество лицензий ограничено. Решиться этот вопрос может при помощи регламентных заданий, выполняющихся во время отсутствия активных подключений пользователей к информационной базе.
Чтобы иметь возможность подключиться к другой базе и запросить нужную информацию вы должны знать следующие данные:
- Какого она типа – файловая или клиент-серверная;
- Где она располагается;
- Под каким именем и паролем в нее можно зайти;
- Какие данные вас интересуют.
Из первых трех пунктов для реализации COM соединения необходимо сформировать строку параметров. В зависимости от типа ИБ она будет отличаться внешним видом. Используя полученную строку, происходит подключение, с помощью которого можно собирать для анализа и обработки данные из другой базы любыми методами.
Функция подключения проста и не должна вызвать вопросов, если все параметры указаны верно. Для ускорения отладки и анализа возможных ошибок лучше заключить подключение в конструкцию «Попытка». Возвращать функция будет значение типа «COM объект», с которым и предстоит работать, получая нужные данные.
Через COM соединение вы можете не только выбирать данные, но и добавлять их в базу, к которой подключаетесь. Помните, что передавать через COM объект мы можем 4 примитивных типа данных. Другие типы придется задавать с помощью встроенных в платформу функций поиска. Учтите, что глобальные функции платформы вызываются тоже через COM-соединение.
Получаем данные из базы 1С
После того как получили нужный объект, необходимо прочитать данные из другой базы. Для этого мы применяем запрос через COM соединение в 1С 8.3 с помощью полученного значения типа «COM объект» из функции. Важно сначала подключиться к базе, а затем уже выполнять запрос. Выполнение происходит через метод NewObject с указанием в качестве параметра типа объекта в строковом виде – «Запрос».
К примеру, чтобы получить информацию о пользователях определенного подразделения, зададим условие в запрос через параметры. Один параметр будет простого типа – строка, а подразделение – ссылкой элемента справочника «Структура предприятия». Результат запроса является таблицей с перечисленными полями того типа, какого они существуют в базе, к которой произошло COM соединение. Если необходимо их преобразовать в другие типы – воспользуйтесь стандартными функциями платформы:
Если нужно передать в базу массив для отбора по нескольким параметрам, например, подразделениям, тоже используется команда NewObject. Аналогично можно передавать список или таблицу значений, заполняя их элементами другой базы через соединение. Для поиска вам доступны все существующие методы объектов и механизмов платформы.
При переносе документов или элементов справочников всегда возникает вопрос о контроле переноса определенного объекта. С помощью COM соединений можно решить подобные проблемы через уникальный идентификатор. Нужно найти объект в подключаемой базе по идентификатору из текущей ИБ с помощью функции «ПолучитьСсылку», используя идентификатор в виде строки. Если такового не нашлось, вы можете создать его с помощью COM соединения.
Также COM соединение имеет право использовать процедуры и функции из общих модулей 1С с включенным свойством «Внешнее соединение». Кроме этого условия, вызываемая функция или процедура должна быть экспортная и не включать интерактивные действия, выполняемые на сервере. В противоположном случае вы увидите ошибку о недопустимости операции.
Рис.1 Внешнее соединение
Возможности внешнего соединения с другой базой в 1С достаточно обширны и могут позволить выполнить множество задач. Важно уметь правильно оценить инструментарий и выбрать оптимальное решение. В большинстве случаев это умение появляется лишь с опытом или при изучении примеров работ опытных специалистов, поэтому при возникновении потребности в таком подключении мы рекомендуем воспользоваться услугами по обслуживанию и техподдержке 1С.
Механизм сопоставления данных при обмене через универсальный формат
Механизм сопоставления данных предназначен для решения задачи синхронизации данных между базой источника и базой приемника при обмене
Внутренние идентификаторы объектов
В идеальном случае данные синхронизируемых приложений могли бы сопоставляться по уникальным внутренним идентификаторам объектов (GUID). Но для этого необходимо, чтобы добавление данных, подлежащих синхронизации, осуществлялся только в одном приложении, а в другом эти данные появлялись исключительно в результате синхронизации. В этом случае GUID в двух приложениях у одинаковых объектов будут одинаковыми, и по ним можно будет однозначно сопоставить объекты.
На практике соблюдать данное требование не всегда возможно, особенно в случае настройки синхронизации между приложениями, работа в которых велась независимо. Это связано с тем, что у двух одинаковых объектов, созданных параллельно в каждом приложении, будет два разных GUID.
В некоторых случаях данные не могут быть сопоставлены по GUID по причине его отсутствия (особые случаи, которые не рассматриваются в данной статье).
Публичные идентификаторы объектов
Для успешного сопоставления объектов с разными GUID должно быть место для хранения информация об их соответствии. Таким местом является регистр сведений Публичные идентификаторы синхронизируемых объектов (далее РПИ).
Рис. 1 Регистр сведений Публичные идентификаторы синхронизируемых объектов
Структура регистра представлена в таблице:
Для сопоставления данных двух программ предназначена в БСП 2.3 обработка “Сопоставление объектов информационных баз” для непосредственного использования при синхронизации данных
Рис 2. Основная форма обработки “Сопоставление объектов информационных баз”
Список открывается по команде Выполнить сопоставление на странице Сопоставление данных Помощника интерактивной синхронизации данных. Также можно дважды щелкнуть мышью по строке, в которой обнаружены проблемы сопоставления данных.
Список состоит из двух колонок, каждая из которых соответствует информационной базе, участвующей в обмене. Данные сгруппированы по объектам программы (документы, списки). В нижней части списка выводится информационная строка: сколько элементов сопоставлено, сколько не сопоставлено.
В поле Выводить можно выбрать, какие данные показывать в списке. По умолчанию выводятся Несопоставленные данные.
Сопоставление объектов
- Нажмите Сопоставить автоматически (рекомендуется), выберите поля для сопоставления с помощью флажков. Некоторые поля выбраны программой по умолчанию. Для того чтобы подтвердить свой выбор, нажмите Выполнить сопоставление. После поиска программа выводит на просмотр сопоставленные ею данные. Для подтверждения нажмите Применить.
- После автоматического сопоставления можно оставшиеся объекты сопоставить вручную или изменить сопоставление объектов. Выделите нужные объекты двух баз, нажмите Отменить соответствие, для того чтобы попытаться сопоставить объекты вручную, нажмите Установить соответствие для того чтобы сопоставить объекты.
- Для подтверждения нажмите Записать и закрыть.
Настройка полей таблицы сопоставления
- Нажмите Колонки, чтобы добавить поля в колонки списка. С помощью флажков можно отметить дополнительные поля, для подтверждения нажмите Применить.
Получение данных из другой программы
- Для того чтобы получить данные из другой программы, нажмите Еще –Загрузить данные из другой программы.
Порядок сопоставления объектов
Варианты идентификации объектов при получении
Порядок автоматического сопоставления объектов при получении, содержится в правилах конвертации объектов (ПКО), предназначенных для получения данных. Правила ПКО находятся в общем модуле МенеджерОбменаЧерезУниверсальныйФормат
Рис 3 Разделы общего модуля МенеджерОбменаЧерезУниверсальныйФормат
Отметим, что в общем модуле МенеджерОбменаЧерезУниверсальныйФормат находятся все компоненты (правила обработки данных, правила конвертации объектов и т.д.), определяющие прикладную логику обработки данных в процессе их получения, либо отправки . Программный код этого модуля создается автоматически с помощью приложения “Конвертация данных, редакция 3.0” на основе настроенных правил обмена. Программный код модуля можно создавать вручную, но требует от разработчика большого мастерства.
Вариант автоматического сопоставления (идентификации) объектов при получении задается с помощью свойства ВариантИдентификации ПКО
Рис 4. Настройки идентификации в модуле менеджера
Существуют 3 варианта ( 3 значения) идентификации объекта
- ПоУникальномуИдентификатору –идентификация по GUID,
- СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска– идентификация по GUID и полям поиска,
- ПоПолямПоиска –идентификация по полям поиска,
Рис 5. Настройки идентификации в КД3.0.
Еще одним свойством, определяющим логику сопоставления, является массив полей поиска, определяемый в свойстве ПоляПоиска ПКО.
Алгоритм поиска по полям
Происходит последовательное применение вариантов поиска, заданных в свойстве ПоляПоиска ПКО, используемого при загрузке объекта.
Ограничение.
При сопоставлении на этапе анализа данных применяется только 1-й вариант поиска – ПоУникальномуИдентификатору
Переход к следующему варианту осуществляется в двух случаях:
- У загружаемого объекта не заполнено какое-либо из полей, которое указано в варианте поиска.
- Вариант поиска не дал результата.
Если в загружаемом объекте есть информация об исходном GUID и вариант идентификации для объекта “По GUID” или “По GUID и полям поиска”, то поиск выполняется среди всех объектов заданного типа, кроме тех, для которых в РПИ уже установлены соответствия.
В остальных случаях поиск осуществляется среди всех объектов информационной базы соответствующего типа.
Особенности.
При сопоставлении на этапе анализа данных у загружаемых объектов не проверяется заполнение полей, участвующих в поиске.
На этапе анализа данных соответствие будет установлено только в том случае, когда для одного объекта отправителя был найден один объект получателя.
На этапе загрузки данных соответствие будет установлено и в том случае, когда для одного объекта отправителя нашлось несколько объектов получателя. В такой ситуации соответствие будет установлено с одним из них.
На этапе загрузки данных вариант поиска Номер + Дата для документов работает следующим образом: номер искомого документа проверяется на точное соответствие, дата определяет интервал, в котором проводится поиск по номеру. Сам интервал определяется как период уникальности номеров документа, в который входит указанная дата. Например, если номера документов уникальны в пределах месяца и задана дата 10 декабря 2001 года, то поиск будет проводиться в интервале с 01 по 31 декабря 2001 года.
На этапе анализа данных этот вариант поиска будет работать как обычно: оба поля будут проверяться на точное соответствие.
В примере рассмотрим задачу при которой в программе 1С документооборот необходимо формировать заявку на закупку, но при этом соответствующего справочника в документообороте нет.
Данные о номенклатуре необходимо получать из справочника номенклатуры из 1С:Бухгалтерии.
Публикация справочника через Odata в базе источнике
На стороне базы источника при публикации информационной базы достаточно отметить флаг Публиковать стандартный интерфейс OData и опубликовать на веб-сервере.
Кроме этого необходимо в режиме предприятия добавить состав объектов публикуемых через Odata, сделать можно с помощью обработки.
Код обработки выглядит так:
После публикации можно проверить работу веб-сервиса через обычный браузер введя строку :
Возможные имена ресурсов для объектов конфигурации
Объект конфигурации | Префикс имени в URL |
Справочник | Catalog |
Документ | Document |
Журнал документов | DocumentJournal |
Константа | Constant |
План обмена | ExchangePlan |
План счетов | ChartOfAccounts |
План видов расчета | ChartOfCalculationTypes |
План видов характеристик | ChartOfCharacteristicTypes |
Регистр сведений | InformationRegister |
Регистр накопления | AccumulationRegister |
Регистр расчета | CalculationRegister |
Регистр бухгалтерии | AccountingRegister |
Бизнес-процесс | BusinessProcess |
Задача | Task |
В строке указывается, что нам необходимо получить данные справочника Номенклатура в формате json. Сервис потребует авторизацию, необходимо ввести пользователя информационной базы и пароль:
Вот пример возвращаемых данных:
Теперь необходимо на стороне приемника вывести данные в форму для выбора пользователем. В таком виде это реализовано у меня.
Я в расширении создал общий модуль ТМЦ_ОбщийМодульПовтИспользование, в котором разместил данную функцию и передаю в качестве результата массив УИДов и наименований номенклатуры.
Далее данный массив можно вывести в табличную часть на форму, обращаясь к функции через общий модуль ТМЦ_ОбщийМодульПовтИспользование.ЗагрузкаНоменклатурыИзODATA().
У меня это реализовано на общей форме, при открытии которой происходит вызов функции получения номенклатуры и вывод ее в таблицу значений.
Описанный способ не является единственно возможным для получения данных из базы 1С, но у него есть ряд преимуществ.: Впрочем, как и недостатков.
В общем, выдаю на-гора, и судите сами.
Итак, действие номер один. Прежде всего, создаем в удаленной базе удобочитаемые вьюшки и некоторые таблицы функции, которые нам понадобятся для получения данных.
Вьюшки создаются для таблиц справочников, журнала, шапок и табличных частей документов. Я использовал для этого, да и для создания таблиц и функций инструмент 1С++, потому как он распространяется бесплатно. А ставить его приходилось в фирмах, у которых не было столь мною любимого ToySQL. Хотя, используя именно библиотеку ToySQL, некоторые моменты можно значительно упростить.
Обработку запускаем на удаленной базе. Создадим для начала необходимые для работы объекты:
Теперь непосредственно сами вьюшки: Начнем с журнала документов. Т.е. как мы видим, все реквизиты имеют теперь привычные для нас наименования и мы можем теперь обратиться к журналу документов следующим запросом: SELECT ДатаДок, Номер, Фирма, Контрагент FROM Журнал WHERE Проведен 0 Теперь перейдем к шапкам и табличным частям документов. Теперь мы можем смело расширить запрос по документам, вставив туда реквизиты шапок и табличных частей. Маловато данных, не правда ли? Но что мы получим в результате выполнения запроса в реквизитах, являющихся ссылками на элементы справочников? Правильно: мы получим всего лишь 36-тиричный внутренний ИД объекта. И ИД это будет принадлежать совсем не нашей базе и ничего хорошего мы из него не вытянем. Поэтому создаем вьюшки на справочники и смотрим как обходить данную проблему. И теперь смело меняем запрос: По крайней мере, мы теперь видим коды элементов справочников, участвующих в запросе и запросто можем найти соответствия в собственной базе (а далее еще и будет информация, как получить сразу ссылку на элемент!).
Ну и заодно соорудим вьюшки для получения констант и периодических реквизитов справочников. Думаю, они нам не помешают, хотя их получение в запросах иногда достаточно утомительное занятие.
В последнем примере (создание вьюшек на константы), есть упоминание таблицы Конст - это служебная, вспомогательная таблица и формируется она следующим образом:
Теперь разрешите привести пример получения периодического реквизита справочника на примере выбора курсов валют на указанную дату: Как видим, нелегкое это дело, каждый раз вставлять такой кусок кода в запрос. Но т.к. это все же удаленная база, то даже объект История из библиотеки ToySQL мы не можем использовать: Есть у меня также и код для создания вьюшек на таблицы регистров (только движения), с бухитогами не занимался, в связи с отсутствием таковой необходимости. Но, я так думаю, что на основании вышеприведенных примеров вам теперь и самим будет несложно это сделать. При работе с документами и справочниками возникают еще кое-какие проблемы. Вот те, с которыми мне пришлось столкнуться и решить: 1. В некоторых таблицах вид документа или справочника храниться в 10-тичном представлении, а в некоторых в 36-тиричном. Поэтому приходится использовать пару функций для преобразования одного в другое: 2. Иногда надо получить время документа в удобоваримом виде (ЧЧ:ММ:СС): 3. Функции получения уровня для элемента справочника и его полного кода:
4. А еще нам очень было бы неплохо иметь под рукой таблицу с перечислениями, которой, как вы знаете, с базе просто нет. Ну а раз нет, то никто нам не мешает такую таблицу создать. Да, еще можно создать таблицу видов для документов и справочников, видов субконто и т.д и т.п. Но это вы уж самостоятельно. Единственное, что я вам дам, так это пример запроса из разработки. Этот запрос получает таблицу для переноса документов из Комплексной конфигурации в ТиС:
Ну а на закуску - самое вкусное. Выполнив запрос, который расположен чуть выше по тексту, мы получим таблицу, по которой сможем найти все необходимые ссылки и создать документы в собственной базе. Но разве это было бы быстрее, чем большинство других способов переноса, где есть такая необходимость поиска ссылок? Нет, конечно же! Нам было бы интересно сразу получить эти самые ссылки на объекты собственной базы, потом только подставлять их и записывать вновь созданные или редактируемые документы. И такой способ есть! Решение, которое я приведу ниже, использует компоненту ToySQL.
Как видим, большая часть запроса нам уже известна. Что же есть его ? Это решение построено на возможности обратиться к связанному серверу (см. sp_addlinkedserver). Хотя это может быть абсолютно любым образом полученный подзапрос. А вот уже связка с собственными объектами по каким-либо уникальным ключам (например, код для справочника) и получение готовых ссылок на объекты - это уже как раз то, что мы и хотели. Осталось только выполнить приведенный МетаЗапрос и Выгрузить результаты его выполнения в таблицу значений.
Читайте также: