1С com создать документ

1С com создать документ

Подключение к другой базе 1С 8 по COM-соединению — очень полезная вещь. В основном, эта функция необходима для обмена данными между конфигурациями.

Но по каким-то причинам у новичков часто возникают затруднения с этим несложным процессом. Ниже я подскажу способ решения этой проблемы на примере простой задачки.

Поставлена задача:

Из конфигурации «Документооборот» необходимо подключится к базе УПП:

  • найти документ по заранее известному коду, допустим «123»;
  • получить статус документа;
  • если статус изменился, то поменять и в соответствующем документе «документооборота».

Реализация задачи:

Создание подключения к базе 1C по COM

Первым делом необходимо создать подключение к базе 1С 8.3, рассмотрим функцию, которая вернет подключение по ком-объекту к другой базе для файлового режима 1С:

Функция вернет СОМ-объект, с помощью которого можно производить действия с другой базой данных 1С 8.2.

Для клиент-серверного режима строка подключения будет немного отличаться:

Получите 267 видеоуроков по 1С бесплатно:

Если Вы подключаетесь к базе на платформе 1C 8.1, то Вам необходимо использовать не «V82.COMConnector», а «V81.COMConnector».

Найти документ 1С по COM

Для примера, пусть номер нужного документа будет «1234», а наш Документ-объект — «ДокументОбъект»:

Вот и все: мы подключились по COM, получили нужный документ, прочитали его статус и, если он отличается, установили статус нашему документу.

Другие статьи по 1С:

Видеоурок по подключению 1С 8.3 через COM:

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Раздел содержит описание некоторых особенностей передачи данных 1С:Предприятия через механизм COM/Automation.

Когда данные передаются через COM

При использовании 1С:Предприятия совместно с другими программами или системами, а также при необходимости доступа к данным нескольких разных информационных баз 1С:Предприятия, могут использоваться средства модели межкомпонентного доступа к объектам (Component Object Model, COM). Ее главная идея заключается в предоставлении универсального средства создания и освобождения объектов, и универсального способа обращения к свойствам и методам объектов, включая передачу необходимых данных. Частным случаем реализации модели COM является Automation, определяющий универсальный интерфейс IDispatch для доступа к свойствам и методам объектов, а также универсальный способ передачи данных (структура VARIANT ).

1С:Предприятие поддерживает средства Automation и тем самым позволяет:

с одной стороны, использовать во встроенном языке 1С:Предприятия произвольные объекты, доступные через Automation на данном компьютере или в сети. Для этого во встроенном языке 1С:Предприятия может быть использован оператор "Новый COMОбъект( )";

с другой стороны, использовать объекты 1С:Предприятия при разработке других программ на различных языках программирования с применением различных инструментальных средств. Для этого 1С:Предприятие регистрирует объекты с идентификаторами: "V8.Application" — клиентское приложение 1С:Предприятия, "V8.COMConnector" — внешнее соединение 1С:Предприятия.

Читайте также:  Замена стекла на самсунг галакси s8 плюс

Обращения к свойствам объектов, а также передача значений входных и выходных параметров методов при помощи Automation предполагает универсальный способ представления передаваемых данных. Представление данных при помощи структуры VARIANT накладывает определенные ограничения на типы передаваемых данных и может создать определенные трудности при интерпретации получаемых данных.

Набор типов данных, представимых структурой VARIANT, ограничен, и не охватывает всего многообразия типов данных, доступных в 1С:Предприятии. Ниже будут рассмотрены некоторые особенности передачи средствами COM (через структуру VARIANT) данных 1С:Предприятия различных типов.

Примитивные типы

Значения NULL и Неопределено , а также типы данных Число , Строка , Дата , Булево , определенные в 1С:Предприятии, считаются примитивными. Они представляются аналогичными типами, определенными в VARIANT . Преобразование примитивных типов 1С:Предприятия в VARIANT представлено в таблице:

Тип в 1С:Преприятии Тип VARIANT
значение NULL VT_NULL
значение Неопределено VT_EMPTY
тип Число Целое в диапазоне от -2147483648 до 2147483647 VT_I4
Другие VT_R8
тип Строка VT_BSTR
тип Дата VT_DATE
тип Булево VT_BOOL

Примитивные типы и значения, определенные в VARIANT , преобразуются в примитивные типы и значения 1С:Предприятия в соответствии со следующей таблицей.

