Com объекты 1С

Подключение к базе 1С через COM

Иногда удобно подключиться через COM из одной базы 1С к другой и иметь доступ одновременно к обоим базам. Такой подход можно использовать для обмена данными.

Подключение к базе
Примеры обращения к данным другой базы
Методы БСП
Лицензирование

Подключение к базе

Для подключения к базе 1С через COM необходимо:

Ниже представлены примеры подключения к серверной и файловой базам:

// Подключение к серверной базе Соединение = Новый COMОбъект(«V83.COMConnector»); ПараметрыДоступа = «Srvr=»»Сервер»»;Ref=»»ИмяБазы»»;Usr=»»Пользователь»»;Pwd=»»ПарольПользователя»»;»; Попытка База = Соединение.Connect(ПараметрыДоступа); Исключение Сообщить(«Проблемы при подключении: » + ОписаниеОшибки()); Возврат; КонецПопытки; // Подключение к файловой базе Соединение = Новый COMОбъект(«V83.COMConnector»); ПараметрыДоступа = «File=»»ПутьККаталогуБазы»»;Usr=»»Пользователь»»;Pwd=»»ПарольПользователя»»;»; Попытка База = Соединение.Connect(ПараметрыДоступа); Исключение Сообщить(«Проблемы при подключении: » + ОписаниеОшибки()); Возврат; КонецПопытки;

Примеры обращения к данным другой базы

// Поиск и изменение справочника НайденныйСпр = База.Справочники.Номенклатура.НайтиПоКоду(«12345»); Если НайденныйСпр = База.Справочники.Номенклатура.ПустаяСсылка() Тогда Сообщить(«Справочник не найден»); Иначе СпрОбъект = НайденныйСпр.ПолучитьОбъект(); СпрОбъект.Описание = «Описание»; СпрОбъект.Записать(); КонецЕсли; // Работа с запросом Запрос = База.NewObject(«Запрос»); Запрос.Текст = «ВЫБРАТЬ | Контрагенты.Наименование |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.ЮрФизЛицо = &ЮрФизЛицо»; Запрос.УстановитьПараметр(«ЮрФизЛицо», База.Перечисления.ЮрФизЛицо.ФизЛицо); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Сообщить(Выборка.Наименование); КонецЦикла;

Методы БСП

В библиотеке стандартных подсистем(БСП) предусмотрены методы для работы с COM-подключениями. Вот некоторые из них:

  • ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя() — возвращает имя COM-класса для работы с 1С:Предприятием через COM-соединение (например, «v83.COMConnector»).
  • ОбщегоНазначения.ИдентификаторCOMСоединителя(Знач ИмяCOMСоединителя) — возвращает CLSID COM-класса для работы с 1С:Предприятием 8 через COM-соединение (для v83.COMConnector — «181E893D-73A4-4722-B61D-D604B3D67D47»).
  • ОбщегоНазначенияКлиентСервер.УстановитьВнешнееСоединениеСБазой(Параметры) — устанавливает внешнее соединение с информационной базой по переданным параметрам подключения и возвращает указатель на это соединение.
  • СоединенияИБ.ИнформацияОСоединениях(ПолучатьСтрокуСоединения = Ложь, СообщенияДляЖурналаРегистрации = Неопределено, ПортКластера = 0) — возвращает структуру, из которой можно узнать, есть ли в текущий момент COM-соединения с базой.

Примеры использования:

COMСоединитель = Новый COMОбъект(ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя());

CLSID = ОбщегоНазначения.ИдентификаторCOMСоединителя(ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя());

Результат = ОбщегоНазначенияКлиентСервер.УстановитьВнешнееСоединениеСБазой(Параметры);

ТекущиеСоединения = СоединенияИБ.ИнформацияОСоединениях(Истина);

Лицензирование

