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

27.06.13

Разработка - Языки и среды

В рамках этого урока мы изучим интеграцию 1С языком программирования C# на примере обращения к функционалу 1С из программ на C#

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

На прошлом уроке мы из 1С обращались к программе на C#.  Сегодня сделаем наоборот: из C# будем обращаться в программу 1С. Для этого нам нужно подключить к проекту на C# COM-объект 1С (через "Проекты" -> "Добавить ссылку"):

 

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

 

Соответствующую библиотеку мы добавим с закладки COM:

 

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

 

Ну и все, теперь мы можем юзать 1С из программы на C#. Вот простейший пример, создание элемента справочника "номенклатура":

        private void button1_Click(object sender, EventArgs e)

        {

            string user = "Админ";

            string pas = "";

            string file = "C:\\1cv82\\Личные базы\\ДБ";

            dynamic result;

            dynamic refer;

            V82.COMConnector com1s = new V82.COMConnector();

 

            com1s.PoolCapacity = 10;

            com1s.PoolTimeout = 60;

            com1s.MaxConnections = 2;

            result = com1s.Connect("File='" + file + "';Usr='" + user + "';pwd='" + pas + "';");

            refer = result.Справочники.Номенклатура.СоздатьЭлемент();

            refer.Наименование = "Создано из C#";

            refer.Записать();

        }

 

После запуска этой программы в 1С у нас добавится элемент справочника "Номенклатура":

 

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

 

 

Источник: http://easyprog.ru/index.php?option=com_content&task=view&id=1453&Itemid=48

См. также

Зачем нам 1С:Элемент

Мобильная разработка Языки и среды Бесплатно (free)

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

19.03.2024    6856    ROk_dev    56    

37

(Не) Строгая типизация 1С

Языки и среды Платформа 1С v8.3 Бесплатно (free)

Существует множество языков программирования, и каждый имеет свои особенности по работе с типами данных. Слабые, явные, динамические и другие... Но кто же здесь 1С и почему с приходом "строгой" типизации EDT 1С-программистам стоит задуматься над изменением своих привычек.

16.01.2024    4218    SeiOkami    21    

55

Простое приложение на Dart

Языки и среды Бесплатно (free)

Пример небольшого приложения, с которого можно начать изучать язык программирования Dart.

08.08.2023    3192    acvatoris    6    

13

Статический анализатор кода 1С на Си

Языки и среды Платформа 1С v8.3 Россия Бесплатно (free)

Написание статического анализатора для 1С традиционным способом на Си.

30.06.2023    2982    prohorp    15    

12

Сквозная задача на Исполнителе - часть первая (IMAP)

Языки и среды Абонемент ($m)

Поставили нам задачу - вынести на отдельный сервер функционал получения заказов от клиентов по электронной почте, парсинг полученных XLS в приемлемый вид и трансформация заказов в красивый JSON, понятный нашей учетной системе на 1С. Всю эту красоту желательно запустить в отдельном докер - контейнере, по возможности не тратя лицензии, поэтому отдельно стоящую конфигурацию на БСП отвергаем сразу. Можно было бы собрать всё на Apache Airflow или Apache NiFi, но решили попробовать реализовать всю логику без Open Source, будем делать свой ETL, с Исполнителем, который в версии 3.0 научился взаимодействовать с электронной почтой по IMAP. Начнем с середины - сначала напишем скрипты, а потом соберем их в рабочую конструкцию

1 стартмани

01.06.2023    1895    0    kembrik    2    

7

1С# - Расширяем код 1С кодом на C#

Языки и среды Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Вставки кода на C# внутри кода на 1С.

7 стартмани

07.04.2023    9286    4    SerVer1C    56    

43

Независимая разработка совместимых компонент на ORM 1С – миф или истина где-то в аннотациях Java?

Языки и среды Платформа 1С v8.3 Бесплатно (free)

При работе с 1С ORM (object relation mapping) все время преследует ощущение постоянного создания монолитного приложения — один раз привязался к какой либо сущности (например, справочник Контрагенты), и весь код заполнен ссылками на эту конкретную реализацию. Можно ли независимо разрабатывать в ORM совместимые между собой справочник «Контрагентов» и использующий его документ «Платежное поручение», но при этом избежать жестких зависимостей? Спасут ли нас микросервисы? Пример на аннотациях Java демонстрирует, как это возможно делать.