Тип VARIANT Тип в 1С:Предприятии
значение NULL значение Неопределено

VT_I2, VT_I4, VT_R4, VT_R8, VT_CY, VT_ERROR, VT_DECIMAL, VT_I1, VT_UI1, VT_UI2, VT_UI4, VT_I8, VT_UI8, VT_INT, VT_UINT

тип Число

VT_BSTR тип Строка VT_DATE тип Дата VT_BOOL тип Булево

При передаче через COM значение примитивного типа сохраняется, быть может, за исключением точности представления числа. Это значит, что, например, значение типа Строка , после передачи через VARIANT сколько угодно раз, никак не изменится, и любые операции над ней будут давать такой же результат, который они давали до передачи через VARIANT .

Массивы

В структуре VARIANT предусмотрен специальный тип — VT_ARRAY , представляющий собой массив с несколькими измерениями и заданными диапазонами индексов по каждому из измерений. Он представляется специальной структурой SAFEARRAY . Для совместимости с другими объектами, представленными в COM, в 1С:Предприятии предусмотрен специальный тип данных COMSafeArray , в который преобразуется структура SAFEARRAY и наоборот.

При получении 1С:Предприятием структуры VARIANT , содержащей данные VT_ARRAY , она преобразуется в объект 1С:Предприятия COMSafeArray . При необходимости передачи из 1С:Предприятия структуры VARIANT , содержащей данные VT_ARRAY , в 1С:Предприятии должен быть подготовлен соответствующий объект COMSafeArray .

Важно, что данные типа VT_ARRAY являются аналогом примитивных типов в том смысле, что выступают в качестве значений, а не ссылок. В частности, преобразование структуры VARIANT в COMSafeArray приводит к копированию всех содержащихся в ней данных, и наоборот.

Объектные типы

Все остальные типы данных, определенные в 1С:Предприятии, в том числе и коллекции значений, являются объектами и преобразуются к типу VT_DISPATCH структуры VARIANT .

С другой стороны, при получении 1С:Предприятием значения VARIANT типа VT_DISPATCH , оно будет преобразовано в значение типа COMОбъект , набор свойств и методов которого будет совпадать с набором свойств и методов объекта, указатель на который содержался в VARIANT типа VT_DISPATCH . Работа с таким объектом может выполняться только через предоставляемые им свойства и методы, кроме оператора Для Каждого . .

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

Читайте также:  X5r 3 8959t 3

1С:Предприятие или COM-соединение, подсоединенное к некоторой информационной базе, распознает объект как "свой" только в том случае, если он был создан этим же подсоединением к информационной базе. Например, если из COM-соединения получить элемент справочника и передать этот элемент справочника в качестве параметра какого-нибудь метода объекта, полученного из этого же COM-соединения, то при выполнении этого метода объект будет распознан как "свой". Объект, полученный из другого соединения с информационной базой, не будет распознан как "свой".

Такое поведение объектов 1С:Предприятия объясняется тем, что большинство объектов 1С:Предприятия используют свой экземпляр контекста информационной базы, из которой они получены, и в другом экземпляре контекста информационной базы они "своими" не являются. Каждое приложение 1С:Предприятия и каждый экземпляр COM-соединения поддерживает свой экземпляр контекста информационной базы. Поэтому объекты 1С:Предприятия не распознаются как "свои" не в том приложении 1С:Предприятия или экземпляре COM-соединения, в котором они были созданы.

В Automation (интерфейс IDispatch ) не предусмотрено штатных средств для реализации обращений к элементам массивов по индексам. Предусмотренные в Automation индексированные свойства допускают неоднозначность толкования и не поддерживаются встроенным языком 1С:Предприятия. Это значит, что для коллекций значений, не опознанных 1С:Предприятием как "свои" объекты, невозможно обращение к элементам по индексам из встроенного языка 1С:Предприятия. Однако, многие коллекции, в том числе и коллекции, определенные в 1С:Предприятии, поддерживают специальный интерфейс IEnumVARIANT , позволяющий совершить последовательный обход всех элементов коллекции. Этот механизм используется оператором Для Каждого . , который имеется во многих языках программирования, в том числе и во встроенном языке 1С:Предприятия. Этот же механизм используется встроенным отладчиком 1С:Предприятия, когда он показывает элементы коллекции.

