BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Главная  / Поддержка  / Форум  / Публичные форумы  / Автоматизация торговли  / программирование Меркурий MS-K 2

Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1 2 След.
RSS
программирование Меркурий MS-K 2
 
Здраствуйте! У меня возникла некоторая проблема! Наша организация закупила недавно для нашего сервисного центра фискальный регистратор Меркурий MS-K версия 2 Торнадо. А наша бухгалтерия работает на БЭСТе. Подскажите пожайлуста как можно из БЭСТа производить печать на него. В комплектации есть разные примеры и описание, но там ни слова про БЭСТ. Буду очень признателен. :help:
 
На этом форуме Вам никто не ответит
пишите мне на email
весь спектр ФР подключал я
 
А вы где хотите чеки печатать в КПМе или где ?
 
Доброе утро! Есть модуль товары, необходимо при выписке товара (кл. F5), срабатывала функция и выводилась печать на фискальник! И еще возможен ли вариант ведения в фискальнике 2х видов налогообложения! Заранее спасибо. :?: :help:
 
Делали такое со Штрих-ФР, с Меркурием не делали .
2 вида налогооблажения - это две разные ставки НДС ?
 
Люди просто скиньте кто нибудь примерный код, как можно это реализовать! помогите!
 
Код может быть примерно таким:

Function Main()
local ss,gg,ml,hkkm

if select('MDOC') > 0 .and. select('MDOCM') > 0

if empty(mdoc->date0)

mdoc->(ordsetfocus('MDOC'))
mdocm->(ordsetfocus('MDOCM'))
mlabel->(ordsetfocus('MLABEL'))

ss := mdoc->sclad + mdoc->vid + mdoc->type
ss := ss + mdoc->codedoc + mdoc->numdoc + dtos(mdoc->date)
ss := upper(ss)
gg := ss

if mdocm->(dbseek(ss))

hkkm := CreateObject('AddIn.FprnM45')

try

hkkm:DeviceEnabled := .t.
hkkm:CheckState()
hkkm:CancelCheck()
hkkm:Password := '1'
hkkm:Mode := 1
hkkm:SetMode()

do while !mdocm->(eof()) .and. (ss == gg)

if mlabel->(dbseek(upper(mdocm->grup + mdocm->nnum)))
ml := mlabel->name
ml := rtrim(ml)
do while len(ml) > 19
hkkm:Caption := OemToAnsi(left(ml, 19))
hkkm:PrintString()
ml := substr(ml, 20)
enddo
hkkm:Name := OemToAnsi(ml)
else
hkkm:Name := '?'
endif
hkkm:Price := Round(mdocm->Cenaout, 2)
hkkm:Quantity := Round(mdocm->Kolout, 3)
hkkm:Department := 1
hkkm:Registration()

mdocm->(dbskip())
ss := mdocm->sclad + mdocm->vid + mdocm->type
ss := ss + mdocm->codedoc + mdocm->numdoc + dtos(mdocm->date)
ss := upper(ss)
enddo

hkkm:TypeClose := 0
hkkm:CloseCheck()
hkkm := nil

catch
hkkm:CancelCheck()
hkkm := nil
alert('ЋиЁЎЄ ЇаЁ ЇҐз ⨠祪 !')
return -1
end

mdoc->(dbrlock())
mdoc->date0 := Date()
mdoc->summa0 := mdoc->summa
mdoc->(dbcommit())
mdoc->(dbunlock())

endif

endif

endif

return 0

Код рассчитан на работу с драйвером АТОЛ, он для "Меркуриев" бесплатный, http://www.atol.ru/products/programs/trade-work/driver/driver-kkm/

В приведенном примере в чек выводятся построчно наименования товаров из накладной, НДС не выделяется, регистрация всегда идет через секцию 1, поле mdoc->date0 используется для защиты от повторнной печати чека при пересохранении документа.
 
В чем используется сей код(язык программирования)? Как он используется? Как его можно применить? Что он непосредственно выполняет? Нам необходимо чтобы в БЭСТе в модуле "ТОВАРЫ" при нажатии комбинации CTRL+F5, отрабатывала спецфункция печати на фискальник!
 
Спасибо огромное Евгений! Только объясните пожайлуста пошагово как это все реализовывается! Заранее спаибо!
 
Язык харбор - родной язык для БЭСТа. (скрипт Клиппера)
Вопросы программирования - на форуме по программированию обсуждаем.
Пошагово задача работает примерно так:
открывается чек
по строкам документа пробегает задача и формирует строку чека.
Потом в конце чек закрывает.

Есть еще кусочек проверки на то, что касса присутствует.
Это TRY CATCH комбинация
 
Костя, автор темы по-моему, не об этом спрашивал, а как пошагово привинтить это к работаюшему БЭСТУ.

В какой БЭСТ требуется это поставить, в 4 или 5? В четверке по шагам это делается так:

1. Складываем файлик с кодом, который называется, к примеру, u_kkm.prg, по пути ...\pro\plugins\source\sclad . Желательно, чтобы его название начиналось на "u", тогда при очередном апгрейде БЭСТа всё корректно переедет в новую версию.
2. В реестре накладных жмем <Ctrl-F5>, появляется окно "специальные функции".
3. Внизу подсказка "F11 - среда программиолвания", жмем <F11>, выбираем наш модуль. Далее <F2> - компиляция, после которой исполняемый код ( файл с типом .hrb) попадет по пути ...\pro\plugins\extensions\sclad
4. Выходим через <esc> до окна "специальные функции" и описываем вызов файла "U_kkm.hrb". Я считаю, удобнее сделать вызов на событие "сохранение" или "проверка документа", зачем оператору каждый раз <Ctrl-F5> давить?
5. Собственно всё. X- и Z-отчеты можно снимать непосредственно из панели управления драйвером. Если продавцов туда страшно пускать, могу здесь же выложить код для этих дел для привязки по <Ctrl-F5>
6. Более подробно об этих инструментах (харборе) написано в разделе "О программе. Программирование в БЭСТ"
 
Для версии 5! И выложите пожайлуста код для привязки по <Ctrl+F5>!
 
Как внешние модули подключаются в 5-ке, обсуждалось здесь: http://www.bestnet.ru/support/forum/index.php?PAGE_NAME=read&FID=11&TID=159&MID=s

Код для снятия Х-отчета:
Function Main()
local hkkm, pass

pass:=DIALOG("Пароль администратоа :","99",0)

hkkm := CreateObject('AddIn.FprnM45')

try

hkkm:DeviceEnabled := .t.
hkkm:CancelCheck()
hkkm:ResetMode()
hkkm:Password := str(pass)
hkkm:Mode := 2
hkkm:SetMode()
hkkm:ReportType := 2
hkkm:Report()
hkkm:ResetMode()

hkkm := nil

catch
hkkm := nil
alert(Ошибка при печати X-отчета !')
return -1
end

return 0

Для снятия Z-отчета:
Function Main()
local hkkm, pass

pass:=DIALOG("Пароль администратора :","99",0)


hkkm := CreateObject('AddIn.FprnM45')

try

hkkm:DeviceEnabled := .t.
hkkm:CancelCheck()
hkkm:ResetMode()
hkkm:Password := str(pass)
hkkm:Mode := 3
hkkm:SetMode()
hkkm:ReportType := 1
hkkm:Report()
hkkm:ResetMode()

hkkm := nil

catch
hkkm := nil
alert('Ошибка при печати Z-отчета !')
return -1
end

return 0


Естественно, пароль администратора можно убрать из диалога и проставить жестко.
 
Спасибо огромное!!! :smile:
 
Все отлично и прекрасно! Скажите нам как из программы открыть смену пожайлуста! Заранее спасибо! :surprise:
 
Вообще в кассе смена автоматом должна открываться при печати чека.
Сделайте печать Х-отчета (его по утрам вообще-то делать надо по правилам) и он автоматом и смену откроет.
 
а если кассиров более 1?
 
Просто напишите на Харборе эту процедуру пожайлуста! :funny:
 
А причем тут количество кассиров. не путайте открытие смены с открытием сеанса в отдельных программах. И для кассы смена кассира роли не играет - смена для этого не открывается. Это все на уровне кода пароля разруливается.
Выше приведен код Х-отчета у Евгения на харборе.
 
Спасибо! Подскажите вот еще что! У нас два типа клиентов! Соответственно мы настроили программу так что при работе у нее есть 2 режима! 1- работа с физиками и 2- работа с юриками! Так вот при работе с юриками нам нужно чтобы на чек выводилось "в том числе НДС...."! Как это можно сделать? Желательно код! Спасибо заранее! :best:
 
Знаю что у Штриха это на самой кассе настраивается - у Меркурия надо бы у Евгения уточнить
 
С Меркурием не упражнялись, на Феликсе делали. Вот код, по которому чек не печатает построчно перечень товаров, но для секций 1 и 3 выделяет НДС 18% в чеке. Творчески его используйте и надеюсь, всё получится :wave:

Function Main()
local hkkm ,sum, dat, dept, doc, nds, NCheck, aMenu, aQues, p, f, s

p := LoadPath() + '!kkm.log'

if File(p) = .T.
f := FOpen(p, 1)
else
f := FCreate(p)
endif

aQues := {"ЏҐз в вм 祪?"}
aMenu := {" „ "," ЌҐв "}

nds := 0

if select('mdoc') > 0

if (empty(mdoc->DATE0) .and. upper(alltrim(mdoc->USER_CODE)) = "KASSA" .and. NoOrYes (aQues,2,aMenu) = 1)

sum := mdoc->SUMMA
dept := 2 // ‡¤Ґбм ­ ¤® ¤®Ў ўЁвм ўў®¤ ᥪ樨, «ЁЎ® Ї® Є Є®¬г-­ЁЎг¤м
// ЇаЁ§­ Єг ¤®Єг¬Ґ­в ў Ѓќ‘’Ґ (­ Їа. Є®¤ ®ЇҐа жЁЁ), «ЁЎ® Їа®бв® ¤Ё «®Ј®¬

// …б«Ё ᥪжЁп 1 Ё«Ё 3, ў 祪Ґ ўл¤Ґ«пҐвбп Ќ„‘

if dept = 1 .or. dept = 3
nds := sum*18/118
sum := sum-nds
endif


// Ё­ЁжЁ «Ё§ жЁп ®ЎкҐЄв

hkkm := CreateObject('AddIn.FprnM45')

try

hkkm:DeviceEnabled := .t.

hkkm:GetStatus()

if hkkm:CheckState() <> 0
hkkm:CancelCheck()
endif


NCheck := hkkm:CheckNumber()

hkkm:Password := "30"
hkkm:Mode := 1
hkkm:SetMode()



hkkm:Price := Round(sum, 2)
hkkm:Quantity := 1
hkkm:Department := dept
hkkm:Registration()

if dept = 1 .or. dept = 3
hkkm:Name := OemToAnsi("Ќ„‘ 18%")
hkkm:Price := Round(nds, 2)
hkkm:Quantity := 1
hkkm:Department := dept
hkkm:Registration()
endif

hkkm:TypeClose := 0
hkkm:CloseCheck()



catch
hkkm:CancelCheck()
hkkm := nil
alert('ЋиЁЎЄ ЇаЁ ЇҐз ⨠祪 !')

FClose(f)

return -1

end

hkkm:GetStatus()

if NCheck+1 == hkkm:CheckNumber()
mdoc->(dbrlock())
mdoc->DATE0 := Date()
mdoc->(dbcommit())
mdoc->(dbunlock())
else
hkkm:CancelCheck()
alert('ЋиЁЎЄ ЇаЁ ЇҐз ⨠祪 !!!')
endif

hkkm := nil

FSeek(f, 0, 2)
s := 'Џа®¤ ¦ ! „ в : '+dtos(date())+', —ҐЄ: '+str(NCheck)+', ‘ҐЄжЁп: '+str(dept)+', ‘㬬 : '+str(Round(sum, 2)+Round(nds, 2))+CHR(13)+CHR(10)
FWrite(f, s, len(s))

FClose(f)

endif

endif

return 0
 
Здраствуйте! В вашем коде описано как НДС начисляется по секциям! А как можно сделать НДС как общий итог? Может в настройках это где то есть?
 
Как :help: можно в чеке под итоговую строку засунуть строку?
 
У кассовых аппаратов как правило есть понятие подвала чека.
В ШТРИХ-ФР это программируется в самой кассе. В АМС делается
специальный файл подвала. Как в Вашей модели посмотрите в
документации к кассе.
Страницы: 1 2 След.
Читают тему (гостей: 1)