Реализация протокола удаленного вызова процедур в формате JSON (JSON-RPC)

Публикация № 1132087

Разработка - Обмен данными 1С

RPC JSON-RPC Обмен

Удалённый вызов процедур (от англ. Remote Procedure Call, RPC) - технология, позволяющая программам вызывать функции и процедуры на удалённых компьютерах (более точная формулировка: "вызывать функции или процедуры в другом адресном пространстве", т.е. это не обязательно другой компьютер). В данной публикации описана реализация этой технологии в 1С. В качестве протокола для передачи сообщений используется JSON (JSON-RPC), что позволяет удалённым системам (например, веб-приложениям) вызывать функции 1С (только те функции, которые определит разработчик).

 

Общие сведения.

 

Существует множество способов реализации обмена данными сторонних программ с 1С с использованием HTTP-сервисов. Данная реализация позволяет определить один HTTP-сервис и просто добавлять нужные процедуры в общий модуль без переработки (изменения существующих или добавления новых) HTTP-сервисов. В качестве формата протокола используется JSON.

Ниже приведено краткое описание JSON-RPC 2.0.

Запрос должен содержать три обязательных свойства:

  • method - Строка с именем вызываемого метода.
  • params - Массив данных, которые должны передаваться методу, как параметры.
  • id - Значение любого типа, которое используется для установки соответствия между запросом и ответом.

Так же должна быть передана версия протокола (в нашем случае "2.0") в параметре jsonrpc. В спецификации протокола этот параметр не указан, как обязательный, но в реализации данной публикации его указание обязательно.

Пример запроса для вызова процедуры ПолучитьСчетаКлиента(ИНН, НачалоПериода, КонецПериода) (данная процедура использована в качестве примера, конкретные процедуры определяет разработчик):

{"jsonrpc": "2.0", "method": "ПолучитьСчетаКлиента", "params": ["7705260674", "2019-09-01", "2019-09-30"], "id": 1}

Сервер (в нашем случае - решение на 1С) отсылает ответ, содержащий следующие свойства:

  • result - Результат выполнения метода. Если во время выполнения метода произошла ошибка, то это свойство должно быть установлено в null.
  • error - Код ошибки, если произошла ошибка во время выполнения метода, иначе null.
  • id - То же значение идентификатора, что и в запросе, к которому относится данный ответ (используется для сопоставления самого запроса и его результата, например, если асинхронно отправляется сразу несколько запросов).

Пример ответа:

{"jsonrpc": "2.0", "result": [{"uid": "422f9d5c-1032-11e5-92f1-0050568b35ac", "num": "ТД00-000001", "date": "2019-09-11T16:06:15", "sum": 127125}], "id": 1}

Более подробно с протоколом JSON-RPC можно ознакомиться на википедии.

В данной публикации удалённый вызов процедур 1С реализован в виде расширения. В этом расширении присутствует HTTP-сервис rpc_JSONRPC2. После публикации http-сервиса на веб-сервере сторонние системы (в качестве которой может выступать и другая база 1С) смогут выполнять запросы по адресу http://<адрес_базы>/hs/jsonrpc2.

Вызываемые удалённые процедуры должны располагаться в общем модуле расширения rpc_УдаленныеПроцедурыПереопределяемый.

Особенности реализации 1С.

Для упрощения создания собственных удалённых процедур были реализованы следующие особенности:

  • Передаваемые в запросе JSON строковые значения параметров true и false преобразуются в тип 1С Булево.
  • Передаваемые в запросе JSON строковые значения параметров типа 2019-01-10Т10:23:54 (дата в формате XML) преобразуются в тип 1С Дата.
  • Передаваемые в запросе JSON строковые значения параметров типа GUID преобразуются в тип 1С УникальныйИдентификатор.
  • Удалённая процедура (в 1С функция) должна возвращать только значения, которые могут быть сериализованы в JSON. Исключение составляет тип ТаблицаЗначений. В типовом механизме сериализации JSON этот тип не может использоваться, но в данном решении для упрощения возврата ответа (чтобы разработчик не писал лишний код) таблица значений преобразуется в массив структур.

Для передачи ошибок используется вызов исключения.

Например, вот так можно реализовать обработку ошибок в приведённой выше в качестве примера процедуре ПолучитьСчетаКлиента:

Функция ПолучитьСчетаКлиента(ИНН, НачалоПериода, КонецПериода) Экспорт
	
	Контрагент = НайтиКонтрагентаПоИНН(ИНН);
	Если Контрагент.Пустая() Тогда
		ТекстСообщения = СтрШаблон(НСтр("ru='Не найден клиент с ИНН: %1'"), ИНН);
		ВызватьИсключение ТекстСообщения;
	КонецЕсли; 
	
    ...
	
КонецФункции 

В таком случае, если в запросе будет передан ИНН контрагента, отсутствующего в информационной базе, то клиентом будет получен ответ следующего вида:

{"jsonrpc": "2.0", "error": {"code": -32800, "message": "Не найден клиент с ИНН: 0777123413"}, "id": 1}

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

  • -32600, "Invalid JSON-RPC" - возвращается, если передан неверный формат сообщения (не удалось прочитать JSON) или отсутствуют обязательные параметры;
  • -32700, "Parse error" - возвращается, если переданы неверные параметры (например, отсутствует параметр method или параметр params не является массивом и т.п.);
  • -32601, "Procedure not found" - вызываемая функция отсутствует в общем модуле rpc_УдаленныеПроцедурыПереопределяемый;
  • -32800, <текст ошибки> - ошибка, возникшая во время выполнения метода (см. пример ответа с ошибкой выше).

 

Перейдём от теории к практике.

 

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

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

В данном случае порядок действий будет следующим:

1. Добавляем в конфигурацию расширение из этой публикации и публикуем HTTP-сервис rpc_JSONRPC2.

2. Открываем общий модуль расширения rpc_УдаленныеПроцедурыПереопределяемый и реализуем процедуру ПолучитьСчетаКлиента:

Функция ПолучитьСчетаКлиента(ИНН, НачалоПериода, КонецПериода) Экспорт
	
	Контрагент = НайтиКонтрагентаПоИНН(ИНН); // Реализация данной функции не представляет проблем, оставим её "за скобками".
	Если Контрагент.Пустая() Тогда
		ТекстСообщения = СтрШаблон(НСтр("ru='Не найден клиент с ИНН: %1'"), ИНН);
		ВызватьИсключение ТекстСообщения;
	КонецЕсли; 
	
	ТаблицаСчетов = Новый ТаблицаЗначений;
	ТаблицаСчетов.Колонки.Добавить("uid", Новый ОписаниеТипов("УникальныйИдентификатор"));
	ТаблицаСчетов.Колонки.Добавить("num", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(11)));
	ТаблицаСчетов.Колонки.Добавить("date", Новый ОписаниеТипов("Дата",,, Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя)));
	ТаблицаСчетов.Колонки.Добавить("sum", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)));
	
	Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	СчетНаОплатуКлиенту.Ссылка КАК Ссылка,
	|	СчетНаОплатуКлиенту.Номер КАК num,
	|	СчетНаОплатуКлиенту.Дата КАК date,
	|	СчетНаОплатуКлиенту.СуммаДокумента КАК sum
	|ИЗ
	|	Документ.СчетНаОплатуКлиенту КАК СчетНаОплатуКлиенту
	|ГДЕ
	|	СчетНаОплатуКлиенту.Контрагент = &Контрагент
	|	И СчетНаОплатуКлиенту.Дата МЕЖДУ &НачалоПериода И &КонецПериода");
	Запрос.УстановитьПараметр("Контрагент", Контрагент);
	Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(НачалоПериода));
	Запрос.УстановитьПараметр("КонецПериода", КонецДня(КонецПериода));
	
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		СтрокаТаблицы = ТаблицаСчетов.Добавить();
		ЗаполнитьЗначенияСвойств(СтрокаТаблицы, Выборка);
		СтрокаТаблицы.uid = Выборка.Ссылка.УникальныйИдентификатор();
	КонецЦикла; 
	
	Возврат ТаблицаСчетов;
	
КонецФункции 

 

3. Важный момент. Чтобы была возможность выполнять удаленный вызов данной функции нужно добавить её имя в процедуру УдаленныеПроцедуры общего модуля rpc_УдаленныеПроцедуры. Ниже приведён пример такой процедуры:

Функция УдаленныеПроцедуры() Экспорт
	
	УдаленныеПроцедуры = Новый Массив;
	
	///////////////////////////////////////////////////////////////////////////////////////////////////////
	// Необходимо добавить следующие строки:
	//
	УдаленныеПроцедуры.Добавить("ПолучитьСчетаКлиента");
	УдаленныеПроцедуры.Добавить("АннулироватьСчетКлиента");
	///////////////////////////////////////////////////////////////////////////////////////////////////////
	
	Возврат УдаленныеПроцедуры;
	
КонецФункции 

Это сделано для безопасности с целью исключения выполнения произвольного кода, непредусмотренного разработчиком. Дело в том, что для вызова процедур используется метод 1С Выполнить:

Выполнить("Результат = rpc_УдаленныеПроцедурыПереопределяемый." + ИмяМетода + "(" + ... + ")";

Злоумышленник может в параметре JSON params передать строку, например для описанной выше функции

{"jsonrpc": "2.0", "method": "ПолучитьСчетаКлиента(\"7705260674\", '20190901', '20190930'); ВредныйМодуль.УдалитьВсе()", ...}

В результате чего будет выполнен код:

Выполнить("Результат = rpc_УдаленныеПроцедурыПереопределяемый.ПолучитьСчетаКлиента(""7705260674"", '20190901', '20190930'); ВредныйМодуль.УдалитьВсе() ...

Т.е. после выполнения предусмотренного разработчиком метода "ПолучитьСчетаКлиента" начнёт выполняться произвольный код, который выполняться не должен!

Благодаря добавлению имён процедур в методе УдаленныеПроцедуры общего модуля rpc_УдаленныеПроцедуры такая возможность исключается. Для системы в таком случае имя метода будет не "ПолучитьСчетаКлиента", а ПолучитьСчетаКлиента("7705260674", '20190901, '20190930); ВредныйМодуль.УдалитьВсе(). Такая строка не определена в методе УдаленныеПроцедуры общего модуля rpc_УдаленныеПроцедуры, поэтому ни какой код выполняться не будет, а будет выдано сообщение об ошибке.

 

Теперь веб-программисту достаточно будет выполнить POST запрос по адресу http://<адрес_базы>/hs/jsonrpc2 в формате вида

{"jsonrpc": "2.0", "method": "ПолучитьСчетаКлиента", "params": ["7705260674", "2019-09-01", "2019-09-30"], "id": 1}

чтобы получить необходимые данные.

Всё работает, всё хорошо, но возникает новое требование - дать возможность клиенту из личного кабинета аннулировать счёт на оплату. И вот разработчик личного кабинета просит разработчика 1С реализовать такую возможность.

Для этого достаточно вновь открыть общий модуль расширения rpc_УдаленныеПроцедурыПереопределяемый и реализовать новую процедуру АннулироватьСчетКлиента(ИдентификаторСчета).

Процедура АннулироватьСчетКлиента(ИдентификаторСчета) Экспорт
	
	СчетКлиента = Документы.СчетНаОплатуКлиенту.ПолучитьСсылку(ИдентификаторСчета);
	
	МассивСчетов = Новый Массив;
	МассивСчетов.Добавить(СчетКлиента);
	
	Попытка
		Документы.СчетНаОплатуКлиенту.УстановитьПризнакАннулирован(МассивСчетов);
	Исключение
		ЗаписьЖурналаРегистрации("JSON-RPC.АнулироватьСчетКлиента",
			УровеньЖурналаРегистрации.Ошибка,,,
			КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
	КонецПопытки;
	
КонецПроцедуры 

Теперь, когда клиент в личном кабинете в меню, например, выберет команду "Аннулировать счёт", веб-разработчик просто выполнит POST запрос к базе 1С вида

{"jsonrpc": "2.0", "method": "АнулироватьСчетКлиента", "params": ["422f9d5c-1032-11e5-92f1-0050568b35ac"]}

Хочу обратить внимание, что данная процедура не предполагает возвращение результата, поэтому передавать параметр id не нужно (в терминах JSON-RPC это называется уведомлением). Примечание. Использовано для примера, в реальности, конечно, нужно возвращать ошибку, если по какой-то причине не удалось аннулировать счёт, например, если отсутствует счёт с таким уникальным идентификатором.

Расширение предназначено для любой конфигурации на платформе не ниже 8.3.6. Протестировано на платформе версии 8.3.15.1656.

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

Наименование Файл Версия Размер
Реализация протокола удаленного вызова процедур в формате JSON (JSON-RPC)

.zip 13,34Kb
14.10.19
5
.zip 1.0.2.1 13,34Kb 5 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. zeegin 91 14.10.19 21:08 Сейчас в теме
https://its.1c.ru/db/v8std#content:770:hdoc

https://ru.m.wikipedia.org/wiki/%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0­%B5_SQL-%D0%BA%D0%BE%D0%B4%D0%B0

Функции Вычислить/Выполнить надо вызывать в безопасном режиме.
Все передаваемые параметры надо экранировать.

Не безопасно.
Glebis; oleg-m; ltfriend; pallid; WizaXxX; vikad; JohnyDeath; Il; +8 Ответить
4. ltfriend 596 15.10.19 19:05 Сейчас в теме
(1) А если функция должна выполнять действия, которые не могут быть выполнены в безопасном режиме (например, в нем используется обращение к файлам)?
В данном случае метод "Выполнить" не производит выполнение произвольных фрагментов кода (например, как обработчики событий в конвертации данных).
"Выполнить" используется для вызова конкретных процедур общего модуля "rpc_УдаленныеПроцедурыПереопределяемый":
Выполнить("Результат = rpc_УдаленныеПроцедурыПереопределяемый." + ИмяМетода + "(" + ... + ")");

Поэтому его можно выполнять в небезопасном режиме. Ведь тот код, который будет выполняться определяет сам разработчик.
Однако, благодаря вашему комментарию я более углубленно задумался о безопасности. И действительно, моя реализация позволяет злоумышленнику выполнить произвольный код. Ведь можно в поле method передать не просто имя метода, а метод с корректными параметрами, потом поставить точку с запятой и написать произвольный код и он будет выполнен!
Например, если передать в поле method вместо ПолучитьСчетаКлиента строку ПолучитьСчетаКлиента(\"7705260674\", '20190901', '20190930'); ВредныйМодуль.УдалитьВсе(), то выполняемая строка примет следующий вид:
Выполнить("Результат = rpc_УдаленныеПроцедурыПереопределяемый.ПолучитьСчетаКлиента(""7705260674"", '20190901', '20190930'); ВредныйМодуль.УдалитьВсе() ...

И после выполнения предусмотренного разработчиком метода "ПолучитьСчетаКлиента" начнёт выполняться произвольный код.
Поэтому в разработку были внесены изменения. Теперь есть дополнительная функция УдаленныеПроцедуры общего модуля rpc_УдаленныеПроцедуры. В ней разработчик должен указать имена функций, которые доступны для вызова.
Т.о. если разработчик определит следующие имена доступных функций:
Функция УдаленныеПроцедуры() Экспорт
	
	УдаленныеПроцедуры = Новый Массив;
	
	////////////////////////////////////////////////////////////­///////////////////////////////////////////
	// Необходимо добавить следующие строки:
	//
	УдаленныеПроцедуры.Добавить("ПолучитьСчетаКлиента");
	УдаленныеПроцедуры.Добавить("АннулироватьСчетКлиента");
	////////////////////////////////////////////////////////////­///////////////////////////////////////////
	
	Возврат УдаленныеПроцедуры;
	
КонецФункции 
Показать

то при передачи в params строки ПолучитьСчетаКлиента(\"7705260674\", '20190901', '20190930'); ВредныйМодуль.УдалитьВсе() ни какого кода выполнено не будет, а будет выдана ошибка, потому что метод ПолучитьСчетаКлиента(\"7705260674\", '20190901', '20190930'); ВредныйМодуль.УдалитьВсе() не определен в функции УдаленныеПроцедуры, а определён метод ПолучитьСчетаКлиента (см. код выше).

А вот с передачей параметров ни каких проблем с безопасностью я не обнаружил. Как вы себе представляете инъекции в запросы 1С через параметры?
Предположим, в процедуре происходит поиска контрагента по ИНН, переданного в качестве параметра:

Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1
| Контрагенты.Ссылка КАК Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ИНН = &ИНН");
Запрос.УстановитьПараметр("ИНН", ИНН);

Какое значение нужно передать в параметре "ИНН", чтобы получить несанкционированные данные, не говоря о том, чтобы злоумышленник мог изменить их передав "чудо строку" через параметр "ИНН" в качестве инъекции?
5. zeegin 91 15.10.19 19:17 Сейчас в теме
(4) В данном случае, конечно, имелось ввиду инъекция не в запросы, а в квери. Т.е. вообще в любое поле, в квери, в заголовки запросов, в коммандную строку. Главное не допустить исполнения произвольного кода.

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

Я бы сделал просто в переопределяемом модуле процедуру:
ПриОбработкеЗапроса(ИмяМетода, Параметры)

она была бы в роли контроллера и в ней разработчик сможет описать куда роутить исполнение

Если ИмяМетода = "ПолучитьСчетаКлиента" Тогда

МодульРеализацииОбработки.ПолучитьСчетаКлиента(Параметры);

КонецЕсли;
6. ltfriend 596 15.10.19 19:23 Сейчас в теме
(5) соглашусь, что так безопасней, но требует больше кода. Идея была в том, чтобы разработчик просто добавлял новую функцию в модуль rpc_УдаленныеПроцедурыПереопределяемый и она тут же становилась доступна для вызова без дополнительного кода
...
ИначеЕсли ИмяМетода = "..." Тогда
   ....
КонецЕсли


Поэтому я пошёл на компромисс. Сделал отдельную функцию, где разработчик определяет доступные функции. С одной стороны кода стала не намного больше. По сути, добавить одну строку
УдаленныеПроцедуры.Добавить("<имя_процедуры>")

но с другой стороны, по моему мнению, решает проблему с безопасностью.
7. zeegin 91 15.10.19 19:45 Сейчас в теме
(6) Ну тогда правильно сделать в rpc_УдаленныеПроцедурыПереопределяемый процедуру

Процедура ПриОпределенииДопустимыхУдаленныхПроцедур(Процедуры) Экспорт

    Процедуры.Добавить("ПолучитьСчетаКлиента");

КонецПроцедуры


https://its.1c.ru/db/v8std#content:553
3.2. Переопределяемые общие модули должны содержать только экспортные процедуры.

Ну и всегда надо помнить, что несмотря на то, что HTTP сервисы это серверный контекст, то, что приходит оттуда - идеологически - это клиентский вызов.
https://its.1c.ru/db/v8std#content:678

2. Проникновение небезопасного кода на сервер и его выполнение.

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

Это значит, что на все вызываемые процедуры надо накладывать ограничение

3. Серверные процедуры и функции должны возвращать в форму только окончательный результат расчета.

При этом если пользователь, используемый для удаленного вызова не имеет собственного профиля доступа, или еще хуже, используется привилегированный режим, то требование:

https://its.1c.ru/db/v8std#content:485
3.2. В случаях, когда к экспортной процедуре или функции выполняется обращение в сеансе с недостаточным уровнем прав доступа, должно вызываться исключение стандартного вида.

Будет необходимо дополнительно обработать, чтобы ограничить удаленного пользователя, т.к. стандартной проверки ролей уже не хватит.
8. JohnyDeath 299 16.10.19 05:55 Сейчас в теме
(4)
А вот с передачей параметров ни каких проблем с безопасностью я не обнаружил.

А если вот так:
{"jsonrpc": "2.0", "method": "ПолучитьСчетаКлиента", "params": ["ВредныйМодуль.УдалитьВсе()", "2019-09-01", "2019-09-30"], "id": 1}
9. ltfriend 596 16.10.19 10:05 Сейчас в теме
(8) То значением переданного параметра в функцию будет строка "ВредныйМодуль.УдалитьВсе()".
Строка кода, который выполняется имеет следующий вид
Выполнить(Результат = rpc_УдаленныеПроцедурыПереопределяемый.<Имя_Метода>(Параметры[0], Параметры[1], ..., Параметры[N]));
3. ltfriend 596 15.10.19 17:58 Сейчас в теме
(2) вот из-за заголовка я и не нашёл ту публикацию. Перед своей реализации JSON-RPC я же помнил, что была подобная статья и я там даже оставлял свой комментарий, но перед созданием своей публикации найти её не смог.
10. duhh 211 17.10.19 14:44 Сейчас в теме
Ничего страшного, если в этой ветке задам вопрос про безопасный вызов процедуры. знатокам безопасности.

Вот такой вызов будет безопасным?

Процедура ВыполнитьПроцедуру(ВходящиеДанные)
	
	ДанныеВыполнения = ВходящиеДанные.Данные; 
	
	// Безопасность - проверка имени метода на корректность. Взял из БСП
	Попытка
		Тест = Новый Структура(ДанныеВыполнения.Method, ДанныеВыполнения.Method);
		Если Тест = Неопределено Тогда 
			ВызватьИсключение НСтр("ru = 'Синтетический тест'");
		КонецЕсли;
	Исключение
		ВходящиеДанные.Ошибка = Истина;
		ВходящиеДанные.ТекстОтвета = НСтр("ru='Некорректное значение параметра ИмяМетода.'");
		Возврат;
	КонецПопытки;

	// Безопасность - проверка параметров на корректность. 
	Попытка
		Если Не ТипЗнч(ДанныеВыполнения.Params) = Тип("Структура") Тогда 
			ВызватьИсключение НСтр("ru = 'Тест параметров'");
		КонецЕсли;
	Исключение
		ВходящиеДанные.Ошибка = Истина;
		ВходящиеДанные.ТекстОтвета = НСтр("ru='Некорректное значение параметра Params.'");
		Возврат;
	КонецПопытки;

	СтрокаВыполнения = ДанныеВыполнения.Method + "(" + "{Параметры}" + ")"; 
	
	Если ДанныеВыполнения.Свойство("Params") Тогда
		СтрокаВыполнения = СтрЗаменить(СтрокаВыполнения, "{Параметры}", "ДанныеВыполнения.Params");
	Иначе
		СтрокаВыполнения = СтрЗаменить(СтрокаВыполнения, "{Параметры}", "");
	КонецЕсли; 
	
	Попытка
		Результат = Вычислить(СтрокаВыполнения);
Показать
11. alexqc 147 17.10.19 22:34 Сейчас в теме
В принципе, для безопасности вызова можно проверить что имя метода точно представляет собой идентификатор (последовательность только букв и цифр).
Более того, достаточно проверить отсутствие в имени символа "(" - без скобок никакой команды не напишешь.

А вообще, лично я бы вместо общего модуля делал это в виде макета-словаря: в простейшем виде это будет 1-я колонка -- имя метода в rpc, 2-я -- полный путь вызова (т.е как ОбщийМодуль.ФункцияМодуля либо например РегистрыНакопления.НужныйРегистр.ФункцияМодуляМенеджера).
Оставьте свое сообщение

См. также

Выгрузка документов из ЗУП в БП (1С 8.2-8.3) Промо

Перенос данных из 1C8 в 1C8 Зарплата Зарплата v8 БП2.0 ЗУП2.5 Абонемент ($m)

Обработка для выгрузки документов из конфигурации "Зарплата и управление персоналом" 8.2 в конфигурацию "Бухгалтерия предприятия" 8.2. Использует правила обмена. В обработке создан удобный интерфейс для гибкого формирования списка документов кадрового учета и начисления ЗП.

1 стартмани

18.12.2012    15297    13    d.zhukov    20    

Выполнение запроса в другой базе 1С без com-соединения. HTTP-сервис

Перенос данных из 1C8 в 1C8 v8 1cv8.cf Абонемент ($m)

Выполнение любого запроса с параметрами из одной базы 1С в другую. Используя HTTP-сервис. Посредством POST-запроса и JSON.

1 стартмани

30.11.2018    22844    24    John_d    23    

Пример получения данных из другой базы 1С через Web-сервис

Перенос данных из 1C8 в 1C8 v8 Россия Абонемент ($m)

В данной статье описан пример получения данных справочника из другой базы 1С через Web-сервис.

1 стартмани

11.11.2018    31537    27    flyDrag    29    

Универсальная выгрузка/загрузка данных для отличающихся конфигураций (JSON, Такси+ОФ) Промо

Перенос данных из 1C8 в 1C8 Универсальные обработки Распределенная БД (УРИБ, УРБД) v8 1cv8.cf Абонемент ($m)

Простой перенос через JSON данных между двумя базами 1С (документов, справочников, ПВХ, ПВР, счетов). Аналогична произвольной выгрузке в типовой "Выгрузка/загрузка XML", но может использоваться для отличающихся конфигураций. Подходит для любых пар баз с любым интерфейсом (управляемый + обычный). Без настроек. Не требует идентичности конфигураций и платформ. При переносе типы данных сопоставляются по наименованиям метаданных, объекты и ссылки по UID.

1 стартмани

22.10.2014    208502    3160    ekaruk    183    

Вы больше не будете разбирать Excel как раньше

Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

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

1 стартмани

07.05.2018    29901    63    m-rv    34    

Прыг-Скок...или из MS EXCEL в 1С (8.2) (открытый код) Промо

Обработка документов Обработка справочников Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Универсальная загрузка данных из Microsoft Office Excel. Автоматическая загрузка из любых по форме документов с очень удобным редактором. Почти готовый шаблон для любой конфигурации. Не требует регистрации-бесплатно.

1 стартмани

16.09.2015    64016    362    Tatitutu    48    

Правила конвертации документов ЗУП 2.5 - ЗУП 3.1

Обмен через XML Зарплата Перенос данных из 1C8 в 1C8 Зарплата v8 v8::СПР ЗУП2.5 ЗУП3.x Россия БУ Абонемент ($m)

Правила конвертации документов ЗУП 2.5 - ЗУП 3.1. Позволяют вести параллельную работу в базах ЗУП редакций 2,5 и 3.1.

10 стартмани

06.03.2018    40366    153    kostya_whiskas    24    

Создание в 1С 7.7 XML в формате EnterpriseData (универсальный формат обмена), версия 1.5. Инструкции и примеры переноса данных из устаревшей конфигурации 1С 7.7 в любую современную 1С 8.3, поддерживающую EnterpriseData, через Конвертацию данных 3

Перенос данных из 1С7.7 в 1C8.X Обмен через XML v7.7 v8 1cv7.md Россия Абонемент ($m)

Воспользоваться современным средством переноса данных "Конвертация данных 3.0.5.3" можно только выгрузив из системы - источника данных XML в формате обмена данными EnterpriseData. В этой публикации можно скачать приемы выгрузки из 1С 7.7 универсального формата обмена для Конвертации данных 3. Выполняем перенос данных из «1С:Предприятие 7.7» в «1С:Предприятие 8.3». Используем Конвертацию данных КД 3.0 из 1c 7.7 --> 1С 8.3. На первой стадии еще не опубликовано иного способа подложить файл для Конвертации данных 3 кроме как сформировать его вручную, постараемся решить данную проблему.

1 стартмани

26.02.2018    40157    54    ksnik    3    

Расчет начисления зарплаты со сложной формулой, по данным из внешнего источника. ЗУП 3.1

Обработка документов Загрузка и выгрузка в Excel Зарплата Зарплата v8 v8::СПР ЗКГУ3.0 ЗУП3.x БУ Абонемент ($m)

Расчет начисления зарплаты со сложной формулой, по данным из внешнего источника по данным экономического отдела. ЗУП 3.1.

3 стартмани

20.12.2017    49614    33    mvv1975    7    

Перенос объектов 1С Промо

Перенос данных из 1C8 в 1C8 v8 v8::УФ 1cv8.cf Абонемент ($m)

Простой и наглядный перенос объектов между любыми базами 1С 8 с предварительным анализом на возможные различия в данных (через файл, через интернет, через буфер обмена). Интерактивная настройка правил обмена на стороне источника и получателя. В обработке есть удобный обзор по подсистемам, поиск и обработка данных по заданному фильтру. Сравнение объектов, поиск ссылок. Конструктор кода по созданию объектов, написание скриптов и отладка мини-функций в УФ. Отключение/включение регламентных заданий. Регистрация/снятие с регистрации объектов в планах обмена. И многое другое. Инструменты администратора в одной обработке.

1 стартмани

16.03.2015    91631    1398    moolex    193    

Приемы эффективной загрузки данных из Excel в 1С

Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Показаны приемы эффективной работы с Excel для загрузки данных в 1С.

1 стартмани

13.12.2017    55358    102    alexey.kutya    85    

Синхронизация данных по правилам КД2.0

Перенос данных из 1C8 в 1C8 v8 1cv8.cf Абонемент ($m)

Новый инструмент для сравнения и загрузки данных, сочетающий в себе: гибкость запросов (используются для сопоставления объектов); наглядный вывод отличий; удобный отбор загружаемых данных; возможность пообъектной синхронизации двух баз по правилам КД2 с помощью вызова обработки "Универсальный обмен XML" в базе-источнике через COM-соединение.

1 стартмани

27.08.2017    25174    115    vikad    36    

Загрузка дополнительных реквизитов и сведений справочника Номенклатура из Excel и таблиц УТ 11, ERP 2

Обработка справочников Загрузка и выгрузка в Excel Учет ТМЦ Учет ТМЦ v8 v8::ОУ ERP2 УТ11 Россия УУ Абонемент ($m)

Внешняя обработка "Загрузка дополнительных реквизитов и сведений справочника Номенклатура"

1 стартмани

07.08.2017    41802    265    Windyhead    41    

Соответствия объектов обмена Промо

Распределенная БД (УРИБ, УРБД) Перенос данных из 1C8 в 1C8 v8 КА1 Россия Абонемент ($m)

Обработка позволяет проверять, исправлять ошибки, добавлять и удалять соответствия объектов в обменах данными между конфигурациями на основе «Комплексной автоматизации 1.1» или похожими конфигурациям. Подходит для обменов с использованием регистра сведений «СоответствиеОбъектовДляОбмена».

1 стартмани

26.08.2016    22509    12    xxxelaaa    1    

Правила обмена ЗУП 3.1 - БП 2.0 и ЗУП 3.1 - УПП 1.3 (отражение, ведомости и справочники)

Перенос данных из 1C8 в 1C8 Обмен через XML Зарплата Управление персоналом (HRM) Зарплата Управление персоналом (HRM) v8 v8::БУ v8::СПР БП2.0 БП3.0 ЗУП3.x Россия БУ Абонемент ($m)

Правила обмена для выгрузки документов "Отражение зарплаты в бухучете", "Ведомость в банк", "Ведомость в кассу", справочников "Сотрудники" и "Физические лица"

1 стартмани

01.08.2017    80223    1565    forseil    209    

Перенос справочников и документов из УТ 10.3 в БП 3.0

Перенос данных из 1C8 в 1C8 v8 УТ10 БП3.0 Россия БУ НУ УУ Абонемент ($m)

Синхронизация справочников и документов из Управление торговлей 10.3 в Бухгалтерию предприятия 3.0. Обработка не затрагивает штатный механизм. Подключение и перенос документов происходит посредством OLE. Без ввода начальных остатков.

10 стартмани

25.07.2017    23366    15    2casp    5    

«Горыныч - то НЕ НАСТОЯЩИЙ!» … или О Конвертации Данных ред.3 (КД 3) и обменах в универсальном формате Enterprise Data… доступным русско-народным языком

Внешние источники данных Обмен через XML Перенос данных из 1C8 в 1C8 v8 КД Абонемент ($m)

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

1 стартмани

13.06.2017    22190    143    Davlad_A    16    

Выгрузка и загрузка данных из файла Excel с поиском по любым полям (есть поиск по ссылке, всего три итерации поиска. Управляемые формы или "Такси") Промо

Загрузка и выгрузка в Excel Обработка документов v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка позволяет загружать данные с поиском по ссылке как для загружаемого объекта, так и его свойств. Загружает справочники, документы, планы видов характеристик. Будет полезна как замена использования конвертации данных для задач переноса, а также как классическая загрузка из табличного документа (Excel). Поиск объекта при загрузке выполняется до трех раз с разными полями поиска (поля поиска настраиваются). Также реализована выгрузка в Excel по ссылкам. У обработки удобный интерфейс, в котором разберется даже начинающий пользователь. Загрузка накладных из файлов xls реализована с интеллектуальным поиском колонок с данными. В интеллектуальном поиске поддерживаются все основные типовые печатные формы.

5 стартмани

16.10.2015    60578    510    primat    34    

Загрузка из Excel-файла данных в документ Поступление товаров и услуг

Обработка документов Загрузка и выгрузка в Excel Оптовая торговля Розничная торговля Учет ТМЦ Оптовая торговля Розничная торговля Учет ТМЦ v8 Розница БП3.0 УТ11 КА2 Россия БУ УУ Абонемент ($m)

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

1 стартмани

04.03.2017    31748    413    gzharkoj    123    

 Интеграция 1С и C#. Обращение к 1С через COM. Создание номенклатуры и выполнение запроса к 1С из C# на примере интеграции с Союз-PLM (система информационной поддержки жизненного цикла изделий). Обработка «Загрузка заказа на сборку». (ERP)

Загрузка и выгрузка в Excel Внешние источники данных Интеграция v8 ERP2 Абонемент ($m)

Союз-PLM представляет собой полнофункциональный программный комплекс для решения  широкого спектра задач управления инженерной технической информацией наукоемких изделий и сложных инженерных объектов в области машиностроения, приборостроения, архитектуры, строительства. На практике, это управление конструкторской документацией, интегрированное с САПР, бизнес-процессы, файловый архив. Все это работает в SQL и шевелится с помощью скриптов на C#. Скрипты свободно  отлаживаются в MS Visual Studio. Подробнее смотрите на их сайте: http://www.programsoyuz.ru/products/system-soyuz-plm.html  Редактирование, конструирование и использование бизнес-процессов на порядок лучше систем на базе 1С из тех, что я изучил.

1 стартмани

25.07.2016    45782    5    milkers    2    

Выгрузка/загрузка данных в формате JSON v 1.0.6

Распределенная БД (УРИБ, УРБД) Перенос данных из 1C8 в 1C8 v8 1cv8.cf Абонемент ($m)

Обработка предназначена для обмена данными между схожими конфигурациями в формате JSON. Этот формат обладает рядом существенных преимуществ по сравнению с xml и прочими популярными форматами. В отличие от существующих аналогов, обработка не использует никаких дополнительных библиотек. (де)Сериализация всех объектов происходит средствами встроенного языка и методов ЗаписатьJSON() и ПрочитатьJSON(). Работает на платформе версии не ниже 8.3.6.

3 стартмани

27.01.2016    45312    337    kser87    41    

Выгрузка данных из УТ 10.3 в БП 3.0 (своими руками) Промо

Перенос данных из 1C8 в 1C8 v8 УТ10 БП3.0 Россия Абонемент ($m)

Старая добрая, позабытая многими выгрузка из УТ 10.3 в БП 1.6. Ее еще можно оживить, и она послужит на благо всем желающим, всем уставшим от автоматических обменов.

3 стартмани

30.10.2014    41749    179    TESL    40    

[COM] Перенос данных через COMConnector

Перенос данных из 1C8 в 1C8 v8 1cv8.cf Россия Абонемент ($m)

Обработка обмена между двумя информационными базами схожей (не обязательно совпадающей) структуры. Изначально была заточена под бухгалтерию предприятия, сейчас используется для для обменов через COM любых конфигураций с режимом запуска "Управляемое приложение". Ближайший аналог - выгрузка-загрузка XML, но здесь нет промежуточных файлов выгрузки/загрузки, и обмен не прекращается в случае, когда состав реквизитов источника и приёмника различен!!! 22.05.2020 Версия 5.2.3.4 Исправлена ошибка в таблице соответствия планов счетов, любезно подсказанная Fox_65. Все реквизиты таблицы соответствия теперь с типом строка, чтобы избежать в дальнейшем повторения этой ошибки, если обработку вдруг будет сохранена в конфигурации, не имеющей Плана счетов Хозрасчтный. Соответственно изменены заполнеие таблицы соответствия счетов и поиск счетов между базами. Из нового - добавлен возможность переноса Счетов на оплату покупателю из КА 1.1 в Заказ клиента КА 2.4 (случилась такая хотелка у клиента) (тестировалось на платформе 8.3.17.1386, БП 3.0.77.89 )

2 стартмани

23.11.2015    49974    665    Alex_E    208    

Интерфейс сопоставления объектов для обмена (для типового регистра СоответствиеОбъектовДляОбмена)

Инструментарий разработчика Универсальные обработки Перенос данных из 1C8 в 1C8 v8 КА1 БП2.0 ЗУП2.5 УТ10 УПП1 Абонемент ($m)

Вы внедряете обмен данными между двумя типовыми или основанными на типовых БД и вам необходим инструмент, чтобы сопоставить между собой справочники этих конфигураций? Вы хотите навести порядок в обмене данными, потому что вам надоело вылавливать дублирующиеся объекты? Вам очень хочется перепоручить сопоставление объектов обменивающихся баз пользователям, но нет подходящего и понятного пользователям интерфейса? Тогда вам нужна именно эта обработка!

4 стартмани

11.11.2015    40238    135    catsam    8    

Загрузка УПД в Бухгалтерию 3.0

Обработка документов Загрузка и выгрузка в Excel Оптовая торговля Оптовая торговля v8 v8::БУ БП3.0 Россия БУ Абонемент ($m)

Загрузка УПД из Excel в Бухгалтерию предприятия 3.0, с добавлением номенклатуры, ГТД, стран происхождения.

3 стартмани

20.10.2015    23444    18    teyana    12    

Универсальное средство чтения файлов Excel Промо

Универсальные обработки Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Унифицируем чтение файлов Excel, читаем "неудобные" файлы, переносим содержимое таблиц Excel через буфер обмена.

5 стартмани

27.03.2013    30545    35    Infector    4    

Полезные приемы при работе с Excel из 1С (Версия 3.1)

Практика программирования Разработка внешних компонент Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Программисту 1С часто приходится работать с таблицами Excel из 1С. Я постарался собрать небольшой FAQ и набор функций для работы с файлами Excel. Надеюсь, кому-то будет полезна данная статья.

1 стартмани

22.09.2015    203873    445    Zerocl    70    

Управление изменениями в планах обмена (Управляемое приложение) v 1.0

Распределенная БД (УРИБ, УРБД) Внешние источники данных Перенос данных из 1C8 в 1C8 v8 1cv8.cf Абонемент ($m)

Простая в использовании и наглядная обработка для регистрации изменений или отмены регистрации в планах обмена используя гибкие возможности отбора СКД.

2 стартмани

15.08.2015    30326    45    kser87    3    

Обмен прайс-листами и анализ ценовой политики конкурентов, партнёров и поставщиков в программе 1С:Предприятие

Ценообразование, прайсы Обработка документов Загрузка и выгрузка в Excel Ценообразование, анализ цен Ценообразование, анализ цен v8 УТ10 УПП1 УУ Абонемент ($m)

Универсальная программа для загрузки Прайс-листов в базу 1С:Предприятия 8. Основные достоинства: простота использования и широкие функциональные возможности поиска товаров для записи цен. Область применения: обмен прайс-листами и анализ ценовой политики конкурентов, партнёров и поставщиков в программе 1С:Предприятие.

10 стартмани

16.07.2015    33318    3    Destroy    2    

И снова "Как сжать картинки для экспорта в EXCEL?" или Умная картинка 8.2

Практика программирования Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Прошла уже эпоха , когда экономили на трафике интернета. Но все же...повторюсь. Я предлагаю совершенно новый способ сжатия картинки - эффект в 20 раз !!!

1 стартмани

17.06.2015    30634    43    Tatitutu    10    

Перенос справочников и документов из 1С 7.7 "Торговля и склад 9.2" в 1С 8.2 "Бухгалтерия предприятия 2.0".

Перенос данных из 1С7.7 в 1C8.X Обмен через XML v8 БП2.0 1С7:ТиС Россия Абонемент ($m)

Немного доработанные типовые правила обмена для конфигураций из ТиС 9.2. в БП 2.0 - «ПОД_Перенос_Справочников_ТиС_БП20.xml» и «ОбработкаВыгрузкиСправочников.ert». Добавлены правила выгрузки справочников: Организации, контрагенты и номенклатура. Доработал типовые ПОД для переноса только контрагентов и номенклатуры без документов в новую базу бухгалтерии 2.0, протестировал на типовых конфигурациях ТиС 9.2 рел.984 и БП 2.0.64.23.

1 стартмани

05.06.2015    49946    95    Kuzya_brаtsk    3    

Создание и сброс главного узла, Признак РИБ. 8.2 - 8.3

Распределенная БД (УРИБ, УРБД) v8 1cv8.cf Абонемент ($m)

Обработка предназначена для сброса и создания главного узла РИБ 8.2 - 8.3

1 стартмани

04.04.2015    40913    282    programmistSVS    7    

Загрузка товаров из таблицы в реализацию и поступление УТ 10.3 по артикулу и производителю + создание товаров и ГТД

Обработка документов Загрузка и выгрузка в Excel Оптовая торговля Учет ТМЦ Оптовая торговля Учет ТМЦ v8 УТ10 Россия УУ Абонемент ($m)

Обработка встраивается в конфигурацию (только кнопка для вызова обработки) и позволяет быстро и просто загрузить список товаров в реализацию или поступление. В процессе загрузки создаются отсутствующие товары и ГТД.

2 стартмани

03.03.2015    15932    2    taurus__    0    

Работа с Excel. Объединение, Стыковка, Свертка

Универсальные обработки Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Обработка позволяет работать как с одним, так и с несколькими файлами Excel: Объединять файлы со сходной структурой в одну таблицу, Стыковать файлы с разной структурой по ключевому полю, Группировать результат по выбранным полям и суммировать числовые поля.

1 стартмани

19.02.2015    26168    23    Ekovichev    7    

Перенос данных из Бухгалтерии 2.0 в Бухгалтерию 3.0

Перенос данных из 1C8 в 1C8 Обмен через XML v8 БП2.0 БП3.0 Россия БУ Абонемент ($m)

Перенос данных и остатков с Бухгалтерии 2.0 в Бухгалтерию 3.0 с помощью универсального обмена данными XML.

1 стартмани

30.12.2014    45243    306    sergeyzhuravlev    11    

Нестандартная загрузка из Excel

Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Взгляд на привычную задачу под неожиданным углом - пусть пользователь прямо в Excel решает, что ему надо, и грузит в 1С только нужное. Установите любой отбор, выделите фрагмент, и вот он уже в 1С. Для обычных и УФ 8.3

1 стартмани

12.11.2014    30905    52    Yashazz    46    

Перенос НФА (ОС и МЗ) между учреждениями/базами через документы списания и поступления [БГУ 1.0]

Перенос данных из 1C8 в 1C8 Обработка документов Учет ОС и НМА Учет ОС и НМА v8 v8::БУ БГУ Государственные, бюджетные структуры Россия БУ Госбюджет Абонемент ($m)

Обработка выполняет перенос основных средств/материалов между учреждениями/базами через документы списания НФА и безвозмездного получения в другом учреждении/базе данных.

10 стартмани

18.09.2014    42360    52    qwinter    33    

Перенос изображений номенклатуры УТ10 <-> УТ11

Перенос данных из 1C8 в 1C8 v8 УТ10 УТ11 Абонемент ($m)

Обработка позволяет переносить изображения номенклатуры между УТ10 и УТ11. В обоих направлениях! Перенос изображений происходит через каталог. Синхронизация происходит по коду номенклатуры. Обработка корректно работает в том числе и с изображениями при хранении их вне базы в УТ11.

10 стартмани

30.06.2014    33798    50    GATTUSO    19    

Выгрузка - загрузка данных в XML с отбором по организации

Обмен через XML Перенос данных из 1C8 в 1C8 v8 1cv8.cf Абонемент ($m)

Выгрузка - загрузка данных в XML с отбором по организации (УФ)

1 стартмани

25.05.2014    47587    303    buganov    42