Для удобства обращения к элементам коллекций, определенных в 1С:Предприятии, после передачи коллекции через VARIANT в большинстве коллекций значений ( Массив , ТаблицаЗначений , Структура и другие) предусмотрены методы Получить() и Установить() , действие которых аналогично обращению к элементам коллекций по индексам.

Например, если переменная "ПолученныйМассив" содержит объект типа Массив , то оператор

Одним из способов перенести данные из одной конфигурации 1С в другую является программное подключение с помощью COM. Многие компании используют несколько различных баз, между которыми должны быть определенные связи и зависимости. Если необходимо не только перенести данные, но и выполнить определенную обработку данных, то COM соединение будет оптимальным механизмом. Умение анализировать данные из другой базы 1С пригодиться любому разработчику.

Подключаемся через COM к базе 1С

Для реализации COM соединения в 1С используется специальный механизм под названием COMConnector. Этот объект устанавливается вместе с платформой и применяется для связи информационных баз. Следует учесть, что для версий 8.2 и 8.3 используются разные по наименованию объекты – «V82.COMConnector» и «V83.COMConnector» соответственно.

Помните, что на время COM соединения к базе тратиться лицензия – не стоит увлекаться одновременным выполнением нескольких подключений. Особенно это важно для организаций, у которых количество лицензий ограничено. Решиться этот вопрос может при помощи регламентных заданий, выполняющихся во время отсутствия активных подключений пользователей к информационной базе.

Чтобы иметь возможность подключиться к другой базе и запросить нужную информацию вы должны знать следующие данные:

  1. Какого она типа – файловая или клиент-серверная;
  2. Где она располагается;
  3. Под каким именем и паролем в нее можно зайти;
  4. Какие данные вас интересуют.
Читайте также:  Как настроить вай фай роутер зиксель

Из первых трех пунктов для реализации COM соединения необходимо сформировать строку параметров. В зависимости от типа ИБ она будет отличаться внешним видом. Используя полученную строку, происходит подключение, с помощью которого можно собирать для анализа и обработки данные из другой базы любыми методами.

Функция подключения проста и не должна вызвать вопросов, если все параметры указаны верно. Для ускорения отладки и анализа возможных ошибок лучше заключить подключение в конструкцию «Попытка». Возвращать функция будет значение типа «COM объект», с которым и предстоит работать, получая нужные данные.

Через COM соединение вы можете не только выбирать данные, но и добавлять их в базу, к которой подключаетесь. Помните, что передавать через COM объект мы можем 4 примитивных типа данных. Другие типы придется задавать с помощью встроенных в платформу функций поиска. Учтите, что глобальные функции платформы вызываются тоже через COM-соединение.

Получаем данные из базы 1С

После того как получили нужный объект, необходимо прочитать данные из другой базы. Для этого мы применяем запрос через COM соединение в 1С 8.3 с помощью полученного значения типа «COM объект» из функции. Важно сначала подключиться к базе, а затем уже выполнять запрос. Выполнение происходит через метод NewObject с указанием в качестве параметра типа объекта в строковом виде – «Запрос».

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

Если нужно передать в базу массив для отбора по нескольким параметрам, например, подразделениям, тоже используется команда NewObject. Аналогично можно передавать список или таблицу значений, заполняя их элементами другой базы через соединение. Для поиска вам доступны все существующие методы объектов и механизмов платформы.

При переносе документов или элементов справочников всегда возникает вопрос о контроле переноса определенного объекта. С помощью COM соединений можно решить подобные проблемы через уникальный идентификатор. Нужно найти объект в подключаемой базе по идентификатору из текущей ИБ с помощью функции «ПолучитьСсылку», используя идентификатор в виде строки. Если такового не нашлось, вы можете создать его с помощью COM соединения.

Также COM соединение имеет право использовать процедуры и функции из общих модулей 1С с включенным свойством «Внешнее соединение». Кроме этого условия, вызываемая функция или процедура должна быть экспортная и не включать интерактивные действия, выполняемые на сервере. В противоположном случае вы увидите ошибку о недопустимости операции.

Возможности внешнего соединения с другой базой в 1С достаточно обширны и могут позволить выполнить множество задач. Важно уметь правильно оценить инструментарий и выбрать оптимальное решение. В большинстве случаев это умение появляется лишь с опытом или при изучении примеров работ опытных специалистов, поэтому при возникновении потребности в таком подключении мы рекомендуем воспользоваться услугами по обслуживанию и техподдержке 1С.

Ссылка на основную публикацию
Adblock
detector