Стандартный интерфейс OData. Регистры бухгалтерии

Печать (Ctrl+P)

Стандартный интерфейс OData в «1С:Предприятии» предназначен для получения доступа к данным системы из внешнего приложения без модификации кода прикладного решения. О настройке поддержки стандартного интерфейса OData можно посмотреть здесь

В данной статье я показываю как научиться работать с регистром бухгалтерии через стандартной интерфейс OData. Для этой цели, я опубликовал демонстрационную версию библиотеки стандартных подсистем 3.0 локально на моем компьютере и включил интерфейс
OData

Рис 1 Публикация ИБ на веб – сервере

Обращение к стандартному интерфейсу OData выполняется с помощью HTTP-запроса, выполнено по определенному URL. URL формируется специальным образом и состоит из следующих частей:

  • Адрес информационной базы, например, localhost/DemoSSL;
  • Признак обращения к стандартному интерфейсу OData, например, / odata/standard.odata;
  • Имя ресурса, к которому выполняется обращение, например, ChartOfAccounts__ДемоОсновной;
  • Параметры запроса обращения к ресурсу, например ,
    $metadata , $top, $format и др .

Для получения описания стандартного интерфейса OData необходимо выполнить в браузере URL

 http://localhost/DemoSSL/odata/standard.odata/$metadata

В результате будет получен полный список доступных сущностей, их атрибутов и функций в виде XML-документа. Подробное описание структуры XML- документа можно получить по адресу http://www.odata.org/documentation/odata-version-3-0/common-schema-definition-language-csdl/ (на английском языке).

Отметим, что опция $metadata не поддерживает параметры , такие как $format и другие

Для работы с регистрами бухгалтерии нужно прежде всего научиться работать с планом счетов ( см рис 1) в стандартном интерфейсе OData

Рис 2 Доступные в запросы атрибуты плана счетов

С целью получения атрибуты таблиц сущности ChartOfAccounts ( План счетов) , которые показаны на рис 1, я использовал параметр $top, чтобы ограничить количество записей, возвращаемых при обращении к ресурсу .

http://localhost/DemoSSL/odata/standard.odata/ChartOfAccounts__ДемоОсновной?&$top=1&$format=json 

Результат в формате json :

{
"odata.metadata": "http://localhost/DemoSSL/odata/standard.odata/$metadata#ChartOfAccounts__ДемоОсновной",
"value": [{
"Ref_Key": "603effb0-2696-11e3-9e14-bcaec5d979f0",
"DataVersion": "AAAAAQAAAAg=",
"DeletionMark": false,
"Parent_Key": "00000000-0000-0000-0000-000000000000",
"Code": "68",
"Description": "Расчеты по налогам и сборам",
"Order": "68",
"Type": "ActivePassive",
"OffBalance": false,
"Комментарий": "",
"Валютный": false,
"Количественный": false,
"ExtDimensionTypes": [
{
"LineNumber": "1",
"ExtDimensionType_Key": "603effae-2696-11e3-9e14-bcaec5d979f0",
"Predefined": true,
"TurnoversOnly": false,
"Валютный": true,
"Количественный": true,
"Суммовой": true
}
],
"Predefined": true,
"PredefinedDataName": "РасчетыПоНалогам"
}]
}

Запись, возвращаемая в этом XML- документе соответствует элементу плана счетов на рис 2 :

Рис 3

Отметим, что если в адресе ресурса не указывать $format , то возвращаются данные в формате atom-xml. Подробнее о работе с форматом json можно посмотреть здесь

После детального анализа XML- документа можно установить соответствие между именами атрибута ресурса в интерфейсе
OData и в запросе конфигурации (см. рис 1) .

Поиск счета по уникальному номеру (Ref_Key ) :

//localhost/DemoSSL/odata/standard.odata/ChartOfAccounts__ДемоОсновной(guid'603effb0-2696-11e3-9e14-bcaec5d979f0')&$format=json  

Поиск счета по коду (Code):

//localhost/DemoSSL/odata/standard.odata/ChartOfAccounts__ДемоОсновной?$filter=Code eq '68'&$format=json 

Поиск счета по предопреленному значению (PredefinedDataName)

//localhost/DemoSSL/odata/standard.odata/ChartOfAccounts__ДемоОсновной?$filter=PredefinedDataName eq 'РасчетыПоНалогам'&$format=json 

Обращение к регистрам бухгалтерии

У регистра бухгалтерии кроме основной таблицы есть еще виртуальные таблицы ( См рис 4)

Рис 4

С целью получения атрибуты таблиц объекта РегистрыБухгалтерии, которые показаны на рис 1 я использовал параметр $top, чтобы ограничить количество записей, возвращаемых при обращении к ресурсу .

