Вернуться   Андрей Панько. Заметки про Dynamics NAV > Dynamics NAV (Navision)
Справка Пользователи Календарь Поиск Сообщения за день Все разделы прочитаны

Dynamics NAV (Navision) Заметки про Dynamics NAV (ранее Navision) и аддон LS Retail

Ответ
 
Опции темы Поиск в этой теме
  #1  
Старый 20.02.2008, 11:00
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
Х-отчет [LS Retail]

Заметил некоторое замедление в работе Х-отчета (команда PRINT_X).
Зная, что для печати достаточно одной команды, заглянул в код, дабы выяснить, что же там происходит.

При нажатии на соответствующую кнопку в POS клиенте, вызывается функция PrintXReport формы 99008951 EPOS Main.

Для начала в указанной функции осуществляется проверка, не из новой ли транзакции производится печать Х-отчета. Видно были прецеденты, когда кнопку с командой PRINT_X вставляли в меню продаж или оплат.
За указанную проверку отвечает функция TestNewTransaction.

Следом выполняется проверка прав доступа. Выполняется проверка в функции Permission кодеюнита 99008900 POS Function. В карточке сотрудника (таблица 99001461 Staff) есть поле X-Report Printing Allowed типа Boolean, чтобы сотрудник мог печатать Х-отчет в этом поле должен стоять флажок. Права могут настраиваться и для группы сотрудников (таблица 99001518 Staff Permission Group), принадлежность сотрудника к группе указывается в карточке сотрудника в поле Permission Group.

Функции кодеюнита 99008909 POS Transaction Server Utility, такие как ReadStatementTransactions и UpdateXZReportInformation включаются в работу при выполнении следующих условий:
Код:
IF PosFuncProfile."TS Floating Cashier" AND (POSTerminal."Statement Method" = POSTerminal."Statement Method"::Staff) AND (POSTerminal."Terminal Connection" = POSTerminal."Terminal Connection"::OffLine) THEN BEGIN

Примечание:
Цитата:

Параметр DoZ в указанных функциях:
TRUE – функция вызывается для формирования Z отчета.
FALSE – функция вызывается для формирования Х отчета.

Внимания на эти функции обращать не нужно. Чуть позже будет понятно почему.


Основной функцией отвечающей за печать Х-отчета является PrintXZReport из 99008903 POS Print Utility.
В стандарте, при работе этой функции система формирует X-отчет на основании данных хранящихся в ней самой, т.е. на основании всяких Transaction Entry.

Все полученные оплаты (Tender Type <> Tender Remove/Float) при необходимости в разрезе валют и видов банковских карт.
Отдельно печатаются внесения и изъятия (Tender Type = Tender Remove/Float)
Печатается задекларированная сумма (кстати, применен интересный алгоритм определения последнего декларирования, если их было несколько)
Выводится полная сумма продаж, с выделением суммы скидок по строкам, скидок по чекам, округлений.
Выводятся суммы доходов и расходов, если они имели место.
Печатается общее количество транзакций и количество проданных товаров.
Количество чеков возвратов.
Количество отложенных чеков и сумма предоплаты по ним.
Количество отмененных и тренировочных транзакций.
Даже печатается количество входов в POS терминал и открытий денежного ящика.


А вот как система определяет, какие транзакции нужно печатать.
В таблице TransactionHeader99001472 и сопутствующих ей, есть поля Statement Code и Z-Report ID. Как заполняется Statement Code известно.
Так вот в зависимости от метода формирования отчета (поле Statement Method карточке POSTerminal). Система фильтрует транзакции по данному полю, значение, по которому следует фильтровать возвращает функция
GetStatementCode изкодеюнита 99008900 POS Function. Так же транзакции фильтруются по полю Z-Report ID, в котором должно быть пустое значение.



Т.е. при
· TerminalStatement::Staff , будет получит Х-отчет, в котором будут указаны все транзакции, выполненные сотрудником на всех POSтерминалах.
· TerminalStatement::POSTerminal , будет получен Х-отчет, в котором будут указаны все транзакции, выполненные на данном POSтерминале (не зависимо от сотрудников).
· TerminalStatement::Total , будет получен Х-отчет, в котором будут транзакции выполненные всеми сотрудниками на всех POSтерминалах.

Тоже самое происходит и при печати Z-отчета, только в конце всем транзакция на основании которых Z-отчет формировался в поле Z-Report ID устанавливается номер последнего Z-отчета (поле "Last Z-Report" в карточке POSTerminalили Staff).



Все бы хорошо, но у нас применяются фискальные принтеры. Х/Z-отчеты они строят самостоятельно, на основании данных своей фискальной памяти (за вывод указанных отчетов, отвечают функции, которых в стандартной версии нет). Поэтому все изыски, приведенные выше в принципе не нужны. Единственное, что можно оставить – это заполнение поля Z-Report ID, при условии, что Statement Method = POSTerminal.

Для чего это может пригодиться – в следующей заметке.
Ответить с цитированием
Ответ


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 06:22.

Контакты: e-mail, телефон: +7(926)1805967 - Архив - Вверх

Microsoft Most Valuable Professional
vBulletin v3.5.4, Copyright ©2000-2018, Jelsoft Enterprises Ltd.
Русский перевод: zCarot, Vovan & Co
Права на все материалы, опубликованные на блогофоруме принадлежат Андрею Панько, если в самом материале не указано иное.
Рейтинг@Mail.ru Rambler's Top100