Настройка использования подписи

Документация актуальна для старых химчисток или если потребуется добавить дополнительные подписи в квитанцию.

Для вывода подписи размещаем в квитанции элемент TfrxPictureView (Объект «Рисунок»), настраиваем его размеры (электронная подпись будет рисоваться пропорционально в тех размерах, которые будут у этого элемента) и убираем через нажатие правой кнопкой мыши на добавленном элементе «Рисунок» свойство «Видимый» (Visible), свойство «Печатаемый» (Printable) при этом должен быть активным. Также необходимо у этого элемента выставить значение для свойства «Tag», для подписи клиента это «666», для подписи пользователя «667» – так программа поймет, что за подпись нужно вставить именно в этот объект.

Если вам нужны обе подписи, то для каждой нужно добавить свой TfrxPictureView (Объект «Рисунок») с тегами «666» и «667» соответственно (в нашем примере тег «666» имеет объект с именем «Picture3», а «Picture4» имеет тег «667»).

Кроме этого, в запросе формы «RepHeader» нужно вывести поле «dr.status_id», оно отвечает за определение статуса заказа и пригодится нам в работе. Учитывайте, что её нужно разместить после слова «Select» и до строки «from docs_order dr», если вы добавляете его новой строкой в начале или где-нибудь в середине текста, то после него должна стоять запятая как на скриншоте, если вы добавляете его в конце перед строкой «from docs_order dr», то запятая не нужна.

На примере строки «Заказ принял: ____________/[zRepOwner.«DESCRIPTION»]» рассмотрим подробно настройку подписи.

Для начала на вкладке «Код» добавим переменную «zakaz_new» для нашей подписи в блоке между словом «var» и первой «function», переменную можно назвать как угодно используя латинские символы, вместо пробела использовать знак нижнего подчёркивания «_», главное чтобы её название не совпадало с другими уже имеющимся переменными. Кроме этого, для переменной нужно обозначить тип данных «string» поставив перед типом двоеточие «:», в итоге должна получиться строка вида: «zakaz_new: string;», строка обязательно должна находиться отдельно как на скриншоте ниже.

Если вам понадобится добавить переменные для нескольких строк с подписями, то используете запятую «,» между ними, например: «add, rel_tvr, sms_text: string;».

Далее, находим поле «Заказ принял: ____________/[zRepOwner.«DESCRIPTION»]» на вкладке «Page1», оно обычно имеет название «TfrxMemoView» (Объект «Memo»), нам нужно его удалить и заменить на компонент «TfrxRichView» (Объект «RichText», в нашем примере он был добавлен с именем «Rich3») в который мы прописываем текст который ранее содержал удалённый объект «Memo» либо название созданной переменной в квадратных скобках в виде: «[zakaz_new]» с учётом использования предыдущего шрифта и его размера.

Далее, нажав на созданный ранее объект «RichText» мы переходим на вкладку «События» слева и двойным нажатием выбираем «OnBeforePrint». В промежуток между «begin» и «end;» созданного события вставляем следующий текст:

  zakaz_new := 'Заказ принял: __________________ / ' + <zRepOwner.«DESCRIPTION»>;
  if <zRepHeader.«STATUS_ID»>=1 then
    AddPicInRTF(zakaz_new, Picture4, Rich3, '__________________')
  else
    AddPicInRTF(zakaz_new, Picture4, Rich3, '__________+________')

Данный запрос в расшифровке на человечески значит: переменная «zakaz_new» имеет текст «Заказ принял: __________________ /» с добавлением ФИО пользователя.

Если статус заказа новый, то в переменную «zakaz_new» будет добавлена подпись из «Picture1» в созданный объект «Rich3» заменяя текст «__________________», в ином случае будет заменён текст с «__________+________». Если проще: если заказ новый, то подпись будет вставлена, если нет, то подписи не будет.

Важно чтобы текст заменяемый полностью соответствовал тексту в строке «AddPicInRTF», иначе подпись не будет выставлена.

