0. Serginio 779 29.09.15 16:42 Сейчас в теме

Linq to ODATA

1С сейчас совершенствует REST интерфейс приложения, автоматически генерируемый платформой, и протокол обмена ODATA версии 3.
С недавнего времени появилась возможность обмениваться, используя JSON. На просторах интернета мало информации по использованию Linq для ODATA для 1С.
Поэтому решил поделиться опытом. Это продолжение статей https://infostart.ru/public/402433/

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. baracuda 3 06.10.15 14:32 Сейчас в теме
Глоток свежего воздуха при изучении C# Odata.
adhocprog; +1 Ответить
2. Serginio 779 06.10.15 16:53 Сейчас в теме
3. avz_1C 10 29.02.16 14:18 Сейчас в теме
Коллега, Вы продолжаете удивлять.
Спасибо.
Сегодня, как раз, возникла потребность разбирать метаданные нескольких
конфигураций, взаимодействием которых управляет модуль, созданный на C#.
Не успел подумать о Linq, как Вы подтвердили, своей публикацией, мои догадки.
4. Serginio 779 29.02.16 17:41 Сейчас в теме
Спасибо. Рад, что мои труды не пропадают зря
5. TeMochkiN 20.09.16 10:58 Сейчас в теме
Здравствуйте!
Помогите, пожалуйста, пытаюсь добавить ссылку на службу в VS, а она постоянно запрашивает учетные данные и не дает её добавить:

Я ввожу имя пользователя, жму ОК, и снова появляется это же окно ввода имени пользователя и пароля.

После нескольких попыток, жму отмена и пишет следующее:



Я пробовал открыть данную ссылку в хроме он тоже запрашивает имя пользователя и пароль, я ввожу имя пользователя и всё загружается:


А вот Internet Explorer тоже не дает открыть эту ссылку. В чем может быть дело? IIS неправильно настроен?
6. Serginio 779 20.09.16 11:10 Сейчас в теме
Логин и пароль должны быть на латинице
7. Serginio 779 25.10.16 14:21 Сейчас в теме
Добавлю, что для Регистров бухгалтерии можно использовать функции для виртуальных таблиц.
<EntityContainer Name="EnterpriseV8" m:IsDefaultEntityContainer="true">
<EntitySet Name="AccountingRegister_Хозрасчетный" EntityType="StandardODATA.AccountingRegister_Хозрасчетный" />
<EntitySet Name="AccountingRegister_Хозрасчетный_RecordType" EntityType="StandardODATA.AccountingRegister_Хозрасчетный_RecordType" />
<FunctionImport Name="Balance" IsBindable="true" IsSideEffecting="false" ReturnType="Collection(StandardODATA.AccountingRegister_Хозрасчетный_Balance)">
<Parameter Name="bindingParameter" Type="StandardODATA.AccountingRegister_Хозрасчетный" />
<Parameter Name="AccountCondition" Type="Edm.String" />
<Parameter Name="Condition" Type="Edm.String" />
<Parameter Name="Dimensions" Type="Edm.String" />
<Parameter Name="ExtraDimensions" Type="Edm.String" />
<Parameter Name="Period" Type="Edm.DateTime" />
</FunctionImport>
<FunctionImport Name="Turnovers" IsBindable="true" IsSideEffecting="false" ReturnType="Collection(StandardODATA.AccountingRegister_Хозрасчетный_Turnover)">
<Parameter Name="bindingParameter" Type="StandardODATA.AccountingRegister_Хозрасчетный" />
<Parameter Name="AccountCondition" Type="Edm.String" />
<Parameter Name="BalancedAccountCondition" Type="Edm.String" />
<Parameter Name="BalancedExtraDimensions" Type="Edm.String" />
<Parameter Name="Condition" Type="Edm.String" />
<Parameter Name="Dimensions" Type="Edm.String" />
<Parameter Name="EndPeriod" Type="Edm.DateTime" />
<Parameter Name="ExtraDimensions" Type="Edm.String" />
<Parameter Name="StartPeriod" Type="Edm.DateTime" />
</FunctionImport>
<FunctionImport Name="BalanceAndTurnovers" IsBindable="true" IsSideEffecting="false" ReturnType="Collection(StandardODATA.AccountingRegister_Хозрасчетный_BalanceAndTurnover)">
<Parameter Name="bindingParameter" Type="StandardODATA.AccountingRegister_Хозрасчетный" />
<Parameter Name="Condition" Type="Edm.String" />
<Parameter Name="Dimensions" Type="Edm.String" />
<Parameter Name="EndPeriod" Type="Edm.DateTime" />
<Parameter Name="StartPeriod" Type="Edm.DateTime" />
</FunctionImport>
<FunctionImport Name="ExtDimensions" IsBindable="true" IsSideEffecting="false" ReturnType="Collection(StandardODATA.AccountingRegister_Хозрасчетный_ExtDimensions)">
<Parameter Name="bindingParameter" Type="StandardODATA.AccountingRegister_Хозрасчетный" />
</FunctionImport>
<FunctionImport Name="RecordsWithExtDimensions" IsBindable="true" IsSideEffecting="false" ReturnType="Collection(StandardODATA.AccountingRegister_Хозрасчетный_RecordsWithExtDimensions)">
<Parameter Name="bindingParameter" Type="StandardODATA.AccountingRegister_Хозрасчетный" />
<Parameter Name="Condition" Type="Edm.String" />
<Parameter Name="EndPeriod" Type="Edm.DateTime" />
<Parameter Name="Order" Type="Edm.String" />
<Parameter Name="StartPeriod" Type="Edm.DateTime" />
<Parameter Name="Top" Type="Edm.Int64" />
</FunctionImport>
<FunctionImport Name="DrCrTurnovers" IsBindable="true" IsSideEffecting="false" ReturnType="Collection(StandardODATA.AccountingRegister_Хозрасчетный_DrCrTurnover)">
<Parameter Name="bindingParameter" Type="StandardODATA.AccountingRegister_Хозрасчетный" />
<Parameter Name="AccountCondition" Type="Edm.String" />
<Parameter Name="BalancedAccountCondition" Type="Edm.String" />
<Parameter Name="BalancedExtraDimensions" Type="Edm.String" />
<Parameter Name="Condition" Type="Edm.String" />
<Parameter Name="Dimensions" Type="Edm.String" />
<Parameter Name="EndPeriod" Type="Edm.DateTime" />
<Parameter Name="ExtraDimensions" Type="Edm.String" />
<Parameter Name="StartPeriod" Type="Edm.DateTime" />
</FunctionImport>
</EntityContainer>
</Schema>
8. Serginio 779 25.10.16 14:27 Сейчас в теме
К сожалению VS их не подгружает. Но можно использовать CreateQuery. Но есть нюансы. Если сделать такой запрос

var query3 = context.CreateQuery<StandardODATA.AccountingRegister_Хозрасчетный_Turnover>(@"AccountingRegister_Хозрасчетный/Turnovers").ToList();


То 1С вернет такй тип

{

"odata.metadata": "http://localhost/DemoAccounting/odata/standard.odata/$metadata#Collection(StandardODATA.AccountingRegister_Хозрасчетный_Turnover)";,

"value": [


Для того, что бы программа поняла ответ нужно сделать такой запрос и программа не может привести Collection(StandardODATA.AccountingRegister_Хозрасчетный_Turnover)" к AccountingRegister_Хозрасчетный_Turnover

Поэтому создадим такой запрос

var query3 = context.CreateQuery<List<StandardODATA.AccountingRegister_Хозрасчетный_Turnover>>(@"AccountingRegister_Хозрасчетный/Turnovers").ToList();


То возвращается тип

query3 Count = 1 System.Collections.Generic.List<System.Collections.Generic.List<StandardODATA.AccountingRegister_Хозрасчетный_Turnover>>

Где вся коллекция лежит в первом элементе query3.Items[0]
9. Serginio 779 16.12.16 12:41 Сейчас в теме
10. user895038 19.03.18 23:42 Сейчас в теме
Правильно ли я понимаю, что через ODATA я могу получить только примитивные данные, хоть и используя фильтрацию.
Т.е. я не могу увидеть в номенклатуре родителя - только ссылку на него, а чтобы узнать Наименование родителя мне нужно выполнить следующий запрос, используя ранее полученный Guid?
А также, я не могу получить результат запроса к двум соединенным таблицам? Мне надо сначала отфильтровать первую таблицу, запомнить список данных связанного поля, а следующим запросом получить уже данные второй таблицы, послав в запросе весь запомненный список.
И уже только на клиенте я могу соединить две полученные таблицы.

Если это не устриавает, то надо использовать преднастроенные WS ссылки и SOAP
11. ture 235 29.10.18 11:20 Сейчас в теме
Odata это ведь стандарт такой?
Ну так и что же этому стандарту не соответствует всеми "любимая" 1С?

И так во всем, кстати.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Нижний Новгород
зарплата до 120 000 руб.
Полный день

Программист 1С
Волгоград
зарплата от 45 000 руб. до 90 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Консультант-аналитик 1С
Москва
зарплата от 70 000 руб. до 100 000 руб.
Полный день

Программист 1С
Москва
зарплата от 80 000 руб. до 120 000 руб.
Временный (на проект)