Интеграция 1С и CMS WordPress посредством функционала Rest API. Используем только язык программирования 1С и штатный функционал Rest API предоставляемый CMS, без дополнительных библиотек и плагинов. Процедуры и функции 1С с комментариями внутри.
Интеграция 1С и CMS WordPress посредством Rest API сайта. Первый шаг.
Интеграция 1С и CMS WordPress посредством функционала Rest API. Используем только язык программирования 1С и штатный функционал Rest API предоставляемый CMS, без дополнительных библиотек и плагинов. Процедуры и функции 1С с комментариями внутри.
Преамбула.
Эта статья является логическим продолжением и дополнением этой моей статьи. А также полностью с ней взаимосвязанной, отсылки к ней будут периодически здесь появляться.
Рейтинг CMS.
Как и в предыдущей статье WordPress занимает лидирующие позиции по количеству установок и работающих сайтов в мире, и не только не сдает своих позиций, но и понемногу растет:
А так как WordPress является платформой для электронной коммерции, соответственно магазин WooCommerce, так же занимает лидирующие позиции в другом мировом рейтинге:
Это конечно прекрасно, но помимо достоинств, описанных в этой статье, есть еще один немаловажный фактор, о котором мне хотелось бы сообщить. Это формат обмена данными между 1С и сайтом электронной коммерции.
JSON vs. XML
Почему JSON и XML? XML является стандартом де-факто в 1С. JSON, на мой взгляд, имеет значительно больше перспектив, проще, удобнее.
От настольных компьютеров до веб-и мобильных устройств, почти все компьютерные приложения, которые мы используем сегодня, полагаются на один из двух основных стандартов сообщений: JSON и XML. Сегодня JSON является наиболее широко используемым форматом, но он обогнал XML только за последние пять лет. Быстрый онлайн-поиск «JSON vs. XML» принесет бесчисленное количество статей и постов в блогах, сравнивающих эти два стандарта и составляющих постепенно расширяющуюся предвзятость, восхваляющую простоту JSON и критикующую многословие XML. Многие статьи настаивают на том, что JSON превосходит XML из-за его краткой семантики и дисконтирует XML как неэффективный и запутанный стандарт прошлого, и здесь мне тяжело не согласиться.
Почему JSON стал более популярным, чем XML
Я на деюсь все знают, что JSON-это родной формат данных в приложениях JavaScript. Написание приложений на JavaScript почти полностью требует использования JSON для обмена данными. Возможны и другие форматы, но они требуют больше усилий, чем в случае с JSON. По мере того как JavaScript набирал популярность для разработки приложений, JSON вплотную следовал за ним как простой в использовании и изначально интегрированный формат обмена данными.
История и эволюционный путь интернета сыграли значительную роль в популяризации JSON. Согласно Stack Overflow, теперь больше вопросов задается о JSON, чем о других форматах обмена данными.
Согласно Google Trends, похожая ситуация наблюдается при сравнении интереса поиска для JSON и XML.
Основная разница между JSON и XML
JSON
XML
JSON-объект имеет тип
XML-данные не содержат типов
Типы JSON: строка, число, массив, логическое значение
Все данные XML должны быть строковыми
Данные легко доступны в виде объектов JSON.
Данные XML должны быть проанализированы.
JSON поддерживается большинством браузеров.
Кросс-браузерный анализ XML может быть сложным
JSON не имеет возможностей отображения.
XML предлагает возможность отображения данных, потому что это язык разметки.
JSON поддерживает только текстовые и числовые данные.
XML поддерживает различные типы данных, такие как число, текст, изображения, диаграммы, графики и т. Д. Он также предоставляет параметры для передачи структуры или формата данных с фактическими данными.
Получить значение легко
Получить значение сложно
Поддерживается многими инструментами Ajax
Не полностью поддерживается инструментарием Ajax
Полностью автоматизированный способ десериализации / сериализации JavaScript.
Разработчики должны написать код JavaScript для сериализации / десериализации из XML
Нативная поддержка объекта.
Объект должен быть выражен соглашениями - в основном пропущено использование атрибутов и элементов.
Он поддерживает только кодировку UTF-8.
Он поддерживает различные кодировки.
Это не поддерживает комментарии.
Поддерживает комментарии.
Файлы JSON легко читаются по сравнению с XML.
XML-документы относительно сложнее для чтения и интерпретации.
Он не обеспечивает никакой поддержки пространств имен.
Приведенная выше структура четко определяет некоторые атрибуты человека. Он включает в себя имя и фамилию, количество раз, когда человек вошел в систему, является ли этот человек писателем, список компаний, с которыми он работает, и список домашних животных этого человека (в данном случае только один). Структура, подобная приведенной выше, может быть передана с сервера в веб-браузер или мобильное приложение, которое затем выполнит некоторые действия, такие как отображение данных или сохранение их для последующего использования.
Помимо того, что XML является более подробным (в данном случае ровно в два раза более подробным), он также вносит некоторую двусмысленность при синтаксическом анализе в удобную для JavaScript структуру данных. Преобразование XML в объект JavaScript (да и в 1С будет не мало) может занять от десятков до сотен строк кода и в конечном счете требует настройки на основе конкретного анализируемого объекта. Преобразование JSON в объект JavaScript занимает одну строку кода (и в 1С три) и не требует каких-либо предварительных знаний о анализируемом объекте.
С точки зрения обычного человека выбор здесь очевиден. Ведь даже судя по размеру встроенной справки 1С по работе с XML и JSON можно сделать вывод, что с JSON работать проще.
За последние 15 лет JSON стал повсеместным в интернете. Сегодня этот формат является наиболее предпочтительным практически для всех общедоступных веб-сервисов, а также часто используется для частных веб-сервисов.
JSON затмил XML как предпочтительный формат обмена данными для веб-приложений и веб-служб.
Возможно, многим покажется, что здесь избыточно рассказывается о преимуществах JSON. Безусловно, у JSON есть свои недостатки, у XML есть свои преимущества. Но я рассказываю об этом «со своей колокольни». Что касается WordPress, там естественно имеется поддержка XML. Но безусловные преимущества JSON над XML, такие как: простота написания кода, объем передаваемых данных, перспектива, однозначно предопределили мой выбор.
Думаю, что, почитав подробнее в интернете об JSON vs. XML, вы тоже сделаете свой выбор.
Но хватит про выбор, давайте начнем и сделаем что-нибудь.
Запрос данных из WordPress из 1С посредством REST API.
С момента написания прошлой статьи ничего лучше плагина Advanced Access Manager (ААМ) не появилось, поэтому продолжим с ним. Все подробности по настройке можно прочитать здесь.
Весь приводимый ниже код использовался в обработке написанной под управляемые формы. С таким же успехом его можно использовать в обычных формах (версия платформы 1С должна быть не ниже 8.3.6).
Условно постоянные значения, используемые в обработке (константы).
1.СоединениеССайтом_JWTServer. Строка подключения к сайту (host) без https://
2. СоединениеССайтом_JWToken. Токен полученный от сайта
3. СоединениеССайтом_Таймаут. Таймаут (секунд) подключения к сайту
4. СоединениеССайтом_ЭтоHTTPS_Соединение. Флаг указывающий на HTTPS-соединение.
В свой конфигурации вам надо будет их создать.
Небольшая ремарка, HTTP-соединение тестировалось, работает как надо.
Используемые маршруты WordPress.
/wp-json/aam/v2. Выдает полный перечень сервисов плагина авторизации.
В контексте данной статьи п.п. 3, 4, 5 не используются, за ненадобность (но вы можете поэкспериментировать самостоятельно, «authenticate» работает точно). Остальные приведены справочно, для демонстрации работоспособности кода. См. видео в конце статьи.
Конечные точки WordPress.
POST.
GET.
Процедуры и функции используемые в модуле формы.
ПриОткрытии и ПриОткрытииНаСервере используются для получения констант сайта и токена.
ПриОткрытии и ПриОткрытииНаСервере используются для получения констант сайта и токена.
ПослатьЗапросНаСайт и ПослатьЗапросНаСайтНаСервере
&НаКлиенте
Процедура ПослатьЗапросНаСайт(Команда)
ПослатьЗапросНаСайтНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПослатьЗапросНаСайтНаСервере()
СтруктураПараметров=Новый Структура;
СтруктураПараметров.Вставить("Token",СоединениеССайтом_JWToken);
СтруктураПараметров.Вставить("Server",СоединениеССайтом_JWTServer);
СтруктураПараметров.Вставить("Маршрут",Маршрут);
СтруктураПараметров.Вставить("КонечнаяТочка",КонечнаяТочка);
Если ЗначениеЗаполнено(jwt) Тогда
СтруктураПараметров.Вставить("jwt",jwt);
КонецЕсли;
Если ЗначениеЗаполнено(username) Тогда
СтруктураПараметров.Вставить("username",username);
КонецЕсли;
Если ЗначениеЗаполнено(password) Тогда
СтруктураПараметров.Вставить("password",password);
КонецЕсли;
////СтруктураПараметров.Вставить("",);
СтруктураОтветаССайта = РеквизитФормыВЗначение("Объект").рс_публикация_ПодсистемаWordPressПостыСтраницы(СтруктураПараметров);
КодСостояния=СтруктураОтветаССайта["КодСостояния"];
ОписаниеОтвета=СтруктураОтветаССайта["ОписаниеОтвета"];
ПолучитьВрДеревоНаСервере(СтруктураОтветаССайта);
ЭтаФорма.Элементы.РезультатКонвертацииИзJSON.Обновить();
КонецПроцедуры
используются соответственно для посылки запроса на сайт. Связаны с кнопкой «Послать запрос на сайт». Здесь мы упаковываем исходные данные в структуру и передаем в модуль объекта для обработки, и отсылки на сайт. Получаем ответ также в виде структуры, частично обрабатываем его и передаем ответ от сайта в процедуру «ПолучитьВрДеревоНаСервере». Описание структуры ответа ниже по тексту.
ПолучитьВрДеревоНаСервере процедура конвертации дерева значений ответа в реквизит формы «дерево значений», для наглядной демонстрации полученных результатов.
Процедуры и функции, используемые в модуле объекта.
Здесь формируем типовые заголовки http-запроса, которые используются практически во всех запросах к сайту. Иногда к ним могут добавиться другие, например при посылке картинки на сайт. Четвертый мой, персональный, для понимания логов сайта, можно не использовать.
Функция рс_подготовка_КонвертироватьВСоответствие(ВходДанные)
Функция рс_подготовка_КонвертироватьВСоответствие(ВходДанные) Экспорт
ИсхСоответствие=Новый Соответствие;
Если ТипЗнч(ВходДанные)=Тип("ТаблицаЗначений") Тогда
Для каждого СтрокаТЗ Из ВходДанные Цикл
ИсхСоответствие.Вставить(СтрокаТЗ.Ключ,СтрокаТЗ.Значение);
КонецЦикла;
ИначеЕсли ТипЗнч(ВходДанные)=Тип("Структура") Тогда ////преобразовываем ключи
Для каждого СтрокаСтруктуры Из ВходДанные Цикл
ИсхСоответствие.Вставить(СтрокаСтруктуры.Ключ,СтрокаСтруктуры.Значение);
КонецЦикла;
ИначеЕсли ТипЗнч(ВходДанные)=Тип("Соответствие") Тогда
ИсхСоответствие=ВходДанные;
КонецЕсли;
Возврат ИсхСоответствие;
КонецФункции
Предварительная конвертация в соответствие из "таблицы значений" и "структуры" для последующей конвертации в JSON. Если вы будете использовать только соответствие, можно не использовать.
Функция рс_подготовка_ОбъектВJSON
&НаСервере
Функция рс_подготовка_ОбъектВJSON(ПереданноеДерево) Экспорт ////// если ПереданноеДерево - соответсвие, сразу в JSON
Если ТипЗнч(ПереданноеДерево)=Тип("ДеревоЗначений") Тогда
лОбъектJSON = рс_подготовка_НовыйОбъектПоДереву(ПереданноеДерево);
ИначеЕсли ТипЗнч(ПереданноеДерево)=Тип("СтрокаДереваЗначений") Тогда
Если ПереданноеДерево.Значение="[Массив]" Тогда
ЭтоМассив = Истина;
Иначе
ЭтоМассив = Ложь;
КонецЕсли;
лОбъектJSON = рс_подготовка_НовыйОбъектПоДереву(ПереданноеДерево,ЭтоМассив);
ИначеЕсли ТипЗнч(ПереданноеДерево)=Тип("Структура") Тогда
лОбъектJSON = рс_подготовка_КонвертироватьВСоответствие(ПереданноеДерево);
Иначе ////соответствие
лОбъектJSON = ПереданноеДерево;
КонецЕсли;
///// Привет XML парсеру
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, лОбъектJSON);
Возврат ЗаписьJSON.Закрыть();
///// Привет XML парсеру
КонецФункции
&НаСервере
Функция рс_подготовка_НовыйОбъектПоДереву(Дерево,ЭтоМассив= Ложь)
Возврат рс_подготовка_ВосстановитьОбъект(Дерево, ЭтоМассив);
КонецФункции
&НаСервере
Функция рс_подготовка_ВосстановитьОбъект(Дерево, ЭтоМассив = Ложь)
Рез = ?(ЭтоМассив, Новый Массив, Новый Структура);
Для Каждого Стр Из Дерево.Строки Цикл
Если Стр.Значение = "[Массив]" Тогда
Значение = рс_подготовка_ВосстановитьОбъект(Стр, Истина);
ИначеЕсли Стр.Значение = "Null" Тогда
Значение = null;
ИначеЕсли Стр.Строки.Количество() = 0 Тогда
Значение = Стр.Значение;
ИначеЕсли Стр.Строки.Количество() > 0 Тогда
Значение = рс_подготовка_ВосстановитьОбъект(Стр, Ложь);
КонецЕсли;
Если ЭтоМассив Тогда
Рез.Добавить(Значение);
Иначе
Рез.Вставить(Стр.Свойство, Значение);
КонецЕсли;
КонецЦикла;
Возврат Рез;
КонецФункции
Здесь происходит конвертация данных в JSON. И дополнительный обработчик конвертации, на случай если вдруг "прилетела" "структура", "дерево значений" или строка "дерева значений". Если иные данные кроме соответствия не используются можно оставить только строки "лОбъектJSON = ПереданноеДерево;" и код внутри комментария "///// Привет XML парсеру".
Функция рс_подготовка_ПолучитьЗапросHTTP
&НаСервере
Функция рс_подготовка_ПолучитьЗапросHTTP(_Маршрут_, Заголовки = Неопределено, ТелоЗапроса = Неопределено) Экспорт
Если НЕ ЗначениеЗаполнено(Заголовки) ИЛИ ТипЗнч(Заголовки) <> Тип("Соответствие") Тогда
Заголовки = Новый Соответствие;
КонецЕсли;
Запрос = Новый HTTPЗапрос(_Маршрут_, Заголовки);
Если ТипЗнч(ТелоЗапроса)=Тип("ЗаписьТекста") ИЛИ ТипЗнч(ТелоЗапроса)=Тип("Файл") Тогда
Запрос.УстановитьИмяФайлаТела(ТелоЗапроса);
ИначеЕсли ЗначениеЗаполнено(ТелоЗапроса) И ТипЗнч(ТелоЗапроса)=Тип("Строка") Тогда
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса);
ИначеЕсли ЗначениеЗаполнено(ТелоЗапроса) И ТипЗнч(ТелоЗапроса)=Тип("ДвоичныеДанные") Тогда
Запрос.УстановитьТелоИзДвоичныхДанных(ТелоЗапроса);
КонецЕсли;
Возврат Запрос;
КонецФункции
Здесь формируется штатный запрос 1С "Новый HTTPЗапрос" и в соответствии с входящими данными получаем тот или иной вид. Его чуть позже пошлем на сайт.
Функция рс_подготовка_СоздатьСтруктуруВозвращаемогоОтвета
&НаСервере
//// <Создает структуру возвращаемого ответа>
//// Возвращает фиксированную структуру
//// ЗначениеОтвета - ДеревоЗначений или Текст в JSON
//// КодСостояния - код ответа сайта, число, например 200
//// ОписаниеОтвета - описание ответа из Контроль_РезультатHTTPЗапросаСодержитОшибку
Функция рс_подготовка_СоздатьСтруктуруВозвращаемогоОтвета() Экспорт
ВозвращаемыйОтвет=Новый Структура;
ВозвращаемыйОтвет.Вставить("ЗначениеОтвета",Неопределено);
ВозвращаемыйОтвет.Вставить("КодСостояния",999);
ВозвращаемыйОтвет.Вставить("ОписаниеОтвета","Отсутствует");
Возврат ВозвращаемыйОтвет;
КонецФункции
Ну и последняя функция подготовки, здесь формируем "структуру" ответа от сайта для последующей обработки в модуле формы.
Отправка данных на сайт.
Функция рс_публикация_ПолучитьСоединениеHTTPS
&НаСервере
Функция рс_публикация_ПолучитьСоединениеHTTPS(Сервер, Порт=443, ЭтоHTTPS = Истина, Логин = Неопределено, Пароль = Неопределено, Таймаут = 90, Прокси = Неопределено) Экспорт
ЭтоHTTPS=Константы.СоединениеССайтом_ЭтоHTTPS_Соединение.Получить();
Таймаут=Константы.СоединениеССайтом_Таймаут.Получить();
Если Таймаут<5 Тогда
Таймаут=120;
КонецЕсли;
Если ЭтоHTTPS Тогда
Порт=443;
ssl = Новый ЗащищенноеСоединениеOpenSSL();
Иначе
Порт=80;
ssl = Неопределено;
КонецЕсли;
Если Прокси = Неопределено Тогда
Прокси = Новый ИнтернетПрокси(Ложь);
КонецЕсли;
Соединение = Новый HTTPСоединение(Сервер, Порт, Логин, Пароль, Прокси, Таймаут, ssl);
Возврат Соединение;
КонецФункции
Здесь, мое мнение, комментарии излишни, штатная процедура 1С.
Функция рс_публикация_ПодсистемаWordPressПостыСтраницы, комментарии по спойлером
Функция рс_публикация_ПодсистемаWordPressПостыСтраницы(_ВхСтруктураПараметров) Экспорт
/////_ВхСтруктураПараметров структура данных необходимых для действий на сайте, не нужные удаляются
ВозвращаемыйОтвет=рс_подготовка_СоздатьСтруктуруВозвращаемогоОтвета();
Если ТипЗнч(_ВхСтруктураПараметров)<>Тип("Структура") Тогда ////проверка
ВозвращаемыйОтвет.Вставить("ОписаниеОтвета","Входящие параметры не соответствуют типу данных <Структура>");
Возврат ВозвращаемыйОтвет;
КонецЕсли;
///// в этом блоке получаем и удаляем из структуры данные необходимые для подготовки к публикации
_token_ =_ВхСтруктураПараметров["Token"];
_JWTServer_ =_ВхСтруктураПараметров["Server"];
_Маршрут_ =_ВхСтруктураПараметров["Маршрут"];
_КонечнаяТочка_ =_ВхСтруктураПараметров["КонечнаяТочка"];
_ВхСтруктураПараметров.Удалить("Token");
_ВхСтруктураПараметров.Удалить("Server");
_ВхСтруктураПараметров.Удалить("Маршрут");
_ВхСтруктураПараметров.Удалить("КонечнаяТочка");
///// в этом блоке получаем и удаляем из структуры данные необходимые для подготовки к публикации
_ТелоЗапроса_=Неопределено;
Если _ВхСтруктураПараметров.Количество()>0 Тогда ///// здесь остаются только данные которы надо непосредственно отослать на сайт, статья, товар и т.д.
_БодиПубликации_=рс_подготовка_КонвертироватьВСоответствие(_ВхСтруктураПараметров); ////создаем боди/тело с данными для подстановки в ЗапросHTTP
_ТелоЗапроса_ =рс_подготовка_ОбъектВJSON(_БодиПубликации_); ////конвертируем боди в JSON
КонецЕсли;
_ЗаголовкиHTTP_ = рс_ПолучитьТиповыеЗаголовкиХТТП(); ////штатные заголовки ЗапросHTTP
_ЗаголовкиHTTP_.Вставить("Authentication", "Bearer "+_token_); ////Добавляем заголовок для авторизации
Запрос =рс_подготовка_ПолучитьЗапросHTTP(_Маршрут_, _ЗаголовкиHTTP_, _ТелоЗапроса_); ////получаем ЗапросHTTP
Результат =рс_публикация_ПослатьГотовыйЗапросНаСайт(_КонечнаяТочка_, _JWTServer_, Запрос); ////посылаем запрос на сайт и получаем результат HTTPОтвет
/////---получаем результат ответа - соответствие
РезультатРасшифровка=Контроль_РезультатHTTPЗапросаСодержитОшибку(Результат); ////Расшифровываем ответ от сайта
/////// преобразовываем JSON результат ответа в "дерево значений"
РезультатОтветаДерево=рс_ПостОбработка_ЗаполнитьДеревоJSON(Результат.ПолучитьТелоКакСтроку());
ВозвращаемыйОтвет.Вставить("ЗначениеОтвета",РезультатОтветаДерево); ////дерево с ответом из рс_ПостОбработка_ЗаполнитьДеревоJSON
ВозвращаемыйОтвет.Вставить("КодСостояния",РезультатРасшифровка["КодСостояния"]); //// код состояния 200, 201, 404, и т.д. из Контроль_РезультатHTTPЗапросаСодержитОшибку
ВозвращаемыйОтвет.Вставить("ОписаниеОтвета",РезультатРасшифровка["ОписаниеОшибки"]); //// краткое описание ошибки из Контроль_РезультатHTTPЗапросаСодержитОшибку
Возврат ВозвращаемыйОтвет;
КонецФункции // ПодсистемаWordPressПостыСтраницы()
Функция рс_публикация_ПослатьГотовыйЗапросНаСайт
&НаСервере
//// <Штатная функция работы с запросами по СоединениеHTTPS>
//
// Параметры:
// <Стандартные> - <Тип.ЛюбоеЗначение>
//
// Возвращаемое значение: Результат
// <Тип.HTTPОтвет> - <HTTPОтвет>
//
Функция рс_публикация_ПослатьГотовыйЗапросНаСайт(ТипЗапроса, СтрокаПодключенияСервера, Запрос) Экспорт
СоединениеССервером = рс_публикация_ПолучитьСоединениеHTTPS(СтрокаПодключенияСервера, , , , , ,);
Если ВРег(ТипЗапроса) = "POST" Тогда
Результат = СоединениеССервером.ОтправитьДляОбработки(Запрос);
ИначеЕсли ВРег(ТипЗапроса) = "GET" Тогда
Результат = СоединениеССервером.Получить(Запрос);
ИначеЕсли ВРег(ТипЗапроса) = "PUT" Тогда
////Результат = СоединениеССервером.Записать(Запрос); /////Эта функция не работает
Результат = СоединениеССервером.Изменить(Запрос);
ИначеЕсли ВРег(ТипЗапроса) = "PATCH" Тогда
Результат = СоединениеССервером.Изменить(Запрос);
ИначеЕсли ВРег(ТипЗапроса) = "HEAD" Тогда
Результат = СоединениеССервером.ПолучитьЗаголовки(Запрос);
ИначеЕсли ВРег(ТипЗапроса) = "DELETE" Тогда
Результат = СоединениеССервером.Удалить(Запрос);
КонецЕсли;
Возврат Результат;
КонецФункции //
Посылаем запрос на сайт штатными средствами и получаем ответ.
Ну и последнее.
Постобработка ответа с сайта.
Функция Контроль_РезультатHTTPЗапросаСодержитОшибку
//// (РезультатHttpЗапроса)----возвращаемое значение - Структура
//
// Параметры:
// <РезультатHttpЗапроса> - <Тип.HTTPОтвет > - <HTTPОтвет >
//
// Возвращаемое значение:
// <ВозращаемоеСоответствие> - <<Тип.Структура>
//
//////-----первое ключ - КодСостояния, значение - Номер ошибки
//////-----второе ключ - ОписаниеОшибки, значение - ОписаниеСостояния
Функция Контроль_РезультатHTTPЗапросаСодержитОшибку(РезультатHttpЗапроса) Экспорт
ВозращаемоеСоответствие=Новый Структура;
////1xx: Informational (информационные):
Если РезультатHttpЗапроса.КодСостояния = 100 Тогда
ОписаниеСостояния = "Continue («продолжай»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 101 Тогда
ОписаниеСостояния = "Switching Protocols («переключение протоколов»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 102 Тогда
ОписаниеСостояния = "Processing («идёт обработка»)";
/////2xx: Success (успешно):
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 200 Тогда
ОписаниеСостояния = "OK («Запрос выполнен успешно»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 201 Тогда
ОписаниеСостояния = "Created («создано»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 202 Тогда
ОписаниеСостояния = "Accepted («принято»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 203 Тогда
ОписаниеСостояния = "Non-Authoritative Information («информация не авторитетна»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 204 Тогда
ОписаниеСостояния = "No Content («нет содержимого»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 205 Тогда
ОписаниеСостояния = "Reset Content («сбросить содержимое»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 206 Тогда
ОписаниеСостояния = "Partial Content («частичное содержимое»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 207 Тогда
ОписаниеСостояния = "Multi-Status («многостатусный»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 208 Тогда
ОписаниеСостояния = "Already Reported («уже сообщалось»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 226 Тогда
ОписаниеСостояния = "IM Used («использовано IM»)";
////3xx: Redirection (перенаправление):
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 300 Тогда
ОписаниеСостояния = "Multiple Choices («множество выборов»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 301 Тогда
ОписаниеСостояния = "Moved Permanently («перемещено навсегда»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 302 Тогда
ОписаниеСостояния = "Moved Temporarily («перемещено временно»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 302 Тогда
ОписаниеСостояния = "Found («найдено»)[7]";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 303 Тогда
ОписаниеСостояния = "See Other («смотреть другое»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 304 Тогда
ОписаниеСостояния = "Not Modified («не изменялось»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 305 Тогда
ОписаниеСостояния = "Use Proxy («использовать прокси»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 306 Тогда
ОписаниеСостояния = "зарезервировано (код использовался только в ранних спецификациях)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 307 Тогда
ОписаниеСостояния = "Temporary Redirect («временное перенаправление»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 308 Тогда
ОписаниеСостояния = "Permanent Redirect («постоянное перенаправление»)";
////4xx: Client Error (ошибка клиента):
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 400 Тогда
ОписаниеСостояния = "Bad Request («плохой, неверный запрос»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 401 Тогда
ОписаниеСостояния = "Unauthorized («не авторизован»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 402 Тогда
ОписаниеСостояния = "Payment Required («необходима оплата»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 403 Тогда
ОписаниеСостояния = "Forbidden («запрещено»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 404 Тогда
ОписаниеСостояния = "Not Found («не найдено»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 405 Тогда
ОписаниеСостояния = "Method Not Allowed («метод не поддерживается»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 406 Тогда
ОписаниеСостояния = "Not Acceptable («неприемлемо»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 407 Тогда
ОписаниеСостояния = "Proxy Authentication Required («необходима аутентификация прокси»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 408 Тогда
ОписаниеСостояния = "Request Timeout («истекло время ожидания»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 409 Тогда
ОписаниеСостояния = "Conflict («конфликт»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 410 Тогда
ОписаниеСостояния = "Gone («удалён»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 411 Тогда
ОписаниеСостояния = "Length Required («необходима длина»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 412 Тогда
ОписаниеСостояния = "Precondition Failed («условие ложно»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 413 Тогда
ОписаниеСостояния = "Payload Too Large («полезная нагрузка слишком велика»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 414 Тогда
ОписаниеСостояния = "URI Too Long («URI слишком длинный»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 415 Тогда
ОписаниеСостояния = "Unsupported Media Type («неподдерживаемый тип данных»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 416 Тогда
ОписаниеСостояния = "Range Not Satisfiable («диапазон не достижим»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 417 Тогда
ОписаниеСостояния = "Expectation Failed («ожидание не удалось»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 418 Тогда
ОписаниеСостояния = "I’m a teapot («я — чайник»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 421 Тогда
ОписаниеСостояния = "Misdirected Request [10]";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 422 Тогда
ОписаниеСостояния = "Unprocessable Entity («необрабатываемый экземпляр»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 423 Тогда
ОписаниеСостояния = "Locked («заблокировано»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 424 Тогда
ОписаниеСостояния = "Failed Dependency («невыполненная зависимость»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 426 Тогда
ОписаниеСостояния = "Upgrade Required («необходимо обновление»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 428 Тогда
ОписаниеСостояния = "Precondition Required («необходимо предусловие»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 429 Тогда
ОписаниеСостояния = "Too Many Requests («слишком много запросов»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 431 Тогда
ОписаниеСостояния = "Request Header Fields Too Large («поля заголовка запроса слишком большие»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 444 Тогда
ОписаниеСостояния = "Закрывает соединение без передачи заголовка ответа. Нестандартный код";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 449 Тогда
ОписаниеСостояния = "Retry With («повторить с»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 451 Тогда
ОписаниеСостояния = "Unavailable For Legal Reasons («недоступно по юридическим причинам»)";
////5xx: Server Error (ошибка сервера):
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 500 Тогда
ОписаниеСостояния = "Internal Server Error («внутренняя ошибка сервера»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 501 Тогда
ОписаниеСостояния = "Not Implemented («не реализовано»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 502 Тогда
ОписаниеСостояния = "Bad Gateway («плохой, ошибочный шлюз»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 503 Тогда
ОписаниеСостояния = "Service Unavailable («сервис недоступен»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 504 Тогда
ОписаниеСостояния = "Gateway Timeout («шлюз не отвечает»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 505 Тогда
ОписаниеСостояния = "HTTP Version Not Supported («версия HTTP не поддерживается»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 506 Тогда
ОписаниеСостояния = "Variant Also Negotiates («вариант тоже проводит согласование»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 507 Тогда
ОписаниеСостояния = "Insufficient Storage («переполнение хранилища»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 508 Тогда
ОписаниеСостояния = "Loop Detected («обнаружено бесконечное перенаправление»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 509 Тогда
ОписаниеСостояния = "Bandwidth Limit Exceeded («исчерпана пропускная ширина канала»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 510 Тогда
ОписаниеСостояния = "Not Extended («не расширено»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 511 Тогда
ОписаниеСостояния = "Network Authentication Required («требуется сетевая аутентификация»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 520 Тогда
ОписаниеСостояния = "Unknown Error («неизвестная ошибка»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 521 Тогда
ОписаниеСостояния = "Web Server Is Down («веб-сервер не работает»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 522 Тогда
ОписаниеСостояния = "Connection Timed Out («соединение не отвечает»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 523 Тогда
ОписаниеСостояния = "Origin Is Unreachable («источник недоступен»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 524 Тогда
ОписаниеСостояния = "A Timeout Occurred («время ожидания истекло»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 525 Тогда
ОписаниеСостояния = "SSL Handshake Failed («квитирование SSL не удалось»)";
ИначеЕсли РезультатHttpЗапроса.КодСостояния = 526 Тогда
ОписаниеСостояния = "Invalid SSL Certificate («недействительный сертификат SSL»)";
Иначе
ОписаниеСостояния = "";
КонецЕсли;
ВозращаемоеСоответствие.Вставить("КодСостояния", РезультатHttpЗапроса.КодСостояния);
ВозращаемоеСоответствие.Вставить("ОписаниеОшибки", ОписаниеСостояния);
Возврат ВозращаемоеСоответствие;
КонецФункции
Обработчик ответа от сайта, получаем код успеха/ошибки и описание.
Функция рс_ПостОбработка_ЗаполнитьДеревоJSON
Функция рс_ПостОбработка_ЗаполнитьДеревоJSON(ТекстJSON,ИмяКорневогоОбъекта="") Экспорт
лОбъектJSON = рс_ПостОбработка_JsonВОбъект(ТекстJSON);
нДерево = ЗаполнитьДеревоЖсон(лОбъектJSON);
Возврат нДерево;
КонецФункции
Функция рс_ПостОбработка_JsonВОбъект(СтрокаJSON,В_Соответствие=Истина) Экспорт
ПрочитанныйОбъект="";
/////-----Привет XML парсер
Попытка
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрЗаменить(СтрокаJSON,"==","NevW"));
ПрочитанныйОбъект=ПрочитатьJSON(Чтение,В_Соответствие,);
Исключение
ПрочитанныйОбъект="";
КонецПопытки;
Возврат ПрочитанныйОбъект;
КонецФункции
Сначала конвертируем "сырой" ответ из JSON в соответствие.
Функция ЗаполнитьДеревоЖсон
Функция ЗаполнитьДеревоЖсон(лОбъектJSON)
Дерево= новый ДеревоЗначений;
Дерево.Колонки.Добавить("Свойство");
Дерево.Колонки.Добавить("Значение");
Дерево.Колонки.Добавить("Тип");
СформироватьПодстрокиДерева(лОбъектJSON, Дерево);
Возврат Дерево;
КонецФункции
Функция СформироватьПодстрокиДерева(ИтераторИзJson, ТекущаяСтрокаДерева, ИндексЭлементаМассива = 0)
Для каждого Элемент из ИтераторИзJson цикл
ДочерняяСтрокаДерева=ТекущаяСтрокаДерева.Строки.Добавить();
//у типа итератора только два варианта: массив или соответствие
Если ТипЗнч(ИтераторИзJson) = Тип("Массив") Тогда
ДочерняяСтрокаДерева.Свойство = "[" +ТипЗнч(Элемент)+" "+ ИндексЭлементаМассива + "]";
ИндексЭлементаМассива = ИндексЭлементаМассива + 1;
Значение = Элемент;//элементы массива: примитивы, соответствия, массивы
Иначе //итератор - соответствие, элементы - ключ и значение
ЭлСтруктурыКлюч=Элемент.Ключ;
НовыйКлюч=ЭлСтруктурыКлюч;
ДочерняяСтрокаДерева.Свойство = НовыйКлюч;
Значение = Элемент.Значение;//значения: примитивы, соответствия, массивы
КонецЕсли;
Если ТипЗнч(Значение)=Тип("Соответствие") Тогда
ДочерняяСтрокаДерева.Значение="{" + Значение.Количество() +"}";
ДочерняяСтрокаДерева.Тип = "Запись";
СформироватьПодстрокиДерева(Значение, ДочерняяСтрокаДерева);
ИначеЕсли ТипЗнч(Значение)=Тип("Массив") Тогда
ДочерняяСтрокаДерева.Значение="[" + Значение.Количество() + "]";
ДочерняяСтрокаДерева.Тип = "Массив";
СформироватьПодстрокиДерева(Значение, ДочерняяСтрокаДерева);
Иначе //примитив
ДочерняяСтрокаДерева.Значение=Значение;
ДочерняяСтрокаДерева.Тип = ТипЗнч(Значение);
КонецЕсли;
КонецЦикла;
КонецФункции
Потом конвертируем "соответствие" в "дерево значений" для последующей обработки. Кому оно не нравится может использовать что-то иное. Мне очень удобно. Функция не моя, скачал здесь, на Инфостарте, понравилась, спасибо, правда не помню кому.
Возвращаем структуру с ответом в модуль формы для последующего понятного отображения.
Хочу отметить, что самый важный код - это Функция рс_публикация_ПодсистемаWordPressПостыСтраницы. А здесь самое важное - создание тела публикации "_БодиПубликации_". Сколько шишек здесь было набито... Отладите его, дальше всё пойдет как по маслу. И использоваться эта функция будет практически для всего, что надо отправить на сайт, или получить с сайта.
Ну и на последок видео, без него сейчас никуда.
На этом всё, первый шаг сделан, подставляйте свои маршруты и дерзайте.
Желаю приятных экспериментов на ниве обмена из 1С с сайтом WordPress.
Спасибо. Познавательно. Я давно хочу сваять интернет магазин на Wordpress. ОДнако останавливает отсутствие в API массового создания товаров bulk_create()
Спасибо. Познавательно. Я давно хочу сваять интернет магазин на Wordpress. ОДнако останавливает отсутствие в API массового создания товаров bulk_create()
Если это PHP, то не знаю. Но в Rest API есть пакетное создание товаров, до 100 шт единовременно.
(2) кстати там указано..
Note: By default it's limited to up to 100 objects to be created, updated or deleted.
то есть тереотически лимит можно расширить получается..
то есть тереотически лимит можно расширить получается..
Не получится, ограничение разработчиков.
Хотя если вы гуру PHP, и код WooCommerce знаете как свои 5 пяльцев, можете попробовать.
Пробовал, возвращается ошибка, и ничего не создается.
(1)
Преимуществ группового создания перед одиночным не вижу.
в woo базово внешние коды не хранятся, поэтому нужно хранить коды в 1С.
При анализе изменений делаю левое соединение к таблице с идентификаторами и если id > 0 то PUT, иначе POST.
1. Странно работаете с JSON, проще создать соответствие и сериализовать его.
2. Используете JWT имеет смысл статья https://infostart.ru/public/611505/ (использовал в своих работах)
3. Для HTTP имеет смысл переиспользовать https://infostart.ru/public/709325/, он есть и в git (сам свой велосипед использую, планирую переходить/использовать наработки)
Не нашел про JWT ничего кроме описания в 3-х словах. К чему эта отсылка?
Странно не использовать то, что уже есть... Или мы, как истинные россияне, должны идти "своим путём", велосипед уже изобретён, но нам нужен свой?
И ладно бы изобрели лучше, но ведь делаем копию хуже китайской, и потом гордимся "Вот, мы изобрели собственный велосипед!!!"
Не имеет, здесь используется "чистый" код 1С, без встраивания сторонних библиотек и прочего, с которыми еще надо разобраться как работают.
По сути вы пересобрали всевозможные варианты работы с HTTP в одну библиотеку...
Не написано, ни где использовалась, ни как использовалась, ни примеры работы, голый код. Да ещё неработающий.
За меня всё сказали другие комментаторы.
Решил данную задачу через соединение с MySQL на определенный IP. Сделал вывод что легче сразу работать с БД сайта.
Конечно легче, только есть парочка "но".
На мой, сугубо личный, взгляд, работать по IP - моветон. Для этого и придуман DNS. Вы с базой 1С тоже по IP соединяетесь?
Как с безопасностью?
Соединение постоянное? Если да, то как поддерживать постоянно?
Наверняка надо писать процедуру "прослушки" MySQL, если какие-то изменения.
На мой, сугубо личный, взгляд, работать по IP - моветон. Для этого и придуман DNS. Вы с базой 1С тоже по IP соединяетесь?
DNS - это получение IP-адреса по наименованию хоста. Моветона нет и не может быть, если IP-адрес постоянный. И с базой 1С достаточно часто работают по IP. Например, когда компьютер соединяется с рабочей сетью через VPN. Доступ к сети с базой 1С есть, а вот DNS-записей нет, так как используется VPN. Напрасно вы так.
Наверняка надо писать процедуру "прослушки" MySQL, если какие-то изменения.
С MySQL автор комментария наверняка работает через ADODB.Connection, поддерживать соединение постоянно нет необходимости, только когда запускается обмен. А вот с безопасностью беда, как сказал выше.
(7) Открытие доступа к MySQL во вне - это плохо с точки зрения безопасности (даже если соединение на определенный IP).
На крупных проектах такое не подойдет.
А как насчет другой истории. Не из 1С отправлять данные на сайт, а с сайта забирать данные из 1С посредствам HTTP сервисов? Мне кажется это более гибкое решение.
Те, кому приходилось делать REST API на базе HTTP-сервисов 1С, могли в какой-то момент столкнуться с необходимостью разработки методов, которые позволяли бы возвращать данные с пагинацией, т.е. последовательными порциями.
В языках общего назначения пагинация реализуется простым использованием операторов OFFSET и LIMIT в SQL-запросе к базе данных. В языке запросов 1С оператора OFFSET нет, поэтому всем приходится решать эту задачу обходными способами.
Один из таких обходных способов представлен в этой статье.
В статье собраны некоторые полезные и интересные примеры доработок выгрузки из 1С на сайты на платформе Битрикс (Возможно, что-то подойдёт и для WordPress и других платформ, принимающих типовую выгрузку на сайт из 1С). Доработки рассмотрены без привязки к конкретным конфигурациям, примеры кода взяты в основном из доработок УТ 10 и 11. Некоторые доработки требуют изменений на стороне Битрикса, некоторые укладываются в типовой функционал.
Примеры взяты из личного опыта, возможно, описание где-то не полное, т.к. доработки делались в разное время. Если материал будет интересен или будут аналогичные актуальные задачи, буду стараться дополнять статью более подробным описанием и примерами.
Онлайн-сервисы, построенные на 1С, могут использовать все многообразие веб-технологий. О том, как спроектировать, реализовать и красиво оформить интерфейс продукта 1С, в докладе на конференции Infostart Event 2021 Post-Apocalypse рассказал CTO компании WiseAdvice Олег Филиппов.
На написание статьи побудило чтение книги "Технологии интеграции "1С:Предприятия 8.3"" Хрусталевой Е.Ю. В первой главе там постоянно чередуются слова REST, REST-интерфейс, архитектура REST и т.д. Мне стало интересно, я начал копать, что это такое, и тема оказалась достаточно интересной.
При обновлении релиза УПП до 1.3.178.2 пользователи начали жаловаться, что не отправляются в ФСС документы "Ответ на запрос ФСС для расчета пособия" и "Сведения о застрахованных лицах, ФСС". В статье предложен вариант обхода данной ошибки, возможно, это кому-то поможет.
В статье описаны критерии WYSIWYG HTML редакторов и общая картина интеграции с платформенными механизмами. На момент платформы 1С 8.3 и возможно для будущих релизов описание будет скорее всего актуально. Апробировано на 1С 8.3.20 и 8.2.12, а также на мобильной платформе 8.3.19.59.
1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя.
Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.
На онлайн-митапе «Бизнес-анализ по данным базы 1С. Интеграция c платформами BI» выступил ведущий разработчик WiseAdvice.tech Дмитрий Фурцев. Дмитрий рассказал о том, как отдать миллионы строк из 1С в платформу бизнес-аналитики и не потратить на это сутки.
С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2.
Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.
В статье хочу поделиться опытом настройки подключения 1С к стороннему HTTP-сервису, использующему авторизацию посредством передачи клиентского SSL-сертификата.
Это вторая часть цикла статей, посвящённых типовому модулю интеграции 1С Предприятия и Битрикс24. Цель данной части: рассмотреть тонкости, связанные с обменом товарами и сопутствующими сущностями (спойлер - единицы измерения и свойства товаров). Также затронем некоторые нюансы связи сущностей 1С и Б24 (относящиеся не только к товарам) и их побочное влияние при переносе данных из модуля в модуль (при смене конфигурации, переустановки или обновлении модуля).
Мы дали ему название adm1c, он позволяет посредством веб доступа удалять или смотреть на сеансы в 1С базах и при необходимости удалять их. Да и что тут такого, сказали бы, есть же консоль на win, с нее же это можно делать, и все верно, но есть пара но.
На днях взялся за реализацию печатной формы, где данные должны быть представлены на иностранном языке. На удивление нашёл крайне мало информации по данному вопросу. Поэтому решил написать эту статью.
Цель статьи - указать на подводные камни и нюансы, о которых “не пишут на заборах” и которые встретились мне за время внедрения типового модуля интеграции 1С и Битрикс24. Будет интересна для людей, кто подумывает о том, чтобы настроить интеграцию, и хотят понять, с чем столкнутся. А также для тех, кто уже работает с подобным обменом, столкнулся с какими-то из описанных ситуаций и хочет понять, что пошло не так и “как жить дальше”. Постараюсь все описать “человеческим” языком с минимальной долей терминов, так как статья, надеюсь, будет полезна не только программистам.
Онлайн-курс предусматривает изучение возможностей системы “1С:Аналитика”, которая работает как составная часть платформы “1С:Предприятие” и обеспечивает оперативный просмотр и анализ необходимых данных.
Рассказываем о WEB и HTTP сервисах, их практическом применении, о шишках, которые мы набили, и о выводах, которые сделали. Спойлер: тех, кто дочитает статью до конца, ждет бонус от автора.
ГИИС ДМДК - единая информационная платформа для взаимодействия участников рынка драгоценных металлов и драгоценных камней. с 01.09.21 стартовал обязательный обмен данными с Федеральной пробирной палатой (ФПП) исключительно через ГИИС. А постепенно - с 01.01.2022 и с 01.03.2022 - все данные о продаже драгоценных металлов и камней должны быть интегрированы с ГИИС.
У многих пользователей возникает вопрос как автоматизировать обмен между программой 1С и ГИИС ДМДК.
В настоящей статье ВЦ Раздолье поделится своим опытом о реализации такого обмена.
Автор статьи - Мордовин Антон - архитектор систем на базе 1С Внедренческого центра "Раздолье".
В курсе обобщен опыт работы аналитика на проектах в течение пяти лет, в нескольких фирмах. Подходы к написанию документов унифицированы и по возможности не привязаны к конфигурациям 1С.
Потребовалось отправить картинку в теле запроса в HTTP сервис методом POST, куча реализаций, но есть маленькие нюансы, если хотя бы кому-то поможет, то уже это было не напрасно.
Все чаще разработчики склоняются к использованию 1C в качестве бэкенда при разработке веб-приложений. Но благодаря встраиванию веб-клиента 1С в сайт можно получить еще больше готовой функциональности. О том, как реализовать гибридное приложение за счет связки 1С с другими веб-технологиями, рассказал разработчик компании Neti Эльдар Мингалиев.
Использование веб-сервисов 1С при обмене 1С – 1С позволяет быстро передавать достаточно большие объемы данных из базы-источника в базу-приемник в объектах языка 1С.
Данный метод обмена может применяться при бесшовной интеграции между двумя базами 1С, но требует определенной серверной инфраструктуры (установленного и настроенного WEB-сервера).
СПАРК помогает предотвратить мошенничество со стороны компаний и предпринимателей, благодаря актуальным сведениям о компаниях и системе выявления факторов риска.Сервис позволяет управлять налоговыми рисками и комплексно оценивать благонадежность контрагентов.
Путешествие начинающего программиста 1С. Глава вторая. Призываем экспертов в комментарии, оптимизируем код, ругаемся на кривые руки автора.
Автор же, в свою очередь, делится своим опытом, читает умные комментарии, стремится дать те знания, за которыми он сидел ночами тем, кто их хочет найти.
В статье будет много примеров кода с комментариями работы расширения для обмена данными УТ11.4 с Яндекс.Маршрутизацией через выгрузку/загрузку EXCEL файла.
В платформе 8.3.16 появилась возможность выводить на страницах сайта информацию из веб-клиента 1С так, что пользователь даже не заметит, что работает с платформой. Руководитель компании Айтон Михаил Пинягин на онлайн-митапе «Web-клиенты для 1С» рассказал о том, какие особенности нужно учесть при настройке встраиваемого веб-клиента, и какие возможности он дает.
При разработке сайтов, интегрированных с 1С через HTTP-сервисы, приходится бороться с кодировками, искать производительные интерфейсные решения и задумываться над безопасностью. В ходе онлайн-митапа «Web-клиенты для 1С» Юрий Лазаренко показал на практике, как работает магия самодельного веб-клиента и как решать проблемы, возникающие при интеграции.
Универсальная программа-обработка для распознавания любых сканов или фото первичных документов в 1С (счета-фактуры, УПД, ТТН, акты и тд).
Точность распознания до 98%.
Как мы решали проблемы с доставкой в нашем интернет-магазине, внедрили новый бизнес-процесс за 3 месяца и научились меньшим количеством машин привозить больше заказов клиентам.
На Infostart Meetup «Интеграционные решения для 1С» выступил Сергей Наумов – руководитель центра аналитики и консалтинга WiseAdvice. Сергей поделился с коллегами кейсами из собственной практики: какие интеграционные решения остаются актуальными до сих пор, а каких приемов стоит избегать – даже в безвыходных ситуациях.
Примеры вызова в 1С методов API до реестров открытой части Электронного кабинета налогоплательщика, Украина.
Тестирование проводил на 1С:Предприятие 8.3 (8.3.10.2561).
Статья - пример для разработчика, как можно, не используя подсистему Интеграция с Документооборотом, управлять процессами, а именно на нашем примере прерывать выполнение процессов в 1С: Документооборот.
Используя данный пример, можно организовать http-сервис в любой конфигурации 1С, которая поддерживает механизм HTTP сервисов.
Чем больше в компании различных конфигураций и сервисов, тем актуальнее становится проблема единой системы авторизации single Sign-On. Его лидером практически безоговорочно считается Okta. Но на просторах интернета очень мало информации про интеграцию 1С с Okta через протокол OpenID Connect. Что ж, настало время восполнить недостающие пробелы и перевернуть эту печальную страницу в вашей истории