Ошибка вызова метода библиотеки sbrfcom неверное количество параметров

Ошибки при подключении эквайринга от Сбербанка к 1С 8: Недостаточно фактических параметров; Ошибка эквайринговой системы 4309

Описание ошибки:
При подключении пинпада Verifone VX820 от Сбербанка и при попытке осуществить платеж возникает ошибка в 1С: Управление торговлей 10.3.13 на платформе 1С: Предприятие 8 версии 8.3:
{Внешняя Обработка.СберБанкЭквайринговаяСистема.МодульОбъекта(365)}: Недостаточно фактических параметров

Найденные решения:

В данном случае, если немного углубиться в анатомию ошибки по описанию, становится понятно, что обработка, установленная в 1С (по умолчанию это SberBankES_v2.epf) и обеспечивающая работу с банковским терминалом, отвечающим за эквайринг, обращается к dll-компоненте банка и передает в нее меньше параметров, чем требуется для работы компоненты. Поэтому необходимо запросить у банка версию файла SBRFCOM.dll, поддерживающую работу с 3-мя параметрами. По умолчаню у банка может быть компонента, в которую должно передаваться 7 параметров. Специалисты банка комментируют тем, что в с более новыми версиями 1С работает компонента, в которую передается 7-ми параметров, а а более старые работают на версии, поддерживающей передачу всего лишь 3-х параметров.

В принципе на этом проблема должна решиться. Но в моей практике даже после замены на правильную версию dll-файла, работа с эквайринговой системой пинпада Verifone VX820 не была обеспечена по причине возникновения новой ошибки: 

Ошибка эквайринговой системы 4309

Перебор более ранних версий ПО и dll-файлов от банка не привел ни к каким результатам. Но по совершенной случайности было решено на крайний случай сделать сброс временных файлов, связанных с базой, что делается за счет удаления и добавления базы в список базы окна запуска 1С: Предприяите 8. Особенно к этому подтолкнул тот факт, что до переустановки ПО банка вместе со сменой пинпада, после которого и возникла начальная ошибка, предущий пинпад Verifone VX810 все таки работал с 1С без особых нареканий. В результате очистки временных файлов базы посредством, как уже было замечено, удаления базы из списка и баз и повторного добавления немного под другим имененем, ошибка, можно сказать, чудесным образом пропала и работа с эквайринговой системой Сбербанка была полностью восстановлена.

Оцените, помогло ли Вам предоставленное описание решения ошибки?




© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

04-09-2016

Журавлев А.С.
(www.azhur-c.ru)

Опубликовал | Дата 1 июня, 2011

Сегодня разбирался, как подключить систему оплаты по международным банковским картам к 1С, точнее, как подключить эквайринговую систему Сбербанка к УТ 8.1.

Попробую описать этот процесс по шагам:

1. нужно получить у работников сбербанка следующие файлы:

  • SB_KERNEL.DLL
  • GATE.DLL
  • SBRFCOM.dll
  • LOADPARM.EXE
  • RRDK.R
  • R003.R
  • PARAMS.TLV

2. Скопировать их в каталог «C:Program Files1cv81bin» и зарегистрировать библиотеку SBRFCom.dll с помощью команды (regsvr32 «C:Program Files1cv81binSBRFCOM.DLL»).

3. Подключить терминал считывания карт через USB или COM порт.

4. Выполнить загрузку настроечных параметров библиотеки. Для этого запустить программу LOADPARM.EXE:

terminal07

зайти в меню «Служебные операции Настройки Техобслуживание Пароль ………… Загрузка параметров», выбрать файл PARAMS.TLV и дождаться окончания загрузки (пароль вам должен сказать работник банка).

5. Открываем УТ. Далее, открываем пункт меню: «СервисТорговое оборудованиеПомощник подключения и настройки торгового оборудования». Нажимаем далее:

terminal01

Выбираем пункт «Эквайринговая система» и нажимаем «Далее».

terminal02

Здесь выбираем СБ РФ «Эквайринговая система» и нажимаем «Далее».

Если здесь нет этого пункта, можно попробовать загрузить его вручную. Здесь же выбираем пункт «Добавить новую обработку обслуживания», выбираем каталог «C:Program Files1cv81tmplts1ctrade10_3_7_9TradeWareEpf» (у вас вместо «10_3_7_9» будет номер версии последнего обновления УТ 8.1). Нажимаем получить список и если нужная обработка в этом каталоге есть — то появиться  нужный нам пункт «СБ РФ «Эквайринговая система». Файл обработки называется SberBankES_v2.epf.

Если все сделано верно, должно появиться окно Настройки параметров Эквайринговой системы:

terminal03

При этом, может выдаваться ошибка говорящая о невозможности проверки версии драйвера. Это нормально, т.к. в программном коде написано, что пока такая проверка не реализовано в драйвере:

terminal04

Нажимаем «ОК» и

terminal05

Установка завершена. Больше ничего устанавливать не надо, поэтому нажимаем «Нет».

Теперь проверим, как это работает. Заходим в меню  «СервисТорговое оборудованиеУправление Эквайринговой системой»:

terminal06

Нажимаем кнопку «Оплатить картой», вводим сумму в появившемся окне и нажимаем «Оплату платежа».  После чего система попросит вставить карту в терминал для чтения карт. Естественно, что терминал должн быть подключен. Кроме того, обязательно должен быть подключен Фискальный регистратор. Иначе система работать не будет.


SBRFCOM.dll ILanguageExtender вызов метода

От:

pumpurumer

 
Дата:  12.05.12 08:05
Оценка:

Есть компонента для интеграции с эквайриноговой системой сбербанка.
В ней реализован интерфейс ILanguageExtender (Эта компонента для интеграции с 1с).
Все методы из компаненты предлогается вызывать через этот интерфейс, все хорошо только у меня это не получается.
Пробовал так:

var cl = new SBRFCOMLib.SBRFCOMClass();

object res = null;
Array ps = Array.CreateInstance(typeof(object), 3);
ps.SetValue(123, 0);
ps.SetValue(null, 1);
ps.SetValue(null, 2);

cl.CallAsFunc(0, ref res, ref ps);

Выдает AccessViolationException, {«Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.»}
Пробывал в различных вариантах ps и res

Нашел упоминание про тип OleVariant

Описание метода:

public virtual void CallAsFunc(int lMethodNum, ref object pvarRetValue, ref Array paParams);

Описание метода на C# из своей внешней компоненты:

public void CallAsFunc(int methodNum, [MarshalAs(UnmanagedType.Struct)] ref object retValue, [MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_VARIANT)] ref object[] pParams)


Re: SBRFCOM.dll ILanguageExtender вызов метода

От:

HowardLovekraft

 
Дата:  12.05.12 11:16
Оценка:

Здравствуйте, pumpurumer, Вы писали:

P>skipped

У Сбербанка есть SBRF.dll, которая содержит в себе Automation-обертку над их нативным API. ProgId обертки — «SBRFSRV.Server».
Зачем эти анальные страдания через ILanguageExtender, когда можно работать через относительно человеческий IDispatch?

От:

HowardLovekraft

 
Дата:  12.05.12 11:20
Оценка:

Дополнение.
Эта SBRF.dll входит в сбербанковский SB Pilot (это то, что работает с пинпадом).

От:

pumpurumer

 
Дата:  12.05.12 11:54
Оценка:

Здравствуйте, HowardLovekraft, Вы писали:

HL>Дополнение.

HL>Эта SBRF.dll входит в сбербанковский SB Pilot (это то, что работает с пинпадом).

Подключил SBRFSRV.Server

public interface IServer
    {
        [DispId(4)]
        void Clear();
        [DispId(3)]
        object GParam(string Name);
        [DispId(5)]
        string GParamString(string Name);
        [DispId(1)]
        int NFun(int func);
        [DispId(2)]
        void SParam(string Name, object Value);
    }

Как с этим работать? Я так предполагаю в стринговые параметры какие-то специально сформированные запросы? тогда где взять документацию.

От:

HowardLovekraft

 
Дата:  12.05.12 12:12
Оценка:

Здравствуйте, pumpurumer, Вы писали:

P>Как с этим работать?

Ну, вообще, они должны были ее предоставить. Там ничего сверхсекретного нет…
В принципе, я могу выложить примеры кода для тех операций, которые реализовывал (продажа, возврат, закрытие дня).
Только я это делал задолго до появления dynamic, поэтому там будет не очень красивое позднее связывание на шарпе.

От:

pumpurumer

 
Дата:  12.05.12 12:38
Оценка:

Здравствуйте, HowardLovekraft, Вы писали:

HL>Здравствуйте, pumpurumer, Вы писали:


P>>Как с этим работать?

HL>Ну, вообще, они должны были ее предоставить. Там ничего сверхсекретного нет…
HL>В принципе, я могу выложить примеры кода для тех операций, которые реализовывал (продажа, возврат, закрытие дня).
HL>Только я это делал задолго до появления dynamic, поэтому там будет не очень красивое позднее связывание на шарпе.

Выкладывайте. Буду очень сильно рад или на почту kdcs gavgav yandex.ru

От:

HowardLovekraft

 
Дата:  12.05.12 19:43
Оценка:

Здравствуйте, pumpurumer, Вы писали:

P>Выкладывайте

ОК, может быть, кому-нибудь еще пригодится.
Обертка над COM-объектом (сейчас бы я это переписал с использованием dynamic, было бы покрасивее):

Использование обертки.

I) Общая последовательность выполнения операций.

Операции выполняются в рамках «дня». Если ничего не поменяли, день — это 24 часа с момента выполнения первой операции (4000, 4002, 4003). Минимум раз в сутки нужно выполнить операцию 6000 и закрыть «день». SB Pilot это контролирует, и, если забыли, на очередную попытку выполнения финансовой операции вернет соответствующий код ошибки (и выдаст сообщение на экран пинпада).

II) Общая последовательность действий для выполнения какой-либо операции:

1) очистили внутренний буфер параметров с помощью метода Clear;
2) установили требуемые входные параметры операции через свойство-индексатор;
3) выполнили операцию с помощью метода Execute. Если он вернул 0, то операция выполнена успешно. Иначе возвращаемое значение — это код ошибки из спецификации SB Pilot;
4) прочитали нужные выходные параметры операции через свойство-индексатор.

III) Параметры (приведены наиболее значимые).

1) Входные.

Для операций 4000, 4002, 4003:

«Amount» — сумма операции в МДЕ (копейках), Int32.
«Track2» — данные второй дорожки магнитной полосы карты, если карта читается не на пинпаде, иначе параметр не задается, String.
«Department» — Int32. SB Pilot умеет выполнять транзакции для разных мерчантов (организаций) на одном пинпаде. Чтобы определить, для какого мерчанта будет выполняться транзакция, используется параметр «Department». Фактически, это — индекс в одном из списков в настройках SB Pilot. Первый мерчант (он должен быть всегда) имеет индекс 0.
«CardType» — тип карты, Int32. 0 — тип определяется автоматически пинпадом.

Для операций 4002 и 4003, по идее, еще нужен параметр «RRN» — ссылочный номер оригинальной операции (нужно проверить, не помню, вполне может работать и без него, Сбербанк — такой Сбербанк…).
Для операции 6000 входных параметров нет.

2) Выходные.

Для операций 4000, 4002, 4003:

«AuthCode» — код авторизации.
«TrxDate»/»TrxTime» — дата/время операции (по часам авторизационного хоста).
«ClientExpiryDate» — срок действия карты.
«ClientCard» — данные карты.
«TermNum» — номер терминала.
«CardName» — имя владельца карты.
«CardType» — тип карты
«RRN» — ссылочный номер.

Для операции 6000:

«TrxDate»/»TrxTime» — дата/время операции (по часам авторизационного хоста).
«TermNum» — номер терминала.

Пример:

Код выдран из рабочего решения (поудалял не относящееся к сути и атавизмы типа работы с платежной системой Сберкарт), могут быть мелкие неточности.

Еще стоит обратить внимание на различие операций 4002 и 4003 — если раньше не работали с решениями для эквайринга, это не очевидно: отмена снимает блокировку определенной суммы, заблокированной операцией с кодом 4000, делает это моментально, но только на всю сумму и только в течение текущего «дня». Возврат с точки зрения зачисления денег на счет клиента работает гораздо медленней (до нескольких дней), но позволяет возвращать за любой «день» и частями.

Это нужно учитывать при реализации бизнес-логики, работающей с эквайрингом: не стоит все возвратные (с т.з. вашего софта) действия реализовывать с помощью операции 4002 (возврат), вас проклянут.


Re[2]: SBRFCOM.dll ILanguageExtender вызов метода

От:

DarthSidius

 
Дата:  13.05.12 02:02
Оценка:

Здравствуйте, HowardLovekraft, Вы писали:

HL>Зачем эти анальные страдания через ILanguageExtender, когда можно работать через относительно человеческий IDispatch?

Одноэсина всегда понимала IDispatch. ILanguageExtender вобще нахрен не нужен — зачем этот деревянный велосипед?

… << RSDN@Home 1.2.0 alpha 5 rev. 1539>>

♠♠♥♠♠♦♥


Re[3]: SBRFCOM.dll ILanguageExtender вызов метода

От:

HowardLovekraft

 
Дата:  13.05.12 17:11
Оценка:

Здравствуйте, DarthSidius, Вы писали:

DS>Одноэсина всегда понимала IDispatch. ILanguageExtender вобще нахрен не нужен — зачем этот деревянный велосипед?

Не нужен, мне это доказывать не надо.
Но 1с считает его православным, кошерным и халяльным одновременно.
Видимо потому, что через IDispatch сложно реализовать поддержку наименований свойств и методов латиницей и кириллицей одновременно.

От:

pumpurumer

 
Дата:  15.05.12 10:03
Оценка:

Спасибо вам огромное!

Появился вопрос — откуда брать текст для чека? Чек транзакции я имею в виду.

От:

HowardLovekraft

 
Дата:  15.05.12 10:20
Оценка:

Здравствуйте, pumpurumer, Вы писали:

P>Появился вопрос — откуда брать текст для чека? Чек транзакции я имею в виду.

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

От:

pumpurumer

 
Дата:  15.05.12 13:55
Оценка:

Здравствуйте, HowardLovekraft, Вы писали:

HL>Здравствуйте, pumpurumer, Вы писали:


P>>Появился вопрос — откуда брать текст для чека? Чек транзакции я имею в виду.

HL>Либо печатать самому (все реквизиты для этого есть, в свое время так и делал), либо взять документацию и проверить возможность вытаскивания строк чека из выходных параметров операции. По второму варианту, я, к сожалению, вам ничего подсказать не смогу — нет доступа к документации.

Самостоятельно формат печати реализовали у себя.

Касательно документации на либу:
В сбербанке сказали писать официально письмо на имя управляюшего филиалом по региону, в котором подробно описывать суть проблемы и требуемую документацию — они предоставляют все что вы запросили.

sbrf.dll c# .net sbrfcom.dll эквайринг IDispatch

От:

pumpurumer

 
Дата:  28.02.13 19:26
Оценка:

Здравствуйте, pumpurumer, Вы писали:

P>Здравствуйте, HowardLovekraft, Вы писали:


HL>>Здравствуйте, pumpurumer, Вы писали:


P>>>Появился вопрос — откуда брать текст для чека? Чек транзакции я имею в виду.

HL>>Либо печатать самому (все реквизиты для этого есть, в свое время так и делал), либо взять документацию и проверить возможность вытаскивания строк чека из выходных параметров операции. По второму варианту, я, к сожалению, вам ничего подсказать не смогу — нет доступа к документации.

P>Самостоятельно формат печати реализовали у себя.


P>Касательно документации на либу:

P>В сбербанке сказали писать официально письмо на имя управляюшего филиалом по региону, в котором подробно описывать суть проблемы и требуемую документацию — они предоставляют все что вы запросили.

P>sbrf.dll c# .net sbrfcom.dll эквайринг IDispatch

Я получил документацию на библиотеку sbrf.dll sb_pilot.dll
Выкладываю.
Надеюсь кому-то пригодится.

http://files.rsdn.ru/76553/%d0%98%d0%bd%d1%82%d0%b5%d0%b3%d1%80%d0%b0%d1%86%d0%b8%d1%8f%20%d1%81%20%d0%9a%d0%9a%d0%9c%20%d1%87%d0%b5%d1%80%d0%b5%d0%b7%20%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d0%be%d1%82%d0%b5%d0%ba%d1%83%20PILOT_NT.rtf
http://files.rsdn.ru/76553/Short_ole_sbrf.rtf
http://files.rsdn.ru/76553/sb_pilot_linux.doc
http://files.rsdn.ru/76553/sb_pilot.doc
http://files.rsdn.ru/76553/ReadTrack2.doc
http://files.rsdn.ru/76553/ole_sbrf.rtf
http://files.rsdn.ru/76553/lib_win.rtf
http://files.rsdn.ru/76553/1C.doc

Подождите ...

Wait...

  • Переместить
  • Удалить
  • Выделить ветку

Пока на собственное сообщение не было ответов, его можно удалить.

Добрый день. Для эквайринга 1с потребовалось оплата одной покупки по двум разным фирмам. ЕСть ли возможность это осуществить через единственную операцию ввода пин-кода карты оплаты?

Обычно в магазине несколько раз вводишь пинкод. Иначе получается можно списать сколько угодно с карточки

Т.е. ввод пинкода дважды — нормальная практика?

Две фирмы — это две продажи, транзакции, а значит и два раза пин-код надо вводить.

Что значит: по двум фирмам? Сумма разбивается на две или одна и та же сумма проходит по двум фирмам?

Установка карты производится в один эквайринговый терминал, в который прописаны 2 организации.

Суммы разные. Т.е, допустим, хлеб, молоко по одному юр лицу, а алкоголь — по другому.

Тогда, должно быть два чека.

У вас в магазине 2 разные организации а касса одна? Как интересно. Может вам просто интеркампани нужна?

1 кассовый компьютер, 1 кассовое ПО, 2 фискальных регистратора, 1 терминал эквайринга Сбербанка на 2 юридических лица. Можно ли сделать так, чтобы клиент вводил пинкод 1 раз?

Вот аннотация к эквайрингу Сбербанка: «Компонент SBRFCOM.DLL для стыковки карточной библиотеки Сбербанка с 1С ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Для интеграции карточной библиотеки Сбербанка с системой 1С необходимо зарегистрировать в системе 1С компоненту SBRFCOM.DLL. Компонента эта содержит метод ОплатитьПлатежнойКартой и еще ряд вспомогательных методов. Первая версия компоненты SBRFCOM.DLL была очень простой, и в ней метод ОплатитьПлатежнойКартой имел всего 3 параметра: Сумма, КодRRN и КодАвторизации. Затем возникла необходимость расширить список параметров. В новой версии компонента SBRFCOM.DLL имела в методе ОплатитьПлатежнойКартой уже 7 параметров, и была очевидным образом несовместима с предыдущей версией.» Вот описание с 7-ю параметрами я не вижу. Какие 7 параметров передаются?

>>Т.е. ввод пинкода дважды — нормальная практика? Да, это нормальная практика, а как по другому? 2 фирмы, 2 разных счета, 2 продажи на разных ФР, 2 разных чека

Pin-код вводится в терминал оплаты и никуда больше не передаётся в открытом виде — терминал оплаты регистрируется на одну и только одну фирму. То есть, или использовать приём оплаты на одну фирму за другую (как агента по приёму платежей) или у вас будет два терминала и две фирмы — тогда клиент будет не только вводить два раза pin-код, но и вставлять карты в разные терминалы.

Тоже было бы интересно описание 7 параметров. У меня есть описание, где 3 параметра только. А у терминала два номера что ли?

В типовых нет, руками можно реализовать хоть +100500 фискальных чеков. Но учти, что один пин — одна транзакция. У тебя будет один слип-чек на кучу фискальных. Если это не проблема, то не вижу причин для сомнений.

+ Терминал привязан с одной организации. Эквайринговая выручка упадет на р/с этой фирмы. Гл.бух в курсе этого?

VeryFone 8x позволяет привязывать один терминал к двум разным организациям через отделы внутри терминала. Но придется направления денег разруливать через ПО. Хотя если не передавать отдел, то аппарат сам запросит номер отдела. И соответственно деньги упадут в правильную организацию.

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Не так давно потребовалось срочно реализовать эквайринг от Сбербанка в одно самописной конфигурации. За основу была взята соответствующая часть конфигурации «Библиотека подключаемого оборудования» от 1С, из которой я выкинул все лишнее. Отмечу, что «лишними» те или иные части кода были признаны исходя из особенностей задачи и моего субъективного мнения, то есть в Вашем случае это может быть не так.

Отдельно отмечу, что эквайринг — тема очень ответственная, ибо напрямую связана с деньгами (можно, например, продать товар и не взять за него денег), поэтому прошу быть предельно осторожными и не стесняться добавлять всевозможные проверки.

Ну и напоследок напомню, что все написанное ниже приводится в ознакомительных целях и использовать эту информацию Вы можете исключительно на свой страх и риск.

Содержание

  1. Регистрация и подключение библиотеки
  2. Вспомогательные функции SBRFCOM
  3. Основные функции SBRFCOM
  4. Сверка итогов

Регистрация и подключение библиотеки

Итак, для работы нам нужно зарегистрировать в системе две DLL-ки: SBRF.dll и SBRFCOM.dll. Библиотека SBRFCOM.dll бывает в двух вариантах: старый (3 параметра) и новый (7 параметров), нам естественно нужен новый.

Получить обе эти DLL-ки можно у того специально обученного человека из Сбербанка, который придет настраивать терминал. Регистрацию библиотек в системе обычно делает все тот же сотрудник Сбербанка, но если этого по какой-то причине не произошло, то библиотеки нужно зарегистрировать самостоятельно, из командной строки при помощи утилиты regsvr32 (командную строку запустите от имени администратора):

Регистрация SBRFCOM

Регистрация SBRFCOM

Подключение зарегистрированной библиотеки необходимо выполнить перед совершением каких-либо операций с эквайринговым терминалом, делается это примерно так:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

&НаКлиенте

Процедура Подключение(Команда)

ОбъектДрайвераАвторизатора = ПодключитьАвторизатор();

КонецПроцедуры

&НаКлиенте

Функция ПодключитьАвторизатор()

Попытка

ПодключитьВнешнююКомпоненту(«AddIn.SBRFCOMObject»);

ОбъектДрайвераАвторизатора = Новый («AddIn.SBRFCOMExtension»);

Исключение

ОбъектДрайвераАвторизатора = Неопределено;

Сообщить(«Ошибка при подключении авторизатора: «+ОписаниеОшибки());

КонецПопытки;

Возврат ОбъектДрайвераАвторизатора;

КонецФункции

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

Вспомогательные функции SBRFCOM

Общая схема работы с методами библиотеки SBRFCOM (кроме сверки итогов) такова:

  • Вызвали метод;
  • Если все хорошо, то получили и распечатали слип;
  • Если возникли проблемы — отменили операцию.

Вначале скажу несколько слов о слипе. Итак слип — это документ, который печатается в двух экземплярах (один клиенту, один организации) при осуществлении каких-либо операций с банковской картой. Печать слипа обязательна (хотя зачастую обходятся и без него), так как в случае каких-либо разногласий с банком эквайрером разбирательства начинаются с проверки наличия слипа по конкретной операции. Технически слип формируется самим терминалом (по крайней мере в нашем случае) или вручную. Если надумали формировать слип вручную, то в конфигурации «Библиотека подключаемого оборудования» имеется общий макет содержащий пример слипа.

Рассмотрим две служебные функции. Первая из них — «АварийнаяОтменаОперации», служит для отмены операции в том случае, когда при получении слипа возникли ошибки. О важности получения слипа говорилось выше.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

&НаКлиенте

Функция АварийнаяОтменаОперации(СуммаВРублях, СсылочныйНомер)

Результат = Истина;

Ошибка = Неопределено;

ОбъектДрайвераАвторизатора.ТипКарты = 0;

СуммаВременная = СуммаВРублях * 100;

Ответ = ОбъектДрайвераАвторизатора.ОтменитьПлатежПоПлатежнойКарте(СуммаВременная, СсылочныйНомер);

Если НЕ Ответ Тогда

ОбъектДрайвераАвторизатора.ПолучитьОшибку(Ошибка);

Результат = Ложь;

КонецЕсли;

Возврат Результат;

КонецФункции

Вторая функция получает строки слипа и формирует из них готовую к печати текст.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

&НаКлиенте

Функция ПолучитьСтрокиСлипЧека(СлипЧек)

Результат = Истина;

СлипЧек = «»;

Для Индекс = 1 По ОбъектДрайвераАвторизатора.КоличествоСтрокСлипЧека Цикл

СтрокаЧека = «»;

УспешноПолучено = ОбъектДрайвераАвторизатора.ПолучитьСтрокуСлипЧека(Индекс, СтрокаЧека);

Если УспешноПолучено Тогда

Если КодСимвола(СтрокаЧека) = 0 Тогда

СлипЧек = СлипЧек + «[cut]» + Символы.ПС + СтрокаЧека;

Иначе

СлипЧек = СлипЧек + СтрокаЧека + ?(Индекс = ОбъектДрайвераАвторизатора.КоличествоСтрокСлипЧека, «», Символ(13) + Символ(10));

КонецЕсли;

Иначе

Сообщить(«Ошибка при получении строк слип-чека»);

Результат = Ложь;

КонецЕсли;

КонецЦикла;

Если Результат Тогда

КопииСлипЧека = «»;

Для Индекс = 1 По ОбъектДрайвераАвторизатора.КоличествоКопийСлипЧека Цикл

КопииСлипЧека = КопииСлипЧека + СлипЧек + ?(Индекс = ОбъектДрайвераАвторизатора.КоличествоКопийСлипЧека, «», Символы.ПС + «[cut]» + Символы.ПС);

КонецЦикла;

СлипЧек = КопииСлипЧека;

КонецЕсли;

Возврат Результат;

КонецФункции

Основные функции SBRFCOM

Теперь приведем самую главную функцию — собственно оплата картой.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

&НаКлиенте

Функция ОплатитьКартой(СуммаВРублях)

Результат = Ложь;

СсылочныйНомер = Неопределено;

КодАвторизации = Неопределено;

КодХеш = Неопределено;

КартаСбербанка = Неопределено;

НазваниеКарты = Неопределено;

Ошибка = Неопределено;

ОбъектДрайвераАвторизатора.ТипКарты = 0;

СуммаВременная = СуммаВРублях * 100;

НомерКарты = «****************»;

Попытка

Ответ = ОбъектДрайвераАвторизатора.ОплатитьПлатежнойКартой(СуммаВременная, СсылочныйНомер, КодАвторизации, КодХеш, КартаСбербанка, НазваниеКарты, НомерКарты);

Исключение

Сообщить(«Ошибка при работе с библиотекой SBRFCOM:»+ОписаниеОшибки());

Возврат Результат;

КонецПопытки;

Если НЕ Ответ Тогда

ОбъектДрайвераАвторизатора.ПолучитьОшибку(Ошибка);

Иначе

СлипЧек = Неопределено;

Результат = ПолучитьСтрокиСлипЧека(СлипЧек);

Если Результат Тогда

//ПечатьТекста(СлипЧек);

Иначе

Сообщить(«Произошла ошибка. Аварийная отмена операции…»);

АварийнаяОтменаОперации(СуммаВРублях, СсылочныйНомер);

КонецЕсли;

КонецЕсли;

Возврат Результат;

КонецФункции

В случае успешного выполнения переменные, объявленные в начале функции, обретают осмысленные значения и было бы неплохо сохранить их каким-либо образом с привязкой к документу оплаты, эти данные потребуются для отмены или возврата платежа. Закомментированная строка вызывает функцию печати текста, реализация этой функции может быть различной.

Далее следует функция отмены платежа, она применяется для отмены платежа по платежной карте совершенного в этот же день (до сверки итогов).

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

&НаКлиенте

Функция ОтменитьОперацию(СуммаВРублях, СсылочныйНомер)

Результат = Истина;

Ошибка = Неопределено;

ОбъектДрайвераАвторизатора.ТипКарты = 0;

СуммаВременная = СуммаВРублях * 100;

Ответ = ОбъектДрайвераАвторизатора.ОтменитьПлатежПоПлатежнойКарте(СуммаВременная, СсылочныйНомер);

Если НЕ Ответ Тогда

ОбъектДрайвераАвторизатора.ПолучитьОшибку(Ошибка);

Результат = Ложь;

Иначе

СлипЧек = Неопределено;

Результат = ПолучитьСтрокиСлипЧека(СлипЧек);

Если Результат Тогда

//ПечатьТекста(СлипЧек);

Иначе

АварийнаяОтменаОперации(СуммаВРублях, СсылочныйНомер);

КонецЕсли;

КонецЕсли;

Возврат Результат;

КонецФункции

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

&НаКлиенте

Функция ВозвратПлатежа(СуммаВРублях, НомерКарты)

Результат = Ложь;

Ошибка = Неопределено;

СсылочныйНомер = Неопределено;

КодАвторизации = Неопределено;

КодХеш = Неопределено;

КартаСбербанка = Неопределено;

НазваниеКарты = Неопределено;

ОбъектДрайвераАвторизатора.ТипКарты = 0;

СуммаВременная = СуммаВРублях * 100;

Попытка

Ответ = ОбъектДрайвераАвторизатора.ВернутьПлатежПоПлатежнойКарте(СуммаВременная, СсылочныйНомер, КодАвторизации, КодХеш, КартаСбербанка, НазваниеКарты, НомерКарты);

Исключение

Сообщить(«Ошибка при работе с библиотекой SBRFCOM:»+ОписаниеОшибки());

Возврат Результат;

КонецПопытки;

Если НЕ Ответ Тогда

ОбъектДрайвераАвторизатора.ПолучитьОшибку(Ошибка);

Иначе

СлипЧек = Неопределено;

Результат = ПолучитьСтрокиСлипЧека(СлипЧек);

Если Результат Тогда

//ПечатьТекста(СлипЧек);

Иначе

Сообщить(«Произошла ошибка. Аварийная отмена операции…»);

АварийнаяОтменаОперации(СуммаВРублях, СсылочныйНомер);

КонецЕсли;

КонецЕсли;

Возврат Результат;

КонецФункции

Сверка итогов

Напоследок приведем функцию сверки итогов, ее необходимо выполнять по окончанию каждого рабочего дня. В этом случае деньги за текущий день будут перечислены на следующий день. Если же не выполнять сверку итогов, то деньги будут перечислены через два или три дня.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

&НаКлиенте

Функция СверкаИтогов()

Результат = Истина;

Ошибка = Неопределено;

Ответ = ОбъектДрайвераАвторизатора.ИтогиДняПоКартам();

Если НЕ Ответ Тогда

ОбъектДрайвераАвторизатора.ПолучитьОшибку(Ошибка);

Результат = Ложь;

Иначе

СлипЧек = Неопределено;

Результат = ПолучитьСтрокиСлипЧека(СлипЧек);

Если Результат Тогда

//ПечатьТекста(СлипЧек);

КонецЕсли;

КонецЕсли;

Возврат Результат;

КонецФункции

На этом все, надеюсь эта статья поможет Вам реализовать эквайринг от Сбербанка в Вашей конфигурации, буду рад любым комментариям и замечаниям. И еще раз напомню о том, что в данной теме нужно быть предельно внимательным и осторожным.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Загрузка…

Ошибки при подключении эквайринга от Сбербанка к 1С 8: Недостаточно фактических параметров; Ошибка эквайринговой системы 4309

Описание ошибки:
При подключении пинпада Verifone VX820 от Сбербанка и при попытке осуществить платеж возникает ошибка в 1С: Управление торговлей 10.3.13 на платформе 1С: Предприятие 8 версии 8.3:
{Внешняя Обработка.СберБанкЭквайринговаяСистема.МодульОбъекта(365)}: Недостаточно фактических параметров

Найденные решения:

В данном случае, если немного углубиться в анатомию ошибки по описанию, становится понятно, что обработка, установленная в 1С (по умолчанию это SberBankES_v2.epf) и обеспечивающая работу с банковским терминалом, отвечающим за эквайринг, обращается к dll-компоненте банка и передает в нее меньше параметров, чем требуется для работы компоненты. Поэтому необходимо запросить у банка версию файла SBRFCOM.dll, поддерживающую работу с 3-мя параметрами. По умолчаню у банка может быть компонента, в которую должно передаваться 7 параметров. Специалисты банка комментируют тем, что в с более новыми версиями 1С работает компонента, в которую передается 7-ми параметров, а а более старые работают на версии, поддерживающей передачу всего лишь 3-х параметров.

В принципе на этом проблема должна решиться. Но в моей практике даже после замены на правильную версию dll-файла, работа с эквайринговой системой пинпада Verifone VX820 не была обеспечена по причине возникновения новой ошибки: 

Ошибка эквайринговой системы 4309

Перебор более ранних версий ПО и dll-файлов от банка не привел ни к каким результатам. Но по совершенной случайности было решено на крайний случай сделать сброс временных файлов, связанных с базой, что делается за счет удаления и добавления базы в список базы окна запуска 1С: Предприяите 8. Особенно к этому подтолкнул тот факт, что до переустановки ПО банка вместе со сменой пинпада, после которого и возникла начальная ошибка, предущий пинпад Verifone VX810 все таки работал с 1С без особых нареканий. В результате очистки временных файлов базы посредством, как уже было замечено, удаления базы из списка и баз и повторного добавления немного под другим имененем, ошибка, можно сказать, чудесным образом пропала и работа с эквайринговой системой Сбербанка была полностью восстановлена.

Оцените, помогло ли Вам предоставленное описание решения ошибки?




© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

04-09-2016

Журавлев А.С.
(www.azhur-c.ru)

#Область ПрограммныйИнтерфейс // Функция возвращает возможность работы модуля в асинхронном режиме. // Стандартные команды модуля: // — ПодключитьУстройство // — ОтключитьУстройство // — ВыполнитьКоманду // Команды модуля для работы асинхронном режиме (должны быть определены): // — НачатьПодключениеУстройства // — НачатьОтключениеУстройства // — НачатьВыполнениеКоманды. // Функция ПоддержкаАсинхронногоРежима() Экспорт Возврат Ложь; КонецФункции // Функция осуществляет подключение устройства. // Функция ПодключитьУстройство(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Экспорт Результат = Истина; // Обязательные выходные ВыходныеПараметры = Новый Массив(); // Проверка настроенных параметров. ШиринаСлипЧека = Неопределено; ВерсияБиблиотеки = Неопределено; КодСимволаЧастичногоОтреза = Неопределено; Параметры.Свойство(«ШиринаСлипЧека» , ШиринаСлипЧека); Параметры.Свойство(«ВерсияБиблиотеки», ВерсияБиблиотеки); Параметры.Свойство(«КодСимволаЧастичногоОтреза», КодСимволаЧастичногоОтреза); Если ВерсияБиблиотеки = Неопределено Тогда ВерсияБиблиотеки = Ложь; КонецЕсли; Если ШиринаСлипЧека = Неопределено Тогда ВыходныеПараметры.Добавить(999); ВыходныеПараметры.Добавить(НСтр(«ru=’Не настроены параметры устройства. |Для корректной работы устройства необходимо задать параметры его работы. |Сделать это можно при помощи формы «»Настройка параметров«» модели |подключаемого оборудования в форме «»Подключение и настройка оборудования«».'»)); Результат = Ложь; КонецЕсли; Если Результат Тогда ОбъектДрайвера.ШиринаСлипЧека = Число(Параметры.ШиринаСлипЧека); ПараметрыПодключения.Вставить(«ПоследнийТипКарты», Неопределено); ПараметрыПодключения.Вставить(«ВерсияБиблиотеки» , ВерсияБиблиотеки); ПараметрыПодключения.Вставить(«КодСимволаЧастичногоОтреза» , КодСимволаЧастичногоОтреза); КонецЕсли; Возврат Результат; КонецФункции // Функция осуществляет отключение устройства. // Функция ОтключитьУстройство(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Экспорт Результат = Истина; // Обязательные выходные ВыходныеПараметры = Новый Массив(); Возврат Результат; КонецФункции // Функция получает, обрабатывает и перенаправляет на исполнение команду к драйверу. // Функция ВыполнитьКоманду(Команда, ВходныеПараметры = Неопределено, ВыходныеПараметры = Неопределено, ОбъектДрайвера, Параметры, ПараметрыПодключения) Экспорт Результат = Истина; ВыходныеПараметры = Новый Массив(); // Оплата платежной картой. Если Команда = «AuthorizeSales» ИЛИ Команда = «ОплатитьПлатежнойКартой» Тогда Сумма = ВходныеПараметры[0]; НомерКарты = ВходныеПараметры[1]; Результат = ОплатитьПлатежнойКартой(ОбъектДрайвера, Параметры, ПараметрыПодключения, Сумма, НомерКарты, ВыходныеПараметры); // Возврат платежа. ИначеЕсли Команда = «AuthorizeRefund» ИЛИ Команда = «ВернутьПлатежПоПлатежнойКарте» Тогда Сумма = ВходныеПараметры[0]; НомерКарты = ВходныеПараметры[1]; Результат = ВернутьПлатежПоПлатежнойКарте(ОбъектДрайвера, Параметры, ПараметрыПодключения, Сумма, НомерКарты, ВыходныеПараметры); // Отмена платежа. ИначеЕсли Команда = «AuthorizeVoid» ИЛИ Команда = «ОтменитьПлатежПоПлатежнойКарте» Тогда Сумма = ВходныеПараметры[0]; СсылочныйНомер = ВходныеПараметры[1]; НомерЧека = ?(ВходныеПараметры.Количество() > 2, ВходныеПараметры[2], «»); Результат = ОтменитьПлатежПоПлатежнойКарте(ОбъектДрайвера, Параметры, ПараметрыПодключения, Сумма, СсылочныйНомер, НомерЧека, ВыходныеПараметры); // Аварийная отмена платежа. ИначеЕсли Команда = «EmergencyVoid» ИЛИ Команда = «АварийнаяОтменаОперации» Тогда Сумма = ВходныеПараметры[0]; СсылочныйНомер = ВходныеПараметры[1]; НомерЧека = ?(ВходныеПараметры.Количество() > 2, ВходныеПараметры[2], «»); Результат = АварийнаяОтменаОперации(ОбъектДрайвера, Параметры, ПараметрыПодключения, Сумма, СсылочныйНомер, НомерЧека, ВыходныеПараметры); // Сверка итогов по картам. ИначеЕсли Команда = «Settlement» ИЛИ Команда = «ИтогиДняПоКартам» Тогда Результат = ИтогиДняПоКартам(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры); // Получение слип-чека последней операции. ИначеЕсли Команда = «ПолучитьСтрокиСлипЧека» Тогда Результат = ПолучитьСтрокиСлипЧека(ОбъектДрайвера, Параметры, ПараметрыПодключения, Неопределено, ВыходныеПараметры); // Функция возвращает, будет ли печать слип-чеков на терминале. ИначеЕсли Команда = «PrintSlipOnTerminal» ИЛИ Команда = «ПечатьКвитанцийНаТерминале» Тогда Результат = ПечатьКвитанцийНаТерминале(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры); // Тестирование устройства ИначеЕсли Команда = «ТестУстройства» ИЛИ Команда = «CheckHealth» Тогда Результат = ТестУстройства(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры); // Указанная команда не поддерживается данным драйвером. Иначе ВыходныеПараметры.Добавить(999); ВыходныеПараметры.Добавить(НСтр(«ru=’Команда «»%Команда%«» не поддерживается данным драйвером.'»)); ВыходныеПараметры[1] = СтрЗаменить(ВыходныеПараметры[1], «%Команда%», Команда); Результат = Ложь; КонецЕсли; Возврат Результат; КонецФункции #КонецОбласти #Область СлужебныеПроцедурыИФункции // Функция осуществляет авторизацию (оплату) по карте. // Функция ОплатитьПлатежнойКартой(ОбъектДрайвера, Параметры, ПараметрыПодключения, Сумма, НомерКарты, ВыходныеПараметры) Экспорт Результат = Ложь; СуммаВременная = Неопределено; СсылочныйНомер = Неопределено; НомерЧека = Неопределено; КодАвторизации = Неопределено; КодХеш = Неопределено; КартаСбербанка = Неопределено; НазваниеКарты = Неопределено; ОбъектДрайвера.ТипКарты = 0; СуммаВременная = Сумма * 100; НомерКарты = «****************»; Попытка Если ПараметрыПодключения.Свойство(«ВерсияБиблиотеки») И ПараметрыПодключения.ВерсияБиблиотеки Тогда Ответ = ОбъектДрайвера.ОплатитьПлатежнойКартой(СуммаВременная, СсылочныйНомер, КодАвторизации, КодХеш, КартаСбербанка, НазваниеКарты, НомерКарты); Иначе Ответ = ОбъектДрайвера.ОплатитьПлатежнойКартой(СуммаВременная, СсылочныйНомер, НомерЧека); КонецЕсли; Исключение ТекстОшибки = ОписаниеОшибки(); Если (Найти(ТекстОшибки, НСтр(«ru = ‘фактических параметров'»)) > 0) Тогда ТекстОшибки = НСтр(«ru = ‘Ошибка вызова метода библиотеки «»SBRFCOM«». |Неверное количество параметров метода «»ОплатитьПлатежнойКартой«». |Укажите в форме настройке оборудования другую версию библиотеки «»SBRFCOM«».'»); КонецЕсли; ВыходныеПараметры.Добавить(999); ВыходныеПараметры.Добавить(ТекстОшибки); Возврат Результат; КонецПопытки; Если Не Ответ Тогда ВыходныеПараметры.Добавить(999); ВыходныеПараметры.Добавить(«»); ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]); Иначе СлипЧек = Неопределено; Результат = ПолучитьСтрокиСлипЧека(ОбъектДрайвера, Параметры, ПараметрыПодключения, СлипЧек, ВыходныеПараметры); Если Результат Тогда ВыходныеПараметры.Добавить(НомерКарты); ВыходныеПараметры.Добавить(СсылочныйНомер); ВыходныеПараметры.Добавить(НомерЧека); ВыходныеПараметры.Добавить(Новый Массив()); ВыходныеПараметры[3].Добавить(«СлипЧек»); ВыходныеПараметры[3].Добавить(СлипЧек); ВыходныеПараметры.Добавить(«»); Иначе АварийнаяОтменаОперации(ОбъектДрайвера, Параметры, ПараметрыПодключения, СуммаВременная, СсылочныйНомер, НомерЧека, ВыходныеПараметры); КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции // Функция осуществляет возврат платежа по карте. // Функция ВернутьПлатежПоПлатежнойКарте(ОбъектДрайвера, Параметры, ПараметрыПодключения, Сумма, НомерКарты, ВыходныеПараметры) Экспорт Результат = Ложь; СуммаВременная = Неопределено; СсылочныйНомер = Неопределено; НомерЧека = Неопределено; КодАвторизации = Неопределено; КодХеш = Неопределено; КартаСбербанка = Неопределено; НазваниеКарты = Неопределено; ОбъектДрайвера.ТипКарты = 0; СуммаВременная = Сумма * 100; Попытка Если ПараметрыПодключения.Свойство(«ВерсияБиблиотеки») И ПараметрыПодключения.ВерсияБиблиотеки Тогда Ответ = ОбъектДрайвера.ВернутьПлатежПоПлатежнойКарте(СуммаВременная, СсылочныйНомер, КодАвторизации, КодХеш, КартаСбербанка, НазваниеКарты, НомерКарты); Иначе Ответ = ОбъектДрайвера.ВернутьПлатежПоПлатежнойКарте(СуммаВременная, СсылочныйНомер, НомерЧека); КонецЕсли; Исключение ТекстОшибки = ОписаниеОшибки(); Если (Найти(ТекстОшибки, НСтр(«ru = ‘фактических параметров'»)) > 0) Тогда ТекстОшибки = НСтр(«ru = ‘Ошибка вызова метода библиотеки «»SBRFCOM«». |Неверное количество параметров метода «»ВернутьПлатежПоПлатежнойКарте«». |Укажите в форме настройке оборудования другую версию библиотеки «»SBRFCOM«».'»); КонецЕсли; ВыходныеПараметры.Добавить(999); ВыходныеПараметры.Добавить(ТекстОшибки); Возврат Результат; КонецПопытки; Если Не Ответ Тогда ВыходныеПараметры.Добавить(999); ВыходныеПараметры.Добавить(«»); ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]); Результат = Ложь; Иначе СлипЧек = Неопределено; Результат = ПолучитьСтрокиСлипЧека(ОбъектДрайвера, Параметры, ПараметрыПодключения, СлипЧек, ВыходныеПараметры); Если Результат Тогда ВыходныеПараметры.Добавить(«****************»); ВыходныеПараметры.Добавить(СсылочныйНомер); ВыходныеПараметры.Добавить(НомерЧека); ВыходныеПараметры.Добавить(Новый Массив()); ВыходныеПараметры[3].Добавить(«СлипЧек»); ВыходныеПараметры[3].Добавить(СлипЧек); ВыходныеПараметры.Добавить(«»); Иначе АварийнаяОтменаОперации(ОбъектДрайвера, Параметры, ПараметрыПодключения, СуммаВременная, СсылочныйНомер, НомерЧека, ВыходныеПараметры); КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции // Функция осуществляет отмену платежа по карте. // Функция ОтменитьПлатежПоПлатежнойКарте(ОбъектДрайвера, Параметры, ПараметрыПодключения, Сумма, СсылочныйНомер, НомерЧека, ВыходныеПараметры) Экспорт Результат = Истина; СуммаВременная = Неопределено; ОбъектДрайвера.ТипКарты = 0; СуммаВременная = Сумма * 100; Ответ = ОбъектДрайвера.ОтменитьПлатежПоПлатежнойКарте(СуммаВременная, СсылочныйНомер); Если Не Ответ Тогда ВыходныеПараметры.Добавить(999); ВыходныеПараметры.Добавить(«»); ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]); Результат = Ложь; Иначе СлипЧек = Неопределено; Результат = ПолучитьСтрокиСлипЧека(ОбъектДрайвера, Параметры, ПараметрыПодключения, СлипЧек, ВыходныеПараметры); Если Результат Тогда ВыходныеПараметры.Добавить(Новый Массив()); ВыходныеПараметры[0].Добавить(«СлипЧек»); ВыходныеПараметры[0].Добавить(СлипЧек); Иначе АварийнаяОтменаОперации(ОбъектДрайвера, Параметры, ПараметрыПодключения, СуммаВременная, СсылочныйНомер, НомерЧека, ВыходныеПараметры); КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции // Функция осуществляет аварийную отмену операции по карте. // Функция АварийнаяОтменаОперации(ОбъектДрайвера, Параметры, ПараметрыПодключения, Сумма, СсылочныйНомер, НомерЧека, ВыходныеПараметры) Экспорт Результат = Истина; ВыходныеПараметры.Добавить(Неопределено); СуммаВременная = Сумма * 100; ОбъектДрайвера.ТипКарты = 0; Ответ = ОбъектДрайвера.ОтменитьПлатежПоПлатежнойКарте(СуммаВременная, СсылочныйНомер); Если Не Ответ Тогда ВыходныеПараметры.Добавить(999); ВыходныеПараметры.Добавить(«»); ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]); Результат = Ложь; КонецЕсли; Возврат Результат; КонецФункции // Функция осуществляет сверку итогов по картам. // Функция ИтогиДняПоКартам(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Результат = Истина; Ответ = ОбъектДрайвера.ИтогиДняПоКартам(); Если Не Ответ Тогда ВыходныеПараметры.Добавить(999); ВыходныеПараметры.Добавить(«»); ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]); Результат = Ложь; Иначе СлипЧек = Неопределено; Результат = ПолучитьСтрокиСлипЧека(ОбъектДрайвера, Параметры, ПараметрыПодключения, СлипЧек, ВыходныеПараметры); Если Результат Тогда ВыходныеПараметры.Добавить(Новый Массив()); ВыходныеПараметры[0].Добавить(«СлипЧек»); ВыходныеПараметры[0].Добавить(СлипЧек); КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции // Заполняет массив строками слип-чека для последующей печати на ФР. // Функция ПолучитьСтрокиСлипЧека(ОбъектДрайвера, Параметры, ПараметрыПодключения, СлипЧек, ВыходныеПараметры); Результат = Истина; СлипЧек = «»; Для Индекс = 1 По ОбъектДрайвера.КоличествоСтрокСлипЧека Цикл СтрокаЧека = «»; РезультатФункции = ОбъектДрайвера.ПолучитьСтрокуСлипЧека(Индекс, СтрокаЧека); Если РезультатФункции Тогда Если ПараметрыПодключения.Свойство(«КодСимволаЧастичногоОтреза») Тогда Если КодСимвола(СтрокаЧека) = ПараметрыПодключения.КодСимволаЧастичногоОтреза Тогда СлипЧек = СлипЧек + «[cut]» + Символы.ПС + СтрокаЧека; КонецЕсли; КонецЕсли; СлипЧек = СлипЧек + СтрокаЧека + ?(Индекс = ОбъектДрайвера.КоличествоСтрокСлипЧека, «», Символ(13) + Символ(10)); Иначе ВыходныеПараметры.Очистить(); ВыходныеПараметры.Добавить(999); ВыходныеПараметры.Добавить(НСтр(«ru=’Ошибка при получении строк слип-чека.'»)); Результат = Ложь; КонецЕсли; КонецЦикла; Если Результат Тогда КопииСлипЧека = «»; Для Индекс = 1 По ОбъектДрайвера.КоличествоКопийСлипЧека Цикл КопииСлипЧека = КопииСлипЧека + СлипЧек + ?(Индекс = ОбъектДрайвера.КоличествоКопийСлипЧека, «», Символы.ПС + «[cut]» + Символы.ПС); КонецЦикла; СлипЧек = КопииСлипЧека; КонецЕсли; Возврат Результат; КонецФункции // Функция возвращает, будет ли печать слип-чеков на терминале. // Функция ПечатьКвитанцийНаТерминале(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Результат = Истина; ВыходныеПараметры.Очистить(); ВыходныеПараметры.Добавить(Ложь); Возврат Результат; КонецФункции // Функция осуществляет тестирование устройства. // Функция ТестУстройства(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) НомерКарты = «»; Результат = ОбъектДрайвера.ПрочитатьКарту(НомерКарты); Если Результат Тогда ВыходныеПараметры.Добавить(0); ВыходныеПараметры.Добавить(НСтр(«ru=’Тестовое чтение карты успешно выполнено.'»)); Иначе ВыходныеПараметры.Добавить(999); ВыходныеПараметры.Добавить(«»); ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]); КонецЕсли; Возврат Результат; КонецФункции #КонецОбласти

