Имя: Пароль:
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, вы меня прям спасли! так помогли!! жалко что нет возможности вам шоколадку передать или бутылочку пива ))
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший