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

Обращение к стандартному интерфейсу 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

С целью получения атрибуты таблиц сущности 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 :

Отметим, что если в адресе ресурса не указывать $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)

С целью получения атрибуты таблиц объекта РегистрыБухгалтерии, которые показаны на рис 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() с параметрами показан в примере выше
Продолжение следует …….
См. также:
Доброго дня. Не подскажите в чем подвох.
Используем Бухгалтерию для Казахстана типовою С типовым планом счетов.
Никак не могу запросом получить остатки по контрагенту из вашего Примера получения остатков на счете из регистра бухгалтерии с условием по конкретному контрагенту:
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%.
Про порядок я первое что попробовал. Думаю это не принципиально.
Как передать в качестве счетов учета массив строк как это сделал бы я в запросе.
Я так же думаю, что порядок не имеет значения, но я НЕ нашел ошибку в нотации. Тогда проблему нужно искать в передаваемых значениях 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=”+ КонечноеУсловие;