Практика доступа в базу 1С через протокол oData. Изменение данных

30.12.17

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

Продолжаем знакомство с протоколом oData и в данной статье мы рассмотрим такие вопросы, как минимально необходимый багаж теоретических знаний, необходимый для работы, способы изменения доступных данных, а также с какими ограничениями можем при этом столкнуться. Осторожно, будет много скриншотов!

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Обработка для выполнения HTTP-методов
.epf 7,69Kb
212
212 Скачать (1 SM) Купить за 1 850 руб.

Эта работа является естественным продолжением моей предыдущей статьи "Практика доступа в базу 1С через протокол oData. Чтение данных" и все операции будут выполняться в той же демо-базе "Управление торговлей (базовая), редакция 10.3", к которой я предоставил доступ по OData в предыдущей статье.

 

Что нам нужно знать про HTTP?

OData - это протокол работы с данными поверх классического протокола HTTP. Это означает, что у каждого элемента данных есть свой URL, а чтобы сообщить серверу, что именно вам необходимо с этим элементом сделать (просто получить или изменить), используются HTTP-методы. Для многих эти сущности возможно будут новинкой. Ведь знание о HTTP-методах совершенно не нужно пользователям при их обычном интернет-серфинге (где тотально применяется GET). И даже веб-разработчики зачастую в курсе только про пару GET и POST, которые считают методами для отправки на сервер данных из форм.

Протокол OData подразумевает применение следующих пяти методов для работы с данными:

  • GET - самый популярный из методов, который предназначен для запроса данных на чтение по указанному адресу;
  • POST - метод для создания нового элемента данных, в качестве адреса обычно указывают только класс объектов;
  • PUT - метод для замены свойств элемента данных на сервере по указанному полному адресу теми свойствами, которые передаются вместе с этим запросом. Обычно в популярных реализациях этого метода передача неполного состава свойств приводит к ошибке; так же часто адресация несуществующего элемента данных приводит к его автоматическому созданию (как это было реализовано в платформе 1С посмотрим ниже);
  • PATCH - метод для обновления только переданных свойств элементов данных;
  • DELETE - метод предназначенный для удаления элементов данных.

 

Клиент для протокола OData

Для "общения" с базой 1С по протоколу OData нам понадобится некоторый инструмент. И поскольку нас интересует уже не банальный GET, а полный спектр HTTP-методов, то обычные браузеры и подавляющее большинство популярных программ с поддержкой OData нам не подойдут. Потребуется что-то более функциональное.

Есть несколько распространенных вариантов. Опытные веб-разработчики, хорошо знакомые с сетевыми технологиями, на этих словах уже запускают свой любимый Fiddler, в котором на закладке Composer можно эмулировать любой из HTTP-методов, а потом, переключившись на закладку Inspectors, посмотреть полученный от сервера ответ. А поклонники UNIX-way, даже работая на Windows, конечно же имеют в наличии старый добрый автомат Калашникова консольный cUrl, в котором с помощью ключа -X можно указать требуемый HTTP-метод.

Но, поскольку мы тут все программисты 1С, то почему бы не написать собственный "велосипед"? Тем более что это очень просто и код можно в будущем использовать в других работах. Для этого поместим на форму новой обработки поля для подключения, авторизации, передачи параметров и вывода ответа сервера, а в обработчик на нажатие кнопки разместим примерно такой код:

	Соединение = Новый HTTPСоединение(Сервер, Порт, Логин, Пароль,,,?(СоединениеЗащищено, Новый ЗащищенноеСоединениеOpenSSL(), Неопределено));
	ЗапросСервера = Новый HTTPЗапрос(ПутьНаСервере);
	ЗапросСервера.УстановитьТелоИзСтроки(ТелоЗапроса);
	ОтветСервера = Соединение.ВызватьHTTPМетод(Метод, ЗапросСервера);
	ТелоОтвета = ОтветСервера.ПолучитьТелоКакСтроку();
	ЗаголовкиОтвета = "Status Code: " + ОтветСервера.КодСостояния + Символы.ПС;
	Для каждого ЗначениеЗаголовка Из ОтветСервера.Заголовки Цикл
		ЗаголовкиОтвета = ЗаголовкиОтвета + Символы.ПС +
			ЗначениеЗаголовка.Ключ + " : " + ЗначениеЗаголовка.Значение;
	КонецЦикла; 

