Расширение Бром для интеграции с 1С

25.12.19

Интеграция - Внешние источники данных

Из этой статьи вы узнаете, как можно быстро и просто синтегрироваться с любой конфигурацией 1С при помощи расширения Бром.

Скачать файлы

Наименование Файл Версия Размер
Расширение Бром для интеграции с 1С
.zip 39,22Kb
5
.zip 1.0.0.4-beta 39,22Kb 5 Скачать

Предисловие

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

  • механизмы взаимодействия через COM-соединение;
  • механизмы web/http - сервисов;
  • механизмы обмена XML-пакетами (конвертация данных, EnterpriseData и пр..);
  • стандартизированный протокол OData.

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

Мы решили упростить процесс интеграции с 1С и создали расширение, которое и хотим вам представить.

 

Возможности расширения

Расширение Бром может быть установлено на любую конфигурацию 1С, которая поддерживает работу с расширениями (версия совместимости 8.3.10 или выше). Расширение не требует наличия стандартных библиотек, поэтому будет работать даже на самописных конфигурациях. Расширение позволяет:

  • получать и редактировать данные объектов 1С (ссылочные объекты, константы, параметры сеанса);
  • получать выборки из коллекций с учетом сложных условий отбора и сортировки;
  • исполнять произвольные запросы на языке 1С, в том числе пакетные запросы и запросы с разметкой для построителя;
  • вызывать процедуры и функции 1С с возможностью передачи параметров и получения результата в естественном виде (без необходимости преобразования типов);
  • получать данные о метаданных конфигурации с возможностью их частичной (постраничной) загрузки;
  • передавать в обоих направлениях данные как примитивных типов, так и сложные структурированные данные (ссылки, массивы, структуры, соответствия, таблицы значений, деревья, системные перечисления и многое другое).

Функциональность позволяет создать в клиентском приложении свою ORM. Вообще-то, мы уже сделали это за вас, но об этом далее.

 

Принцип работы

Принцип интеграции с 1С следующий:

  1. Подготавливаем инфраструктуру на стороне 1С:
    1. В конфигурацию 1С устанавливаем расширение Бром. Расширение содержит веб-сервис, который будет отвечает на клиентские запросы. Также расширение содержит собственный сериализатор, который преобразует данные 1С в XDTO-объекты и обратно.
    2. Создаем одного или нескольких пользователей, которым доступны роли основной конфигурации и роли расширения (или выдаем эти роли существующим пользователям);
    3. Публикуем конфигурацию на веб-сервере, чтобы она откликалась по HTTP;
  2. В клиентском приложении подключаем готовую библиотеку, создаем клиентский объект-коннектор и пользуемся им.

На момент написания данной статьи реализованы клиентские библиотеки для .Net Core, PHP и Python.

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

 

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

Теперь давайте посмотрим как выглядит клиентский код. В этой статья я буду использовать C#. Код на PHP и Python полностью аналогичен.

В качестве удаленной конфигурации будет выступать УТ 11, вы можете проводить эксперименты на любой другой.

 

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

Подключаемую библиотеку можно скачать с сайта проекта или репозитория (библиотеки для .Net Core и Python лучше ставить из репозитория, т.к. они имеют зависимости). После подключения библиотеки к проекту нам необходимо создать объект "БромКлиент". Сделать это можно одной командой:

dynamic клиент = new БромКлиент(@"
	Публикация = http://domainname.ru/publication_name;
	Пользователь = username;
	Пароль = userpassword
");

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

Наш бром-клиент готов к использованию. Поехали дальше!

 

Вызов процедур и функций 1С

Давайте теперь вызовем простейшую функцию 1С, например "ЧислоПрописью". В качестве кода локализации укажем французский язык:

var числоПрописью = клиент.ЧислоПрописью(2547, "Л = fr_FR");

// -> "Cent vingt-trois mille cent vingt-trois 00"

Данная функция принимает и возвращает значения примитивных типов. Давайте вызовем функцию, которая вернет нам массив:

var цвета = клиент.СтрРазделить("Красный,Синий,Зеленый", ",");

// -> Массив ["Красный", "Синий", "Зеленый"]

Теперь давайте вызовем функцию "НайтиПоКоду" модуля менеджера справочника "Валюты":

var доллар = клиент.Справочники.Валюты.НайтиПоКоду(840);

//-> СправочникСсылка (Доллар)

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

var данные = клиент.РаботаСКурсамиВалют.ПолучитьКурсВалюты(доллар, DateTime.Today);

//-> Структура

var курс = данные.Курс;
var кратность = данные.Кратность;

В этом примере мы обратились к функции общего модуля, передали в нее ссылку на элемент справочника и дату. Функция вернула нам объект типа "Структура". Обращаться с этим объектом мы можем так же как и в 1С.

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

Работа со ссылками

Мы уже умеем находить ссылки на объекты коллекций в 1С. Давайте теперь получим данные этих объектов:

var заказ = клиент.Документы.ЗаказКлиента.НайтиПоНомеру("ТД00-000018", new Date(2017, 1, 1));

var датаЗаказа		= заказ.Дата;
var контрагент		= заказ.Контрагент;
var иннКонтрагента	= заказ.Контрагент.ИНН;

foreach (var стр in заказ.Товары) {
	Console.WriteLine((стр.Номенклатура, стр.Количество));
}

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

Если вам известен уникальный идентификатор объекта, то вы можете получить ссылку на стороне клиента без обращений к серверу:

var текСсылка = клиент.Документы.ЗаказКлиента.ПолучитьСсылку(new Guid("5a32b6ab-4661-11e9-912a-38d547755ef7"));

Если вам нужна ссылка на предопределенный элемент, то получить ее предельно просто:

var ставкаНДС = клиент.Перечисления.СтавкиНДС.НДС18_118;

var рольИсполнителя = клиент.Справочники.РолиИсполнителей.ОтветственныйЗаКонтрольИсполнения;

 

Редактирование объектов

Читать данные объектов мы теперь умеем. Давайте попробуем их отредактировать:

var заказ = клиент.Документы.ЗаказКлиента.НайтиПоНомеру("ТД00-000018", new Date(2017, 1, 1));

var заказОбъект = заказ.ПолучитьОбъект();

заказОбъект.Дата = DateTime.Today;
заказОбъект.Номер = "ТД00-000055";

заказОбъект.Товары.Очистить();

var стр = заказОбъект.Товары.Добавить()

стр.Номенклатура = клиент.Справочники.Номенклатура.НайтиПоКоду("000000104");
стр.Количество = 3;

заказОбъект.Записать(РежимЗаписиДокумента.Проведение);

В данном примере мы получили объект документа из ссылки, изменили реквизиты и табличную часть. Теперь попробуем создать номенклатуру и поместить ее в группу, которую тоже предварительно создадим:

// Создаем контекст группы справочника
var группаОбъект = клиент.Справочники.Номенклатура.СоздатьГруппу();
группаОбъект.Наименование = "Новая группа";
группаОбъект.Записать();

// Создаем контекст элемента справочника
var товарОбъект = клиент.Справочники.Номенклатура.СоздатьЭлемент();
товарОбъект.Родитель = группаОбъект.Ссылка;
товарОбъект.Наименование = "Новый товар";
товарОбъект.Артикул = "T-00012321";

// Записываем объект справочника
товарОбъект.Записать();

// Получаем ссылку на созданный объект
var товарСсылка = товарОбъект.Ссылка;

Теперь редактировать объекты мы тоже умеем! Двигаемся дальше!

 

Формирование выборок

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

var группаМебель = клиент.Справочники.Номенклатура.НайтиПоНаименованию("Мебель");

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

текСелектор.
	Выбрать("Наименование, Код, Производитель, Производитель.ИНН").
	Где("ЭтоГруппа", false).
	Где("Ссылка", группаМебель, ВидСравнения.ВИерархии).
	Упорядочить("Производитель").
	Упорядочить("Наименование", НаправлениеСортирвки.Убывание);

foreach (var текСсылка in текСелектор) {
	Console.WriteLine("Наименование: {0}; Код: {1}, Производитель: {2}; ИНН: {3}",
		текСсылка.Наименование,
		текСсылка.Код,
		текСсылка.Производитель,
		текСсылка.Производитель.ИНН
	);
}

// Сохраняем результат выборки в массив для последующего использования
var результат = текСелектор.ВыгрузитьРезультат();

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

Полагаю, принцип работы селектора понятен! Продолжим!

 

Выполнение запросов

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

var запрос = клиент.СоздатьЗапрос(@"
	ВЫБРАТЬ
		Номенклатура.Ссылка КАК Ссылка,
		Номенклатура.Код КАК Код,
		Номенклатура.Наименование КАК Наименование
	ИЗ
		Справочник.Номенклатура КАК Номенклатура
	ГДЕ
		Номенклатура.Артикул = &Артикул			
");
запрос.УстановитьПараметр("Артикул", "Т-0001");

var результат = запрос.Выполнить();

foreach (var стр in результат) {
	Console.WriteLine((стр.Код, стр.Наименование));
}

Мы только что выполнили простой запрос с одним параметром. Давайте теперь выполним шаблонизированный запрос:

var текЗапрос = клиент.СоздатьЗапрос(@"
	ВЫБРАТЬ ПЕРВЫЕ 5
		ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
		ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
		ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
	{ВЫБРАТЬ
		Номенклатура.*}
	ИЗ
		РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
			{(&Период)}, 
			{ (Номенклатура).*, (Характеристика).*}
		) КАК ЦеныНоменклатурыСрезПоследних
	{ГДЕ
		ЦеныНоменклатурыСрезПоследних.Цена}
	{УПОРЯДОЧИТЬ ПО
		Номенклатура.*,
		Характеристика.*}
");

// Добавляем дополнительное поле запроса с указанием синонима поля
текЗапрос.ДобавитьПоле("Номенклатура.Производитель.Наименование", "Бренд");

// Добавляем дополнительный отбор по цене
текЗапрос.ДобавитьУсловиеОтбора("Цена", 100, ВидСравнения.БольшеИлиРавно);

// Указываем дополнительное упорядочение по двум полям
текЗапрос.ДобавитьУпорядочение("Номенклатура.Производитель");
текЗапрос.ДобавитьУпорядочение("Характеристика", НаправлениеСортировки.Убывание);

var результат = текЗапрос.Выполнить(ОбходРезультатаЗапроса.Прямой);

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

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

Если вам нужно выполнить пакетный запрос, то вместо функции "Выполнить" достаточно вызвать "ВыполнитьПакет". Результатом будет массив таблиц или массив деревьев, в зависимости от указанного типа обхода.

 

Обучающие материалы

Мы записали обучающие видеоролики, которые демонстрируют работу расширения:

 

Заключение

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

На текущий момент расширение и клиентские модули находятся в стадии beta-тестирования и распространяются по свободной лицензии.

интеграция обмен расширение загрузка выгрузка RPC web-сервис .Net C# PHP Python

См. также

Перенос данных из Парус 8 в ЗГУ 3

Зарплата Внешние источники данных Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    22447    19    1    

22

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9207    9    8    

10

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    15745    10    17    

11

Перенос данных из Парус 7.хх в ЗГУ ред.3

Внешние источники данных Зарплата Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 7.хх учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

24000 руб.

24.04.2017    48700    97    163    

86

Перенос начальных остатков из Парус 7.71 в БГУ

Внешние источники данных Взаиморасчеты Учет ОС и НМА Логистика, склад и ТМЦ Бюджетный учет Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 2.0 1С:Бухгалтерия государственного учреждения Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Перенос словарей и начальных остатков из ПП Парус-Бухгалтерия Бюджет 7.71 в 1Сv8 БГУ2. Заполнение словарей и документов по вводу начальных остатков. Не требуется установка ПП Парус7. Возможна дозагрузка. Позволит автоматически и наиболее полно ввести данные в программу для начала работы. 

15600 руб.

08.12.2011    81560    128    123    

147
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. capitan 2466 07.08.19 14:02 Сейчас в теме
Вспоминается...
А Степанида Матвеевна большая дыра ... в компьютерой безопасности нашей фирмы
Старые знакомые. На этот раз без знойных женщин обошлось.
А зря.
Это расширение уже на Хабре мне помнится заклевали.
Безопасность его не нулевая, а отрицательная
В добром здравии и своем разуме редкий человек его поставит на свою конфигурацию

Но на Хабре то люди не курсе стандартов разработки 1С, поэтому они к разыменованию через точку отнеслись спокойно.
А так то в программировании 1С рекомендуют запросами пользоваться
2. itworks 48 07.08.19 18:52 Сейчас в теме
На хабре люди в курсе. Такие особенности работы с объектами есть во многих ORM, 1С в этом плане не особенная. Работа с запросами в расширении предусмотрена, можно получать данные и так и так, и даже третьим способом через выборки с явным указанием полей.

Единственная дыра в безопасности - это закрытый код. Такую проблему можно решить в индивидуальном порядке.
3. capitan 2466 08.08.19 11:15 Сейчас в теме
(2)
Единственная дыра в безопасности - это закрытый код

Я так не смеялся со времен выпускных экзаменов )))