Для каждого COM-соединения расходуется одна лицензия. Лицензии ищутся в следующем порядке:

  1. локальные клиентские лицензии;
  2. локальные серверные лицензии;
  3. сетевые клиентские лицензии;
  4. клиентские лицензии на сервере 1С:Предприятия или веб-сервере.

Работа с COM-объектами

C# и .NET Framework — Оптимизация приложений .NET Framework — Работа с COM-объектами

Объектная модель программных компонентов (Component Object Model, COM) проектировалась с целью дать возможность создавать компоненты на любом языке/платформе, обладающем поддержкой этой модели, и использовать их в любом языке/платформе (другом), так же обладающем поддержкой COM. Платформа .NET не исключение и позволяет легко использовать сторонние COM-объекты и экспортировать типы .NET в виде COM-объектов.

Суть организации взаимодействий с COM-объектами та же, что и при использовании механизма P/Invoke: вы объявляете управляемое представление COM-объекта, а среда выполнения CLR создает объект-обертку, реализующий маршалинг. Существует две разновидности оберток: обертка, вызываемая средой выполнения (Runtime Callable Wrapper, RCW), которая позволяет управляемому коду использовать COM-объекты:

и обертка, вызываемая COM-объектами (COM Callable Wrapper, CCW), дающая возможность COM-объектам вызывать управляемый код:

Сторонние COM-объекты часто поставляются вместе с основной сборкой взаимодействий (Primary Interop Assembly, PIA), содержащей определения, одобренные производителем, подписанной и устанавливаемой в глобальный кеш сборок (Global Assembly Cache, GAC). В противном случае можно воспользоваться инструментом tlbimp.exe, являющийся частью Windows SDK, который автоматически генерирует сборку взаимодействий, опираясь на информацию, содержащуюся в библиотеке типов.

При взаимодействиях с COM-объектами повторно используется инфраструктура маршалинга параметров механизма P/Invoke, но с иными умолчаниями (например, по умолчанию строки преобразуются в тип BSTR), поэтому все советы, что были даны в предыдущей статье относительно механизма P/Invoke, также применимы и здесь.

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

Управление жизненным циклом

Получая ссылку на COM-объект в .NET, вы фактически получаете ссылку на объект-обертку RCW. Обертка RCW всегда хранит единственную ссылку на COM-объект и для каждого COM-объекта создается только один экземпляр объекта-обертки RCW. Обертка RCW поддерживает собственный счетчик ссылок, не связанный со счетчиком ссылок COM-объекта. Значение этого счетчика ссылок обычно равно 1, но может быть больше, при участии в маршалинге большего числа интерфейсов или когда к одному и тому же интерфейсу обращается несколько потоков выполнения.

Как правило, когда удаляется последняя управляемая ссылка на RCW, в следующем же цикле сборки мусора в поколении, где находится обертка RCW, вызывается финализатор RCW, который уменьшает счетчик ссылок в COM-объекте (который имеет значение 1) вызовом метода Release() интерфейса IUnknown этого COM-объекта. COM-объект тут же уничтожает себя и освобождает занимаемую им память.

Поскольку сборщик мусора в .NET запускается в непредсказуемые моменты времени и не знает о блоках неуправляемой памяти, выделенных при создании оберток RCW для COM-объектов, он не может ускорить сборку мусора, вследствие чего объем занимаемой памяти может оказаться очень большим.

При необходимости можно вызвать метод Marshal.ReleaseComObject(), чтобы явно освободить объект. Каждый вызов уменьшает счетчик ссылок в RCW и когда он достигнет нуля, автоматически уменьшается счетчик ссылок в соответствующем COM-объекте (точно так же, как при вызове фииализатора RCW). После вызова метода Marshal.ReleaseComObject() нельзя использовать обертку RCW.

Если после вызова счетчик ссылок RCW может оказаться больше нуля, метод Marshal.ReleaseComObject() следует вызывать в цикле, пока он не вернет нулевое значение. Лучше всего вызывать Marshal.ReleaseComObject() внутри блока finally, чтобы гарантировать освобождение COM-объекта, даже если где-то между созданием его экземпляра и освобождением возникнет исключение.

