Petroglif

Язык описания данных DL600

Язык DL600 является декларативным языком, применяемым для описания разнообразных структур данных, используемых системой Papyrus .С помощью этого языка определяются следующие категории данных системы:
COM-интерфейсы
Внутреннее применение языка. Используется только на стадии разработки.
Структуры таблиц баз данных
Внутреннее применение языка. Используется на стадии разработки для определения структур таблиц баз данных.
Экспортные структуры данных
Применяется как на этапе разработки, так и при эксплуатации системы для кастомизации стандартных (определенных в дистрибутиве) структур данных для печати и экспорта.

Синтаксис языка

Лексические соглашения

Чувствительность к регистру
Язык DL600 является чувствительным к регистру символов.Например, слова Goods и goods с точки зрения компилятора языка различны.
Пробелы и перевод каретки
Символы пробела, табуляции, перевода каретки, за исключением разделения слов, являются не значащими. То есть, несколько таких символов, следующих последовательно друг за другом воспринимаются компилятором как один.

Зарезервированные слова

Следующие слова зарезервированы компилятором:
IMPORT
import
data
interface
struct
enum
iclass
declare
iteration
link
if
else
format
in
out
inout
default
version
library
uuid
abstract
property
table
index
file
Кроме того, зарезервированы следующие слова, обозначающие типы данных:
void
bool
int
long
uint
char
int8
int16
short
int32
autolong
int64
uint8
uint16
uint32
float
double
money
decimal
string
lstring
date
time
datetime
key
variant
wchar
note
raw
blob
clob

Структура файла

Файл DL600 представляет собой набор описаний данных. Каждый набор состоит из полей заголовка (DEFAULT HEAD) и итераторов.

Определение поля

