Все началось с того, что один мой знакомый (клиент) захотел добавить в своем магазине еще пару рабочих мест кассира, не на постоянной основе, а так, на случай большого наплыва клиентов в "Часы Пик", предполагая, что лицензии 1С будут отбираться у бухгалтера и менеджера, и на период "Час Пик" они же и будут "переводиться" в кассиры (покупатели наше все ;) Были изысканы пара дохленьких ноутбуков (отобраны у детей взамен обещания, что будут им новее и лучше :)
Ну и были озвучены все пожелания мне, короче, все в духе сказки "О Попе и его работнике Балде"
Обдумав ситуацию, было решено:
1. что крутиться будут эти два дополнительных места на файловом сервере 1С где лежит база, подключаясь туда по RDP;
2. кассу ККМ нужно покупать новую, выбор пал на Атол, с возможностью подключения по сети Ethernet, (выбрали АТОЛ FPrint-22ПТК)
3. нужно будет слегка допилить 1С Розницу в плане возможности печатать чеки на одну ККТ с нескольких компьютеров (Сеансов 1С)
Сказано-сделано!
1) Терминальный доступ поручили настраивать Сисадмину (нечего у людей хлеб отбирать :)
2) ККТ приобрели, зарегистрировали и получили ее для "Опытов" ну в смысле для отладки нового функционала.
3) Имелась 1С Розница 2.2.13.8 (кто-то до нас в ней включил возможность внесения изменений, вот и славно, не придется "брать грех на душу" :) и мне предстояло отучить ее от привычки намертво привязывать настройки подключаемого оборудования к имени пользователя_windows/компьютера, а точнее дать возможность задать каждому пользователю 1С указывать "понравившееся" Рабочее_Место и вместе с ним и настройки торгового оборудования и РМК.
Что и было сделано парой небольших мазков молодого отрока на холсте великого мастера
//ПланВидовХарактеристик.НастройкиПользователей в тип хранимых настроек добавляем Справочник.РабочиеМеста
//ОбщийМодуль->МенеджерОборудованияВызовСервера
//Добавим функцию для получения Рабочего места из настроек пользователя
Функция ПолучитьРМПользователя() Экспорт
УстановитьПривилегированныйРежим(Истина);
Магазин = ПараметрыСеанса.ТекущийМагазин;
Пользователь = ОбщегоНазначенияРТ.ПользовательСУчетомИзмененныхПрав();
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| НастройкиПользователей.Значение КАК Значение
|ИЗ
| РегистрСведений.НастройкиПользователей КАК НастройкиПользователей
|ГДЕ
| НастройкиПользователей.Пользователь.Ссылка = &Пользователь
| И НастройкиПользователей.Магазин = &Магазин
| И НастройкиПользователей.Настройка = &Настройка";
Запрос.УстановитьПараметр("Пользователь", Пользователь);
Запрос.УстановитьПараметр("Магазин" , Магазин);
Запрос.УстановитьПараметр("Настройка" , ПланыВидовХарактеристик.НастройкиПользователей.РабочееМесто);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
ОсновнРабочееМесто = Выборка.Значение
КонецЕсли;
Если ЗначениеЗаполнено(ОсновнРабочееМесто)тогда
Возврат ОсновнРабочееМесто.Ссылка;
Иначе
возврат Справочники.РабочиеМеста.ПустаяСсылка();
КонецЕсли;
КонецФункции
// И тут буквально 3 строчки для вызова нашей процедуры
Процедура УстановитьПараметрыСеансаПодключаемогоОборудования(ИмяПараметра, УстановленныеПараметры) Экспорт
Если ИмяПараметра = "РабочееМестоКлиента" Тогда
// Если с идентификатором клиента текущего сеанса связано одно рабочее место,
// то его сразу и запишем в параметры сеанса.
ТекущееРМ = Справочники.РабочиеМеста.ПустаяСсылка();
СистемнаяИнформация = Новый СистемнаяИнформация();
// ++ТутВставить
ТекущееРМ = ПолучитьРМПользователя();
Если ТекущееРМ = Справочники.РабочиеМеста.ПустаяСсылка() тогда
//--До сюда
СписокРМ = НайтиРабочиеМестаПоИД(ВРег(СистемнаяИнформация.ИдентификаторКлиента));
Если СписокРМ.Количество() = 0 Тогда
// Будет создано с клиента.
Иначе
ТекущееРМ = СписокРМ[0];
КонецЕсли;
// ++ТутВставить
КонецЕсли;
//--До сюда
УстановитьРабочееМестоКлиента(ТекущееРМ);
Если ТипЗнч(УстановленныеПараметры) = Тип("Структура") Тогда
УстановленныеПараметры.Вставить("РабочееМестоКлиента");
Иначе
УстановленныеПараметры.Добавить("РабочееМестоКлиента");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Протестировал:
На RDP сервер Установили драйвер ККТ Атол v10.7 (На v10.5 тоже работает на других не проверял)
На новом рабочем месте (т.е. в сеансе RDP под пользователем Кассир№2) запускаем 1С от пользователя Кассир№2
пробегаемся мастером настройки РМК (Настраиваем Кассу обычным порядком, как в любой 1С Рознице для подключения ККТ)
вроде все печатается Ок.
На втором дополнительном рабочем месте (т.е. в сеансе RDP под пользователем Кассир№3 и пользователем 1С Кассир№3 ) Заходим Администрирование - Пользователи - настройки пользователя - Рабочее_Место указываем рабочее место Кассира№2 настроенное шагом выше.
Все теперь при входе под пользователем Кассир№3 можем работать с Кассой ККТ Кассира№2 (Понимаем, что Кассовая смена будет одна на двоих Закрывать/Открывать смену дважды не нужно, а также во избежание недоразумений не стоит абсолютно синхронно нажимать кнопку "Пробить чек")
Отдаем все в промышленную эксплуатацию.
Все бы хорошо, но на деле, как всегда, не все бывает гладко
Выяснилось, что когда ККТ поставили в то место где ему предназначено между двумя АРМами (ноутами) в торговом зале, подключили все это добро к "Рабочей Сети" где гуляет файловая 1С, интернет и еще Бог знает что. На печать одного чека на сетевую ККТ требуется от 30 секунд до нескольких минут, при этом Чек печатается буквально по-сим-воль-но.
Проверил скорости портов, линки сети, загрузку сервера... и все на что мог подумать... все Ок!?
Из теста драйвера ККМ одинаково хорошо печатает как по USB/COM так и при подключении по сети Ethernet.
Когда пытаешь распечатать чек из 1С, при подключении ККМ непосредственно к компьютеру, то все печатается как обычно без нареканий, а если ККМ подключить по сети, то на печать чека уходит столько времени, что покупатель может успеть сбегать в соседний ларек за пивом :)
Потратил кучу времени на поиск решения проблемы в интернете, похожие ситуации изредка попадались, но чаще всего народ сдавался и плевал на идею печати на Кассу ККТ по сети, либо предлагались замудренные решения с установкой виртуальных СОМ портов (что-то наподобие программного принт-сервера только для устройств на СОМ портах), натыкался на попытки обратиться в техподдержку Атола и их ответ: мол если из драйвера все нормально, то вопрос не к нам, а к 1С или купите у нас Фронтол :)
В конце концов наткнулся на упоминание некоего параметра в win_registry TcpAckFrequency вот Тут , спасибо огромное автору.
Смысл в том, как я понял, что происходят бесконечные согласования между сторонами при установке связи по протоколу TCP/IP между кассой и компом, но если через regedit открыть параметры сетевого интерфейса и добавить ключ TcpAckFrequency с типом Dword и задать ему значение =1 то все начинает работать как надо.
Вот так!!!
PS: Полгода полет нормальный.
Открылся дополнительный пруфит, если менеджеру или Бухгалтеру нужно распечатать чек к ПКО/РКО то совсем нет необходимости идти и сгонять с рабочего места Продавца-Кассира они также прописав себе в настройках Рабочее_Место могут спокойно печатать чеки.
Но вот "вредный СисАдмин" решил поапгрейдить сервер, и все вроде переставил (как он думал), а чеки опять стали тормозить... и чтобы в третий раз не мучить Яндекс глупыми вопросами, решился тут наваять публикацию себе на память, ну и вдруг кому пригодится.