Если Вам нужно чтобы подпись выводилась всегда, если она есть, то данный текст нужно будет укоротить до следующего:

  zakaz_new := 'Заказ принял: __________________ / ' + <zRepOwner.«DESCRIPTION»>;
  AddPicInRTF(zakaz_new, Picture4, Rich3, '__________________')

Пример получившегося кода можно увидеть ниже.

После этого если вы сохраните квитанцию, запустите модуль «Агбис Химчистка» и укажете для пользователя подпись, то при следующей принятии подписи у вас на добавленном поле появится эта самая подпись.

Подпись приемщика необходимо предварительно записать с помощью модуля Агбис Подпись в карточке пользователя на вкладке «Дополнительно» (версия химчистки не ниже 3.3.0.2424)

Остальные методы замены:

Подпись в тексте о согласии на получение смс.

           Добавляем подходящий объект TfrxPictureView с тегом 666. Заменяем имеющийся объект TfrxMemoView (Memo) на TfrxRichView и создаем событие OnBeforePrint (Переключаемся на вкладку События, двойным кликом напротив OnBeforePrint переходим в код). Добавляем проверку на статус заказа и добавление подписи в этот RichView:

  if <zRepHeader.«STATUS_ID»>=1 then
       AddPicInRTF(sms_text, Picture2, Rich4, '__________________')
  else
        AddPicInRTF(sms_text, Picture2, Rich4, '_________+_________')

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

Подпись клиента в согласии на условия договора.

           Аналогично с п.3 проводим манипуляции. При этом еще один объект PictureView с тегом 666 можно не создавать, если количество символов подчеркивания совпадает. Создаем новую текстовую переменную, которая будет содержать текст с подстановкой подписи. И аналогично пишем добавление подписи в этот RichView. Например:

  new_text2 := 'С УСЛОВИЯМИ ДОГОВОРА ОЗНАКОМЛЕН И СОГЛАСЕН __________________ / ' + <zRepHeader.«NAME»>;
  if <zRepHeader.«STATUS_ID»>=1 then
    AddPicInRTF(new_text2, Picture2, Rich5, '__________________')
  else
    AddPicInRTF(new_text2, Picture2, Rich5, '_____________+_______________');

Подпись клиента при выдаче заказа.

           Действия аналогичные п.4, но в проверке статуса заказа меняем местами условия добавления подписи. Этим мы добиваемся того, что подпись внизу подставляется только если заказ выдается. Пример кода:

  new_text := 'Заказ № ' + <zRepHeader.«DOC_NUM»> + ' получил ' + DateTimeToStr( <zRepHeader.«DATE_OUT_FACT»>) + ', претензий к качеству работы не имею__________________ / ' + <zRepHeader.«NAME»>;
  if <zRepHeader.«STATUS_ID»>=1 then
    AddPicInRTF(new_text, Picture2, Rich3, '_________+_________')
  else
    AddPicInRTF(new_text, Picture2, Rich3, '__________________')

Подпись пользователя, выдающего заказ.

            Используем тот же TfrxPictureView с тегом 667.  В коде условия подстановки подписи меняем местами строки:

//если статус не новый, печатаем квитанцию на выдачу
  zakaz_vidan := 'Заказ выдал: __________________ / ' + VarToStr(CurrentUser);
  if <zRepHeader.«STATUS_ID»>=1 then
    AddPicInRTF(zakaz_vidan, Picture1, Rich6, '_________+_________')
  else
    AddPicInRTF(zakaz_vidan, Picture1, Rich6, '__________________')

где «CurrentUser» — это авторизованный в химчистке пользователь. Предпросмотр в Мете текущего пользователя увидеть не позволяет, поэтому тестирование необходимо провести в программе Агбис Химчистка.

Подпись вставляем в текст доп.реквизита в конце.

            Для этого у доп.реквизита необходимо выставить галочку «Запрашивать подпись» которая находится на вкладке дополнительно. В самом доп.реквизите не должно быть текста вида «_____», иначе подпись автоматически подставится в каждый подобный реквизит.

            Аналогично первому случаю создаем элемент «TfrxPictureView» ( Объект «Рисунок»), в который будем вставлять электронную подпись. Выставляем размеры таким образом, чтоб подпись красиво смотрелась по высоте во встраиваемом тексте (не забываем про Tag=666). Но у этого компонента выставляем свойство «Visible» в значение «False» (нам не надо в него вставлять подпись, он используется только для задания размера подпись которая будет интегрирована в текст доп.реквизитов). Можно расположить само изображение между бэндами.

            Далее мы должны разместить в квитанцию компонент типа «TfrxRichView» (Объект «RichText»). Вероятнее всего его нет т.к. обычно мы используем для вывода доп.реквизитов компонент «TfrxMemoView». Если это так, то мы создаем точно такой же компонент «TfrxRichView» на том же месте с теми-же размерами. Обычно такой компонент находится в «TfrxSubdetailData» у которого не задан источник данных).

            Теперь идем по пунктам:            

            1. Необходимо передать в квитанцию значение параметра доп.реквизит «Запрашивать подпись». Для этого в запрос (он может называться «RepDefects») нужно добавить поле «need_sign» из таблицы «addon_types». Скорее всего таблица «addon_types adt» уже подключена и нам необходимо в конец добавить поле «adt.need_sign». Главное проверить чтобы запрос не был поломан, например, его провести в «IBExpert», ошибок компиляции быть не должно.

            2. Текстовое представление значений всех доп.реквизитов вероятнее всего в наш старый компонент «TfrxMemoView» вставлялось из глобальной переменной «DefectsStr». Значение переменной заполняется в процедуре «OnBeforePrint» компонента «TfrxSubdetailData» у которого в качестве источника данных указан запрос возвращающий текстовое представление доп.реквизитов. В этой процедуре нам необходимо проанализировать значение нашей новой переменной «need_sign» и, если оно истинно, вручную к этой переменной добавить несколько нижних подчеркиваний (например 10 штук):

            if 1) then

            DefectsStr:= DefectsStr + '__________'+';';

            Данный код необходимо помещать туда, где выбирается, выводится ли этот доп. реквизит на печать. Например, в Квитанции БСО команда размещается в конце проверки значений доп.реквизита на заполненность (if <zRepDefects.«DVALUES»> <> '').

            В примере указан сразу вариант в котором мы будем вставлять подпись в доп.реквизит только при создании заказа, проанализировав статус заказа.

            3. Необходимо на месте, забронированном под подпись, нарисовать саму подпись. Для этого в процедуре «OnBeforePrint» компонента «TfrxSubdetailData», в котором находится наш «TfrxRichView», выполнить следующий код:

            if <zRepHeader.«STATUS_ID»>=1 then

            AddPicInRTF(DefectsStr, PictureName, RichName, '__________');

где «DefectsStr» – значение доп.реквизита, в котором мы забронировали место под подпись, «PictureName» – наш созданный «TfrxPictureView», у которого размер соизмерим с количеством нижних подчеркиваний, «RichName» – непосредственно наш «TfrxRichView», в котором мы будем выводить значение доп. реквизита и рисовать подпись.

            Процедура «AddPicInRTF» берет текст в который необходимо интегрировать подпись, ищет указанное место '__________', берет размеры картинки из параметра «PictureName» генерирует RTF текст и вставляет его в компонент «RichName». При возникновении ошибки «Неопределенный идентификатор: 'AddPicInRTF'» необходимо проверить версию Меты (должна быть последней).

            Эту процедуру можно использовать не только для поиска мест для подписи в доп.реквизитах, но и для поиска места подписи в любых других текстовых элементах.

            В конце проделанной работы возможно потребуется отредактировать текст вставляемый в «RichName», (возможно в нем будут html теги которые понимал старый компонент «TfrxMemoView»). Для этого на вкладке Код внутри квитанции необходимо удалить все теги форматирования для «DefectsStr»: <i>,</i>,<b>,</b>.

1)
<zRepDefects.«NEED_SIGN»> = 1) and (<zRepHeader.«STATUS_ID»>=1