Если захотите ознакомится с моей обработкой во вложении, то там будет дополнительно разбор переданного URL с определением протокола (HTTP или HTTPS), вычисление порта и отбрасыванием из адреса прочую вспомогательную информацию. Выглядит примерно так:

Обработка по работе с HTTP-методами

Ломать - не строить

Для начала возьмем самую простую операцию - удаление, на примере контрагента "АОЗТ Лабан" из демо базы УТ10.3. Собственно повторяем вызов строчки из выше опубликованного скриншота, но вместо метода GET воспользуемся методом DELETE. Теперь вместо ответа 200 (все хорошо), сервер нам отвечает 204 (нет содержимого) - это нормальное поведение именно для удаления.

удаление ресурсаДавайте перейдем в саму базу 1С и по журналу регистрации проверим, что же произошло:

журнал с удалениями

Как мы видим, наш контрагент был успешно удален вместе со всеми своими подчиненными связанными данными. Тот факт, что для всех  этих справочников в роли моего пользователя было запрещено интерактивное удаление, не имеет значения. Удаление по протоколу OData приравнивается к удалению из программного кода. Но, как видим, есть и различие - при программном удалении контрагента его подчиненные элементы остались бы в базе. Это важно и потому запоминаем: если у хоть одной роли пользователя есть право "Удаление", то у вас есть риск на безвозвратную потерю множества данных без контроля на наличие ссылок:

побитые данные

Кстати, повторная попытка удалить элемент с помощью метода DELETE аналогично запросу с помощью GET приведет к ошибке 404 (не найдено):

запрос удаленного

 

Создаем новое (или старое)

Как жаль, что контрагента "АОЗТ Лабан" постигла такая печальная участь... А можем ли мы его спасти без восстановления базы из бэкапа или без выполнения кода непосредственно в УТ?

Начну с цитаты из документации:

Для создания объекта следует воспользоваться POST-запросом с использованием URL набора сущностей, передав в теле запроса документ (в поддерживаемом формате), который содержит значения полей создаваемого объекта. Если передаваемый документ содержит свойства, отсутствующие у создаваемого объекта, то эти свойства игнорируются.

Больше ничего у нас с вами нет. Ни перечня обязательных полей. Ни перечня исключаемых полей. Ни упоминания о возможности создания объекта с нужным нам значением GUID. Поэтому начинаем свободные эксперименты!

Еще с самого первого запроса GET у меня осталось описание контрагента, со свойством Ref_Key, в котором находился его GUID (даже если бы его у меня не было, то я мог получить его из документа, который все еще ссылается на удаленного контрагента). Сначала попробуем отдать полностью это описание на URL с указанием элемента. Ожидаемо получаем ошибку 404 как и в случае методов GET и DELETE (см. выше). Теперь обращаемся к "набору сущностей", как того требует документация:
http://localhost/DemoTrdBase/odata/standard.odata/Catalog_Контрагенты?$format=json

И на этот раз у нас все получилось:

запрос на созданиесоздание в журнале

Более того, все получилось именно так как и было задумано - новый элемент был создан именно с тем GUID (а следовательно с той же ссылкой) как и ранее удаленный! Это хорошо видно на документе закупки ТК000000030 от 13.03.2007, где контрагент появился, но его договора и типа цен по прежнему нет (их можно аналогично восстановить, воспользовавшись в качестве образца для структуры подчиненные данные похожего контрагента, лишь в качестве GUID подставив правильные строки):

исправленный документ

Это все превосходно, но а если у объекта множество свойств и они нам сейчас не интересны (пусть будут значения по умолчанию). Можем ли мы уменьшить размер передаваемого пакета и следовательно увеличить скорость гипотетического создания множества объектов в цикле? Для ответа на этот вопрос пойдем по пути экстремальной минимизации - попробуем создать элемент не указав ему вообще ни единого свойства!

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