Закрытый код - это реально шедевр, это вам не полуголые женщины в роликах ютюба
За это люблю программистов 1С

// Функция для страпонации декомпилятора, не содержит смысла
Функция СтрапонаторДекомпилятора()
ПеременнаяСтрапонации = "";
МассивСтрапонации = Новый Массив();

ИтоговыйСтрапонатор = "";
Для Каждого Элемент Из МассивСтрапонации Цикл
ВременнаяПеременнаяСтрапонации = СокрЛП(ПеременнаяСтрапонации + Элемент);
Если ВременнаяПеременнаяСтрапонации = ПеременнаяСтрапонации Тогда
СтруктураСтрапонации = Новый Структура();
СтруктураСтрапонации.Вставить("ХуитологическаяКонстанта", ВременнаяПеременнаяСтрапонации + "КонстантаВдупления");

Пока СтруктураСтрапонации.ХуитологическаяКонстанта <> Неопределено Цикл
ЕщеПеременная = 1 / (2 + 5) + СтруктураСтрапонации.ХуитологическаяКонстанта;

Если ЕщеПеременная <> "ПарметрАдекватности" Тогда
СтруктураСтрапонации.Очистить();
Иначе
Если ЕщеПеременная <> "ФакторБыдлокода" Тогда
СтруктураСтрапонации.Вставить("ПоПолной", "Полнее не бывает");
Иначе
Для к = 69 По 69 * 69 Цикл
п = к - (к / 2);
к = к + п;
Переменная_С_Палками = "| | | | | |";
Если к > п Или п = "Страпонированное состояние почти достигнуто" Тогда
Для о = 69 По 69 * (69 - 68) Цикл
п = о - (к / 2);