[ [ [ . ] ] ] [] [=001;202;002;003;205 ;кодировка исходного файла данных (DOS или WIN) ENCODING=DOS[CS_GOODS] ;товары _DATA=1 _DEVICE=1 _STOPFLAG=CS_CASH.UPD _STOPTIMEOUT=1 _USESTOP=1 _USEGO=0 _GOFLAG=ADDGO ARTICUL=GOODSITEM NAME=GOODSNAME UNIT=GOODSUNIT ENABLE=GOODSENABLE GROUP1=GOODSGROUP1 PRICE=GOODSPRICE PRECIS=GOODSPRECISION SECTION=GOODSDEPART RSTRID=GOODSRESTRICTID RSPCNT=GOODSRESTRICTMINPRICE VAT=GOODSNDS[CS_DSCCC] ;скидки по категориям карт _DATA=1 _DEVICE=1 _STOPFLAG=CS_CASH.UPD _STOPTIMEOUT=1 _USESTOP=1 _USEGO=0 _GOFLAG=ADDGO ARTICUL=GOODSITEM SCRDID=DISCCARDCATEGORY DSCNSUM=DISCGOODSBYDISCCARDSUM[CS_BAR] ;штрих-коды _DATA=1 _DEVICE=1 _STOPFLAG=CS_CASH.UPD _STOPTIMEOUT=1 _USESTOP=1 _USEGO=0 _GOFLAG=ADDGO ARTICUL=GOODSITEM BARCODE=GOODSBARCODE UNTPERPACK=GOODSBARCODEQUANTITY[CS_CARDS] ;дисконтные карты _DATA=1 _DEVICE=1 _STOPFLAG=CS_CASH.UPD _STOPTIMEOUT=1 _USESTOP=1 _USEGO=0 _GOFLAG=ADDGO _ACTIONFIELD=MODE CODE=DISCCARDCODE PERSON=DISCCARDCUSTOMER NAME=DISCCARDNAME TYPE=DISCCARDTYPE SCRDID=DISCCARDCATEGORY DSCNT=DISCCARDPERCENT MAXCREDIT=DISCCARDMAXCREDIT ISSUE=DISCCARDTIMEBEGIN EXPIRY=DISCCARDTIMEEND[CS_CSHRS] ;кассиры _DATA=1 _DEVICE=1 _STOPFLAG=CS_CASH.UPD _STOPTIMEOUT=1 _USESTOP=1 _USEGO=0 _GOFLAG=ADDGO _ACTIONFIELD=MODE TABNUM=CASHIERTABNUMBER NAME=CASHIERNAME PASSWORD=CASHIERPASSWORD RIGHTS=CASHIERPERMISSIONS[CS_SCALE] ;загрузка весов _DATA=1 _DEVICE=2 _DEVICEFIELD=DEVICENO _STOPFLAG=CS_SCALE.UPD _STOPTIMEOUT=1 _USESTOP=1 _USEGO=0 _GOFLAG=ADDGO BARCODE=SHORTGOODSITEM PREFIX=BARCODEPREFIX NAME1=GOODSNAMEFIRST NAME2=GOODSNAMESECOND GOODSNO=PLUNUMBER PRICE=GOODSPRICESALE EXPIRY=EFFECTIVELIFE SECTION=SCALEDEPARTNUMBERСодержимое файла export.cfg ; EXPORT.CFG ; Файл настройки экспорта кассового сервера ; Кристалл-Сет ; для работы с системой Papyrus ; ; 30/10/2004 ; [GENERAL] INNEREXPORTPATH=C: VERIFYSTATE=0 EXPORTTYPE=DBF[PATH] C:=C:[REPORTS] REPGANG=CS_ZREP;0;1 REPCHEQUEHEAD=CS_CHKHD;0;1 REPCHEQUEPOS=CS_CHKLN;0;1 REPCHEQUEDISC=CS_DSCNT;0;1[CS_ZREP] _USESTOP=1 _STOPFLAG=CS_WAIT OPERDAY=OPERDAY;C;20;0 CashNumber=CASHNMB;N;10;0 GangNumber=SMENA;N;10;0 GangDateStart=START;C;20;0 GangDateStop=STOP;C;20;0 ChequeNumberFirst=CHK_FIRST;N;10;0 ChequeNumberLast=CHK_LAST;N;10;0 CheckStatus=STATUS;N;6;0[CS_CHKHD] _USESTOP=1 _STOPFLAG=CS_WAIT OPERATION=OPERATION;C;1;0 DATEOPERATION=DATEOPER;C;20;0 CK_NUMBER=NUMCHK;N;10;0 CASH_CODE=CASHCODE;N;10;0 NSMENA=SMENA;N;10;0[CS_CHKLN] _USESTOP=1 _STOPFLAG=CS_WAIT ID=CHKLN_ID;N;10;0 CK_NUMBER=NUMCHK;N;10;0 GRCODE=DIV;N;4;0 CODE=COD;C;20;0 QUANT=QUANT;N;10;3 PRICE=PRICE;N;12;2 DISC_SUMM=DISC;N;12;2 CASH_CODE=CASHCODE;N;10;0 NSMENA=SMENA;N;10;0 BANK=BANK;C;1;0[CS_DSCNT] _USESTOP=1 _STOPFLAG=CS_WAIT POSID=CHKLN_ID;N;10;0 DISCTYPE=TYPE;N;10;0 CARDNUMBER=CARDNO;C;22;0

Особенности работы

Этот кассовый модуль экспортирует данные о продажах по запросу только за один день. При этом если Z-отчет, соответствующий экспортируемым чекам, был снят на следующий день и данные за этот день есть, то модуль вернет все чеки этого Z-отчета (включая чеки следующего дня).Papyrus , при закрытии сессии этого кассового модуля, запрашивает период, за который надо получить данные. Если вы указываете открытый справа период, то к текущей операционной дате прибавляется два дня и полученная дата закрывает период. Papyrus обращается к кассовому модулю за данными на каждый день из указанного периода.Кристалл-Сет при экспорте результатов продаж не инициализирует секунды в полях времени, поэтому, Papyrus искусственно инициализирует секунды во времени пробития чека как остаток от деления номера чека на 60 (это необходимо для обеспечения уникальности времени пробития чека в пределах каждого кассового аппарата).При экспорте данных в Кристалл-Сет главная неприятность в том, что этот кассовый модуль не предоставляет интерфейса для очистки внутренней базы данных товаров. Из-за этого могут возникать коллизии, связанные с изменениями штрихкодов товаров.

Кассовый модуль Кристалл УКМ

Кассовый модуль Атол

Кассовый модуль Петрович

Приложение D. Специальные форматы штрихкодов

Для управления терминалами сбора данных, а также для упрощения работы в панели процессора система Papyrus использует штрихкоды, кодирующие команды и данные. Для таких штрихкодов всегда используется стандарт CODE39. Если код содержит несколько полей, то эти поля отделяются друг от друга символом разделителя X (заглавная латинская буква X). Неявное разделение полей на основании их длины не используется, поскольку действительная длина поля в различных условиях могут существенно отличаться.

Серийные номера

Серийные номера кодируются простой последовательностью цифр. Система отличает серийный номер от номенклатурного номера по контексту. То есть, при необходимости идентифицировать некоторую последовательность цифр, система сначала ищет номенклатурный номер с такой последовательностью и, если такого номенклатурного номера нет, то пытается найти серийный номер, совпадающий с заданной последовательностью.Комбинация серийного номера с номенклатурным В некоторых случаях требуется кодировать в одном штрихкоде и серийный, и номенклатурный номера. В этом случае штрихкод имеет следующий формат: SSSSXNNNNXQQQQ
Здесь:
  • SSSS - цифры серийного номера (длина произвольная),
  • NNNN - цифры номенклатурного номера (длина произвольная).
  • QQQQ - количество, содержащееся в промаркированной упаковке
  • X - разделитель (заглавная латинская буква X).
  • Примеры: 100014X30005 & Серия 100014, номенклатурный номер 30005, количество явно не указано 505XX120 & Серия 505, номенклатурный номер отсутствует, количество 120 единиц X30005 & Серия не указана, номенклатурный номер 30005, количество явно не указано Код документа Маркировка документа используется для идентификации его посредством терминала сбора данных или в панели процессора.
    Формат кодировки документа следующий: BILLPPPPXOOOOXIIII
    Здесь:
  • BILL - фиксированный префикс кода документа
  • PPPP - код процессора, на котором должен обрабатываться документ
  • OOOO - идентификатор контрагента по документу
  • IIII - идентификатор документа
  • Примеры: BILL80001X217X34011 & Процессор 80001, ИД контрагента 217, ИД документа 34011 BILLXX34011 & Процессор не определен, контрагент не определен, ИД документа 34011 BILLX000X34011 & Тоже

    Приложение E. Сообщения об ошибках

    [#1] #2

    #3

    79

    Остаток товара слишком мал

    Недостаточное количество товара на дату проведения операции по складу, к которому относится документ. Если сообщение появляется при выборе товара в товарном документе, то кроме тривиальной причины (учетный остаток просто недостаточен), возможно, что товара не хватает из-за дополнительных ограничений, как-то: возвратная операций поставщику при недостаточности товара именно этого поставщика; товар “перехвачен” более поздними операциями (в случае проведения документа задним числом). Если сообщение появляется при проведении товарного документа или при закрытии кассовой сессии, то причина, скорее всего, кроется в нарушениях в таблице текущих товарных остатков. В этом случае следует запустить корректировку текущих товарных остатков (Админ→ Корректировки→ Корректировка текущих товарных остатков). Если и это не помогло, то следует выполнить корректировку лотов, и, если в лотах были ошибки, снова выполнить корректировку текущих товарных остатков. Dev: mnem(PPERR_LOTRESTBOUND)

    83

    Товара 'ABC' на складе нет

    Выбранный для вставки в строки документа товар ABC на складе, к которому относится документ, отсутствует. Это сообщение появляется при выборе расходуемого или переоцениваемого товара товара в документе либо из списка, либо по штрихкоду. Dev: mnem(PPERR_NOGOODS), locfunc(TrfrItemDialog::replyGoodsSelection)

    128

    Попытка объединить несовместимые документы

    Появляется при попытке объединить несколько документов в один. Объединяемые документы должны принадлежать одному виду операции, иметь одинаковых (возможно нулевых) контрагентов (основная и дополнительная статьи аналитического учета), а также принадлежать одному складу и иметь одну и ту же валюту учета. Это сообщение появится и в том случае, если один или несколько объединяемых документов имеют ссылку на связанный документ (например, не удастся объединить документы списания инвентаризации). DEV: mnem(PPERR_UNMATCHEDUBILLS), locfunc(IsBillsCompatible)

    134

    Попытка открыть день с датой меньшей предыдущего

    Это сообщение появляется при попытке открыть новый кассовый день в синхронном кассовом узле, если дата нового дня меньше, чем текущая дата в записи кассового узла. DEV: mnem(PPERR_STARTBACKDATE), locfunc(PPCashMachine::SyncOpenSession)

    193

    Ошибка чтения пакета связи разделов 'имя файла'

    Сообщение появляется при приеме или отправке данных в другой раздел. Причиной возникновения ошибки чаще всего является нарушение целостности одного из файлов, находящихся в каталоге IN (OUT). В нескольких версиях системы (до 5.3.5) такая ошибка могла возникать при передаче данных с использованием встроенного сжатия (система неверно рассчитывала CRC файла). Для устранения ошибки:

  • при отправке данных выполните процедуру удаления временных файлов.
  • при получении данных выполните процедуру удаления временных файлов, в разделе - отправителе также выполните эту процедуру и передайте данные снова.
  • DEV: mnem(PPERR_PPOSREADFAULT), locfunc(PPObjectTransmit::GetHeader, PPObjectTransmit::Read, PPObject::ReadBlk)

    323

    Обнаружена циклическая зависимость между лотами

    Ошибка возникает, если программа обнаружила циклическую зависимость между лотами. То есть, лот A порождает лот B, лот B порождает лот C, а лот C, наконец снова порождает лот A. Причина ошибки возникает крайне редко и источники на текущий момент (версия 4.7.10) не ясны. Может проявляться при попытке открытия документа, просмотре системной информации по лоту, при расчете некоторых отчетов. При возникновении необходимо немедленно обратиться в службу технической поддержки. DEV: mnen(PPERR_LOTLOOP), locfunc(ReceiptCore::SearchOrigin), locfunc(LotInfoDialog::setupLinkedLot)

    335

    Недопустимое действие по персональной операции

    При выборе действия по виду персональной операции тип этого действия не соответствует другим условиям вида персональной операции. Например, действие по установке или снятию тега недопустимо для вида операции, для которого не определены теги. DEV: mnen(PPERR_INADMISSPOVERB), locfunc(PoClauseDialog::replyVerbSelected)

    351

    Ошибка создания файла синхронизации

    Программе не удалось создать файл синхронизации ppsync.bin. Проблема возникает из-за недоступности каталога базы данных. Путь к базе данных прописывается в файле pp.ini.

    355

    Ошибка открытия файла синхронизации

    Программе не удалось открыть файл ppsync.bin. Обычно проблема кроется в отсутствии прав доступа на чтение или на запись к каталогу базы данных.

    909

    Невозможно подставить счет вместо алиаса в проводке

    При проведении документа не удалось вместо алиаса счета, указанного в одном из шаблонов проводок, подставить действительный счет из таблицы подстановки алиасов, связанных с аналитической статьей, используемой в документе. После текста сообщения система выводит наименование алиаса счета и наименование статьи, в которой должна быть правильная таблица подстановки алиасов. DEV: mnem(PPERR_UNABLERESOLVEALIAS), locfunc(PPAccTurnTempl::ResolveAlias)

    909

    Невозможно подставить счет вместо алиаса в проводке

    При проведении документа не удалось вместо алиаса счета, указанного в одном из шаблонов проводок подставить действительный счет из таблицы подстановки алиасов, связанных с аналитической статьей, используемой в документе. После текста сообщения система выводит наименование алиаса счета и наименование статьи, в которой должна быть правильная таблица подстановки алиасов. DEV: mnem(PPERR_UNABLERESOLVEALIAS), locfunc(PPAccTurnTempl::ResolveAlias)

    910

    Завершение кассовых сессий сверх 10-го уровня блокировано

    Сообщение выдается при попытке завершения кассовой сессии, если в конфигурации оборудования установлен флаг “Закрывать кассовые сессии до 10-го уровня”. Для консультаций по поводу правомерности установки этого флага следует обратиться к администратору системы. DEV: mnem(PPERR_CSESSCOMPLLOCKED).

    912

    Инвалидная ассоциация статья-склад

    Не существует соответствия между статьей, название которой указано после текста сообщения, и складом. Проблема может быть связана с неверной установкой таблицы позиций в конфигурации (относительно пользователя) или с потерянной ссылкой на склад в статье аналитического учета, относящейся к аналитической таблице, указанной в конфигурации. DEV: mnem(PPERR_INVAR2LOCASSOC), locfunc(PPObjLocation::ObjToWarehouse)

    913

    Инвалидная ассоциация склад-статья

    Не существует соответствия между складом, название которого указано после текста сообщения, и статьей. Проблема может быть связана с неверной установкой таблицы позиций в конфигурации (относительно пользователя) или с отсутствием статьи аналитического учета, относящейся к таблице позиций (указанной в конфигурации), привязанной к складу. DEV: mnem(PPERR_INVLOC2ARASSOC), locfunc(PPObjLocation::WarehouseToObj)

    1247

    Персоналия не принадлежит заданному виду

    Выбранная или обрабатываемая персоналия не относится к ограничивающему виду. #define PPERR_PSNDONTBELONGTOKIND 1247 // Персоналия не принадлежит заданному виду DEV: mnem(PPERR_PSNDONTBELONGTOKIND), locfunc(PersonCore::IsBelongToKind)

    1248

    Персоналия по регистру xxx не найдена

    При попытке идентифицировать персоналию по регистрационному номеру не удалось обнаружить ни одной персоналии с указанным номером. Для устранения проблемы либо введите правильный номер, либо задайте требуемый регистрационный номер для персоналии. DEV: mnem(PPERR_PERSONBYREGNFOUND), locfunc(PPObjPerson::GetListByRegNumber)

    1249

    Персоналия xxx по регистру не соответствует заданному виду

    При попытке идентифицировать персоналию по регистрационному номеру, одна персоналия, соответствующая указанному номеру, была обнаружена, но ни один из видов, которым она принадлежит, не соответствует заданному. DEV: mnem(PPERR_PERSONBYREGNKIND), locfunc(PPObjPerson::GetListByRegNumber)

    1250

    Персоналии по регистру xxx не соответствуют заданному виду

    При попытке идентифицировать персоналию по регистрационному номеру, несколько персоналий, соответствующих указанному номеру, были обнаружены, но ни один из видов, которым они принадлежат, не соответствует заданному. DEV: mnem(PPERR_PERSONSBYREGNKIND), locfunc(PPObjPerson::GetListByRegNumber)

    1343

    Заданный вид котировки не соответствует категории

    Сообщение появляется при использовании интерфейса IPapyrusQuot при попытке установить значение котировки с категорией “Матрица” или “Контрактная цена” и видом котировки, не соответствующем этой категории. DEV: mnen(PPERR_UNMATCHEDQUOTKIND)

    DBError 103

    Ошибка открытия файла для резервного копирования

    При создании резервной копии базы данных не удалось открыть для чтения один из файлов, предназначенных для копирования (вероятнее всего файл открыт для записи каким-либо приложением или файл прихвачен фантомным сеансом на серверы базы данных). Возможный вариант решения проблемы - перезагрузка сервера базы данных. DEV: mnem(SDBERR_BU_SRCFOPEN), locfunc(DBBackup::GetFileParams)

    нет кода

    Добавляемый в документ товар должен иметь код по статье

    В соглашении с поставщиком или покупателем, связанном со статьей контрагента по документу установлен флаг ✓В документы добавлять только товары, имеющие код по статье. При этом, пользователь пытается добавить в документ строку с товаром, который не имеет кода, связанного с контрагентом по документу. Подробно соглашения с клиентами описаны на стр. link, соглашения с поставщиками - на стр. link. DEV: mnem(PPERR_BILLGOODSRESTRICTBYARCODE) locfunc(PPBillPacket::CheckGoodsForRestrictions)

    Уведомительные сообщения

    38

    Неоднозначный альтернативный товар в выборке излишков по кассовым сессиям

    Это сообщение появляется при попытке редактирования подстановки альтернативного товара в излишках по кассовым сессиям. Причинной сообщения является то, что, излишки рассчитаны по выборке кассовых сессий, причем в двух или более сессиях из выборки реализована подстановка разных альтернативных товаров. Пример: в кассовой сессии за 1 марта вместо товара “БАНАНЫ” подставлен альтернативный товар “БАНАНЫ ЭКВАДОР”. В кассовой сессии за 3 марта вместо товара “БАНАНЫ” подставлен товар “БАНАНЫ КОЛУМБИЯ”. Выборка кассовых сессий взята за период с 1 по 3 марта. Излишки по кассовым сессиям рассчитаны по всей выборке. При попытке просмотра подстановки альтернативного товара по товару “БАНАНЫ” появится описываемое сообщение. DEV: mnem(PPINF_AMBIGUITYCSEXCALTGOODS), locfunc(PPViewCSessExc::SetAltGoods)

    Сообщения при приеме данных из другого раздела базы данных

    нет кода

    Ошибка разрешения ссылки объекта (Type = #, ID = #)

    Ссылочный объект не был передан вместе с тем объектом, который от него зависит, а также нет информации о синхронизации этого объекта в таблице синхронизации. Наиболее частая причина - висячая ссылка на объект в базе-отправителе. Решение - восстановление ссылки в базе - отправителе (следует проконсультироваться со служббой поддержки). DEV: mnem(PPTXT_RCVREFUNRESOLVED), locfunc(PPObjectTransmit::RestoreObj)

    нет кода

    Ошибка разрешения ссылки объекта (Type = #, ID = #)

    Ссылочный объект не был передан вместе с тем объектом, который от него зависит, а также нет информации о синхронизации этого объекта в таблице синхронизации. Наиболее частая причина - висячая ссылка на объект в базе-отправителе. Решение - восстановление ссылки в базе - отправителе (следует проконсультироваться со служббой поддержки). DEV: mnem(PPTXT_RCVREFUNRESOLVED), locfunc(PPObjectTransmit::RestoreObj)

    нет кода

    Ошибка акцепта документа

    Не удалось провести документ, принятый из другого раздела БД. После этого сообщения в строке выводится идентификатор документа в базе-отправителе, а также номер документа и дата. Далее идет текст сообщения об ошибке. DEV: mnem(PPTXT_ERRACCEPTBILL), locfunc(PPObjBill::Write)

    нет кода

    Ошибка конвертации документа

    Не удалось преобразовать пакет документа, принятый из другого раздела БД, в формат, необходимый для сохранения в базе данных. После этого сообщения в строке выводится идентификатор документа в базе-отправителе, а также номер документа и дата. Далее идет текст сообщения об ошибке. DEV: mnem(PPTXT_ERRACCEPTBILL_CONVERT), locfunc(PPObjBill::Write)

    OOO "Петроглиф"
    Copyright © 2019