Подключение ККТ (Торгового оборудования) в разрезе Пользователя или Клиента RDP
28.09.17 21:28

Задача: Установить доступ видимости ККТ в разрезе пользователей.

Нашел замечательную статью - //infostart.ru/public/197612/ по всей видимости Денис Аграновский к ней потерял интерес, поэтому комментарии к статье оказались намного актуальнее. Так как статья написанна в 2013 году, уже много что поменялось. Особенно понравились комментарии  Сергея Муравьёва и Сергея Капустина. Их код в принципе довольно актуальный несмотря на то, что был написанн в 2015 и 2016 гг, а сейчас на дворе 2017 и был введён новый документ "Кассовая смена" для работы с ККТ! Правильно сказал Сергей Муравьев, что с изменением типового регистра сведений на добавление новых ресурсов придёт и к изменению запросов, а теперь и документов.

По этому Сергей Муравьёв предложил использовать ресурс "Компьютер" и для других разрезов, используя разделитель. Допустим "_" вполне устраивает многих.

Для удобства работы с ККТ и его настройкой я изменил форму обработки, выведя поля "Компьютер" для последующего изменения. Можно, конечно, снять режим просмотра с регистра сведений "Торговое оборудование" и изменять там, кому как удобнее. Но администраторы ККТ используют эту обработку при подключении новых ККТ в моём случае.

Оригинальный код Сергея Капустина - разрез терминальных сессий:

Комментарий: данный код позволяет для обычных не терминальных пользователей записывать компьютеры локальные "ИмяКомпьютера", а для пользователей, работающих на терминале, запись ведется типа "ИмяСервера_ИмяКлиентаКомпьютера" в результате чего теримнальные пользователи больше не видят сумасшедший список подключенных ККТ.


Функция ПолучитьИмяКомпьютераТО() 

    Если мИмяКомпьютера = Неопределено Тогда
        мИмяКомпьютера = ВРег(ИмяКомпьютера());
                         WshShell = Новый COMОбъект("WScript.Shell"); 
                         
                         ИмяКомпьютераКлиента = WshShell.expandEnvironmentStrings("%CLIENTNAME%"); 
                         
                         ИмяСессии = WshShell.expandEnvironmentStrings("%SESSIONNAME%");
                          
                         Если ИмяСессии="Console" Тогда
                             //Имя Компьютера будет равно имени терминального сервера
                         Иначе     
                              //Терминальный клиент
                              мИмяКомпьютера = мИмяКомпьютера + "_"+ ИмяКомпьютераКлиента;
                         КонецЕсли;
              
    КонецЕсли;

    Возврат мИмяКомпьютера;
КонецФункции

Моя интерпретация - разрез пользователей:

Комментарий: мне не совсем подошла идея с разрезом терминальных сессий из-за того, что были обнаруженны одинаковые имя клиентских машин. Машины не находятся в едином пространстве и по этому был добавлен разрез пользователей, который точно уникален.


Функция ПолучитьИмяКомпьютераТО() Экспорт

    Если мИмяКомпьютера = Неопределено Тогда
        
        мИмяКомпьютера = ВРег(ИмяКомпьютера());        
        WshShell = Новый COMОбъект("WScript.Shell");                          
        ИмяПользователя = WshShell.expandEnvironmentStrings("%USERNAME%"); 
        мИмяКомпьютера = мИмяКомпьютера + "_" + ИмяПользователя;

    КонецЕсли;

    Возврат мИмяКомпьютера;
    
КонецФункции

После изменения функции и корректировки регистра сведений, данные не повлияли на документ "Кассовой смены" и не отразились никак на работе ККТ, пользователи не заметили никаких изменений, даже открытые смены до обновления не пришлось переоткрывать.

Развивать мысли можно дальше, добавить кнопку информирования, которая будет сообщать данную строчку под запущенным клиентом, опять же для удобства, допустим, работы администратора ККТ.

Можно расширить количество разрезов, добавив, допустим, ИмяСервера_ИмяКлиента_ИмяПользователя, можно расширять и модифицировать  дальше при необходимости.

Главное удобство - это работает с минимальными изменениями в связи с вводом новых документов для работы с ККТ.

Read Full Article