Не то чего я ожидал, но тем не менее отличный результат! Следовательно все программно-обрабатываемые события объектов не игнорируются! Это вам не тупой прямой insert в СУБД, а процедура записи полностью идентичная программной записи из какой-нибудь обработки. Но все же, что же будет с датой? Для этого нам нужен более простой документ, который крепко не привязан к рабочим процессам в УТ, к примеру Событие:

создание события без даты

Да, ошибка получена. Теперь лично у меня к механизму создания элементов методом POST вопросов больше не осталось. Все оказалось довольно простым и без "заморочек": можно устанавливать уникальный идентификатор новым ссылкам, отсутствуют какие-либо требования к обязательным или запрещенным свойствам в описании, лишние (не относящиеся к объекту) свойства просто игнорируются, запись в базу следует всем тем же правилам, что и обычная программная запись.

 

Теперь будем изменять (в хорошем смысле)

Как я уже упомянул выше, для изменения данных в базе 1С посредством OData можно использовать методы PUT и PATCH.

Давайте сразу же попробуем применить PUT в созидательной роли POST. К сожалению, тут ничего интересного мы не узнаем. В контексте коллекции мы получаем ошибку, что данный метод недопустим, а при указании произвольного GUID мы получим ошибку, что изменяемый экземпляр не найден:

обновление несуществующегосоздание обновлением

А что если не указывать все реквизиты? Действительно, практика показала, что можно не указывать все реквизиты объекта и эти свойства станут заполняться значениями по умолчанию, что иногда может быть удобным. Ниже пример, где у справочника были затерты введенные вручную полное наименование и параметры прописи для валюты:

затирание свойств при обновленииВот и все интересное, что мы могли узнать про PUT, и потому переходим к более гибкому методу PATCH. При работе с этим методом, в отличии от его предшественника, нам для установки значения единичного реквизита больше не нужно делать предварительный GET для запроса значений всех свойств, что бы потом эти же свойства не затереть значениями по-умолчанию. Нам достаточно лишь идентификатора объекта и нового значения указанного свойства:

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

попытка массового изменения

 

Итог

Не смотря на отсутствие некоторых удобств, протокол OData на платформе "1С:Предприятие 8" позволил нам совершать все базовые операции над данными. Таким образом, имея доступ в базу только по этому протоколу, можно реализовать полноценную интеграцию с некоторой внешней системой.

Статья вышла длинной не смотря на то, что были рассмотрены самые простые операции. Часть возможных интересных экспериментов была оставлена за кадром, но вы можете самостоятельно попрактиковаться. К примеру, как на счет записать набор записей по какому-нибудь из регистров? ;)

OData REST HTTP обмен доступ создание удаление модификация

См. также

SALE! 15%

Внешние источники данных Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

28500 руб.

15.11.2022    20912    20    49    

38

Поиск данных Внешние источники данных Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Если вам нужно автоматически генерировать представления (view) к вашей базе данных 1С (есть две версии - для СУБД MS SQL Server и для PostgreSQL) по структуре метаданных 1С, то вам необходима данная обработка. Наш "Генератор View", другими словами - это коннектор к данным 1С для Power BI - незаменимый помощник для бизнес-аналитиков, работающих с базами 1С из Yandex Datalens/Power BI и т.д. Работает для обычных и управляемых форм под 1С 8.3

230000 руб.

31.07.2020    13816    13    48    

25

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

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

48000 руб.

24.04.2017    51204    101    165    

89

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

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

60000 руб.

05.10.2022    10881    13    8    

15

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

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

84000 руб.

19.08.2020    25182    22    1    

25

Внешние источники данных Облачные сервисы, хостинг Программист Бизнес-аналитик Пользователь Руководитель проекта Платформа 1С v8.3 8.3.14 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бытовые услуги, сервис Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Гостиничный бизнес Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Легкая промышленность, мода и одежда Управленческий учет Платные (руб)