Маршалинг через границы подразделений

Модель COM реализует собственные механизмы синхронизации потоков выполнения для поддержки вызовов между разными потоками, которые могут использоваться даже при работе с объектами, изначально не предназначенными для использования в многопоточной среде. Эти механизмы могут снижать производительность при неправильном их применении. Хотя эта проблема не имеет прямого отношения к взаимодействиям с COM-объектами из .NET, тем не менее, ее стоит обсудить, потому что с ней часто сталкиваются на практике, вероятно потому, что разработчики, привыкшие к типичным приемам синхронизации в .NET могут не знать, что конкретно происходит под покровом COM-объектов.

Модель COM связывает объекты и потоки выполнения с подразделениями (apartments), служащими границами, через которые модель COM выполняет вызовы. Всего имеется несколько типов подразделений:

Однопоточные подразделения (Single-Threaded Apartment, STA)

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

Многопоточные подразделения (Multi-Threaded Apartment, МТА)

В каждом подразделении может иметься любое количество потоков выполнения и объектов, но в процессе может быть только одно подразделение МТА. Этот тип используется в .NET по умолчанию.

Потоконезависимые подразделения (Neutral-Threaded Apartment, NTA)

Содержат объекты, но не потоки. В процессе может быть только одно подразделение NTA.

Связывание потока выполнения с подразделением происходит при вызове CoInitialize или CoInitializeEx для инициализации COM-объекта в этом потоке. Функция CoInitialize связывает поток с новым подразделением STA, а функция CoInitializeEx позволяет указать тип подразделения, STA или МТА.

В .NET вам не придется вызывать эти функции непосредственно, вместо этого достаточно добавить атрибут STAThread или MTAThread к точке входа в поток (методу Main). При желании можно также вызвать метод Thread.SetApartmentState() или установить значение в свойстве Thread.ApartmentState перед запуском потока выполнения. Если не указано иное, .NET инициализирует потоки (включая главный поток приложения) как принадлежащие подразделению МТА.

Связывание COM-объектов с подразделениями выполняется, исходя из параметра ThreadingModel в реестре, который может иметь следующие значения:

  • Single — объект по умолчанию помещается в подразделение STA.

  • Apartment — объект должен быть помещен в любое подразделение STA, и только потоку из этого подразделения будет позволено вызывать объект непосредственно. Другие экземпляры могут помещаться в другие подразделения STA.

  • Free — объект помещается в подразделение МТА. Этот объект может вызываться непосредственно и одновременно из любого количества потоков в подразделении МТА. Объект должен обеспечивать поддержку использования в многопоточной среде.

  • Both — объект помещается в подразделение создавшей его программы (STA или МТА). По сути, после создания он становится STA- или МТА-подобным объектом.

  • Neutral — объект помещается в потоконезависимое подразделение и не требует маршалинга. Это — наиболее эффективный режим.

На рисунке ниже изображена схема взаимоотношений между подразделениями, потоками и объектами:

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

В процессе маршалинга вызов функции (включая параметры) преобразуется в сообщение, которое будет послано в очередь принимающего подразделения STA. Для объектов STA очередь реализуется как скрытое окно, оконная процедура которого принимает сообщения и передает COM-объекту с помощью заглушки (stub). При таком подходе COM-объекты в подразделении STA COM всегда вызываются в одном и том же потоке выполнения, благодаря чему обеспечивается безопасность при работе в многопоточном окружении.

Если вызывающее подразделение не совместимо с подразделением COM-объекта, происходит переключение потока и выполняется маршалинг параметра между потоками.

Чтобы избежать падения производительности из-за маршалинга между потоками, старайтесь обеспечить соответствие между подразделением COM-объекта и подразделением создающего его потока. Создавайте и используйте COM-объекты STA в потоках из подразделения STA, а COM объекты из подразделения МТА — в потоках МТА. COM-объекты, помеченные, как поддерживающие оба типа подразделений, могут свободно использоваться из любых потоков выполнения без лишних накладных расходов.

Вызов объектов STA из ASP.NET

По умолчанию среда ASP.NET выполняет страницы в потоках МТА. Если из этих страниц вызываются объекты, находящиеся в подразделениях STA, в дело вступает механизм маршалинга. Если основная масса используемых объектов принадлежит подразделениям STA, это приведет к деградации производительности. Эту проблему можно ликвидировать, пометив страницы атрибутом AspCompat, как показано ниже:

<%@Page Language=»C#» AspCompat=»true» %>

Обратите внимание, что конструкторы страниц все еще выполняются в потоке выполнения МТА, поэтому создание объектов STA следует выполнять в обработчиках событий Page_Load и Page_Init.

Импортирование библиотек типов и Code Access Security

Механизм Code Access Security выполняет те же проверки безопасности, что и P/Invoke. Вы можете добавлять ключ /unsafe при вызове утилиты tlbimp.exe, которая будет добавлять атрибут SuppressUnmanagedCodeSecurityAttribute к сгенерированным типам. Используйте эту возможность только в системах, пользующихся у вас безусловным доверием, так как она может порождать проблемы безопасности.

NoPIA

До выхода версии .NET Framework 4.0 приходилось вместе с приложением распространять сборки взаимодействий или основные сборки взаимодействий (Primary Interop Assemblies, PIA). Эти сборки обычно получались очень большими (даже в сравнении с кодом, использующим их) и как правило не входят в установочный комплект COM-компонентов; вместо этого их необходимо устанавливать отдельно, потому что сами они не требуются для работы самих COM-объектов. Другая причина, почему сборки PIA не включаются в установочные комплекты, состоит в том, что они устанавливаются в глобальный кеш сборок (GAC). Это вводит зависимость от .NET Framework в иначе полностью независимые приложения.

Начиная с версии .NET Framework 4.0, компиляторы C# и VB.NET могут проверить, какие COM-интерфейсы и методы используются в коде, и скопировать и встроить в вызывающую сборку только действительно необходимые определения, уменьшая размер кода и избавляя от необходимости распространять библиотеки PIA. В Microsoft эта особенность была названа NoPIA. Она действует как в отношении основных сборок взаимодействий, так и в отношении сборок взаимодействий в целом.

Сборки PIA обладают одной важной особенностью, которая называется эквивалентностью типов. Так как они имеют строгое именование и помещаются в глобальный кеш сборок, различные управляемые компоненты могут обмениваться обертками RCW и с точки зрения .NET они будут иметь эквивалентные типы. Напротив, сборки взаимодействий, сгенерированные с помощью tlbimp.exe, не обладают такой особенностью, так как каждый компонент в этом случае получит собственную, отдельную от других, сборку взаимодействий. С появлением поддержки особенности NoPIA отпала необходимость в строгом именовании сборок, и в Microsoft было предложено решение, позволяющее интерпретировать обертки RCW из других сборок, как принадлежащие тому же типу, если интерфейсы имеют одинаковый идентификатор GUID.

Чтобы включить поддержку NoPIA, выберите пункт Properties в контекстном меню Visual Studio после щелчка правой кнопкой мыши на сборке взаимодействий в разделе References, и установите параметр Embed Interop Types (Внедрять типы взаимодействий) в значение True:

Исключения

Большинство методов COM-интерфейсов сообщают об успехе или неудаче, возвращая значение типа HRESULT. Отрицательные значения HRESULT (с установленным старшим битом) сообщают об ошибке, а ноль (S_OK) или положительные значения — об успехе. Кроме того, COM-объект может возвращать дополнительную информацию об ошибке при вызове функции SetErrorInfo, передавая объект IErrorInfo, созданный вызовом CreateErrorInfo.

