Имя: Пароль:
1C
1С v8
Получить номер смены ККМ
0 Лиза777
 
31.07.19
13:31
Мне нужно получить программно номер смены на ККМ. Нашла код типа
    ФР.ПолучитьСостояниеККМ();
    НомерСмены=ФР.НомерСмены;
Но не могу разобраться как сам объект ФР получить?
1 unbred
 
31.07.19
13:37
(0) подключить ФР?
2 Лиза777
 
31.07.19
13:40
он подключен. Мне нужно номер открытой смены узнать
3 Масянька
 
31.07.19
13:50
(2) ФР - это и есть экземпляр кассы.
4 Лиза777
 
31.07.19
13:51
ну так понятно, я вот и спрашиваю как получить?
5 Garykom
 
гуру
31.07.19
13:54
От ККТ зависит (что такое ККМ не в курсе)
6 Лиза777
 
31.07.19
13:56
Штрих-М
7 Лиза777
 
31.07.19
13:56
(5) ККМ - контрольно-кассовая машина ))
8 Garykom
 
гуру
31.07.19
13:59
(7) И где вы машину нашли? Когда были Фискальные Регистраторы а сейчас Контрольно Кассовая Техника ?
9 unbred
 
31.07.19
14:01
(2) тогда без отладчика никак
10 piter3
 
31.07.19
14:01
(2) бред.
11 Масянька
 
31.07.19
14:02
Ну, например, так:
    Если глФРВкл = 1 Тогда
        глФР = Параметры.Получить("Объект");
    Иначе
        Сообщить("Фискальный регистратор: ошибка при подключении", "!");
        Сообщить("    " + Параметры.Получить("ОписаниеРезультата"));
    КонецЕсли;
12 unbred
 
31.07.19
14:05
(11) + Если НЕ СменаОткрыта тогда
сообщить("ой");
конецЕсли
13 Масянька
 
31.07.19
14:05
(12) Погоди...
До смены еще не дошли...
Ой.
14 Garykom
 
гуру
31.07.19
14:07
15 Лиза777
 
01.08.19
05:07
(8) ну да ))) по привычке пишу так
16 Лиза777
 
01.08.19
05:25
(11) а Параметры - это что?
17 Лиза777
 