Расширение позволяет автоматизировать управление картами лояльности и взаимодействие с покупателями при помощи интеграции корпоративной системы 1С и специализированного облачного сервиса "CARDPR". Автоматическая онлайн синхронизация сведений о владельце электронной карты лояльности и баланса бонусных баллов на карте между корпоративной системой 1С и мобильным устройством покупателя. Оповещение покупателя об изменении баланса его электронной карты лояльности и проведении каких-либо маркетинговых акций в компании при помощи рассылки push-сообщений на его мобильное устройство.

36000 руб.

20.07.2023    3250    2    2    

11

Производство готовой продукции (работ, услуг) Внешние источники данных Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

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

10200 руб.

24.06.2021    20779    57    53    

35
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Spec1Cnik 11 02.01.18 05:50 Сейчас в теме
Интересная статья, спасибо.
2. DenisCh 02.01.18 06:58 Сейчас в теме
Соглашусь. Интересно.
baracuda; +1 Ответить
3. McSim_ 02.01.18 12:06 Сейчас в теме
"На самом интересном месте!.." :)
Как раз запросы к регистрам - самое интересное. Например, как получить сальдо на выбранном счёте на выбранную дату? Об этом информации в сети минимум.
5. Dementor 1035 02.01.18 19:36 Сейчас в теме
(3) в третьей части как раз хотел поиграться с виртуальными таблицами, блокировками, режимом загрузки и прочими "функциями".
29. Wersia 14.12.20 17:41 Сейчас в теме
(5)Добрый день.
Получилось потренироваться с виртуальными таблицами?
Например запрос оборотов по хозрасчетному с отбором по регистратору
27. user1373653 18.04.20 17:19 Сейчас в теме
(3)спасибо, очень полезная статья
4. baracuda 2 02.01.18 12:29 Сейчас в теме
6. Vladimir Litvinenko 2897 09.01.18 13:14 Сейчас в теме
В записи данных в 1С через OData, есть большая опасность, которая может дать сильного пинка архитектору системы при активном использовании. В GRASP есть фундаментальный шаблон Information Expert, более известный под общим названием "инкапсуляция". Его нарушение ведет к детским болезням программирования, последствия же для системы в целом могу оказаться совсем не детскими.

Если обращение на запись через OData выполняет более чем одна внешняя система, то даже изменение типа реквизита может превратиться в настоящую эпопею с подключением всех разработчиков всех этих внешних систем. Не говоря уже о скованности по рукам и ногам при изменении алгоритмов записи/проведения внутри системы принимающей данные. Заканчивается это либо тем, что на развитие системы построенной на OData "забивают", ввиду сложности изменений и необходимости постоянно координировать взаимодействие множества разработчиков, либо развитие продолжается, но титаническими неоправданными усилиями. Ну или еще один путь - переписать все с применением более подходящих технологий ))

Конечно это не в целом к технологии OData и REST относится. Просто в 1С подход так реализован, что сложно для OData красивый интерфейс сделать, с возможностями хоть как-то напоминающими web-сервисы или хотя бы http-сервисы. Единственный интерфейс - этот тот что предлагает платформа без возможности его изменения, при этом он больше напоминает прямую запись в SQL .... в каждую таблицу отдельно.... без транзакций )) Ибо оптимистические блокировки не сильно помогают в борьбе за целостность данных.

Для 1С сейчас OData хорош только в универсальных алгоритмах, где изменение типа реквизита, появление обязательного к заполнению реквизита или изменение алгоритма обработки входящих данных не ведет к катастрофам. Для этого в алгоритмах отправки данных надо анализировать данные /odata/standard.odata/$metadata. Но многие ли так делают? Из известных публикаций только Metadata.js вспоминается.

Пока что имхо OData в 1С лучше применять на чтение. И в тех случаях, когда временный сбой в чтении данных не скажется сильно на работе всей системы.
panika; kauksi; Spec1Cnik; +3 Ответить
7. Dementor 1035 09.01.18 22:15 Сейчас в теме
(6) Спасибо за комментарий. Если его перевести на обычный язык, то вы хотели написать, что 1) при одновременной работе с интерфейсом нескольких клиентов возможны проблемы логической целостности; 2) при изменении метаданных базы 1С возникают проблемы в скриптах доступа. Ничего не пропустил?
9. Vladimir Litvinenko 2897 10.01.18 13:44 Сейчас в теме
(7) Примерно так. По первому пункту проблема скорее даже не с количеством клиентов, а с тем, разные группы разработчиков отвечают за эти системы или это одна и та же команда. Скоординировать изменения кода в разнородных системах только потому, что произошли простейшие изменения в структуре объекта метаданных - сложная задача. При наличии же нормального интерфейса вроде web-сервиса или хотя бы http-сервиса рефакторинг или изменение логики происходит значительно проще.

По этим признакам реализация OData от 1С больше похожа на COM-подключение. Из плюсов - протокол http и кросплатформенность. Но ограничений еще больше: экспортные методы, целостность и согласованность данных, проверки при записи и т.д. Также нет объектной обертки к OData. Для взаимодействия между системами на 1С приходится писать обертки самостоятельно, чтобы в коде не было "простыни". Это облегчает ряд задач, но поскольку обертку можно применять только для алгоритмов отправки (на стороне клиента), то от главных проблем это увы не спасает.

Претензия разумеется не к публикации - плюсанул и буду ждать третью часть. Но хотел подчеркнуть эти ограничения, чтобы коллеги на грабли не наступали.
baracuda; user843241; panika; kauksi; Spec1Cnik; +5 Ответить
41. user1779748 17.10.22 06:39 Сейчас в теме
(9) Что Вы можете сказать насчёт HTTP -обмена, с использованием HTTP-Сервиса, насколько это будет опасно для базы? Получать данные например о контрагентах или документах заказ клиента, и записывать их в базу приемник.
8. Dos_1985 10.01.18 05:49 Сейчас в теме
10. Alien_job 190 16.01.18 14:34 Сейчас в теме
Спасибо за статью. Про ошибку при записи документа прокомментируете? У вас не написано что получилось изменить существующий в базе документ
11. Dementor 1035 16.01.18 18:50 Сейчас в теме
(10)
У вас не написано что получилось изменить существующий в базе документ

С помощью POST это действительно невозможно. И это хорошо - должен же быть хоть какой-то порядок :) С методами PUT и PATCH нет никаких проблем по изменению существующих документов, если известен их идентификатор - в моих примерах документы были успешно модифицированы.
12. Alien_job 190 16.01.18 20:52 Сейчас в теме
(11) Ок, перепробую. Подскажете платформу на которой вы работаете?
13. Dementor 1035 17.01.18 00:50 Сейчас в теме
(12) сейчас установлена 8.3.11.2867. На ней же сделаны примеры из статьи.
14. kauksi 217 05.03.18 11:29 Сейчас в теме
Все эти действия через oData напоминают известный анекдот... "про любителей секса с 1с в противогазе, стоя и в гамаке"
15. Dementor 1035 05.03.18 15:08 Сейчас в теме
(14) Да не вопрос! Предложите более простой способ прочитать и изменить произвольные данные в базе 1С для стороннего программного комплекса без внесения изменений в саму базу 1С. И что бы на линуксах и маках работал.
16. kauksi 217 06.03.18 09:52 Сейчас в теме
(15) Всегда есть выбор: "толкать" данные или "тянуть". Пока что "тянуть извне" разнообразными средствами 1с гораздо проще чем "толкать в 1с" из линукса по oData.
18. Dementor 1035 06.03.18 13:39 Сейчас в теме
(16) Для программиста легче. А для какого-нибудь веб-мастера все с точностью наоборот.
19. mikeA 1 06.03.18 14:36 Сейчас в теме
(15) По-моему ключевое слово здесь "без внесения изменений в конфигурацию". Однако когда дело доходит до доступа в базу по http внесение изменений в конфигурацию уже не представляет из себя проблему. И в этом случае гораздо удобнее http сервисы. Да, это не универсально, но плюсы таки да перевешивают.
20. Dementor 1035 06.03.18 18:04 Сейчас в теме
(19) Согласен, что при наличии выбора SOAP или HTTP-сервис, последние имеют ряд преимуществ (как сравнивать ручной ввод новой НСИ и загрузку из Excel).

