Примитивная синхронизация времени на ккм атол с помощью python

1. letarch 28.07.20 15:20 Сейчас в теме
Вот скрипт на питоне для дто10. Пишу сюда, чтобы если что потом найти здесь когда ещё раз понадобится и локальные программисты 1с опять не осилят задачу по синхронизации времени касс с помощью 1с ))
# -*- coding: utf-8 -*-

# Инициализация драйвера
import sys
import os
from libfptr10 import IFptr
from datetime import datetime
LIBRARY_PATH = os.path.dirname(os.path.abspath(__file__))
fptr = IFptr("")

# Подключение к устройству
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_PORT, str(IFptr.LIBFPTR_PORT_TCPIP))
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_IPADDRESS, "192.168.132.32")
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_IPPORT, "5555")
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_MODEL, "69")
fptr.applySingleSettings()

# Открытие соединения с устройством
fptr.open()

# Установка времени
fptr.setParam(IFptr.LIBFPTR_PARAM_DATE_TIME, datetime.now())
fptr.writeDateTime()

# Закрытие соединения с устройством
fptr.close()
Показать
alex57951; +1 Ответить
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
8. alex57951 28.12.21 10:12 Сейчас в теме
(1)При использовании данного скрипта ругается на libfptr10
"ModuleNotFoundError: No module named 'libfptr10' "
Что я делаю не так?
2. succub1_5 89 28.07.20 16:03 Сейчас в теме
Если кто 1С-программист до сих пор не осилил (по сверхъестественным причинам или за ненадобностью) синхронизацию времени 1С <-> фп/ККМ атолл то вот (ДТО 10):
//инициализация драйвера
глПринтер = Новый COMОбъект("AddIn.Fptr10");

Процедура глУстановитьДатуНаПринтере()
	
	ВерсияДрайвера 		= ВерсияДрайвера();
	ВерсияПрошивки 		= ВерсияПрошивки();
	НеотправленоВОФД 	= НеотправленоВОФД();
	СерийникФН 			= СерийникФН();
	СерийникККМ		= СерийникККМ();

	глПринтер.setParam(глПринтер.LIBFPTR_PARAM_TEXT, ""+ВерсияДрайвера + "; " + ВерсияПрошивки + "; " + НеотправленоВОФД);
	глПринтер.printText();
	глПринтер.setParam(глПринтер.LIBFPTR_PARAM_TEXT, "ФН: "+ СерийникФН + "; ККМ: " + СерийникККМ);
	глПринтер.printText();
				
        //установка даты/времени
	глПринтер.setParam(глПринтер.LIBFPTR_PARAM_DATE_TIME, ТекущаяДата());
	глПринтер.writeDateTime();	
				
	глПринтер.lineFeed();
	глПринтер.lineFeed();
КонецПроцедуры 

Функция ВерсияДрайвера() 
	Возврат СокрЛП(глПринтер.version());			
КонецФункции

Функция ВерсияПрошивки()
	глПринтер.setParam(глПринтер.LIBFPTR_PARAM_DATA_TYPE, глПринтер.LIBFPTR_DT_UNIT_VERSION);
	глПринтер.setParam(глПринтер.LIBFPTR_PARAM_UNIT_TYPE, глПринтер.LIBFPTR_UT_CONFIGURATION);
	глПринтер.queryData();			
	Возврат СокрЛП(глПринтер.getParamString(глПринтер.LIBFPTR_PARAM_UNIT_VERSION));			
КонецФункции

Функция НеотправленоВОФД()	
	глПринтер.setParam(глПринтер.LIBFPTR_PARAM_DATA_TYPE, глПринтер.LIBFPTR_DT_UNIT_VERSION);
	глПринтер.setParam(глПринтер.LIBFPTR_PARAM_UNIT_TYPE, глПринтер.LIBFPTR_UT_CONFIGURATION);
	глПринтер.queryData();			
	Возврат СокрЛП(глПринтер.getParamString(глПринтер.LIBFPTR_PARAM_UNIT_VERSION));			
КонецФункции

Функция СерийникФН() 
	глПринтер.setParam(глПринтер.LIBFPTR_PARAM_FN_DATA_TYPE, глПринтер.LIBFPTR_FNDT_FN_INFO);
	глПринтер.FNQueryData();			
	Возврат СокрЛП(глПринтер.getParamString(глПринтер.LIBFPTR_PARAM_SERIAL_NUMBER));
КонецФункции

Функция СерийникККМ() 
	глПринтер.setParam(глПринтер.LIBFPTR_PARAM_DATA_TYPE, глПринтер.LIBFPTR_DT_STATUS);
	глПринтер.queryData();			
	Возврат СокрЛП(глПринтер.getParamString(глПринтер.LIBFPTR_PARAM_SERIAL_NUMBER));			
КонецФункции

Показать
3. letarch 28.07.20 20:57 Сейчас в теме
(2)спасибо за отзыв, а если Com объекты нельзя использовать, так как платформа установлена на linux сервер?
9. fixin 4253 29.08.22 13:07 Сейчас в теме
(2) у меня так получилось под ДТО10:
Драйвер = оккм;
    Если ККМ.ЭтоДрайверАтол10() Тогда
		Если НЕ ККМ.ПодключитьККМ(Драйвер) Тогда
		Сообщить("Не подключено!");
  	  КонецЕсли;

		  Драйвер.setParam(Драйвер.LIBFPTR_PARAM_DATE_TIME, ТекущаяДата())  ;                    
			Ответ = Драйвер.writeDateTime() ;              
        Сообщить(Ответ);
        Если Ответ <> 0 тогда
            Сообщить("Не удалось установить время: " + Драйвер.ErrorDescription());
        КонецЕсли;
Иначе
Сообщить("НЕ Атолл 10");
КонецЕсли;
Показать
4. Fox-trot 158 28.07.20 21:58 Сейчас в теме
ккм+линух? снимаю шляпу
5. succub1_5 89 29.07.20 08:33 Сейчас в теме
Если вдруг кто захотел геммора в связке 1с+линукс:
СисИнфо = Новый СистемнаяИнформация;
глТипПлатформы = СисИнфо.ТипПлатформы;

Если глТипПлатформы = ТипПлатформы.Linux_x86
		или  глТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда
		ПутьКФайлу3 = глКаталогИБ+"KKT_10_4_2/libfptr10_1c_lin32_10_4_2_0.so";
		Файл3 = Новый Файл(ПутьКФайлу3);
		Состояние(Файл3.ПолноеИмя);
		Если Файл3.Существует() Тогда
			ПодключеноПечать = ПодключитьВнешнююКомпоненту(ПутьКФайлу3, "Fp", ТипВнешнейКомпоненты.Native);
			Попытка
				глПринтер = Новый("AddIn.Fp.ATOL_KKT_1C83_V10");
			Исключение
				глФормаПредупреждение.Предупреждение = "глПринтер не создан AddIn.Fp.ATOL_KKT_1C83_V10 " + ОписаниеОшибки();
				ОткрытьФормуМодально(глФормаПредупреждение);
				Возврат 0;
			КонецПопытки;
		Иначе
			глФормаПредупреждение.Предупреждение = ""+ Файл3.ПолноеИмя + "  AddIn.Fp.ATOL_KKT_1C83_V10 не найден!";
			ОткрытьФормуМодально(глФормаПредупреждение);
			Возврат 0;
		КонецЕсли;
КонецЕсли;
Показать
6. letarch 29.07.20 09:21 Сейчас в теме
(5)чётко, спасибо. Но я немного опечатался, на linux стоит именно сервер 1с, а подключаются с виндового терминала через тонкий клиент, где установлена платформа 1с и ДТО10.
7. letarch 08.08.20 20:18 Сейчас в теме
итак, шутка юмора - местный 1сник не смог реализовать эту задачу даже с помощью всех этих примеров. И сделал какой-то БАТНИК. Ну собственно, я поржал ))) Неужели это так сложно? Может самому попробовать через 1с эту простейшую вещь сделать? ))
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот