DrvFR.dll команда печати многострочного текста #493253


#0 by ChMikle
кто-нибудь сталкивался или знает такую команду для этой библиотеке . В примере драйвера есть такая возможность, а примере библиотеки нет такой команды чтобы передавать текст и команда печатала его на ленте ... ЗЫ Вариант печати текста построчно не канает
#1 by MikaelW
НА форум Штрих-М сходи. Там точно ответ найдешь!!!!
#2 by woody woodpecker
ширина ленты в символах - величина постоянная. Трудно текст прорезать? Там ведь не нужны красивости как в ворде
#3 by miki
Что значит "многострочного"? Где посередке есть <перевод_строки>? Методы, доступные в мануале, дают max 248/249 символов за одну команду
#4 by miki
+Вам сюда:
#5 by NS
Я резал по длине строки.
#6 by NS
Величина постоянная для конкретного шрифта.
#7 by ChMikle
в драйвере есть такая фича передаешь текст и нажимаешь печатать текст и на чеке печатается , одной командой ..... а в примере работы библиотеки нету. Проблемы с печатью текст будет менять и печататься информация на чеке , тормозит при печати +гемморно отрезку чека считать. а это текст набил и сам драйвер разместил как тебе надо
#8 by ChMikle
вроде как по библиотеке вопрос
#9 by NS
Библиотека то штриховская.... Зачем считать отрезку чека?! И как это связано с построчной или нет печатью?
#10 by ChMikle
Библиотека да , и при печате с задержкой бывает отрезает бумагу и продолжает печатать
#11 by NS
Отключаешь звук при печати в дровах, и при отрезки проверяешь код возврата. Наизусть не помню, но если еще печатает, то не режет, и возвращает соответствующий код ошибки. Вроде 80.
#12 by ChMikle
Серегй, но там проблемы возникают с пересылкой команд на фискальный регистратор и когда много строк для печати отправляются последовательно надо ставить задержки для выполенения предыдущих команд , начинает не стабильно работать. Не то это , вы драйвер видели А 4.9 , там же есть возможность печати
#13 by NS
У меня потоковая печать без задержек. (1000 чеков за раз) Никаких проблем. Драйвер 4.6 Проблемы у меня возникали только при печати графики в фискальной части. А так - идут сначала строки, потом штрих-код, затем фискальная часть, глюков нет.
#14 by NS
форматирование слетело...
#15 by NS
Задержки же в параметрах фискальника можно установить через драйвер.
#16 by ChMikle
ок попробую вопсользоваться :), спасибо
#17 by Torquader
Option Explicit ' 28-01-2010 после некоторой отладки мы получили достаточно нормальную работу ' данных функций форматирования и они могут быть подключены в проект ' для форматирования строк перед выводом на фискальный регистратор '============================================================================== ' Набор констант для работы функций форматирования строк ' ' константы выравнивания при форматировании строки Const    asAlignLeft    =    1 ' ' константы режима обработки строки функцией обработки ' ' константы специального значения символов Const    asSpaceChar    =    " " Const    asNonBreakSpace    =    " " ' символ с кодом 160 '============================================================================== ' данная функция производит форматирование простой строки ' предполагается, что ей передана строка LineString меньше LineWidth символов Function AdjustCurrentLine(LineString,LineWidth,AlignType) ' если в строке обнаруживается символ табуляции, то система предполагает ' что каждый из таких символов будет заменяться пробелами, чтобы длина ' строки стала равной LineWidth ' если символов табулации нет, то система выполняет выравнивание ' как указано в параметре выравнивания    l=Len(LineString)    If InStr(1,LineString,vbTab,vbBinaryCompare)=0 Then ' выравнивание по левому краю - это ничего не деланье        If AlignType=2 Then ' выравнивание по центру            If l+1<LineWidth Then                AdjustCurrentLine=Space((LineWidth-l)2) & _        ElseIf AlignType=3 Then ' выравнивание по правому краю            If l<LineWidth Then                AdjustCurrentLine=Space(LineWidth-l) & _            ElseIf l>LineWidth Then        ElseIf AlignType=4 Then ' выравнивание по заполнению, то есть расширение пробелов до самого конца ' при этом, предполагается, что вначале и в конце пробелов нет ' алгоритм имеет смысл применять только тогда, когда строка меньше нужного            If l<LineWidth Then ' проверяем, что есть что расширять ' в случае отсутствия пробелов мы не можем расширить строку                If InStr(1,LineString,asSpaceChar,vbBinaryCompare)<>0 Then                    i=1                    AdjustCurrentLine=LineString                    Do                        If i>l Then i=1                        If Asc(Mid(AdjustCurrentLine,i,1))=32 Then                            If i<l Then _                    Loop While l<LineWidth    Else ' если у нас есть символ табуляции, то они будут растягиваться        If l<LineWidth Then            i=1            AdjustCurrentLine=LineString            Do                If i>l Then i=1                If Mid(AdjustCurrentLine,i,1)=vbTab Then                    If i<l Then AdjustCurrentLine= _            Loop While l<LineWidth        ElseIf l>LineWidth Then            AdjustCurrentLine=Left(LineString,LineWidth)        Else '============================================================================== ' данная функция производит разбиение строки на блоки нужного размера ' StringForOut - это переданная строка, которая будет выводится ' LineWidth - это максимальное количество символов в строке ' мы это отменили, так как символы табуляции позволяют это сделать ' (они у нас растяжимы до невозможности) ' однако, пришлось вернуться к форматированию, так как не всегда ' символами табуляции можно добиться необходимого положения ' AlignType - тип выравнивания строки: ' 1 - по левому краю ' 2 - по центру ' 3 - по правому краю ' 4 - по заполнению (расширение символов табуляции) ' на выходе мы должны получить массив строк нужного размера ' преобразование для ФР - все символы, меньше 32 - это пробелы, ' за исключением перевода строк (а он может быть 13,10 или 13 и 10 вместе) ' система не печатает пустые строки, поэтому все символы перевода ' после первого символа перевода будут считаться переводо той же строки ' а для получения пустой строки нужно будет поставить пробел ' все символы, которые лежат в диапазоне 32-255 печатаются, как есть ' из строк вырезаются лишние пробелы, а символы табуляции расширяются ' до максимальной длины (если установлен флажок расширения) Function AdjustString(StringForOut,LineWidth,AlignType)    Dim a ' массив для подбора строк-результатов    Dim l ' длина рассматриваемой строки    Dim i ' текущая позиция читаемой строки    Dim c ' текущий просматриваемый символ    Dim r ' переменная для хранения текущего режима преобразования строки ' 1 - новая строка (то есть мы начали читать новыю строку) ' 2 - пробел в начале строки (строка ещё ничего не содержит, но уже непустая) ' 3 - первое слово в строке (идёт заполнение первого слова) ' 4 - пробел после слова (строка уже состоит из одного слова) ' 5 - следующее слово в строке    Dim t ' флаг символа табуляции в начале строки    Dim j ' служебная переменная для проверки размера строк    Dim f ' флаг символа табуляции вместо пробела    Dim w ' текущее собираемое слово    Dim s ' текущая собираемая строка    On Error Resume Next    Set a=New DinamicArray    If Err.Number<>0 Then        OutErrorInformation "Ошибка создания массива для хранения строк"    On Error Goto 0    l=Len(StringForOut)    r=asNewLine ' режим новая строка    i=1    t=False    Do While i<=l        If r=asNewLine Then            Do While i<=l                c=Asc(Mid(StringForOut,i,1))                If(c<>10)AND(c<>13)Then                    If c<33 Then                        If c=9 Then t=True                        r=asLineBegin                    Else        ElseIf r=asLineBegin Then            Do While i<=l                c=Asc(Mid(StringForOut,i,1))                i=i+1                If c<33 Then                    If c=9 Then                        t=True                    ElseIf(c=13)OR(c=10)Then                        If a.AddValue(asEmptyLine)<>True Then            Loop        ElseIf r=asFirstWord Then            Do While i<=l                c=Asc(Mid(StringForOut,i,1))                i=i+1                If c<33 Then                        j=Len(w)                        If j<LineWidth Then                            If t=True Then w=vbTab & w                            If a.AddValue(AdjustCurrentLine(w,LineWidth,AlignType))<>True Then                                AddErrorString "Ошибка добавления строки в массив"                        ElseIf j>LineWidth Then                            Do                                If a.AddValue(Left(w,LineWidth))<>True Then                            Loop While j>LineWidth                            If a.AddValue(AdjustCurrentLine(w,LineWidth,AlignType))<>True Then                                AddErrorString "Ошибка добавления строки в массив"                        Else                            If a.AddValue(AdjustCurrentLine(w,LineWidth,AlignType))<>True Then                    If j>LineWidth Then                        t=False                        Do                            If a.AddValue(Left(w,LineWidth))<>True Then                            t=False                        Loop While j>LineWidth                        s=w                        f=False                        If c=9 Then t=True Else t=False                    ElseIf j<LineWidth Then                        s=w                        If c=9 Then f=True Else f=False                    Else                        If a.AddValue(AdjustCurrentLine(w,LineWidth,AlignType))<>True Then                        If c=9 Then t=True Else t=False        ElseIf r=asWordSpace Then            Do While i<=l                c=Asc(Mid(StringForOut,i,1))                i=i+1                If c<33 Then                        j=Len(s)                        If j<LineWidth Then                            If t=True Then                                s=vbTab & s                                If j+1<LineWidth Then                                    If f=True Then s=s & vbTab                                End If                            ElseIf f=True Then                    ElseIf c=9 Then            Loop        ElseIf r=asNextWord Then            Do While i<=l                c=Asc(Mid(StringForOut,i,1))                i=i+1                If c<33 Then                    If(c=13)OR(c=10)Then                        If j<=LineWidth Then                            If f=True Then s=s & vbTab & w Else s=s & asSpaceChar & w                            If t=True Then                                If Len(s)<LineWidth Then s=vbTab & s                            End If                            If a.AddValue(AdjustCurrentLine(s,LineWidth,AlignType))<>True Then                            j=Len(s)                            If j<LineWidth Then                                If t=True Then                                    s=vbTab & s                                    If j+1<LineWidth Then                                        If f=True Then s=s & vbTab                                    End If                                ElseIf f=True Then                            If j<=LineWidth Then                                If j<LineWidth Then                                    If f=True Then w=vbTab & w                            Else                                Do                                    If a.AddValue(Left(w,LineWidth))<>True Then                            End If                            If a.AddValue(AdjustCurrentLine(w,LineWidth,AlignType))<>True Then                    Else ' конец следующего слова                        If j<LineWidth Then                            If f=True Then s=s & vbTab & w Else s=s & asSpaceChar & w                            If c=9 Then f=True Else f=False                            Exit Do                        ElseIf j=LineWidth Then                            If f=True Then s=s & vbTab & w Else s=s & asSpaceChar & w                            If c=9 Then t=True Else t=False                            f=False                            If a.AddValue(AdjustCurrentLine(s,LineWidth,AlignType))<>True Then                                AddErrorString "Ошибка добавления строки в массив"                        Else ' если размер оказался больше                            j=Len(s) ' получаем размер остатка строки                            If j<LineWidth Then                                If t=True Then                                    s=vbTab & s                                    If j+1<LineWidth Then                                        If f=True Then s=s & vbTab                                    End If                                ElseIf f=True Then                            If c=9 Then f=True Else f=False                            j=Len(w)                            If j>LineWidth Then                                t=False                                Do                                    If a.AddValue(Left(w,LineWidth))<>True Then                            End If                            If j=LineWidth Then                                If c=9 Then t=True Else t=False                                If a.AddLine(w,LineWidth,AlignType)<>True Then                                    AddErrorString "Ошибка добавления строки в массив"    Loop    ' теперь преобразование данной строки закончилось и остались хвосты    If r=asNewLine Then ' ничего добавить нельзя    ElseIf r=asLineBegin Then' нужно добавить пустую строку        If a.AddValue(asEmptyLine)<>True Then            AddErrorString "Ошибка добавления строки в массив"    ElseIf r=asFirstWord Then ' первое слово        j=Len(w)        If j>LineWidth Then            t=False            Do                If a.AddValue(Left(w,LineWidth))<>True Then            Loop While j>LineWidth        ElseIf j<LineWidth Then            If t=True Then w=vbTab & w        End If        If a.AddValue(AdjustCurrentLine(w,LineWidth,AlignType))<>True Then    ElseIf r=asWordSpace Then        j=Len(s)        If j<LineWidth Then            If t=True Then                s=vbTab & s                If j+1<LineWidth Then                    If f=True Then s=s & vbTab                End If            ElseIf f=True Then    ElseIf r=asNextWord Then        j=Len(s)+Len(w)+1        If j>LineWidth Then            j=Len(s)            If j<LineWidth Then                If t=True Then                    s=vbTab & s                    If j+1<LineWidth Then                        If f=True Then s=s & vbTab                    End If                ElseIf f=True Then            If j>LineWidth Then                Do                    If a.AddValue(Left(w,LineWidth))<>True Then                Loop While j>LineWidth            ElseIf j<LineWidth Then                If f=True Then w=vbTab & w            End If            If a.AddValue(AdjustCurrentLine(w,LineWidth,AlignType))<>True Then        Else            If f=True Then s=s & vbtab & w Else s=s & asSpaceChar & w            j=Len(s)            If j<LineWidth Then                If t=True Then s=vbTab & s            End If            If a.AddValue(AdjustCurrentLine(s,LineWidth,AlignType))<>True Then '============================================================================== ' данная функция подготавливает и формирует ошибку форматирования строки Sub OutFormatStringError(PointerToResult,ErrorInformation)    If VarType(PointerToResult)=vbBoolean Then
#18 by ChMikle
Теперь при снятии x-отчетов и z-отчетов ленту не отрезает , был нефискализированный отрезал, фмскализированли не отрезает .... в чем может быть проблема?
#19 by Torquader
Есть там такая опция (в таблице настройки внутри ФР) - отрезка после завершения чека - если в таблице 0, то и не отрезает.
#20 by ChMikle
Чек режет , не режет после отчетов
#21 by NS
У меня тоже не режет - режу принудитльно командой.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С