При вызове COM-метода через механизм взаимодействий с COM, заглушка маршалера преобразует значение HRESULT в управляемое исключение, согласно самому значению HRESULT и данным, содержащимся в объекте IErrorInfo. Поскольку возбуждение исключения является достаточно дорогостоящей операцией, функции COM-объекта, которые часто терпят неудачу, могут отрицательно сказываться на производительности. Вы можете подавить автоматическое преобразование исключений, пометив методы атрибутом PreserveSigAttribute. При этом вам придется изменить управляемую сигнатуру, как возвращающую значение типа int, в результате чего параметр retval станет параметром out.

1С Метод объекта не обнаружен (Connect)

Опубликовано в &nbspБлогерские заметки 7 ноября

Всем Доброго времени суток!

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

А именно, тема данного материала: Как исправить ошибку, возникающую в 1С — Не удалось подключиться к другой программе: Метод объекта не обнаружен (Connect).

Если Вам посчастливилось увидеть такую же ошибку, как на этом скриншоте, читайте далее, как её исправить 😉

Немного вводной теории:

1С:Предприятие 8.x предоставляет разные интересные возможности для организации обмена данными с другими программными системами. Наряду с механизмом OLE Automation также было введено понятие COM-соединения, которое позволяет обеспечить надежный и более быстрый доступа к данным 1С:Предприятия 8.0 из внешних приложений, поддерживающих данную технологию.

Для организации доступа к данным 1С:Предприятия 8.0 через COM-соединение создается COM-объект с идентификатором V8.COMConnector , с помощью которого и производится установка соединения. Затем производится обращение к методу Connect ранее созданного объекта V8.COMConnector. Метод Connect возвращает ссылку на объект COM -соединения с информационной базой 1С:Предприятия 8.0. И через полученный объект COM-соединения производится обращение к допустимым методам, свойствам и объектам информационной базы, с которой установлено соединение.

Теперь, зная откуда растут ноги, переходим к практике. Допустим (при обновлении и ли другой какой-то операции) Вы получили ошибку вида:

Чтобы исправить ошибку, возникающую в 1С — метод объекта не обнаружен (connect), нужно сделать следующее:

В операционных системах Windows последних версий заходим в «Службы компонентов». Данная функциональность вызывается следующей последовательностью: Панель управления — Администрирование — Службы компонентов.

Выбираем: Компьютеры – Мой компьютер – Приложения COM+ — Создать приложение – Создать новое приложение – вводим имя «V82COMConnector» (переключатель «Серверное приложение») – Указанный пользователь (Администратор)

В появившейся ветке V82COMConnector – выбираем подветку Компоненты – создание нового компонента – Установка новых компонентов — \bin\comcntr.dll

Нажимаем правой кнопкой по ветке V82COMConnector – Свойства – Безопасность – снимаем галку «Принудительная проверка доступа для приложений» — ставим галку «Применить политику программных ограничений» — Уровень ограничений «Неограниченный»:

Также в профилях пользователей C:\Users\НашПользователь\AppData\Roaming\1C\1CEStart.cfg изменяем параметр UseHWLicenses=0 на UseHWLicenses=1

После всех этих изменений можно (для чистоты эксперимента) перезагрузить комп и наслаждаться дальнейшей работой в 1С, но уже без данной ошибки (!)

P.S. Небольшой бонус в конце: 1С обновление от имени администратора

Довольно часто какой-то Ваш удалённый клиент — бухгалтер и т.д. — не может произвести самостоятельно обновление программных продуктов 1С, ему требуются права администратора, а правой кнопкой нажимать на ярлыке (и выбирать «Запуск от имени администратора») он не хочет или «боится». Поэтому он постоянно напрягает нашего брата АйТишника.

Давайте же нажмём за него правой кнопкой, но сделаем это один раз и навсегда забудем о данной теме!

