Выгрузка чеков вместе со скидками и бонусными операциями


CORE-352 Getting issue details... STATUS

10.2.54.0

С версии 10.2.54.0 в веб-сервисе FiscalInfoExport появилось два новых метода для выгрузки чека вместе со скидками и бонусными операциями одновременно: getFullPurchasesByParams и getNewFullPurchasesByOperDay.

Методы начинают работать сразу и не требуют настройки

Чеки и их скидки с кассы в опердень сервера приходят не одновременно. В случае, если для чека были скидки, но в опердень они ещё не пришли, такой чек не будет возвращаться веб-сервисами, пока для чека не придут скидки.

Метод getFullPurchasesByParams

Метод getFullPurchasesByParams предназначен для получения из опердня инорфмации о чеках и расчетов скидок по ним, удовлетворяющих передаваемому в аргументах фильтру. Аргументы метода представлены в таблице 1.

Таблица 1 - аргументы метода getFulPurchasesByParams

АргументТипНазначениеОбязательный
dateOperDayDateОпределяет дату, за которую из опердня следует выбрать чекиДа
shopNumberLongОпределяет номер магазина, чеки которого из опердня следует получитьНет
cashNumberLongОпределяет номер кассы, чеки которой из опердня следует получитьНет
shiftNumberLongОпределяет номер смены, чеки которой из опердня следует получитьНет
purchaseNumberLongОпределяет номер чека, который из опердня следует получитьНет

Пример вызова метода представлен в коде 1.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:plug="http://plugins.operday.ERPIntegration.crystals.ru/">
   <soapenv:Header/>
   <soapenv:Body>
      <plug:getFullPurchasesByParams>
         <dateOperDay>2018-08-16</dateOperDay>
         <shopNumber>6502</shopNumber>
         <cashNumber>1</cashNumber>
         <shiftNumber>1</shiftNumber>
         <purchaseNumber>2</purchaseNumber>
      </plug:getFullPurchasesByParams>
   </soapenv:Body>
</soapenv:Envelope>

Код 1 - пример вызова метода getFullPurchasesByParams

Методом веб-сервиса ответ возвращается закодированным в base64. Раскодированный ответ на запрос из кода 1 представлен в коде 2.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purchases count="1">
    <purchase tabNumber="1" userName="1 1 1" operationType="true" operDay="2018-08-16+03:00" shop="6502" cash="1" shift="1" number="2" saletime="2018-08-16T12:21:23.017+03:00" begintime="2018-08-16T12:20:45.840+03:00" amount="10.52" discountAmount="3.71" inn="123456799798">
        <plugin-property key="ext.loy.processing.example.external.receipt.id" value="123469877"/>
        <plugin-property key="ext.loy.processing.example.some.other.field" value="whatever"/>
        <positions>
            <position order="1" departNumber="1" goodsCode="00001" barCode="4600001000007" count="1.0" cost="14.23" nds="18.0" ndsSum="1.6" discountValue="3.71" costWithDiscount="10.52" amount="10.52" dateCommit="2018-08-16T12:20:45.851+03:00" insertType="1"/>
        </positions>
        <payments>
            <payment typeClass="CashChangePaymentEntity" amount="0.48" description=""/>
            <payment typeClass="CashPaymentEntity" amount="1.0" description="Оплата наличными"/>
            <payment typeClass="foo.service.payment" amount="10.0" description="Оплата электронным кошельком">
                <plugin-property key="authorization.code" value="385281233141592"/>
                <plugin-property key="transaction.number" value="01234567890"/>
            </payment>
        </payments>
        <discountCards>
            <discountCard>780000000005</discountCard>
        </discountCards>
        <card type="EXTERNAL" number="780000000005" guid="15346"/>
        <discount positionId="1" goodCode="00001" amount="0.71" isDiscountPurchase="false" AdvertActGUID="14659" AdvertActExternalCode="SR10_14659" AdvertActDiscountType="-1" advertType="DISCOUNT" quantity="1.0" externalActionId="plugin-discount"/>
        <discount positionId="1" goodCode="00001" amount="3.0" isDiscountPurchase="false" AdvertActGUID="14659" AdvertActExternalCode="SR10_14659" AdvertActDiscountType="-1" advertType="DISCOUNT" quantity="1.0" card-number="780000000005" transactionId="123-456-789" externalActionId="bonus-discount"/>
        <bonuses>
            <chargeOnBonuses transactionId="978-789-546" bonusesType="BONUS_SR10" amount="13.0" cardNumber="780000000005"/>
            <chargeOnBonuses transactionId="123456-8789" bonusesType="BONUS_SR10" amount="10.0" cardNumber="780000000005"/>
            <chargeOnBonuses transactionId="123456-8789" bonusesType="BONUS_SR10" amount="10.0" cardNumber="780000000005"/>
            <writeOffBonuses transactionId="123-456-789" bonusesType="BONUS_SR10" amount="3.0" cardNumber="780000000005"/>
        </bonuses>
    </purchase>
</purchases>

Код 2 - раскодированный из base64 ответ от метода getFullPurchasesByParams

Метод getNewFullPurchasesByOperDay

Метод getNewFullPurchasesByOperDay предназначен для получения новых чеков, т.е тех, которые веб-сервисом ранее не отдавались. Ответ его аналогичен ответу из кода 2, однако методы различаются также сигнатурой: метод getNewFullPurchasesByOperDay принимает массив параметров в качестве аргументов. Параметры перечислены в таблице 2.

Таблица 2 - массив аргументов метода getNewFullPurchasesByOperDay

ИндексТипНазначениеОбязательный
0DateДата, за которую из опердня требуется получить новые чекиДа
1LongНомер магазина, от которого из опердня следует выбрать новые чекиНет
2LongНомер кассы, от которой из опердня следует выбрать новые чекиНет
3LongНомер смены, от которой из опердня следует выбрать новые чекиНет
4LongНомер чека, который следует выбрать.Нет

Минимальный размер массива аргументов метода - 1 (потому что параметр "дата опердня" обязательный). Если хочется пропустить, например, параметр "номер смены", его следует выставить в null, потому что за номером смены следует номер чека. Однако, если хочется пропустить номер чека, массиву допустимо быть длиной 4, потому что за параметром "номер чека" ничего не следует.

Пример вызова метода представлен в коде 3.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:plug="http://plugins.operday.ERPIntegration.crystals.ru/"
        xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Header/>
   <soapenv:Body>
      <plug:getNewFullPurchasesByOperDay>
         <arrayOfParams xsi:type="xs:dateTime">2018-08-16T12:00:00.000</arrayOfParams>
                <arrayOfParams xsi:type="xs:long">6502</arrayOfParams> <!-- Номер магазина -->
                <arrayOfParams xsi:type="xs:long">1</arrayOfParams> <!-- Номер кассы -->
                <arrayOfParams xsi:type="xs:long">1</arrayOfParams> <!-- Номер смены -->
                <arrayOfParams xsi:type="xs:long">2</arrayOfParams> <!-- Номер чека -->
      </plug:getNewFullPurchasesByOperDay>
   </soapenv:Body>
</soapenv:Envelope>

Код 3 - пример вызова метода getNewFullPurchasesByOperDay

Метод возвращает ответ, аналогичный коду 2.