Доброго времени, уважаемые!

Подключаю пинпад впервые — возникли проблемы. Помогите, пожалуйста, советом.

1С Комплексная автоматизация 1.1.55.2 через RDP. Нужные библиотеки, оставленные работником Сбербанка, зарегистрированы. На сервере проверку итогов через LoadParm.exe проходит. В 1с добавлена эквайринговая система. При проверке подключения оборудования в 1с пишет:

«СБ РФ: Эквайринговая система»:

Внимание! Невозможно определить версию драйвера.

Требуемая версия: 1.0.0.1

Корректная работа драйвера не гарантируется

У SBRFCOM.dll версия 1.0.0.1.

Пытаюсь провести оплату документом «Оплата от покупателя платежной картой» — выдает ошибку:

{ВнешняяОбработка.СберБанкЭквайринговаяСистема.МодульОбъекта(355)}: Недостаточно фактических параметров

        Ответ = Объект.Драйвер.ОплатитьПлатежнойКартой(мСумма, КодRRN, КодАвторизации);

Как можно исправить? Может я что-то не так делаю?

  • Ошибка вызова метода sign компоненты xmldsig
  • Ошибка вызова метода cmssign компоненты xmldsig
  • Ошибка вызова злиб гта 5
  • Ошибка вызова внешней компоненты 1с ккт
  • Ошибка вызова внешнего api геншин импакт