Итак, делаем разовую настройку — нажимаем правой кнопкой на ярлыке запуска 1С, выбираем «Свойства», жмём «Изменить параметры для всех пользователей» и устанавливаем галку «Запускать эту программу от имени администратора». Затем пару раз кликаем Ок, и забываем про «боязливого» клиента 😉

OLE в 1С-Предприятии

Краткая справка по использованию OLE в 1С-Предприятии.

Для запуска системы 1С-Предприятия в качестве OLE Automation сервера из внешнего приложения выполняется следующая последовательность действий:

  1. Создается объект с OLE идентификатором (регистр символов непринципиален):
  • V1CEnterprise.Application — версия независимый ключ;
  • V77.Application — версия зависимый ключ;
  • V77S.Application — версия зависимый ключ, SQL версия;
  • V77L.Application — версия зависимый ключ, локальная версия;
  • V77M.Application — версия зависимый ключ, сетевая версия.
  • Выполняется инициализация системы 1С-Предприятие методом Initialize().
  • Вызываются атрибуты и методы системы 1С-Предприятия как OLE Automation сервера.
  • 1С-Предприятие в качестве OLE Automation сервера имеет 4 метода:

    • Initialize() — выполнить инициализацию системы 1С-Предприятие.
    • CreateObject() — Создает объект агрегатного типа данных 1С-Предприятия и возвращает ссылку на него.
    • EvalExpr() — Вычислить выражение системы 1С-Предприятие.
    • ExecuteBatch() — Выполнить последовательность операторов системы 1С-Предприятие.

    Методы:

    1. Initialize() — открыть базу.

    Синтаксис метода такой:

    Initialize(<Имя объекта>.RMTrade, <Командная строка>, <Пустая строка>)

    где:

    Для того, чтобы открыть базу через OLE — необходимо создать объект с идентификатором OLE, выполнить инициализацию базы и проверить успешность выполнения инициализации. В своем примере я не указываю никаких дополнительных параметров, поэтому открывается квадратное окошко выбора базы, предлагается выбрать пользователя и ввести пароль.

    ДругаяБаза=СоздатьОбъект(«V77.Application»); Открыта=ДругаяБаза.Initialize(ДругаяБаза.RMTrade,,); Если Открыта=0 Тогда // True=-1, False=0. Для всех OLE команд. Сообщить(«База не была открыта.»); Возврат; КонецЕсли;

    2. CreateObject() — создать объект агрегатного типа.

    Этот метод создает объект агрегатного типа данных системы 1С-Предприятия и возвращает ссылку на него.

    Синтаксис метода такой:

    CreateObject(<ИмяАгрегатногоТипа>)

    где:

    <ИмяАгрегатногоТипа> — строковое выражение, значение которого содержит имя агрегатного типа данных, заданного в конфигураторе. Например: «Справочник.Номенклатура», «Документ.ПриходнаяНакладная».

    3. EvalExpr() — вычислить выражение.

    Синтаксис метода такой:

    EvalExpr(<СтрокаВыражения>)

    где:

    <СтрокаВыражения> — строковое выражение, записанное на встроенном языке 1С-Предприятия.

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

    4. ExecuteBatch() — выполнить последовательность операторов.

    Синтаксис метода такой:

    ExecuteBatch(<СтрокаОператоров>)

    где:

    <СтрокаОператоров> — строковое выражение, текст программы на встроенном языке 1С-предприятия.

    Возвращает значение логического типа: TRUE, если последовательность операторов выполнена успешно, FALSE, если нет. В OLE Automation TRUE и FALSE имеют соответственно значения -1 (минус единица) и 0.

    Пример: создание документа в другой базе, открытой через OLE.

    Выгрузка происходит из обработки. ВыбДокумент — документ, выбранный пользователем для выгрузки в другую базу.

    ДругаяБаза=СоздатьОбъект(«v77.application»); Открыта=ДругаяБаза.Initialize(ДругаяБаза.RMTrade,,); Если Открыта=0 Тогда Сообщить(«База не была открыта.»); Возврат; КонецЕсли; дДок=ДругаяБаза.CreateObject(«Документ.ПриходнаяНакладная»); дТовар=ДругаяБаза.CreateObject(«Справочник.Номенклатура»); дДок.Новый(); дДок.ДатаДок=ВыбДокумент.ДатаДок; дДок.Фирма=ДругаяБаза.evalexpr(«Константа.ОсновнаяФирма»); дДок.Склад=ДругаяБаза.evalexpr(«Константа.ОсновнойСклад»); дДок.КатегорияЦен=ДругаяБаза.evalexpr(«Константа.ПриходнаяКатегорияЦен»); дДок.ВариантРасчетаНалогов=ДругаяБаза.evalexpr(«Константа.ОсновнойВариантРасчетаНалогов»); дДок.Валюта=ДругаяБаза.evalexpr(«Константа.БазоваяВалюта»);//рубли дДок.Дата_курса=дДок.ДатаДок; дДок.ТипУчета=1; дДок.Автор=ДругаяБаза.evalexpr(«глПользователь»); дДок.ПризнакНакладной=ДругаяБаза.evalexpr(«Перечисление.ПризнПрихНакл.Закупка»); дДок.Курс=1;//рубли дДок.Комментарий=ВыбДОкумент.Комментарий; ВыбДОкумент.ВыбратьСтроки(); Пока ВыбДокумент.ПолучитьСтроку()=1 Цикл дДок.НоваяСтрока(); ТовКод=СокрЛП(ВыбДОкумент.Товар.Код); Если дТовар.НайтиПоКоду(ТовКод)=0 Тогда Сообщить(«Не найден товар с кодом «+ТовКод); Возврат; КонецЕсли; дТовар.ИспользоватьДату(дДок.ДатаДок); дДок.Товар=дТовар.ТекущийЭлемент(); дДок.Количество=ВыбДокумент.Количество; дДок.Единица=дТовар.ЕдиницаПоУмолчанию; дДок.Цена=ВыбДОкумент.Цена; дДок.Коэффициент=1; дДок.Всего=ВыбДОкумент.Сумма; дДок.Сумма=ВыбДОкумент.Сумма-ВыбДокумент.НП; дДок.СтавкаНДС=дТовар.СтавкаНДС; дДок.НДС=ВыбДокумент.НДС; дДок.СтавкаНП=дТовар.СтавкаНП; дДок.СуммаНП=ВыбДокумент.НП; КонецЦикла; дДок.УстановитьНовыйНомер(ДругаяБаза.evalexpr(«Константа.ПрефиксНомеровДокументовУпрУчета»)); Сообщить(«»+дДок.НомерДок); дДок.Записать();

    Этот пример на 100% рабочий. Используется у меня для выгрузки документов из одной конфигурации в другую.

    Сравнение в базе OLE. Константы, перечисления, элементы справочников.

    Для сравнения значений агрегатных типов данных в базе, открытой через Оле, использовать стандартный алгоритм с использование знаков равно и неравно (=,<>) не получается. Выход простой. Необходимо перейти от сравнения агрегатных типов данных к простым типам данных — дата, строка и число.

    Отсюда вывод: мы сравниваем не сами элементы, а их уникальные атрибуты. Например, для элементов справочника — это код (если он есть), либо наименование. Для перечисления используется метод Идентификатор(). Вот два примера:

    //Сравнение реквизита номенклатуры с Константой БазоваяВалюта Если дТовар.ВалютаУчета.Код<>Другая.Константа.БазоваяВалюта.Код Тогда дТовар.ВалютаУчета=Другая.Константа.БазоваяВалюта; КонецЕсли; //Сравнение реквизита номенклатуры с перечислением Если дТовар.ТипТовара.Идентификатор()<>Другая.Перечисление.ТипыТоваров.Штучный.Идентификатор() Тогда дТовар.ТипТовара=Другая.Перечисление.ТипыТоваров.Штучный; КонецЕсли;

    Файл-серверный способ подключения

    Это самый дешевый вариант подключения в базам 1С: Предприятия и 1С: Бухгалтерии. Реализуется он следующим образом: информационная база данных хранится на одном из компьютеров (для 1С 7.7 в формате DBF, для версий 1С 8.0 и 8.1 в виде одного файла).

    При данном способе подключения не требуется никакое дополнительное программное обеспечение, только конфигурация и операционная система.

    Скорость работы программы при таком подключении определяется пропускной способностью сети. Чем больше пользователей работает с 1С ИБД, тем медленнее работает программа.

    Чтобы ускорить работу программы желательно в качестве сервера использовать компьютер с лучшими параметрами.

    Клиент-серверный способ подключения

    Этот вариант подключения используется для 1С: Предприятия 7.7 (SQL-поставка). В этом случае информационная база данных хранится на сервере под управлением Microsoft SQL Server. В 1С 7.7 пользователь формирует запрос к SQL-серверу и получает в ответ только лишь необходимую информацию, что позволяет снизить нагрузку на сеть и увеличить скорость работы программы.

    В 1С 8.0 и 8.1используется совершенная трехуровневая система доступа к 1С ИБД. Схематично ее можно описать следующим образом: Сервер SQL

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

    Вариант удаленного подключения

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

    • Терминал-сервер (RDP) отвечает за выполнение программы непосредственно на сервере. Компьютер пользователя может иметь любые вычислительные способности, поскольку от него нужно только лишь наличие монитора, клавиатуры и мыши. При работе пользователь на мониторе своего компьютера видит рабочий стол сервера. Такое подключение характеризуется небольшим сетевым трафиком, что позволяет использовать его в локальных сетях с низком пропускной способностью и при удаленном соединении через Интернет. Этот способ подключения напоминает облачные технологии, которые используются для предоставления аренды 1С. На практике можно реализовать работу пользователя в 1С: Предприятии и 1С: Бухгалтерии с использованием коммутируемого канал GPRS, скорость которого составляет 9,6 Кбит/с. Конечно же, при интенсивной работе с программой при такой маленькой скорости пользователь будет испытывать некоторые неудобства. Web-расширение используется для подключения к 1С ИБД по средствам веб-браузера (например, Firefox, Opera, Internet Explorer и т. п.) Данная технология работает аналогично тому, как функционируют интернет-магазины. На одном из компьютеров сети установлен Интернет-сервер, который предоставляет доступ к интернет-формам и отчетам, обеспечивая безопасность работы и совместимость используемой версии 1С: Предприятия и различными операционными системами.
    • Расширение для КПК делает возможным подключение к 1С ИБД с использованием современных средств связи: коммутаторов, смартфонов и карманных компьютеров, которые работают под управлением Windows Mobile 2003 или Windows Mobile 5.0.
    • Управление распределенной информационной базой 1С (УРИБ) делает возможной работу пользователей с единой ИБД с использованием ее отдельных копий и регулярной их синхронизацией. Использование данной технологии целесообразно для обеспечения работы в единой информационной базе сотрудников из удаленных филиалов или сотрудников, работающих дома, а также — обмена информации с клиентами и партнерами. Для организации обмена информацией при использовании УРИБ не требуется покупка и интеграция какого-то программного обеспечения. Достаточно просто активировать встроенную функцию 1С: Предприятия. Обмен осуществляется с помощью почтового сервера или любого другого способа передачи файлов.

    Рекомендуем также еще статьи по программам 1С:

    • Выбор режима проведения документов в 1С
    • Аппаратные и программные способы ускорения работы 1С
    • Установка 1С: Предприятие 8.0

    Вы можете получать новые материалы сайта по RSS-каналу или можете подписаться на новости 1С от Информ Актив и получать их еженедельно на Ваш e-mail .

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *