====== Настройка использования подписи ====== //Документация актуальна для старых химчисток или если потребуется добавить дополнительные подписи в квитанцию.// * Добавление подписи в квитанцию когда местоположение подписи не меняется: https://disk.yandex.ru/i/dfB3xjz4W0-qZA Для вывода подписи размещаем в квитанции элемент **TfrxPictureView** (Объект «**Рисунок**»), настраиваем его размеры (электронная подпись будет рисоваться пропорционально в тех размерах, которые будут у этого элемента) и убираем через нажатие правой кнопкой мыши на добавленном элементе «**Рисунок**» свойство «**Видимый**» (**Visible**), свойство «**Печатаемый**» (**Printable**) при этом должен быть активным. Также необходимо у этого элемента выставить значение для свойства «**Tag**», для подписи клиента это «**666**», для подписи пользователя «**667**» – так программа поймет, что за подпись нужно вставить именно в этот объект. Если вам нужны обе подписи, то для каждой нужно добавить свой **TfrxPictureView** (Объект «**Рисунок**») с тегами «**666**» и «**667**» соответственно (в нашем примере тег «**666**» имеет объект с именем «**Picture3**», а «**Picture4**» имеет тег «**667**»). {{:Podpisʹ_docx_2020-05-18_14-02-46_img1.png?623x538}} Кроме этого, в запросе формы «**RepHeader**» нужно вывести поле «**dr.status_id**», оно отвечает за определение статуса заказа и пригодится нам в работе. Учитывайте, что её нужно разместить после слова «**Select**» и до строки «**from docs_order dr**», если вы добавляете его новой строкой в начале или где-нибудь в середине текста, то после него должна стоять запятая как на скриншоте, если вы добавляете его в конце перед строкой «**from docs_order dr**», то запятая не нужна. {{:Podpisʹ_docx_2020-05-18_14-02-46_img2.png?623x472}} На примере строки «**Заказ принял: %%__%%%%__%%%%__%%%%__%%%%__%%%%__%%/[zRepOwner."DESCRIPTION"]**» рассмотрим подробно настройку подписи. Для начала на вкладке «Код» добавим переменную «**zakaz_new**» для нашей подписи в блоке между словом «**var**» и первой «**function**», переменную можно назвать как угодно используя латинские символы, вместо пробела использовать знак нижнего подчёркивания «**_**», главное чтобы её название не совпадало с другими уже имеющимся переменными. Кроме этого, для переменной нужно обозначить тип данных «string» поставив перед типом двоеточие «**:**», в итоге должна получиться строка вида: «**zakaz_new: string;**», строка обязательно должна находиться отдельно как на скриншоте ниже. Если вам понадобится добавить переменные для нескольких строк с подписями, то используете запятую «**,**» между ними, например: «**add, rel_tvr, sms_text: string;**». {{:Podpisʹ_docx_2020-05-18_14-02-46_img3.png?623x759}} Далее, находим поле «**Заказ принял: %%__%%%%__%%%%__%%%%__%%%%__%%%%__%%/[zRepOwner."DESCRIPTION"]**» на вкладке «**Page1**», оно обычно имеет название «**TfrxMemoView**» (Объект «**Memo**»), нам нужно его удалить и заменить на компонент «**TfrxRichView**» (Объект «**RichText**», в нашем примере он был добавлен с именем «**Rich3**») в который мы прописываем текст который ранее содержал удалённый объект «Memo» либо название созданной переменной в квадратных скобках в виде: «**[zakaz_new]**» с учётом использования предыдущего шрифта и его размера. {{:Podpisʹ_docx_2020-05-18_14-02-46_img4.png?623x516}} Далее, нажав на созданный ранее объект «**RichText**» мы переходим на вкладку «События» слева и двойным нажатием выбираем «**OnBeforePrint**». В промежуток между «begin» и «end;» созданного события вставляем следующий текст:   //zakaz_new := 'Заказ принял: %%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%% / ' + ;\\   if =1 then\\     AddPicInRTF(zakaz_new, Picture4, Rich3, '%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%')\\   else\\     AddPicInRTF(zakaz_new, Picture4, Rich3, '%%__%%%%__%%%%__%%%%__%%%%__%%+%%__%%%%__%%%%__%%%%__%%')// Данный запрос в расшифровке на человечески значит: переменная «zakaz_new» имеет текст «**Заказ принял: %%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%% /**» с добавлением ФИО пользователя. Если статус заказа новый, то в переменную «**zakaz_new**» будет добавлена подпись из «Picture1» в созданный объект «**Rich3**» заменяя текст «%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%», в ином случае будет заменён текст с «%%__%%%%__%%%%__%%%%__%%%%__%%+%%__%%%%__%%%%__%%%%__%%». Если проще: если заказ новый, то подпись будет вставлена, если нет, то подписи не будет. Важно чтобы текст заменяемый полностью соответствовал тексту в строке «**AddPicInRTF**», иначе подпись не будет выставлена. Если Вам нужно чтобы подпись выводилась всегда, если она есть, то данный текст нужно будет укоротить до следующего: //  zakaz_new := 'Заказ принял: %%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%% / ' + ;\\   AddPicInRTF(zakaz_new, Picture4, Rich3, '%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%')// Пример получившегося кода можно увидеть ниже. {{:Podpisʹ_docx_2020-05-18_14-02-46_img5.png?623x577}} После этого если вы сохраните квитанцию, запустите модуль «Агбис Химчистка» и укажете для пользователя подпись, то при следующей принятии подписи у вас на добавленном поле появится эта самая подпись. Подпись приемщика необходимо предварительно записать с помощью модуля Агбис Подпись в карточке пользователя на вкладке «**Дополнительно**» (версия химчистки не ниже 3.3.0.2424) Остальные методы замены: ==== Подпись в тексте о согласии на получение смс. ====            Добавляем подходящий объект TfrxPictureView с тегом 666. Заменяем имеющийся объект TfrxMemoView (Memo) на TfrxRichView и создаем событие OnBeforePrint (Переключаемся на вкладку События, двойным кликом напротив OnBeforePrint переходим в код). Добавляем проверку на статус заказа и добавление подписи в этот RichView: //  if =1 then\\        AddPicInRTF(sms_text, Picture2, Rich4, '%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%')\\   else\\         AddPicInRTF(sms_text, Picture2, Rich4, '%%__%%%%__%%%%__%%%%__%%_+%%__%%%%__%%%%__%%%%__%%_')//            Затем в коде квитанции находим проверку на согласие на получение смс, копируем из текста символы подчеркивания и заменяем в коде выше (количество символов подчеркивания должно совпасть). ==== Подпись клиента в согласии на условия договора. ====            Аналогично с п.3 проводим манипуляции. При этом еще один объект PictureView с тегом 666 можно не создавать, если количество символов подчеркивания совпадает. Создаем новую текстовую переменную, которая будет содержать текст с подстановкой подписи. И аналогично пишем добавление подписи в этот RichView. Например: //  new_text2 := 'С УСЛОВИЯМИ ДОГОВОРА ОЗНАКОМЛЕН И СОГЛАСЕН %%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%% / ' + ;\\   if =1 then\\     AddPicInRTF(new_text2, Picture2, Rich5, '%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%')\\   else\\     AddPicInRTF(new_text2, Picture2, Rich5, '%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%_+%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%_');// ==== Подпись клиента при выдаче заказа. ====            Действия аналогичные п.4, но в проверке статуса заказа меняем местами условия добавления подписи. Этим мы добиваемся того, что подпись внизу подставляется только если заказ выдается. Пример кода: //  new_text := 'Заказ № ' + + ' получил ' + DateTimeToStr( ) + ', претензий к качеству работы не имею%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%% / ' + ;\\   if =1 then\\     AddPicInRTF(new_text, Picture2, Rich3, '%%__%%%%__%%%%__%%%%__%%_+%%__%%%%__%%%%__%%%%__%%_')\\   else\\     AddPicInRTF(new_text, Picture2, Rich3, '%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%')// ==== Подпись пользователя, выдающего заказ. ====             Используем тот же TfrxPictureView с тегом 667.  В коде условия подстановки подписи меняем местами строки: //%%//%%если статус не новый, печатаем квитанцию на выдачу\\   zakaz_vidan := 'Заказ выдал: %%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%%%%__%% / ' + VarToStr(CurrentUser);\\   if =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) and (=1)) then// //            DefectsStr:= DefectsStr + '%%__%%%%__%%%%__%%%%__%%%%__%%'+';';//             Данный код необходимо помещать туда, где выбирается, выводится ли этот доп. реквизит на печать. Например, в Квитанции БСО команда размещается в конце проверки значений доп.реквизита на заполненность (if <> '').             В примере указан сразу вариант в котором мы будем вставлять подпись в доп.реквизит только при создании заказа, проанализировав статус заказа.             3. Необходимо на месте, забронированном под подпись, нарисовать саму подпись. Для этого в процедуре «**OnBeforePrint**» компонента «**TfrxSubdetailData**», в котором находится наш «**TfrxRichView**», выполнить следующий код: //            if =1 then// //            AddPicInRTF(DefectsStr, PictureName, RichName, '%%__%%%%__%%%%__%%%%__%%%%__%%');// где «**DefectsStr**» – значение доп.реквизита, в котором мы забронировали место под подпись, «**PictureName**» – наш созданный «**TfrxPictureView**», у которого размер соизмерим с количеством нижних подчеркиваний, «**RichName**» – непосредственно наш «**TfrxRichView**», в котором мы будем выводить значение доп. реквизита и рисовать подпись.             Процедура «**AddPicInRTF**» берет текст в который необходимо интегрировать подпись, ищет указанное место '%%__%%%%__%%%%__%%%%__%%%%__%%', берет размеры картинки из параметра «**PictureName**» генерирует RTF текст и вставляет его в компонент «**RichName**». При возникновении ошибки «**Неопределенный идентификатор: 'AddPicInRTF'**» необходимо проверить версию Меты (должна быть последней).             Эту процедуру можно использовать не только для поиска мест для подписи в доп.реквизитах, но и для поиска места подписи в любых других текстовых элементах.             В конце проделанной работы возможно потребуется отредактировать текст вставляемый в «**RichName**», (возможно в нем будут html теги которые понимал старый компонент «**TfrxMemoView**»). Для этого на вкладке Код внутри квитанции необходимо удалить все теги форматирования для «**DefectsStr**»: ,,,.