к = к + п;
Если к > о Или п = "Уже вот вот страпонируется" Или Строка(Истина и Не Ложь) = Истина Тогда
СтруктураСтрапонации.Вставить("ВставлялиУже", "Во внешнем цикдле по полной заправили!");
Иначе
КайфовыйПараметр = " Мир, брат! ";
Возврат СокрЛП(КайфовыйПараметр);
КонецЕсли;

Попытка
Для Каждого БесполезныйПараметр Из СтруктураСтрапонации Цикл
Сообщить(БесполезныйПараметр.Значение);
КонецЦикла;
Исключение
Сообщить("Не фортануло!");
Попытка
Для Каждого БесполезныйПараметр Из СтруктураСтрапонации.ПоПолной Цикл
Если БесполезныйПараметр > 0 Тогда
ПеременнаяОтсутствияСмыслаЖизни = "НеопределеноКакСтрока";
Иначе
Сообщить("Иполнение кода достиго критической безысходности.");
КонецЕсли;
КонецЦикла;
Исключение
Сообщить("Опять не фортануло!");
КонецПопытки;
КонецПопытки;
КонецЦикла;
МассивСтрапонации[0] = ПеременнаяСтрапонации;
МассивСтрапонации[к + 0] = СтруктураСтрапонации.ПоПолной;
КонецЕсли;

МассивСтрапонации[1] = 5 + ПеременнаяСтрапонации + "Этот код обречен быть непонятым...";
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;

Возврат "Смысл не найден!";
КонецЕсли;
КонецЦикла;

Возврат "Декомпилятор успешно страпонирован. Возрадуемся!";
КонецФункции

