Торговое оборудование. Доработка функции ПолучитьИмяКомпьютераТО() в типовых конфигурациях 1С 8.2

28.08.15

Разработка - Универсальные функции

Много раз замечал, что в типовых решениях не доработана функция определения имени клиентского компьютера, особенно когда работа с торговым оборудованием идет через RDP. В публикации представлен метод, решающий эту проблему. Представленная функция взята из типовой конфигурации "1С: Комплексная автоматизация, ред 1.1"

На уникальность статьи не претендую, но, возможно, представленный метод кому-нибудь поможет.

Мною было замечено, что при работе с типовыми конфигурациями типа УТ 10.3 и Розница для платформы 8.2 возникают проблемы с торговым оборудованием при работе через RDP. В конфигурации КА 1.1 данная проблема решена, возможно, ее нет и в УПП.

Проблема следующая: когда нужно настроить работу торгового оборудования через RDP на нескольких рабочих местах, без доработки это сделать не удастся, т.к. 1С будет получать неправильное имя компьютера, для которого нужно получить сохраненные настройки. Т.е. 1С получает не имя клиентского компьютера, а имя сервера, где запускается 1С. Отсюда и проблемы.

Вся суть кроется в функции ПолучитьИмяКомпьютераТО() в модуле обработки СерверТО. В типовых УТ 10.3 и Розница она выглядит так:

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

	Если мИмяКомпьютера = Неопределено Тогда
		мИмяКомпьютера = ВРег(ИмяКомпьютера());
	КонецЕсли;

	Возврат мИмяКомпьютера;

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

Данную функцию нужно заменить на следующую:

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

	Если мИмяКомпьютера = Неопределено Тогда
	    WSS = Новый COMОбъект("WScript.Shell");
	    WSSE = WSS.Environment("Process");

	    мИмяКомпьютера = ВРег(WSSE.Item("ClientName"));
	
		Если ПустаяСтрока(мИмяКомпьютера) Тогда
			мИмяКомпьютера = Неопределено;
		КонецЕсли;
	КонецЕсли;	
	
	Если мИмяКомпьютера = Неопределено ИЛИ ВРег(СокрЛП(мИмяКомпьютера)) = "CONSOLE" Тогда
		мИмяКомпьютера = ВРег(ИмяКомпьютера());
	КонецЕсли;

	Возврат мИмяКомпьютера;

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

Вот и все. Всем удачи и спасибо за внимание!

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2670    0    John_d    8    

54

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4607    atdonya    22    

45

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    3960    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8821    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16143    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7243    quazare    8    

109
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. deadman66 28.08.15 13:54 Сейчас в теме
Да, метод рабочий. Использую уже года два такое решение. Вот только не проверял при админском запрете выполнения скриптов на RDP (в исключение вывалиться или нет).
2. Вурдалак 23 28.08.15 18:45 Сейчас в теме
(1) deadman66, ну этот метод типовой. вроде пока работает, правда у нас запрета вроде не стоит. надо у Админа уточнить
3. buddha667 02.09.15 10:24 Сейчас в теме
Я функцию модифицировал минимально:

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

    Если мИмяКомпьютера = Неопределено Тогда
        //мИмяКомпьютера = ВРег(ИмяКомпьютера());
        мИмяКомпьютера = ВРег(ИмяКомпьютераПолное());
    КонецЕсли;

    Возврат мИмяКомпьютера;

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


А сам алгоритм вынес отдельно в глобальный модуль, ибо помнится, где-то еще пришлось заменить ИмяКомпьютера()

Функция ИмяКомпьютераПолное() Экспорт
	
	ИмяКомпьютера = "";
	Попытка
		WshShell = Новый COMОбъект("WScript.Shell");
		WshSysEnv = WshShell.Environment("Process");
		ИмяКомпьютера = WshSysEnv.Item("CLIENTNAME");
	Исключение
	КонецПопытки;
	
	Если НЕ ЗначениеЗаполнено(ИмяКомпьютера) ИЛИ ВРег(СокрЛП(ИмяКомпьютера)) = "CONSOLE" Тогда
		ИмяКомпьютера = ИмяКомпьютера();
	КонецЕсли;
	
	Возврат ИмяКомпьютера;
	
КонецФункции
Показать


ЗЫ: Воспользовался вашим советом, добавил ...
ИЛИ ВРег(СокрЛП(ИмяКомпьютера)) = "CONSOLE"
...
4. M_Volkov 5 12.10.17 17:27 Сейчас в теме
То что можно определить подключившийся компьютер к терминальному серверу это здорово. Но он же может незаметно отвалиться. Как в нужный момент определить, что он на месте, все еще подключен, и можно воспользоваться его оборудованием? Например, отбить чек на фискальном регистраторе.
5. M_Volkov 5 14.10.17 06:55 Сейчас в теме
Проверить подключение компьютера можно командой: ping. А какой командой проверить порт Com20 самой кассы?
6. acanta 08.10.18 12:13 Сейчас в теме
Оставьте свое сообщение