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

19 Comments

  1. VmvLer

    Хорошая идея для небольших объемов данных: сверка, синхронизация маленьких таблиц и т.п.

    Для выгрузки/загрузки полных объемов данных проще сохранить в источнике массивные данные в файл JSON и затем получить его в приемнике и обработать.

    Reply
  2. dsdred

    Сразу видно не читали https://its.1c.ru/db/content/v8std/src/d810/i8100770.htm?_=1528299650

    Для вашего примера достаточно OData без создания http-сервиса

    А по http-сервисам вот:

    HTTP Сервисы: Путь к своему сервису. Часть 1

    HTTP Сервисы: Путь к своему сервису. Часть 2

    HTTP Сервисы: Путь к своему сервису. Часть 3

    HTTP Сервисы: Путь к своему сервису. Часть 4

    П.С. Это больше на костыль похоже, причем на дыру в безопасности.

    Reply
  3. K_A_O

    А я-то уж по заголовку решил, что любой запрос в OData преобразуется.

    Reply
  4. Lapitskiy

    а насколько правильно использовать «ЗначениеВСтрокуВнутр» в 2018 году?

    Reply
  5. John_d

    (4) Это типовая функция платформы. Все зависит от задачи.

    Например в УПП есть регистр сведений СоответствиеОбъектовДляОбмена, где хранятся текстовые ссылки на объекты в другой базе.

    Reply
  6. starik-2005

    (4)

    а насколько правильно использовать «ЗначениеВСтрокуВнутр» в 2018 году?

    А там внутри тот же XML, только заююченый )))

    Reply
  7. Lapitskiy

    (6) Но 1С вот что пишет:

    «Примечание:

    Используется для сохранения функциональной совместимости с 1С:Предприятием 7.7. Использовать для других целей не рекомендуется. «

    Reply
  8. oleganatolievich

    (6) значениевстрокувнутр < сериализация в JSON < сериализация в XML по скорости

    Reply
  9. dsdred

    (8)Подключение на прямую к базе < http-сервисов + преобразования… И?

    Суть не в этом.

    Данный пример просто опасен.

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

    И кто то еще и скачает и воткнет сию разработку.

    П.С. Я когда то тоже нечто подобное навоял. Создал HTTP-сервис и метод «Выполнятор» из названия не трудно догадаться, что это за выполнятор был.

    Посылал целый кусок кода и параметры в JSON, в куске кода который передавал описывал в каком виде вернуть данные.

    Крутая вещь я вам скажу! Так я думал… А потом спустя пару месяцев ночью проснулся и вздрогнул от того, что я натворил. Слава богу всего в 4-х местах успел только использовать.

    Потом еще и статью почитал которую выше написал https://its.1c.ru/db/content/v8std/src/d810/i8100770.htm?_=1528299650

    Так что ЗначениеВСтрокуВнутр это лишь цветочки…

    Reply
  10. Aleks.spb

    (2) У вас отличный фундаментальный труд, на освоение которого нужно потратить от трех дней и больше, если есть возможность и время копать глубоко.

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

    Reply
  11. John_d

    (9) Спасибо за комментарий. Вместе мы сделали код безопаснее.

    Результ = «»;

    Значение1 = СтрЗаменить(СтрСтр.Значение,»;»,»»); //запрет кода 1с с двумя и более операторами

    Выполнить(«Результ = » + Значение1);

    Теперь я не могу придумать вредоносный код с одним оператором. Который начинается «Результ =».

    Скриншот исправил. Файл перезалил.

    Reply
  12. santech-1C

    не нравится «выполнить()» — сделайте через «Запрос.Выполнить()»

    моя нетленка в тему

    Reply
  13. dsdred

    (10)

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

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

    П.С. Можно потратить час сейчас и X-дней потом чиня последствия. Беречь время правильно, но правильно беречь время лучше!

    Reply
  14. Aleks.spb

    (13) Вас понял, но я рассматривал это как пример организации http сервиса с post запросом/ответом в формате JSON для человека который начал с нуля.

    Reply
  15. dsdred

    (14)Вот вам и pos и get, пример простой, но полезный.

    Мобильный клиент + HTTP Сервис + Расширение конфигурации

    Reply
  16. dsdred

    (11)Одну заплатку поставили, а сколько их еще будет?

    Кто его знает, не хочу ломать голову, но вот вам замена «;»=Символ(59)

    Специальный запуск долгих запросов или получение данных из баз в которые не должно было быть доступа…

    Reply
  17. John_d

    (16)Это выполняемый код тут Символ(59) не прокатит в качестве разделителя операторов.

    Reply
  18. dsdred

    (17)Как я уже говорил не хочу ломать голову. Я лишь показал как можно протащить команду с «;»

    Выполнить ее или записать куда то для выполнения это уже следующая стадия размышлений.

    Показываю как текст команды протащить:

    Параметры1 = новый Структура;
    //Параметр хранит текст команды
    Параметры1.Вставить(«КодДляВыполнения»,»СтрЗаменить(«»Я1=1||Я2=2||Я3=3″»,»»||»»,Символ(59))»);
    //Вариант1: Получаем текст команды, осталось подумать что с этим делать
    Параметры1.Вставить(«ПришелНасралУлетел1″,»Запрос.Параметры.КодДляВыполнения»);
    //Вариант2: Получаем текст команды, осталось подумать что с этим делать
    Параметры1.Вставить(«ПришелНасралУлетел2″,»Запрос.Выполнить().Выгрузить()[0].ПерлХарбр»);
    
    
    Запрос.Текст = «ВЫБРАТЬ &КодДляВыполнения КАК ПерлХарбр»;

    Показать

    Reply
  19. John_d

    (18) красиво)

    Тогда еще такую заплатку. Использовать нестандартную переменную запроса.

    Запрос234а15а2 = Новый Запрос;

    Reply

Leave a Comment

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