Функция ИнформацияОбАвторе() Экспорт
Возврат "Модуль разработан ООО ""ИТВОРКС"". Автор исходного кода - Шаганов Антон Павлович (ООО ""ИТВОРКС"").";
КонецФункции
Показать
4. itworks 48 08.08.19 11:47 Сейчас в теме
5. пользователь 08.08.19 12:33
Сообщение было скрыто модератором.
...
7. пользователь 08.08.19 12:56
Сообщение было скрыто модератором.
...
10. пользователь 08.08.19 14:11
Сообщение было скрыто модератором.
...
12. itworks 48 08.08.19 14:45 Сейчас в теме
(10) Спасибо, что предупредили.
6. itworks 48 08.08.19 12:54 Сейчас в теме
(3) Раз уж страпонатор не помогает, выложил с исходниками.
andreosh; Perfolenta; +2 Ответить
9. aspirator23 339 08.08.19 14:10 Сейчас в теме
(6)Чтоб все были такими же щедрыми. :)
8. aspirator23 339 08.08.19 14:08 Сейчас в теме
11. пользователь 08.08.19 14:13
Сообщение было скрыто модератором.
...
13. buzzzard 51 23.12.19 14:40 Сейчас в теме
Интересует пример подключения к Брому из 1С.
14. itworks 48 25.12.19 12:41 Сейчас в теме
(13) Можно подключиться через WS-ссылку на сервис в другой базе, но это довольно муторно.
Между 1С обмены настраивать проще, наверно, через COM или правилами обмена.
15. zhichkin 1438 15.03.20 23:51 Сейчас в теме
На github репозиторий не появился ?
В частности интересует сам клиент Брома на .NET Core.
16. itworks 48 17.03.20 17:51 Сейчас в теме
18. andreosh 103 03.05.21 19:41 Сейчас в теме
Не удается запустить на php c brom.php. include "brom.php"; отрабатывает а на эту строку ругается:
$клиент = new БромКлиент("http://localhost/bromdemo", "BromUser", "1");
Fatal error: in C:\OSPanel\domains\1C\bromclient.php on line 7
А из Перфолента.NET работает
Клиент = Новый БромКлиент("Публикация = http://localhost/bromdemo;Пользователь=BromUser;Пароль = 1;");
Я пытаюсь из
Open Server Panel v5.2.2 с настройкой
Apache-PHP-7.2 PHP-7.2
20. itworks 48 04.05.21 01:11 Сейчас в теме
(18) С кодировкой файлов не может быть проблемы?
Файл, в котором Вы к конструктору обращаетесь, в юникоде сохранен?
19. пользователь 04.05.21 01:10
Сообщение было скрыто модератором.
...
21. andreosh 103 05.05.21 08:28 Сейчас в теме
(20) Вы правы. Заработало. Спасибо.
22. andreosh 103 06.05.21 08:37 Сейчас в теме
А предполагается ли создания Brom.DLL на С++ для Win32 и Win64 ?
24. itworks 48 06.05.21 13:00 Сейчас в теме
(22) Вообще не предполагалось. Именно в таком же виде его будет затруднительно реализовать на С++, т.к. там нет динамических объектов (по той же причине нет реализации для Java). Но в целом, наверно, можно какую-то другую реализацию придумать. В любом случае его можно самостоятельно сделать, используя интерфейс SOAP, который в документации описан.
23. itworks 48 06.05.21 13:00 Сейчас в теме
Вообще не предполагалось. Именно в таком же виде его будет затруднительно реализовать на С++, т.к. там нет динамических объектов (по той же причине нет реализации для Java). Но в целом, наверно, можно какую-то другую реализацию придумать. В любом случае его можно самостоятельно сделать, используя интерфейс SOAP, который в документации описан.
25. andreosh 103 09.05.21 15:12 Сейчас в теме
(23) А еще бы хотелось иметь функцию, которая передает SOAP-пакет и получает XML-строку.
26. andreosh 103 17.05.21 08:16 Сейчас в теме
Столкнулся с проблемой: нет соединения с базой, предполагаю, по причине, что адрес начинается с https. С другими базами, у которых адрес начинается c http таких проблем нет. Через браузер по обращению по адресу после ввода логина и пароля таблицу wsdl выводится в браузере, то есть на сервере в облаке настройки правильные. Может ли быть проблема в https ?
27. andreosh 103 17.05.21 09:21 Сейчас в теме
(26) Проблема, похоже не ваша, так как соединение через PHP проходит нормально. Не соединяет только через Перфолента. Снимаю вопрос.
28. Perfolenta 204 30.05.21 04:08 Сейчас в теме
(27) проблема с https не в Перфоленте, а в библиотеке Брома для NetFramework (библиотеку для Net Core я не проверял и не знаю, может ли она работать с https)
я уже эту проблему решил и скоро выложу библиотеку Брома адаптированную для Перфоленты...
andreosh; +1 Ответить
29. artspeed 179 07.07.22 05:40 Сейчас в теме
Столкнулся с проблемой. При добавлении строки в табличную часть документ 8.3 Уформ через бромклиента - почему то если документ не содержит строк то добавление идет, если же нет, то просто игнорирует.
В общем заполняет только пустую таб часть.