Но если речь идет про базы на поддержке и автообновлении, то все не так однозначно. Так же есть случая, когда компания купила коробку и более тратится на программиста не хочет, но обладает софтом, который умеет работать с SOAP. Можно сказать, что это "нишевая потребность", которая актуальна не для всех (так же как работа с двоичными данными или выражениями XPath).
17. kauksi 217 06.03.18 09:57 Сейчас в теме
ну либо использовать какую-нибудь промежуточную шину ESB, чтобы получать данные из сторонней системы и потом толкать их в 1с каким то общеизвестным методом. А то что вы описываете выше это интересно, но все же как ассемблер для 1с ввиду узкой спецификации
21. maxx 996 06.03.18 23:27 Сейчас в теме
Я как-то уже писал на форуме 1с, что при создании новых объектов через Odata не хватает метода Заполнить (вызов события ОбработкаЗаполнения)
22. la@pivoluchshe.ru 09.06.18 23:47 Сейчас в теме
Скачал Вашу обработку, запускаю на 1С Розница, редакция 2.2 (2.2.7.39) (1С:Предприятие 8.3 (8.3.11.2899)). Обработка запускается, но список объектов пустой. Подскажите, что сделать, чтобы обработка сработала?

Мне нужно именно для Розницы, для УТ воспользовался стандартной обработкой.

Спасибо
Прикрепленные файлы:
30. Gendelf 10.02.21 11:21 Сейчас в теме
(22) в обработке очистить условие ПриСозданииНаСервере, там первые 4 строки вроде.
23. burnand2 25 05.03.19 16:35 Сейчас в теме
Добрый день.
Пытаюсь создать документ методом POST выдает ошибка 500: Не удалось записать документ.
Подскажите в чем может быть ошибка?
24. Dementor 1035 06.03.19 12:34 Сейчас в теме
(23) я не помню какая ошибка при отказе в доступе по правам - возможно именно тут проблема. Или в алгоритмах ПередЗаписью, ПриЗаписи, ПриОтменеПроведения или ПриПроведении выставляется Отказ = Истина. Или банально ошибка в коде.

Ваши действия: 1) проверить журнал регистрации на предмет ошибок и сообщений про недостаток прав, 2) проверить права роли подключения и 3) если не получилось разобраться, подключится в отладке.
25. user1203390 15.04.19 14:11 Сейчас в теме
(24) А как решить проблему с 500 ошибкой при создании документа? У меня последний релиз Управление автотранспортом. По протоколу oData есть возможность выбрать все документы (Путевой лист) или конткретный по условию. Но get через http://host/Base/odata/standard.odata/Document_уатПутевойЛист(guid'key')/ возвращает ошибку 500, также как и POST PATCH запросы. Другие документы создаются и меняются(проверял только те, которые использую). Через http сервис отладкой выбрасывает сразу, нет возможности посмотреть откуда идёт ошибка. В какую сторону нужно смотреть?
26. e-9 60 16.04.19 17:08 Сейчас в теме
(25) в (24) в принципе уже отвечено
посмотрите в тело http-ответа - там могут быть подробности. Вот мне, например, в теле ответа пришло сообщение, что поле Date не заполнено. Заполнил - ушла ошибка 500.

Правда, вы непонятно пишете - то ли при создании/изменении, то ли при Get, ошибка 500 у вас?
28. platonov.e 160 30.11.20 17:57 Сейчас в теме
Спасибо за статью. Можете подсказать еще, как файлы загружать? Допустим к какому то объекту прикреплять?
31. Gendelf 10.02.21 11:23 Сейчас в теме
Вопрос, можно ли через odata работать с объектом ПользовательИБ ?
32. kirillkr 29 10.02.21 13:00 Сейчас в теме
Судя по последним комментариям топик скорее мертв, чем жив.
(28) как раз сейчас занимаюсь этим - порядок примерно такой:
1) добавляем новый элемент справочника файлы
2) добавляем новый элемент справочника версии файлов
3) изменяем созданный в первом пункте файл указываем текущую версию из созданной во втором пункте.
4) добавляем в регистр сведений двоичныеданныефайлов новую запись с ссылкой на версию из второго пункта.