13.03.2023    1024    1CUnlimited    0    

2

xPath в 1С

Файловый обмен (TXT, XML, DBF), FTP Языки и среды Платформа 1С v8.3 Бесплатно (free)

Опыт работы методами языка xPath в 1С.

04.03.2023    4935    DemetrKlim    40    

46
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. serg__k 79 12.03.14 00:53 Сейчас в теме
Просьба помочь, на строке с dynamic возникает ошибка:
Не удалось найти имя типа или пространства имен "dynamic" (пропущена директива using или ссылка на сборку?)
Как можно исправить ошибку?
6. cepera1575 29.10.15 07:50 Сейчас в теме
(1) serg__k, тип "dynamic" появился в VS 2010. В более ранних версиях его нету.
2. oleg_km 04.06.14 09:00 Сейчас в теме
dynamic появился вроде в NET 4.0
3. evrey96 01.02.15 18:46 Сейчас в теме
Это скрипт работает на ASP.NET если да то как?
4. bator.koreev 10.07.15 17:58 Сейчас в теме
При обращении к платформе 8.3 необходимо в настройках проекта поставить 32 разрядную систему))
5. nickpugachev 10.07.15 18:32 Сейчас в теме
(4) bator.koreev, при обращении к 8.3 не надо ломиться в COM :)
да и сам смысл ломиться в COM какой, если есть более приятные и для .Net и для 1С способы - Веб-сервисы/HTTP сервисы. Только если надо ввалить кучу данных. Но и в этом случае (да простит меня 1С :)) проще использовать более родные способы для .Net из пространства имен System.Data или даже SSIS
7. ixilimuse 191 14.08.17 07:47 Сейчас в теме
Автору большое спасибо за вполне себе грамотную и подробную статью. По существу все супер.

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

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

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

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

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

Буду благодарен за любое направление в нужную сторону, где копать(искать).
8. ixilimuse 191 14.08.17 09:48 Сейчас в теме
(7) upd: Уже разобрался что для вызова методов через COM соединение существует Модуль внешнего соединения. Действительно - функции объявленные в нем - благополучно вызываются из C#. И даже параметры передаются корректно.
Но! Стоит мне вызвать в функции, объявленной в модуле внешнего соединения, функцию из другого, общего модуля - возникает та же самая ошибка. Хотя в общем модуле тоже стоит признак "Внешнее соединение". Уже думал проблема с ролями или что-то ещё. Возвращаю из общего модуля без всяких обработок просто строку "Проверка дебаг" - ошибка осталась. Возврат этой же строки непосредственно из модуля внешнего соединения - проходит корректно. Продолжаю поиски
9. ixilimuse 191 14.08.17 12:03 Сейчас в теме
(7) upd1: Разобрался окончательно. Всем спасибо! Первым делом надо было отлаживать всю схему из 1С, а потом уже код переносить в C#.

В 1С было видно что за ошибки возникали. И сразу все пофиксил и все заработало.
А именно: в общем модуле были ссылки на общий модуль который не имел флага "Внешнее соединение", в общем модуле были команды которые доступны только на клиенте, не обрамленные проверкой что бы выполнять только на клиенте. Плюс жесткий косяк с моей стороны - назвал методы в модуле внешнего соединения и в общем модуле - одинаково.
После устранения описанных ошибок - все заработало.
10. v.bachinsky 02.02.18 14:50 Сейчас в теме
Здравствуйте. Большая просьба к знатокам разъяснить момент. Могу ли я асинхронно дергать функции из модуля внешнего соединения, в контексте выполнения одного экземпляра COM, или нужно дожидаться завершения выполнения предыдущей функции? 1С однопоточна же. Это скорее всего относится и к COM-объекту?
11. FoxyG 22.05.23 22:08 Сейчас в теме
Доброго дня/вечера может кто сталкивался. Нужно получить список всех запущенных процессов.
Открываю соединение через com, а как получить список всех запущенных процессов и вывести все параметры, такие как захвачено СУБД и т.д, пока не разобрался. За ранее благодарю.
Оставьте свое сообщение