C# + 1C. Урок 2. Обращение к 1С из C#

10 Comments

  1. serg__k

    Просьба помочь, на строке с dynamic возникает ошибка:

    Не удалось найти имя типа или пространства имен «dynamic» (пропущена директива using или ссылка на сборку?)

    Как можно исправить ошибку?

    Reply
  2. oleg_km

    dynamic появился вроде в NET 4.0

    Reply
  3. evrey96

    Это скрипт работает на ASP.NET если да то как?

    Reply
  4. bator.koreev

    При обращении к платформе 8.3 необходимо в настройках проекта поставить 32 разрядную систему))

    Reply
  5. nickpugachev

    (4) bator.koreev, при обращении к 8.3 не надо ломиться в COM 🙂

    да и сам смысл ломиться в COM какой, если есть более приятные и для .Net и для 1С способы — Веб-сервисы/HTTP сервисы. Только если надо ввалить кучу данных. Но и в этом случае (да простит меня 1С :)) проще использовать более родные способы для .Net из пространства имен System.Data или даже SSIS

    Reply
  6. cepera1575

    (1) serg__k, тип «dynamic» появился в VS 2010. В более ранних версиях его нету.

    Reply
  7. ixilimuse

    Автору большое спасибо за вполне себе грамотную и подробную статью. По существу все супер.

    Но у меня возникли вопросы на которые сейчас не знаю ответа. В процессе поиска. Поиски чуть подзатянулись и поэтому хочу спросить, может автор статьи сталкивался уже? Или может кто ещё подскажет?

    В общем, создаю я в C# комОбъект. Вижу через него справочники, регистры и т.п. Даже могу вызвать метод ПолучитьСтруктуруХраненияБазыДанных(). Хоть и не могу потом на стороне C# разобрать результат по частям. Но это не важно.

    Написал пару методов для себя на стороне 1С.

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

    Проблема: ни тот, ни другой метод я не могу использовать на стороне C#. Получаю ошибку System.NullReferenceException: «Ссылка на объект не указывает на экземпляр объекта.»

    Тоже самое получаю и при вызове ТекущаяДата().

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

    Опять же начинаю сомневаться в том — смогу ли я корректно эту обработку запустить? Там в процедуру надо передать ряд параметров у которых типы: Строка, дата, булево…

    Буду благодарен за любое направление в нужную сторону, где копать(искать).

    Reply
  8. ixilimuse

    (7) upd: Уже разобрался что для вызова методов через COM соединение существует Модуль внешнего соединения. Действительно — функции объявленные в нем — благополучно вызываются из C#. И даже параметры передаются корректно.

    Но! Стоит мне вызвать в функции, объявленной в модуле внешнего соединения, функцию из другого, общего модуля — возникает та же самая ошибка. Хотя в общем модуле тоже стоит признак «Внешнее соединение». Уже думал проблема с ролями или что-то ещё. Возвращаю из общего модуля без всяких обработок просто строку «Проверка дебаг» — ошибка осталась. Возврат этой же строки непосредственно из модуля внешнего соединения — проходит корректно. Продолжаю поиски

    Reply
  9. ixilimuse

    (7) upd1: Разобрался окончательно. Всем спасибо! Первым делом надо было отлаживать всю схему из 1С, а потом уже код переносить в C#.

    В 1С было видно что за ошибки возникали. И сразу все пофиксил и все заработало.

    А именно: в общем модуле были ссылки на общий модуль который не имел флага «Внешнее соединение», в общем модуле были команды которые доступны только на клиенте, не обрамленные проверкой что бы выполнять только на клиенте. Плюс жесткий косяк с моей стороны — назвал методы в модуле внешнего соединения и в общем модуле — одинаково.

    После устранения описанных ошибок — все заработало.

    Reply
  10. v.bachinsky

    Здравствуйте. Большая просьба к знатокам разъяснить момент. Могу ли я асинхронно дергать функции из модуля внешнего соединения, в контексте выполнения одного экземпляра COM, или нужно дожидаться завершения выполнения предыдущей функции? 1С однопоточна же. Это скорее всего относится и к COM-объекту?

    Reply

Leave a Comment

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