У меня же по этому случаю возник другой вопрос: как можно изменить регистр сведений двоичныеданныефайлов. Не мог понять как определить реквизит Файл
Пробовал и так
InformationRegister_ДвоичныеДанныеФайлов(Файл eq Catalog_ВерсииФайлов(guid'3acd9524-6b72-11eb-bbcf-ac1f6b48a51d'))

InformationRegister_ДвоичныеДанныеФайлов(Файл eq Файл eq cast(guid'3acd9524-6b72-11eb-bbcf-ac1f6b48a51d', 'Catalog_ВерсииФайлов'))

Другие варианты тоже пробовал, но ошибка всегда или
Для свойства 'Файл' составного или бинарного типа не найдено поле с указанием типа!
, или
Произошла внутренняя ошибка OData сервиса. Дополнительные сведения можно найти в технологическом журнале.
33. user1537429 24.06.21 11:15 Сейчас в теме
(32)
В вашем случае (если я правильно понял) запрос:
InformationRegister_ДвоичныеДанныеФайлов?$filter=Файл eq cast(guid'3acd9524-6b72-11eb-bbcf-ac1f6b48a51d', 'Catalog_ВерсииФайлов')
34. baracuda 2 09.07.21 10:24 Сейчас в теме
Автор раз вы как то изучали Odata не могли бы дать комментарий к моему топику.
35. Dementor 1035 09.07.21 19:56 Сейчас в теме
(34) у меня как-то была задача (которая к тому же сорвалась) и изученный материал, чтобы не пропадал, я изложил в двух статьях. К этой теме уже больше 3 лет не возвращался.
36. пользователь 04.08.21 14:57
Сообщение было скрыто модератором.
...
37. Dementor 1035 04.08.21 15:07 Сейчас в теме
(36) вы хоть версию платформы бы сказали. И юрлик для проверки тоже не помешал бы.
38. Риник 15 04.08.21 15:49 Сейчас в теме
39. user1689208 27.10.21 13:27 Сейчас в теме
Добрый день! Интересная статья! Хотел бы задать вопрос! Я на Python через OData хочу осуществить PATCH запрос, для изменения контактной информации в 1С. Я прилагаю такое тело запроса:
{
"Вид": "c2eb441c-4e2a-11ea-2f8e-000c2972e4a3",
"Вид_Type": "StandardODATA.Catalog_ВидыКонтактнойИнформации",
"Объект": "24e3a680-022d-11eb-f583-000c2972e4a3",
"Объект_Type": "StandardODATA.Catalog_ФизическиеЛица",
"Поле3": "87071112233",
"Представление": "87071112233",
"Тип": "Телефон"
},
где Вид - это ref_key вида контактной информации, Объект - это ref_key физического лица.

Также, прилагаю такой URL:
http://host_ip/db_name/odata/standard.odata/InformationRegister_КонтактнаяИнформация(guid'c2eb441c-4e2a-11ea-2f8e-000c2972e4a3')?$format=json,

где guid - это ref_key вида контактной информации.

Когда я отправляю patch запрос, выскакивает ошибка - "The field that specifies type is not found for the Объект property, which has composite or binary type!"

Как я понял, запрос не может найти такой вид контактной информации для физического лица, которого я указал. Но я никак не пойму почему это так, если я всего лишь изменяю Представление и Поле3 телефона в ответе get запроса на ту же самую КонтактнуюИнформацию.
Буду рад любой помощи, объяснении моих ошибок и просто критике!
40. ilnur75 02.10.22 07:23 Сейчас в теме
Добрый день!
Есть ли возможность методом o'DATA POST создать физ.лицо с наименованием, которое содержит верхний символ (апостроф), например O'g'li ?
а так выходит ошибка
Ошибка при вызове метода контекста (ПрочитатьJSON): Непредвиденный символ при чтении JSON
Оставьте свое сообщение