Введение

VDU позволяет печатать чеки при присвоении определенного статуса заказа. Для настройки у вас должна быть установлена рабочая версия VDU.

При получении выбранного статуса заказа, на кассовый сервер будет отправляться запрос PrintDataXML с указанием назначения принтера и номер кассовой станции.
Текст запроса собирается из макета: файлы PrintMaket*xml, находящиеся в папке с VDU
PrintMaket.xml - основной файл.
В блоке [Dishes] — для каждого блюда вставляется строчка, собранная из макета соответствующего типа - файлы PrintMaket...xml

Макеты можно редактировать по своему усмотрению.

Настройка печати

  1. В менеджерской станции откройте Настройки > Печать > Назначения принтеров
  2. Выберите желаемый принтер и запомните его Идентификатор. Это будет ID назначения принтера в настройках VDU. В моём случае идентификатор равен 1.
  3. Перейдите в Сервис > Станции и Устройства
  4. Нажмите на желаемую кассу и скопируйте из свойств её идентификатор. Это будет ID принтера в настройках VDU. Идентификатор моей кассы — 15002.
  5. Откройте VDU и перейдите в Настройки > Интерфейсы > Сторонние программы
  6. Поставьте галочку Вкл в разделе Печатать по статусу
  7. Пропишите идентификатор принтера в поле ID назначения принтера и ID принтера. Перевод неверный, это не ID принтера, а ID кассовой станции.
  8. Выберите статус, при получении которого принтер будет печатать чек. 
  9. Нажмите ОК и перезапустите VDU
  10. Теперь при присвоении заказу указанного статуса, чековый принтер будет печатать чек с данными о заказе
  11. Пример чека ниже:

Текст запроса

Ниже приведён текст XSD-файла печати с комментариями. Он же приложен в виде к этой статье.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:complexType name="UnfiscalAttributes">
    <xs:annotation>
      <xs:documentation xml:lang="ru">Основной тэг нефискальной печати</xs:documentation>
    </xs:annotation>
    <xs:attribute name="Slip" type="xs:boolean" use="optional" default="0">
      <xs:annotation>
        <xs:documentation xml:lang="ru">Печать на бланке</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="CutAfter" type="xs:boolean" use="optional" default="0">
      <xs:annotation>
        <xs:documentation xml:lang="ru">Надо ли отрезать (завершить оформление документа) в конце</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:anyAttribute processContents="skip"/>
  </xs:complexType>
  <xs:attributeGroup name="uniTextAttributes">
    <xs:attribute name="FontNum" type="xs:nonNegativeInteger" use="optional" default="0"/>
    <xs:attribute name="Bold" type="xs:boolean" use="optional" default="0"/>
    <xs:attribute name="BigHeight" type="xs:boolean" use="optional" default="0"/>
    <xs:attribute name="BigWidth" type="xs:boolean" use="optional" default="0"/>
    <xs:attribute name="Inverted" type="xs:boolean" use="optional" default="0"/>
    <xs:attribute name="AltLang" type="xs:boolean" use="optional" default="0"/>
    <xs:attribute name="Tapes" use="optional" default="8">
      <xs:simpleType>
        <xs:restriction base="xs:int">
          <xs:enumeration value="0"/>
          <xs:enumeration value="1"/>
          <xs:enumeration value="2"/>
          <xs:enumeration value="3"/>
          <xs:enumeration value="4"/>
          <xs:enumeration value="5"/>
          <xs:enumeration value="6"/>
          <xs:enumeration value="7"/>
          <xs:enumeration value="8"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>
  <xs:complexType name="uniTextBlock">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attributeGroup ref="uniTextAttributes"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="uniTextLine">
    <xs:attributeGroup ref="uniTextAttributes"/>
    <xs:attribute name="Text" type="xs:normalizedString" use="required"/>
  </xs:complexType>
  <xs:complexType name="uniTextPart">
    <xs:attributeGroup ref="uniTextAttributes"/>
    <xs:attribute name="Text" type="xs:normalizedString" use="required"/>
  </xs:complexType>
  <xs:complexType name="uniRawBlock">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="Encoding" use="required">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="No"/>
              <xs:enumeration value="Base64"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="uniBarCode">
    <xs:attribute name="Type" use="optional" default="EAN-13">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="EAN-13"/>
          <xs:enumeration value="Code-39"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="TextPosition" use="optional" default="No">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="No"/>
          <xs:enumeration value="Top"/>
          <xs:enumeration value="Bottom"/>
          <xs:enumeration value="Top&amp;Bottom"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="Value" type="xs:normalizedString" use="required"/>
  </xs:complexType>
  <xs:complexType name="uniBeep"/>
  <xs:complexType name="uniDrawer">
    <xs:attribute name="Number" use="optional" default="0">
      <xs:simpleType>
        <xs:restriction base="xs:int">
          <xs:enumeration value="0"/>
          <xs:enumeration value="1"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="uniLogo">
    <xs:attribute name="Number" type="xs:int" use="required"/>
  </xs:complexType>
  <xs:complexType name="uniPass">
    <xs:attribute name="Lines" type="xs:int" use="required"/>
  </xs:complexType>
  <xs:complexType name="uniWait">
    <xs:attribute name="MSecs" type="xs:int" use="required"/>
  </xs:complexType>
  <xs:complexType name="uniUnfiscal">
    <xs:complexContent>
      <xs:extension base="UnfiscalAttributes">
        <xs:sequence>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="TextBlock" type="uniTextBlock"/>
            <xs:element name="TextPart" type="uniTextPart"/>
            <xs:element name="TextLine" type="uniTextLine"/>
            <xs:element name="RawBlock" type="uniRawBlock"/>
            <xs:element name="BarCode" type="uniBarCode"/>
            <xs:element name="Beep" type="uniBeep"/>
            <xs:element name="Drawer" type="uniDrawer"/>
            <xs:element name="Logo" type="uniLogo"/>
            <xs:element name="Pass" type="uniPass"/>
            <xs:element name="Wait" type="uniWait"/>
          </xs:choice>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
</xs:schema>
ВложениеРазмер
xsd-shema.zip1.2 КБ