01.08.19
05:42
(14) тут не понятно мне (((
Мне бы в обработке получить подключенный ФР и получить с него номер открытой смены.
Попробую в отладчике покопаться при пробитии чека КкМ, может возьму там и запишу куда-нибудь в тот момент
18 Лиза777
 
05.08.19
17:26
в обработке "ТОСервер" в процедуре "печать чека" есть номер смены, не знаю как мне его сохранять что ли, чтобы потом в отчёте моём самописном отразить какой номер смены был у чека?
19 Максим Нижегородец
 
06.08.19
09:35
Метод ПолучитьТекущееСостояние(ID_KKT) - возвращает НомерФД, НомерЧека, НомерСмены, СтатусСмены. Можно вызвать в любой момент. Не зависимо, закрыта смена или нет (ККТ должен быть включен в сеть и к ПК).
20 Лиза777
 
15.08.19
10:46
Я делала так

    МассивФР      = ПолучитьСерверТО().ПолучитьСписокУстройств(
    Перечисления.ВидыТорговогоОборудования.ФискальныйРегистратор,
    Справочники.КассыККМ.НайтиПоКоду("КСКС00001"));
    
    ФР            = Неопределено;
    СписокФР      = Новый СписокЗначений();
    Вид           = Неопределено;
    Представление = Неопределено;
    
    Для каждого ФР Из МассивФР Цикл
        ПолучитьСерверТО().ПолучитьПредставлениеУстройства(ФР, Вид, Представление);
        СписокФР.Добавить(ФР, Представление);
        ФР.ПолучитьСостояниеККМ();
        НомерСмены=ФР.НомерСмены;
    КонецЦикла;

на строке [ФР.ПолучитьСостояниеККМ()] ругается, что не такой объект ФР
21 unbred
 
15.08.19
10:58
фр=неопределено
для каждого фр из
я не претендую на то,что это неправильно ,но глаз режет
22 isa2net
 
15.08.19
11:10
(20) а если создать объект компоненты и обратиться через него?
23 Лиза777
 
15.08.19
11:15
(22) не знаю как это
24 isa2net
 
15.08.19
11:27
из ут 11:
Функция ПолучитьОбъектДрайвера(ДанныеДрайвера, ТекстОшибки = Неопределено)
    
    ОбъектДрайвера = Неопределено;
    
    Для Каждого ДрайверПО Из глПодключаемоеОборудование.ДрайвераПодключаемогоОборудования Цикл
        Если ДрайверПО.Ключ = ДанныеДрайвера.ДрайверОборудования  Тогда
            ОбъектДрайвера = ДрайверПО.Значение;
            Прервать;
        КонецЕсли;
    КонецЦикла;  
    
    Если ОбъектДрайвера = Неопределено Тогда
        Попытка
            
            ProgID = ДанныеДрайвера.ИдентификаторОбъекта;
            Если ПустаяСтрока(ProgID) Тогда
                ОбъектДрайвера = ""; // Драйвер не требуется
            Иначе
                ProgID1 = ?(Найти(ProgID, "|") > 0, Сред(ProgID, 1, Найти(ProgID, "|")-1), ProgID);
                ProgID2 = ?(Найти(ProgID, "|") > 0, Сред(ProgID, Найти(ProgID, "|")+1), ProgID);
                Если ДанныеДрайвера.ПоставляетсяДистрибутивом Тогда
                    ПодключитьВнешнююКомпоненту(ProgID1);
                Иначе
                    ИмяОбъекта = Сред(ProgID1, Найти(ProgID1, ".") + 1);
                    Префикс = Сред(ProgID1, 1, Найти(ProgID1, "."));
                    ProgID2 = Префикс + СтрЗаменить(ИмяОбъекта, ".", "_") + "." + ИмяОбъекта;
                    Если ДанныеДрайвера.ВСоставеКонфигурации Тогда
                        Результат = ПодключитьВнешнююКомпоненту("ОбщийМакет." + ДанныеДрайвера.ИмяМакетаДрайвера, СтрЗаменить(ИмяОбъекта, ".", "_"));
                    Иначе
                        СсылкаНаДрайвер = ПолучитьНавигационнуюСсылку(ДанныеДрайвера.ДрайверОборудования, "ЗагруженныйДрайвер");
                        Результат = ПодключитьВнешнююКомпоненту(СсылкаНаДрайвер, СтрЗаменить(ИмяОбъекта, ".", "_"));
                    КонецЕсли;
                КонецЕсли;
                ОбъектДрайвера = Новый (ProgID2);
            КонецЕсли;
                
        Исключение
            Инфо = ИнформацияОбОшибке();
            ТекстОшибки = Инфо.Описание;
        КонецПопытки;
        
        Если ОбъектДрайвера <> Неопределено Тогда
            глПодключаемоеОборудование.ДрайвераПодключаемогоОборудования.Вставить(ДанныеДрайвера.ДрайверОборудования, ОбъектДрайвера);
            ОбъектДрайвера = глПодключаемоеОборудование.ДрайвераПодключаемогоОборудования[ДанныеДрайвера.ДрайверОборудования];
        КонецЕсли;
        
    КонецЕсли;  
        
    Возврат ОбъектДрайвера;
    
КонецФункции
25 isa2net
 
15.08.19
11:32
или Новый("AddIn.DrvFR1C")
26 Лиза777
 
15.08.19
18:46
(24) нашла у себя аналогичную функцию. Только в глПодключаемоеОборудование.ДрайвераПодключаемогоОборудования - нет ничего почему-то
Хотя в торговом оборудовании галки на  трёх ККМ стоят
27 Лиза777
 
15.08.19
19:10
ну так и не получается никак ((((
28 Kigo_Kigo
 
15.08.19
22:44
(27) и не получится, потому чо Новый("AddIn.DrvFR1C") это прокладка между 1С и основным драйвером
вот тебе код

&НаКлиенте


Функция ПодключитьсяКФР(Пароль)
    Рез = 0;
    
    глФР.Password=Пароль;
    глФР.Connect();
    
    Ответ = глФР.ResultCode;
    Если Ответ=0 Тогда
        Рез=1;
    Иначе
        Сообщить(глФР.ResultCodeDescription);
    КонецЕсли;
    глФР.Beep();
    
    Возврат Рез;
КонецФункции
&НаКлиенте
Функция ОтключитьсяОтФР(Пароль, ЗапоминатьОшибку = 1)
    Рез = 0;
    
    // пеключим ФР в нерабочий режим
    глФР.Password=Пароль;
    глФР.Disconnect();
    
    Ответ = глФР.ResultCode;
    Если Ответ=0 Тогда
        Рез=1;
    ИначеЕсли ЗапоминатьОшибку = 1 Тогда
        Сообщить(глФР.ResultCodeDescription);
    КонецЕсли;
    
    Возврат Рез;
КонецФункции

&НаКлиенте
Процедура ИнициализироватьФР() Экспорт
    Попытка
        ПодключитьВнешнююКомпоненту("AddIn.DrvFR"); // достаточно штатной установки драйвера на локальный ПК или сервер
        ком=Новый COMОбъект("AddIn.DrvFR"); // никакой более регистрации на современных ОС обычно не требуется
        глФР=ком; // экспортная переменная глФР переменная должна быть объявлена в глобальном модуле обычного приложения
    Исключение
        Сообщить("Ошибка инициализации фискального регистратора кассовых чеков: "+ОписаниеОшибки(),СтатусСообщения.Важное);
    КонецПопытки;
    Пароль = 30;
    ПодключитьсяКФР(Пароль);
    глФР.ПолучитьСостояниеККМ();
        НомерСмены=глФР.НомерСмены;
Сообщить(НомерСмены);
ОтключитьсяОтФР(Пароль, ЗапоминатьОшибку = 1)
КонецПроцедуры;
29 Kigo_Kigo
 
15.08.19
22:45
и да не забудь переменную глФР объявить как общую экспортную
30 Kigo_Kigo
 
15.08.19
22:49
Сообщить(НомерСмены);
ОтключитьсяОтФР(Пароль, ЗапоминатьОшибку = 1)
КонецПроцедуры;

писать как

Сообщить(НомерСмены);
ОтключитьсяОтФР(Пароль);
КонецПроцедуры;
31 Лиза777
 
16.08.19
06:42
в ФР получает COM-объект, но на строку глФР.ПолучитьСостояниеККМ() пишет "метод не обнаружен".

В начале обработки прописала

Перем глФр Экспорт;
32 Лиза777
 
16.08.19
07:07
я пробовала глФР.LastSessionNumber пишет значение 1
33 Kigo_Kigo
 
16.08.19
07:42
SessionNumber номер последней закрытой смены

попробуйте вместо получитьсостояниеккм
его англ каманду
GetECRStatus()
34 Kigo_Kigo
 
16.08.19
07:46
И надеюсь что глФР вы объявили на клиенте
35 piter3
 
16.08.19
07:48
(34) ТАк вроде это 7.7
36 Kigo_Kigo
 
16.08.19
07:54
(35) какие же это клюшки если
Для каждого ФР Из МассивФР Цикл
37 Kigo_Kigo
 
16.08.19
07:57
&НаКлиенте
Перем глФР Экспорт
38 piter3
 
16.08.19
08:06
(36) Да пардон
39 Лиза777
 
16.08.19
11:43
(34) у меня НЕ управляемые формы
40 Лиза777
 
16.08.19
11:43
у меня комплексная автоматизация ред.1
41 isa2net
 
16.08.19
12:53
Отсюда: http://catalog.mista.ru/public/617491/
// Возвращает структуру вида СостояниеСмены (см.руководство программиста), НомерЧека, НомерСмены.
// При ошибке возвращает Неопределено.
//
Функция ПолучитьНомерСменыИЧека(рКодОшибки=0) Экспорт
Попытка
    рКодОшибки=0;
    
    фр=глФР;
    фр.Password=30; // и только так
    
    рез=фр.FNGetCurrentSessionParams();
    Если рез<>0 Тогда
        Сообщить("ПолучитьНомерСменыИЧека, ошибка получения: "+фр.ResultCodeDescription+" (использован пароль "+СокрЛП(фр.Password)+").");
        рКодОшибки=фр.ResultCode;
        Возврат Неопределено;
    КонецЕсли;    
    
    рРезультат=Новый Структура;
    рРезультат.Вставить("СостояниеСмены",фр.FNSessionState);
    рРезультат.Вставить("НомерСмены",фр.SessionNumber); // если закрыта, то последней, если открыта, то текущей
    рРезультат.Вставить("НомерЧека",фр.ReceiptNumber); // если закрыта, то 1, если открыта, то последниего текущего
    
    Возврат рРезультат;
Исключение
    Сообщить("ПолучитьНомерСменыИЧека, ошибка: "+ОписаниеОшибки(),СтатусСообщения.Важное);
    Возврат Неопределено;
КонецПопытки;
КонецФункции
42 Лиза777
 
16.08.19
13:38
(33) результат = 0
43 Лиза777
 
16.08.19
13:48
в фр.SessionNumber  получила номер смены ККМ. УРА!!!!!!
Спасибо огромное!!!!
44 Лиза777
 
16.08.19
13:51
Kigo_Kigo и    isa2net, вы меня прям спасли! так помогли!! жалко что нет возможности вам шоколадку передать или бутылочку пива ))