8.х РОЗ Розница 2.1.8.13 и эквайринг

Тема в разделе ""1С:Розница"", создана пользователем Alex123, 14 июл 2015.

  1. TopicStarter Overlay
    Alex123
    Offline

    Alex123 Опытный в 1С

    Регистрация:
    20 июл 2012
    Сообщения:
    208
    Симпатии:
    0
    Баллы:
    26
    Обновился я значит до 2.1.8.13 и эквайринг мой самописный перестал работать.
    Вот, что пишет
    Снимок.JPG
  2. TopicStarter Overlay
    Alex123
    Offline

    Alex123 Опытный в 1С

    Регистрация:
    20 июл 2012
    Сообщения:
    208
    Симпатии:
    0
    Баллы:
    26
    В 2.1.8.14 ошибку расшифровал
    Код:
    {ОбщийМодуль.МенеджерОборудованияКлиент.Модуль(462)}: Метод объекта не обнаружен (ПоддержкаАсинхронногоРежима)
                        Если ОбработчикДрайвера.ПоддержкаАсинхронногоРежима() Тогда
    Есть устройства сихнхронные и асинхронные, а мой терминальчик на допрос системы не отвечает и с таким не хотят работать))
    Это в обработке должно быть прописано о его синхронности или библиотечка должна сообщить?
  3. TopicStarter Overlay
    Alex123
    Offline

    Alex123 Опытный в 1С

    Регистрация:
    20 июл 2012
    Сообщения:
    208
    Симпатии:
    0
    Баллы:
    26
    Вот процедура из конфигуратора, которая верещит
    Код:
    Процедура НачатьПодключениеОборудования(ОповещениеПриПодключении, ИдентификаторКлиента, ТипыПО = Неопределено, ИдентификаторУстройства = Неопределено) Экспорт
          
        ОбъектДрайвера = Неопределено;
       
        Результат = ОбновитьРабочееМестоКлиента();
        Если Не Результат Тогда
            Если ОповещениеПриПодключении <> Неопределено Тогда
                ОписаниеОшибки = НСтр("ru='Предварительно необходимо выбрать рабочее место подключаемого оборудования текущего сеанса.'");
                РезультатВыполнения = Новый Структура("Результат, ОписаниеОшибки", Результат, ОписаниеОшибки);
                ВыполнитьОбработкуОповещения(ОповещениеПриПодключении, РезультатВыполнения);
            КонецЕсли;
            Возврат;
        КонецЕсли;
       
        СписокОборудования = МенеджерОборудованияКлиентПовтИсп.ПолучитьСписокОборудования(ТипыПО, ИдентификаторУстройства);
       
        Если СписокОборудования.Количество() > 0 Тогда
            Для Каждого Устройство Из СписокОборудования Цикл
               
                // Проверим, не подключено ли устройство ранее.
                ПодключенноеУстройство = ПолучитьПодключенноеУстройство(глПодключаемоеОборудование.ПараметрыПодключенияПО, Устройство.Ссылка);
               
                Если ПодключенноеУстройство = Неопределено Тогда // Если устройство не было подключено ранее.
                   
                    ОбработчикДрайвера = МенеджерОборудованияКлиентПовтИсп.ПолучитьОбработчикДрайвера(Устройство.ОбработчикДрайвера, Не Устройство.ВСоставеКонфигурации);
                   
                    НовоеПодключение = Новый Структура();
                    НовоеПодключение.Вставить("Клиенты"               , Новый Массив());
                    НовоеПодключение.Клиенты.Добавить(ИдентификаторКлиента);
                    НовоеПодключение.Вставить("Ссылка"                 , Устройство.Ссылка);
                    НовоеПодключение.Вставить("ИдентификаторУстройства", Устройство.ИдентификаторУстройства);
                    НовоеПодключение.Вставить("ОбработчикДрайвера"     , Устройство.ОбработчикДрайвера);
                    НовоеПодключение.Вставить("Наименование"           , Устройство.Наименование);
                    НовоеПодключение.Вставить("ТипОборудования"        , Устройство.ТипОборудования);
                    НовоеПодключение.Вставить("ДрайверОборудования"    , Устройство.ДрайверОборудования);
                    НовоеПодключение.Вставить("ВСоставеКонфигурации"   , Устройство.ВСоставеКонфигурации);
                    НовоеПодключение.Вставить("ИдентификаторОбъекта"   , Устройство.ИдентификаторОбъекта);
                    НовоеПодключение.Вставить("ИмяМакетаДрайвера"      , Устройство.ИмяМакетаДрайвера);
                    НовоеПодключение.Вставить("ИмяФайлаДрайвера"       , Устройство.ИмяФайлаДрайвера);
                    НовоеПодключение.Вставить("РабочееМесто"           , Устройство.РабочееМесто);
                    НовоеПодключение.Вставить("ИмяКомпьютера"          , Устройство.ИмяКомпьютера);
                    НовоеПодключение.Вставить("Параметры"              , Устройство.Параметры);
                    НовоеПодключение.Вставить("КоличествоПодключенных" , 1);
                    НовоеПодключение.Вставить("ПараметрыПодключения"   , Новый Структура());
                    НовоеПодключение.ПараметрыПодключения.Вставить("ТипОборудования", Устройство.ТипОборудованияИмя);
                   
                    Если ОбработчикДрайвера = Неопределено Тогда
                        // Сообщить об ошибке, что не удалось подключить обработчик.
                        Если ОповещениеПриПодключении <> Неопределено Тогда
                            ОписаниеОшибки = НСтр("ru='Не удалось подключить обработчик драйвера.'");
                            РезультатВыполнения = Новый Структура("Результат, ОписаниеОшибки", Ложь, ОписаниеОшибки);
                            ВыполнитьОбработкуОповещения(ОповещениеПриПодключении, РезультатВыполнения);
                        КонецЕсли;
                        Продолжить;
                    Иначе
                       
                        // Разделение на асинхронные и синхронные вызовы.
                        Если ОбработчикДрайвера.ПоддержкаАсинхронногоРежима() Тогда
                            // Асинхронные вызовы
                            ПараметрыКоманды = Новый Структура("НовоеПодключение, ОповещениеПриПодключении, ОбработчикДрайвера", НовоеПодключение, ОповещениеПриПодключении, ОбработчикДрайвера);
                            Оповещение = Новый ОписаниеОповещения("НачатьПодключениеОборудованияПолучениеОбъектаДрайвераЗавершение", ЭтотОбъект, ПараметрыКоманды);
                            НачатьПолучениеОбъектаДрайвера(Оповещение, Устройство);
                        Иначе
                            // Синхронные
                            ОбъектДрайвера = ПолучитьОбъектДрайвера(Устройство);
                            Если ОбъектДрайвера = Неопределено Тогда
                                Если ОповещениеПриПодключении <> Неопределено Тогда
                                    // Сообщить об ошибке, что не удалось загрузить драйвер.
                                    ОписаниеОшибки = НСтр("ru='%Наименование%: Не удалось загрузить драйвер устройства.
                                                        |Проверьте, что драйвер корректно установлен и зарегистрирован в системе.'");
                                    ОписаниеОшибки = СтрЗаменить(ОписаниеОшибки, "%Наименование%",НовоеПодключение.Наименование);
                                    РезультатВыполнения = Новый Структура("Результат, ОписаниеОшибки", Ложь, ОписаниеОшибки);
                                    ВыполнитьОбработкуОповещения(ОповещениеПриПодключении, РезультатВыполнения);
                                КонецЕсли;
                                Продолжить;
                            Иначе
                                ВыходныеПараметры = Неопределено;
                                Результат = ОбработчикДрайвера.ПодключитьУстройство(ОбъектДрайвера, НовоеПодключение.Параметры, НовоеПодключение.ПараметрыПодключения, ВыходныеПараметры);
                               
                                Если Результат Тогда
                                   
                                    Если ВыходныеПараметры.Количество() >= 2 Тогда
                                        НовоеПодключение.Вставить("ИсточникСобытия", ВыходныеПараметры[0]);
                                        НовоеПодключение.Вставить("ИменаСобытий",    ВыходныеПараметры[1]);
                                    Иначе
                                        НовоеПодключение.Вставить("ИсточникСобытия", "");
                                        НовоеПодключение.Вставить("ИменаСобытий",    Неопределено);
                                    КонецЕсли;
                                    глПодключаемоеОборудование.ПараметрыПодключенияПО.Добавить(НовоеПодключение);
                                   
                                    Если ОповещениеПриПодключении <> Неопределено Тогда
                                        ОписаниеОшибки = НСтр("ru='Ошибок нет.'");
                                        РезультатВыполнения = Новый Структура("Результат, ОписаниеОшибки", Истина, ОписаниеОшибки);
                                        ВыполнитьОбработкуОповещения(ОповещениеПриПодключении, РезультатВыполнения);
                                    КонецЕсли;
                                   
                                Иначе
                                    // Сообщим пользователю о том, что не удалось подключить устройство.
                                    Если ОповещениеПриПодключении <> Неопределено Тогда
                                        ОписаниеОшибки = НСтр("ru='Не удалось подключить устройство ""%Наименование%"": %ОписаниеОшибки% (%КодОшибки%)'");
                                        ОписаниеОшибки = СтрЗаменить(ОписаниеОшибки, "%Наименование%"  , НовоеПодключение.Наименование);
                                        ОписаниеОшибки = СтрЗаменить(ОписаниеОшибки, "%ОписаниеОшибки%", ВыходныеПараметры[1]);
                                        ОписаниеОшибки = СтрЗаменить(ОписаниеОшибки, "%КодОшибки%"     , ВыходныеПараметры[0]);
                                        РезультатВыполнения = Новый Структура("Результат, ОписаниеОшибки", Ложь, ОписаниеОшибки);
                                        ВыполнитьОбработкуОповещения(ОповещениеПриПодключении, РезультатВыполнения);
                                    КонецЕсли;
                                КонецЕсли;
                            КонецЕсли;
                           
                        КонецЕсли;
                       
                    КонецЕсли;
               
                Иначе // Устройство было подключено ранее.
                    // Увеличим количество пользователей данного соединения.
                    ПодключенноеУстройство.Клиенты.Добавить(ИдентификаторКлиента);
                    ПодключенноеУстройство.КоличествоПодключенных = ПодключенноеУстройство.КоличествоПодключенных + 1;
                    Если ОповещениеПриПодключении <> Неопределено Тогда
                        ОписаниеОшибки = НСтр("ru='Ошибок нет.'");
                        РезультатВыполнения = Новый Структура("Результат, ОписаниеОшибки", Истина, ОписаниеОшибки);
                        ВыполнитьОбработкуОповещения(ОповещениеПриПодключении, РезультатВыполнения);
                    КонецЕсли;
                КонецЕсли;
               
            КонецЦикла;
           
        ИначеЕсли  ИдентификаторУстройства <> Неопределено И ОповещениеПриПодключении <> Неопределено Тогда
            ОписаниеОшибки =  НСтр("ru='Выбранное устройство не может использоваться для подключения. Укажите другое устройство.'");
            РезультатВыполнения = Новый Структура("Результат, ОписаниеОшибки", Результат, ОписаниеОшибки);
            ВыполнитьОбработкуОповещения(ОповещениеПриПодключении, РезультатВыполнения);
        КонецЕсли;
       
    КонецПроцедуры
  4. TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Обработчик драйвера я так понял это обработка через которую подключается терминал, смотрите в ней, что это за метод.
  5. TopicStarter Overlay
    Alex123
    Offline

    Alex123 Опытный в 1С

    Регистрация:
    20 июл 2012
    Сообщения:
    208
    Симпатии:
    0
    Баллы:
    26
    Ну если обработка которая от сбербанка, которая в общих модулях, то она мной редактировалась из-за того, что сбербанк ее не поддерживает
    вот только когда я ее делал о ее синхронности или не синхронности речи не шло... Вот только какую процедуру добавить?
    Код:
    ///////////////////////////////////////////////////////////////////////////////
    // ПРОГРАММНЫЙ ИНТЕРФЕЙС
    
    // Функция осуществляет подключение устройства.
    //
    // Параметры:
    //  ОбъектДрайвера   - <*>
    //           - ОбъектДрайвера драйвера торгового оборудования.
    //
    // Возвращаемое значение:
    //  <Булево> - Результат работы функции.
    //
    Функция ПодключитьУстройство(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Экспорт
    
        Результат = Истина;
    
        //Обязательные выходные
        ВыходныеПараметры = Новый Массив();
    
        // Проверка настроенных параметров
        ШиринаСлипЧека             = Неопределено;
        КодСимволаЧастичногоОтреза = Неопределено;
        Модель                     = Неопределено;
    
        Параметры.Свойство("ШиринаСлипЧека"            , ШиринаСлипЧека);
        Параметры.Свойство("КодСимволаЧастичногоОтреза", КодСимволаЧастичногоОтреза);
        Параметры.Свойство("Модель"                    , Модель);
    
        Если ШиринаСлипЧека             = Неопределено
         Или КодСимволаЧастичногоОтреза = Неопределено
         Или Модель                     = Неопределено Тогда
            ВыходныеПараметры.Добавить(999);
            ВыходныеПараметры.Добавить(НСтр("ru='Не настроены параметры устройства.
            |Для корректной работы устройства необходимо задать параметры его работы.
            |Сделать это можно при помощи формы ""Настройка параметров"" модели
            |подключаемого оборудования в форме ""Подключение и настройка оборудования"".'"));
    
            Результат = Ложь;
        КонецЕсли;
        // Конец: Проверка настроенных параметров
    
        Если Результат Тогда
            ОбъектДрайвера.ШиринаСлипЧека = Число(Параметры.ШиринаСлипЧека);
            ПараметрыПодключения.Вставить("ПоследнийТипКарты", Неопределено);
        КонецЕсли;
    
        Возврат Результат;
    
    КонецФункции
    
    // Функция осуществляет отключение устройства.
    //
    // Параметры:
    //  ОбъектДрайвера - <*>
    //         - ОбъектДрайвера драйвера торгового оборудования.
    //
    // Возвращаемое значение:
    //  <Булево> - Результат работы функции.
    //
    Функция ОтключитьУстройство(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры) Экспорт
    
        Результат = Истина;
    
        //Обязательные выходные
        ВыходныеПараметры = Новый Массив();
    
        Возврат Результат;
    
    КонецФункции
    
    // Функция получает, обрабатывает и перенаправляет на исполнение команду к драйверу
    //
    Функция ВыполнитьКоманду(Команда, ВходныеПараметры = Неопределено, ВыходныеПараметры = Неопределено,
                             ОбъектДрайвера, Параметры, ПараметрыПодключения) Экспорт
    
        Результат = Истина;
    
        ВыходныеПараметры = Новый Массив();
    
        // Оплата платежной картой
        Если Команда = "AuthorizeSales" Тогда
            Сумма      = ВходныеПараметры[0];
           
            НомерКарты = ВходныеПараметры[1];
    
            Результат = ОплатитьПлатежнойКартой(ОбъектДрайвера, Параметры, ПараметрыПодключения,
                                                Сумма, НомерКарты, ВыходныеПараметры);
    
        // Возврат платежа
        ИначеЕсли Команда = "AuthorizeRefund" Тогда
            Сумма      = ВходныеПараметры[0];
            НомерКарты = ВходныеПараметры[1];
    
            Результат = ВернутьПлатежПоПлатежнойКарте(ОбъектДрайвера, Параметры, ПараметрыПодключения,
                                                      Сумма, НомерКарты, ВыходныеПараметры);
    
        // Отмена платежа
        ИначеЕсли Команда = "AuthorizeVoid" Тогда
            Сумма          = ВходныеПараметры[0];
            КодRRN         = ВходныеПараметры[1];
            НомерКарты     = ВходныеПараметры[2];
    
            Результат = ОтменитьПлатежПоПлатежнойКарте(ОбъектДрайвера, Параметры, ПараметрыПодключения,
                                                       Сумма, КодRRN, НомерКарты, ВыходныеПараметры);
    
        // Аварийная отмена платежа
        ИначеЕсли Команда = "EmergencyVoid" Тогда
            Сумма          = ВходныеПараметры[0];
            КодRRN         = ВходныеПараметры[1];
            НомерКарты     = ВходныеПараметры[2];
    
            Результат = АварийнаяОтменаОперации(ОбъектДрайвера, Параметры, ПараметрыПодключения,
                                                Сумма, КодRRN, НомерКарты, ВыходныеПараметры);
    
        // Сверка итогов по картам
        ИначеЕсли Команда = "Settlement" Тогда
            Результат = ИтогиДняПоКартам(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
    
        // Получение слип-чека последней операции
        ИначеЕсли Команда = "ПолучитьСтрокиСлипЧека" Тогда
            Результат = ПолучитьСтрокиСлипЧека(ОбъектДрайвера, Параметры, ПараметрыПодключения, Неопределено, ВыходныеПараметры);
           
            // Функция возвращает, будет ли печать слип-чеков на терминале
        ИначеЕсли Команда = "PrintSlipOnTerminal" ИЛИ Команда = "ПечатьКвитанцийНаТерминале" Тогда
            Результат = ПечатьКвитанцийНаТерминале(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
           
        // Указанная команда не поддерживается данным драйвером
        Иначе
            ВыходныеПараметры.Добавить(999);
            ВыходныеПараметры.Добавить(НСтр("ru='Команда ""%Команда%"" не поддерживается данным драйвером.'"));
            ВыходныеПараметры[1] = СтрЗаменить(ВыходныеПараметры[1], "%Команда%", Команда);
            Результат = Ложь;
    
        КонецЕсли;
    
        Возврат Результат;
    
    КонецФункции
    
    ///////////////////////////////////////////////////////////////////////////////
    // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
    
    // Функция осуществляет авторизацию (оплату) по карте.
    // (API v2.0)
    //
    // Параметры:
    //  Объект              - <*>
    //                      - Объект драйвера ЭС.
    //
    //  Сумма               – <Число>
    //                      - Сумма к оплате по карте
    //
    //  КодRRN              - <Строка>
    //                      - Уникальный код RRN транзакции
    //
    //  КодАвторизации      - <Строка>
    //                      - Возвращается код авторизации транзакции
    //
    //  КодОперации         - <Строка>
    //                      - Последовательный код операции
    //
    //  МассивСтрокСлипЧека - <Структура>
    //                      - Массив строк слип-чека, сформированного
    //                        после успешного выполнения операции
    //
    //  ШиринаЧека          - <Число>
    //                      - Ширина слип-чека, установленная в параметрах настройки
    //
    //  КоличествоКопий     - <Число>
    //                      - Количество печатаемых копий слип-чека
    //
    // Возвращаемое значение:
    //     <ПеречислениеСсылка.ОшибкиПриРаботеСТорговымОборудованием>
    //                 - Результат работы функции.
    //
    //Функция ОплатитьПлатежнойКартой(ОбъектДрайвера, Параметры, ПараметрыПодключения,
    //                                Сумма, НомерКарты, ВыходныеПараметры) Экспорт
    
    //    Результат = Истина;
    //    СуммаВременная = Неопределено;
    //   
    //    КодКарты       = Неопределено;
    //    СсылочныйНомер = Неопределено;
    //    НомерЧека      = Неопределено;
    
    //    ОбъектДрайвера.ТипКарты = 0;//ПараметрыПодключения.ПоследнийТипКарты;?????????????????
    //    ПараметрыПодключения.ПоследнийТипКарты = 0; //моя строка
    //     Параметры=0;                                  //моя строка
    //    СуммаВременная = Сумма*100;
    
    //    Ответ = ОбъектДрайвера.ОплатитьПлатежнойКартой(ОбъектДрайвера, Параметры, ПараметрыПодключения,
    //СуммаВременная, СсылочныйНомер, НомерЧека);
    //    Если Не Ответ Тогда
    //        ВыходныеПараметры.Добавить(999);
    //        ВыходныеПараметры.Добавить("");
    //        ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
    
    //        Результат = Ложь;
    //    Иначе
    //        СлипЧек = Неопределено;
    //        Результат = ПолучитьСтрокиСлипЧека(ОбъектДрайвера, Параметры, ПараметрыПодключения, СлипЧек, ВыходныеПараметры);
    //        Если Результат Тогда
    //            ВыходныеПараметры.Добавить("****************");
    //            ВыходныеПараметры.Добавить(СсылочныйНомер);
    //            ВыходныеПараметры.Добавить(НомерЧека);
    //            ВыходныеПараметры.Добавить(Новый Массив());
    //            ВыходныеПараметры[3].Добавить("СлипЧек");
    //            ВыходныеПараметры[3].Добавить(СлипЧек);
    //        Иначе
    //            АварийнаяОтменаОперации(ОбъектДрайвера, Параметры, ПараметрыПодключения,
    //                                    СуммаВременная, СсылочныйНомер, НомерЧека, ВыходныеПараметры);
    //        КонецЕсли;
    //    КонецЕсли;
    
    //    Возврат Результат;
    
    //КонецФункции
    Функция ОплатитьПлатежнойКартой(ОбъектДрайвера, Параметры, ПараметрыПодключения,
                                                         Сумма, НомерКарты, ВыходныеПараметры) Экспорт
        СуммаВременная = Неопределено;
        Результат      = Истина;
        КодRRN         = Неопределено;   
        КодАвторизации = Неопределено;
        Хеш            = Неопределено;
        КартаСбербанка = Неопределено;
        НазваниеКарты  = Неопределено;
        НомерКарты     = Неопределено;
    
        СуммаВременная = Сумма*100;
       
        Ответ = ОбъектДрайвера.ОплатитьПлатежнойКартой(СуммаВременная, КодRRN, КодАвторизации, Хеш, КартаСбербанка,
                                                                                 НазваниеКарты, НомерКарты);
        Если Не Ответ Тогда
            ВыходныеПараметры.Добавить(999);
            ВыходныеПараметры.Добавить("");
            ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
    
            Результат = Ложь;
        Иначе
            СлипЧек = Неопределено;
            Результат = ПолучитьСтрокиСлипЧека(ОбъектДрайвера, Параметры, ПараметрыПодключения, СлипЧек, ВыходныеПараметры);
            Если Результат Тогда
                ВыходныеПараметры.Добавить("****************");
                ВыходныеПараметры.Добавить(КодRRN);
                ВыходныеПараметры.Добавить(НомерКарты);
                ВыходныеПараметры.Добавить(Новый Массив());
                ВыходныеПараметры[3].Добавить("СлипЧек");
                ВыходныеПараметры[3].Добавить(СлипЧек);
            Иначе
                АварийнаяОтменаОперации(ОбъектДрайвера, Параметры, ПараметрыПодключения,
                                        СуммаВременная, КодRRN, НомерКарты, ВыходныеПараметры);
            КонецЕсли;
        КонецЕсли;
    
        Возврат Результат;
    
    КонецФункции
    
    
    // Функция осуществляет возврат платежа по карте.
    // (API v2.0)
    //
    // Параметры:
    //  Объект              - <*>
    //                      - Объект драйвера ЭС.
    //
    //  Сумма               – <Число>
    //                      - Сумма к оплате по карте
    //
    //  КодRRN              - <Строка>
    //                      - Уникальный код RRN транзакции
    //
    //  КодАвторизации      - <Строка>
    //                      - Возвращается код авторизации транзакции
    //
    //  КодОперации         - <Строка>
    //                      - Последовательный код операции
    //
    //  МассивСтрокСлипЧека - <Структура>
    //                      - Массив строк слип-чека, сформированного
    //                        после успешного выполнения операции
    //
    //  ШиринаЧека          - <Число>
    //                      - Ширина слип-чека, установленная в параметрах настройки
    //
    //  КоличествоКопий     - <Число>
    //                      - Количество печатаемых копий слип-чека
    //
    // Возвращаемое значение:
    //     <ПеречислениеСсылка.ОшибкиПриРаботеСТорговымОборудованием>
    //                 - Результат работы функции.
    //
    Функция ВернутьПлатежПоПлатежнойКарте(ОбъектДрайвера, Параметры, ПараметрыПодключения,
                                          Сумма, НомерКарты, ВыходныеПараметры) Экспорт
    
        Результат = Истина;
        СуммаВременная = Неопределено;
       
        КодКарты       = Неопределено;
        КодRRN = Неопределено;
        КодАвторизации  = Неопределено;
        Хеш             = Неопределено;
        КартаСбербанка  = Неопределено;
        НазваниеКарты   = Неопределено;
        НомерКарты      = Неопределено;
    
        ОбъектДрайвера.ТипКарты = 0;//ПараметрыПодключения.ПоследнийТипКарты;?????????????????
        СуммаВременная = Сумма*100;
    
        Ответ = ОбъектДрайвера.ВернутьПлатежПоПлатежнойКарте(СуммаВременная, КодRRN, КодАвторизации, Хеш,
                                                                          КартаСбербанка, НазваниеКарты, НомерКарты);
        Если Не Ответ Тогда
            ВыходныеПараметры.Добавить(999);
            ВыходныеПараметры.Добавить("");
            ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
    
            Результат = Ложь;
        Иначе
            СлипЧек = Неопределено;
            Результат = ПолучитьСтрокиСлипЧека(ОбъектДрайвера, Параметры, ПараметрыПодключения, СлипЧек, ВыходныеПараметры);
            Если Результат Тогда
                ВыходныеПараметры.Добавить("****************");
                ВыходныеПараметры.Добавить(КодRRN);
                ВыходныеПараметры.Добавить(НомерКарты);
                ВыходныеПараметры.Добавить(Новый Массив());
                ВыходныеПараметры[3].Добавить("СлипЧек");
                ВыходныеПараметры[3].Добавить(СлипЧек);
            Иначе
                АварийнаяОтменаОперации(ОбъектДрайвера, Параметры, ПараметрыПодключения,
                                        СуммаВременная, КодRRN, НомерКарты, ВыходныеПараметры);
            КонецЕсли;
        КонецЕсли;
    
        Возврат Результат;
    
    КонецФункции
    
    // Функция осуществляет отмену платежа по карте.
    // (API v2.0)
    //
    // Параметры:
    //  Объект              - <*>
    //                      - Объект драйвера ЭС.
    //
    //  Сумма               – <Число>
    //                      - Сумма к оплате по карте
    //
    //  КодRRN              - <Строка>
    //                      - Уникальный код RRN транзакции
    //
    //  КодАвторизации      - <Строка>
    //                      - Возвращается код авторизации транзакции
    //
    //  КодОперации         - <Строка>
    //                      - Последовательный код операции
    //
    //  МассивСтрокСлипЧека - <Структура>
    //                      - Массив строк слип-чека, сформированного
    //                        после успешного выполнения операции
    //
    //  ШиринаЧека          - <Число>
    //                      - Ширина слип-чека, установленная в параметрах настройки
    //
    //  КоличествоКопий     - <Число>
    //                      - Количество печатаемых копий слип-чека
    //
    // Возвращаемое значение:
    //     <ПеречислениеСсылка.ОшибкиПриРаботеСТорговымОборудованием>
    //                 - Результат работы функции.
    //
    Функция ОтменитьПлатежПоПлатежнойКарте(ОбъектДрайвера, Параметры, ПараметрыПодключения,
                                           Сумма, КодRRN, НомерКарты, ВыходныеПараметры) Экспорт
    
        Результат = Истина;
        СуммаВременная = Неопределено;
       
        ОбъектДрайвера.ТипКарты = 0;//ПараметрыПодключения.ПоследнийТипКарты;?????????????????
        СуммаВременная = Сумма*100;
    
        Ответ = ОбъектДрайвера.ОтменитьПлатежПоПлатежнойКарте(СуммаВременная, КодRRN);
        Если Не Ответ Тогда
            ВыходныеПараметры.Добавить(999);
            ВыходныеПараметры.Добавить("");
            ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
    
            Результат = Ложь;
        Иначе
            СлипЧек = Неопределено;
            Результат = ПолучитьСтрокиСлипЧека(ОбъектДрайвера, Параметры, ПараметрыПодключения, СлипЧек, ВыходныеПараметры);
            Если Результат Тогда
                ВыходныеПараметры.Добавить(Новый Массив());
                ВыходныеПараметры[0].Добавить("СлипЧек");
                ВыходныеПараметры[0].Добавить(СлипЧек);
            Иначе
                АварийнаяОтменаОперации(ОбъектДрайвера, Параметры, ПараметрыПодключения,
                                        СуммаВременная, КодRRN, НомерКарты, ВыходныеПараметры);
            КонецЕсли;
        КонецЕсли;
    
        Возврат Результат;
    
    КонецФункции
    
    // Функция осуществляет аварийную отмену операции по карте.
    // (API v2.5)
    //
    // Параметры:
    //  Объект              - <*>
    //                      - Объект драйвера ЭС.
    //
    //  Сумма               – <Число>
    //                      - Сумма отменяемой операции по карте
    //
    //  КодRRN              - <Строка>
    //                      - Уникальный код RRN оригинальной транзакции
    //
    //  КодАвторизации      - <Строка>
    //                      - Код авторизации оригинальной транзакции
    //
    // Возвращаемое значение:
    //     <ПеречислениеСсылка.ОшибкиПриРаботеСТорговымОборудованием>
    //                 - Результат работы функции.
    //
    Функция АварийнаяОтменаОперации(ОбъектДрайвера, Параметры, ПараметрыПодключения,
                                    Сумма, КодRRN, НомерКарты, ВыходныеПараметры) Экспорт
    
        Результат = Истина;
    
        ВыходныеПараметры.Добавить(Неопределено);
    
        СуммаВременная = Сумма * 100;
        ОбъектДрайвера.ТипКарты = 0;
    
        Ответ = ОбъектДрайвера.ОтменитьПлатежПоПлатежнойКарте(СуммаВременная, КодRRN);
        Если Не Ответ Тогда
            ВыходныеПараметры.Добавить(999);
            ВыходныеПараметры.Добавить("");
            ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
    
            Результат = Ложь;
        КонецЕсли;
    
        Возврат Результат;
    
    КонецФункции
    
    // Функция осуществляет сверку итогов по картам.
    // (API v2.0)
    //
    // Параметры:
    //  Объект              - <*>
    //                      - Объект драйвера ЭС.
    //
    //  МассивСтрокСлипЧека - <Структура>
    //                      - Массив строк слип-чека, сформированного
    //                        после успешного выполнения операции
    //
    //  ШиринаЧека          - <Число>
    //                      - Ширина слип-чека, установленная в параметрах настройки
    //
    // Возвращаемое значение:
    //     <ПеречислениеСсылка.ОшибкиПриРаботеСТорговымОборудованием>
    //                 - Результат работы функции.
    //
    Функция ИтогиДняПоКартам(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
    
        Результат = Истина;
    
        Ответ = ОбъектДрайвера.ИтогиДняПоКартам();
        Если Не Ответ Тогда
            ВыходныеПараметры.Добавить(999);
            ВыходныеПараметры.Добавить("");
            ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);
    
            Результат = Ложь;
        Иначе
            СлипЧек = Неопределено;
            Результат = ПолучитьСтрокиСлипЧека(ОбъектДрайвера, Параметры, ПараметрыПодключения, СлипЧек, ВыходныеПараметры);
            Если Результат Тогда
                ВыходныеПараметры.Добавить(Новый Массив());
                ВыходныеПараметры[0].Добавить("СлипЧек");
                ВыходныеПараметры[0].Добавить(СлипЧек);
            КонецЕсли;
        КонецЕсли;
    
        Возврат Результат;
    
    КонецФункции
    
    // Заполняет массив строками слип-чека для последующей печати на ФР
    //
    // Параметры:
    //  Объект              - <*>
    //                      - Объект драйвера ЭС.
    //
    //  МассивСтрокСлипЧека - <Структура>
    //                      - Массив строк слип-чека, сформированного
    //                        после успешного выполнения операции
    //
    //  ШиринаЧека          - <Число>
    //                      - Ширина слип-чека, установленная в параметрах настройки
    //
    // Возвращаемое значение:
    //
    Функция ПолучитьСтрокиСлипЧека(ОбъектДрайвера, Параметры, ПараметрыПодключения, СлипЧек, ВыходныеПараметры);
    
        Результат = Истина;
        СлипЧек   = "";
    
        Для Индекс = 1 По ОбъектДрайвера.КоличествоСтрокСлипЧека Цикл
            СтрокаЧека = "";
    
            РезультатФункции = ОбъектДрайвера.ПолучитьСтрокуСлипЧека(Индекс, СтрокаЧека);
            Если РезультатФункции Тогда
                СлипЧек = СлипЧек + СтрокаЧека + ?(Индекс = ОбъектДрайвера.КоличествоСтрокСлипЧека, "", Символ(13) + Символ(10));
            Иначе
                ВыходныеПараметры.Очистить();
                ВыходныеПараметры.Добавить(999);
                ВыходныеПараметры.Добавить(НСтр("ru='Ошибка при получении строк слип-чека.'"));
    
                Результат = Ложь;
            КонецЕсли;
        КонецЦикла;
    
        Если Результат Тогда
            КопииСлипЧека = "";
            Для Индекс = 1 По ОбъектДрайвера.КоличествоКопийСлипЧека Цикл
                КопииСлипЧека = КопииСлипЧека + СлипЧек + ?(Индекс = ОбъектДрайвера.КоличествоКопийСлипЧека,
                                                            "",
                                                            Символы.ПС + Символ(Параметры.КодСимволаЧастичногоОтреза) + Символы.ПС);
            КонецЦикла;
            СлипЧек = КопииСлипЧека;
        КонецЕсли;
       
        Возврат Результат;
    
    КонецФункции
    
    // Функция возвращает, будет ли печать слип-чеков на терминале
    //
    Функция ПечатьКвитанцийНаТерминале(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
       
        Результат = Истина;
        ВыходныеПараметры.Очистить(); 
        ВыходныеПараметры.Добавить(Ложь);
        Возврат Результат;
       
    КонецФункции
    
  6. TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.755
    Симпатии:
    146
    Баллы:
    104
    Скорее всего дело в драйвере. Его возможно нужно обновить.

    Можешь для эксперимента передать в качестве параметра вместо
    Если ОбработчикДрайвера.ПоддержкаАсинхронногоРежима() Тогда

    Если Истина Тогда

    И посмотреть что получится.

    У меня была проблема с ТСД. Я просто сделал в условие передачу в качестве параметра Истины и заработало.... Потом выяснилось что нужно драйвер обновить.
    --- Объединение сообщений, 15 июл 2015 ---
    Посмотри по коду что там делается в асинхронном и синхронном режиме и выбери какой параметр подставить Ложь или Истина.
    Alex123 нравится это.
  7. TopicStarter Overlay
    Alex123
    Offline

    Alex123 Опытный в 1С

    Регистрация:
    20 июл 2012
    Сообщения:
    208
    Симпатии:
    0
    Баллы:
    26
    Драйвер? вы имеете в виду библиотеку виндос которая висит в памяти? От эквайринга я имею папку на диске, где стоит какая-то прога для подключения к серверам сбербанка.
    Но Сбребанк врядли что-то обновляет, поскольку обработка для 1с у него сроком действия сертификата 1с - до 03.09.2009 года.
    То есть тут поправить модуль 1с, который опрашивает все устройства? не хотелось бы снимать его с поддержки. Но попробовать можно.

    А можете мне объяснить, что вообще это значит синхронный и асинхронные? я тут нашел в блоге 1с из зазеркалья про это, но так и не разобрался

    Мне бы хотелось исправить только то, что относится к эквайрингу. Этой процедуре которая опрашивает устройства, можно ответить из обработки эквайринга сбера?
  8. TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.755
    Симпатии:
    146
    Баллы:
    104
    По коду надо смотреть что за объект находится в переменной "ОбработчикДрайвера".
    Если там сам драйвер то ответить должен он. У меня именно так и было. По этому просто передал в качестве параметра Истина. Но у меня не было асинхронных вызовов. То есть тебе нужно смотреть по смыслу что передавать или Истину или Ложь.
  9. TopicStarter Overlay
    Alex123
    Offline

    Alex123 Опытный в 1С

    Регистрация:
    20 июл 2012
    Сообщения:
    208
    Симпатии:
    0
    Баллы:
    26
    Проблема решена, можно тему закрыть
  10. TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.755
    Симпатии:
    146
    Баллы:
    104
    Ну так напиши как решил!!!
  11. TopicStarter Overlay
    Alex123
    Offline

    Alex123 Опытный в 1С

    Регистрация:
    20 июл 2012
    Сообщения:
    208
    Симпатии:
    0
    Баллы:
    26
    Обновил модуль. Посмотрел на новый код модуля: отличие только в новой функции вначале
    Код:
    Функция ПоддержкаАсинхронногоРежима() Экспорт
       
        Возврат Ложь;
       
    КонецФункции
    
    Добавил аналогичную функцию в свою переписанную обработку и все заработала как раньше

    Правда там в комментах написанно, что процедуры нужно менять на новые, типа были было
    "ВыполнитьКомманду" заменить на "НачатьВыполнениеКомменды"
    Я пока этого не делал. Где можно посмотреть хелп по новым командам?
  12. TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.755
    Симпатии:
    146
    Баллы:
    104
    Не знаю... может на ИТС есть описание библиотеки подключаемого оборудования..
  13. TopicStarter Overlay
    Alex123
    Offline

    Alex123 Опытный в 1С

    Регистрация:
    20 июл 2012
    Сообщения:
    208
    Симпатии:
    0
    Баллы:
    26
    А в чем суть этой синхронности и асинхронности. Это только видно на работе в браузере или в файловом доступе тоже есть различия?
    я модальный и не модальный понимаю, а что тут?
  14. TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.755
    Симпатии:
    146
    Баллы:
    104
    Асинхронно это для выполнение длительных операций. Например запустил ты какую то загрузку. Она идёт 20 минут. Вот пока она идёт у тебя другой код программный выполнятся не может. То есть идёт выполнение только операции загрузки.
    А если режим выполнения асинхронный то у тебя стартует процедура загрузки данных но при этом в программе можно работать дальше. То есть выполнять другие процедуры. Когда завершиться загрузка будет вызвано оповещение и твой код по загрузке продолжит работать дальше.
    Например как модальные окна. Ты одно открыл и кроме как в нём ты больше нигде не можешь ничего выполнять пока не закроешь его. А в безмодальном режиме ты можешь открывать другие окна.
    Это примерно то же самое только для программного кода.
  15. TopicStarter Overlay
    Alex123
    Offline

    Alex123 Опытный в 1С

    Регистрация:
    20 июл 2012
    Сообщения:
    208
    Симпатии:
    0
    Баллы:
    26
    ааа так у меня это в инсте было
    только у нас это называли параллельное программирование
    Тема, кстати, стоящая, буду разбираться
    Не думал, что 1с-ники до этого дошли
    --- Объединение сообщений, 16 июл 2015 ---
    1с должна существенно ускориться если работать по этой технологии
  16. TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.755
    Симпатии:
    146
    Баллы:
    104
    Это не параллельное программирование. Можешь на ИС на эту тему почитать... там много нюансов. Ну а так хорошее дело....
  17. TopicStarter Overlay
    Alex123
    Offline

    Alex123 Опытный в 1С

    Регистрация:
    20 июл 2012
    Сообщения:
    208
    Симпатии:
    0
    Баллы:
    26
    ИС это где?
Похожие темы
  1. Nadir
    Ответов:
    35
    Просмотров:
    7.229
  2. formozuz
    Ответов:
    3
    Просмотров:
    1.671
  3. alex-79
    Ответов:
    4
    Просмотров:
    2.308
  4. свема
    Ответов:
    4
    Просмотров:
    1.638
Загрузка...

Поделиться этой страницей