Фрагмент кода
for st in rez:
            овссылка = st.Ссылка
            ов = овссылка.ПолучитьОбъект()
            стр = ов.СписокРабот.Добавить()
            стр.Количество = vremyaraboti
            ов.Записать()


Когда в 1С подобная конструкция работает, то строчка добавляется в конец таблицы. А здесь видимо как-то работает по другому. Или ошибка.
rvd_buzzer; +1 Ответить
31. rvd_buzzer 13.04.23 14:48 Сейчас в теме
(29) Вы как то смогли это обойти?
32. artspeed 179 13.04.23 15:19 Сейчас в теме
(31) я сделал справочник обработчик в 1с. И создание построчное. А в самой 1с написал процедуру обработки этих строк с последующим удалением после отработки. По сути получаю данные а потом как хочу так и обрабатываю.

Заметил еще один глюк. Проблемы с временными таблицами периодически наблюдаются в запросе из python.


А так бром решение классное. Я написал своего бота со связкой телеграмм, пайтон, базы 1с. Теперь через телеграмм собираю нужные данные и вывожу в мессенджер.

В общем приспособился к багам. Жаль проект не развивается(
30. Steelvan 302 05.01.23 23:04 Сейчас в теме
Приветствую. уважаемые !

Скачал это решение, начал смотреть код.
Сходу замечание.

Во взятеле __get вы пользуетесь конструкцией Выбор.
Понятно, что это применяется для работы без учета регистра для php, который учитывает регистр.
Типа Объект.КлЮч или Объект.клюЧ чтобы работало.
Меня смущает применение mb_strtolower.
Мало того, что это расширение подключать надо, так оно еще и просадку дает по скорости.
Плюс пухнет кодовая база.

И это только ради эфемерного исправления опечатки в регистре ?
Вы серьезно ?

Ваш класс
```
class КлючИЗначение
{
    function __construct($ключ, $значение)
    {
        $this->key = $ключ;
        $this->value = $значение;
    }
    private $key;
    private $value;
    public function __get($name)
    {
        $strName = mb_strtolower($name);
        switch ($strName)
        {
            case 'ключ':
                return $this->key;
            case 'key':
                return $this->key;
            case 'значение':
                return $this->value;
            case 'value':
                return $this->value;
        }
        return null;
    }
...
}
Показать

```

Думается мне правильнее

```
class КлючИЗначение{
	
	public $Ключ;
	public $Значение;
	
	public function __construct($ВходКлюч, $ВходЗначение){
		$this->Ключ = $ВходКлюч;
		$this->Значение = $ВходЗначение;
	}
}
Показать

```

Код на порядок короче и без метода взятеля __get свойства "Ключ" и "Значение" доступны снаружи.
Кодопис на php и так знает что надо писать сразу в нужном регистре.
33. user1470785 03.06.23 02:39 Сейчас в теме
Интересно. А проект уже заброшен?
На сайте все еще реализация бета. И уже давно.
34. SQV0 32 15.01.24 16:36 Сейчас в теме
Если цель стоит: "Выбирать данные из 1С для BI- аналитики", то есть такое - https://infostart.ru/marketplace/1755776/
35. user1470785 27.02.24 16:36 Сейчас в теме
(34) Вы там по стоимости не сильно прифигели?
36. SQV0 32 27.02.24 16:39 Сейчас в теме
(35)
Вы там по стоимости не сильно прифигели?

Ни в коем случае.
Решение крайне востребовано. Учтите, что по ссылке представлена версия PRO (https://infostart.ru/marketplace/1755776/)

Версии LITE и Datalens дешевле намного.
За демо и запросом стоимости обратитесь к менеджеру Инфостарт
Оставьте свое сообщение