http://localhost/DemoSSL/odata/standard.odata/AccountingRegister__ДемоОсновной?&$top=1&$format=json 

Результат:

{
"Period": "2012-02-14T16:52:49",
"LineNumber": "1",
"Active": true,
"AccountDr_Key": "603effaf-2696-11e3-9e14-bcaec5d979f0",
"AccountCr_Key": "603effbe-2696-11e3-9e14-bcaec5d979f0",
"Организация_Key": "09ce35a0-39c5-11e4-9e14-005056c00008",
"ВалютаDr_Key": null,
"ВалютаCr_Key": "00000000-0000-0000-0000-000000000000",
"Сумма": 500,
"ВалютнаяСуммаDr": 0,
"ВалютнаяСуммаCr": 500,
"КоличествоDr": 5,
"КоличествоCr": 5,
"Содержание": "Поступление товаров"
},
{
"Period": "2012-02-14T16:52:49",
"LineNumber": "2",
"Active": true,
"AccountDr_Key": "603effaf-2696-11e3-9e14-bcaec5d979f0",
"AccountCr_Key": "603effbe-2696-11e3-9e14-bcaec5d979f0",
"Организация_Key": "09ce35a0-39c5-11e4-9e14-005056c00008",
"ВалютаDr_Key": null,
"ВалютаCr_Key": "00000000-0000-0000-0000-000000000000",
"Сумма": 100,
"ВалютнаяСуммаDr": 0,
"ВалютнаяСуммаCr": 100,
"КоличествоDr": 1,
"КоличествоCr": 1,
"Содержание": "Поступление товаров"
},
{
"Period": "2012-02-14T16:52:49",
"LineNumber": "3",
"Active": true,
"AccountDr_Key": "603effaf-2696-11e3-9e14-bcaec5d979f0",
"AccountCr_Key": "603effbe-2696-11e3-9e14-bcaec5d979f0",
"Организация_Key": "09ce35a0-39c5-11e4-9e14-005056c00008",
"ВалютаDr_Key": null,
"ВалютаCr_Key": "00000000-0000-0000-0000-000000000000",
"Сумма": 2500,
"ВалютнаяСуммаDr": 0,
"ВалютнаяСуммаCr": 2500,
"КоличествоDr": 25,
"КоличествоCr": 25,
"Содержание": "Поступление товаров"
},
{
"Period": "2012-02-14T16:52:49",
"LineNumber": "4",
"Active": true,
"AccountDr_Key": "603effaf-2696-11e3-9e14-bcaec5d979f0",
"AccountCr_Key": "603effbe-2696-11e3-9e14-bcaec5d979f0",
"Организация_Key": "09ce35a0-39c5-11e4-9e14-005056c00008",
"ВалютаDr_Key": null,
"ВалютаCr_Key": "00000000-0000-0000-0000-000000000000",
"Сумма": 19230,
"ВалютнаяСуммаDr": 0,
"ВалютнаяСуммаCr": 19230,
"КоличествоDr": 1,
"КоличествоCr": 1,
"Содержание": "Поступление товаров"
}
]

При обращении к виртуальным таблицам можно также получить аналогичный XML- документ, который позволить имена полей таблицы:

  • РегистрБухгалтерии._ДемоОсновной.ДвиженияССубконто
http://localhost/DemoSSL/odata/standard.odata/AccountingRegister__ДемоОсновной/RecordsWithExtDimensions?&$top=1&$format=json  
  • РегистрБухгалтерии._ДемоОсновной.Обороты
http://localhost/DemoSSL/odata/standard.odata/AccountingRegister__ДемоОсновной/Turnovers?&$top=1&$format=json  
  • РегистрБухгалтерии._ДемоОсновной.ОборотыДтКт
http://localhost/DemoSSL/odata/standard.odata/AccountingRegister__ДемоОсновной/DrCrTurnover?&$top=1&$format=json  
  • РегистрБухгалтерии._ДемоОсновной.Остатки
http://localhost/DemoSSL/odata/standard.odata/AccountingRegister__ДемоОсновной/Balance?&$top=1&$format=json  

РегистрБухгалтерии._ДемоОсновной.ОстаткиИОбороты

http://localhost/DemoSSL/odata/standard.odata/AccountingRegister__ДемоОсновной/BalanceAndTurnovers?&$top=1&$format=json  
  • РегистрБухгалтерии._ДемоОсновной.Субконто
http://localhost/DemoSSL/odata/standard.odata/AccountingRegister__ДемоОсновной/ExtDimensions?&$top=1&$format=json  

Примеры использования параметров

$expand

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

В следующем примере возвращаются не только остатки на текущий день , но и все сущности, связанные с организацией :

http://localhost/DemoSSL/odata/standard.odata/AccountingRegister__ДемоОсновной/Balance?$expand=Организация&$format=json

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

 "Организация": {
…ДанныеОбъекта…
},

$select

Допускается совместное использование параметров запроса $select и $expand. В этом случае необходимо указать в выражении оператора $select перечень (через запятую) всех необходимых полей.
В параметре $select, при использовании совместно с параметром $expand,поддерживается использование символов * и **. Указание символа * означает, что необходимо развернуть все реквизиты получаемого объекта. Указание символа ** означает, что необходимо развернуть все реквизиты получаемого объекта, кроме табличных частей.

http://localhost/DemoSSL/odata/standard.odata/AccountingRegister__ДемоОсновной/Balance?$expand=Организация&$select=*,Организация/Description&$format=json

В результате исполнения этого запроса будет получено все реквизиты регистра и еще добавлен следующий результат:

"Организация": {
"Description": "Ромашка ОАО"
}

$Cast(expr, type)

Возвращает объект, на который указывает параметр expr, приведенный к типу, указанному параметром type. В качестве типа значения принимается строка, обозначающая имя данного типа, например: String, Number, Boolean, Date,Catalog_Товары и т. д.

Пример получения остатков на счете из регистра бухгалтерии с условием по конкретному контрагенту:

http://localhost/DemoSSL/odata/standard.odata/AccountingRegister__ДемоОсновной/Balance
(
AccountCondition='Account_Key eq guid'value1'' ,
Condition='ExtDimension1 eq cast(guid'value2','Catalog__ДемоКонтрагенты')',
ExtraDimensions='value3'
)
?$format=json

В данном примере:

  • guid’value1′ ‑ уникальный идентификатор элемента плана счетов;
  • guid’value2′ ‑ уникальный идентификатор элемента плана видов характеристик ВидыСубконтоХозрасчетные с типом значения СправочникСсылка._ДемоКонтрагенты;
  • ‘value3’ ‑ уникальный идентификатор элемента справочника _ДемоКонтрагенты.

Balance()Turnovers() и BalanceAndTurnovers()

Для регистра накопления и регистра бухгалтерии – Balance()Turnovers() и BalanceAndTurnovers()

Пример использования функции Balance() с параметрами показан в примере выше

Продолжение следует …….

См. также:

Previous Article
Next Article

3 Replies to “Стандартный интерфейс OData. Регистры бухгалтерии”

  1. Андрей

    Доброго дня. Не подскажите в чем подвох.
    Используем Бухгалтерию для Казахстана типовою С типовым планом счетов.
    Никак не могу запросом получить остатки по контрагенту из вашего Примера получения остатков на счете из регистра бухгалтерии с условием по конкретному контрагенту:
    http://localhost:9917/1C/odata/standard.odata/AccountingRegister_Типовой/Balance
    (Period=’2021-03-09T23:59:59′,
    Condition=’ExtDimension1 eq cast(guid’25d9067b-0d96-4f0d-a5fd-12d29fba60b8′, ‘Catalog_Контрагенты’)’,AccountCondition=’Account_Key eq guid’fb7e7924-33e5-4d5b-b3a6-24262a02d563”,ExtraDimensions=’6ed5d4f6-85f2-11e6-8658-00241dceef65′,)?$format=json

    Приходит пустой результат, хотя по по счету 1210 и этому контрагенту движения есть 100%.

    • Андрей

      Про порядок я первое что попробовал. Думаю это не принципиально.
      Как передать в качестве счетов учета массив строк как это сделал бы я в запросе.

      • master1c8

        Я так же думаю, что порядок не имеет значения, но я НЕ нашел ошибку в нотации. Тогда проблему нужно искать в передаваемых значениях value .
        Чтобы работать с массивами, нужно использовать конкатенацию логических выражений OR или AND из каждого элемента массива в зависимости от логики.
        Пример массива счетов из трех значений

        AccountCondition=’Account_Key eq guid’value1 or Account_Key eq guid’value2′ or Account_Key eq guid’value3′ ‘

        Если массив состоит из больше 3-х элементов лучше использовать цикл

        Пример поиска элемента по полям поиска

        в поиске элемента по
        отбору $filter по нескольким полям я использую не массив, а список значений, где представление – это ключ . Например:
        Условие = “”;
        Для Каждого Эл из ПоляПоиска Цикл
        Ключ = Эл.Представление;
        Value = Эл.Значение
        Условие = Условие + Ключ+ ” eq ‘” +Value + “‘ and “;
        КонецЦикла;
        КонечноеУсловие = Лев(Условие, СтрДлина(Условие)-5); // удаляем последние 5 символов ‘ and’
        ОтборЭлементов = “$filter=”+ КонечноеУсловие;

Добавить комментарий

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.