Быстро пишем форму для ТСД для «неуправляемого» интерфейса.

20.02.13

Разработка - Работа с интерфейсом

В этой статье автор делится опытом как быстро и просто написать или изменить формы, размер которых сам подстроится под терминал сбора данных (ТСД).

Часто бывает необходимо организовать работу через терминал сбора данных (ТСД). Нередко бывает так, что организация использует терминалы с различными разрешениями экрана. Делать различные формы под каждое разрешение, конечно не сложно, но это можно не делать, если форму сделать такой, чтобы она сама подстраивалась под любое разрешение. При этом должен подстраиваться и шрифт на элементах формы.

Для начала сделаем форму под самый малый размер ТСД, а именно 235х310. Он должен быть чуть меньше реального (240 х 320) , чтобы  точно избежать дополнительных элементов прокрутки. Дело в том, что ими пользоваться в ТСД очень неудобно, т.к. нельзя прикрутить клавиши ТСД.

 

Затем на форму поместим таблицу, клавиши, поле для ввода. Способ отображения окна сделаем «Максимизированное» и поставим галку на Режим рабочего стола, чтобы окно открывалось во весь экран ТСД.

На форму добавим  4 кнопки «Вверх», «Вниз», «Ввод» и «Закрыть». К кнопкам формы «Вверх», «Вниз» (которые у нас будут перемещать выделенную строку в таблице) мы привяжем соответствующие клавиши ТСД, к кнопке «Закрыть» привяжем клавишу «ECS», а к кнопке «Ввод» - «ENTER».

Теперь о привязке кнопок. Воспользуемся нестандартным способом привязки горячих клавиш, поскольку, стандартным нельзя привязать Enter и многие другие.

Функция ВернутьСочетаниеКлавиш(Знач КодКлавиши, Alt=Ложь, Ctrl =Ложь, Shift=Ложь) Экспорт

    Если ТипЗнч(КодКлавиши)=Тип("Строка") Тогда

             КодыКлавиш =Новый Соответствие();

             КодыКлавиш.Вставить("ESC",27);

             КодыКлавиш.Вставить("TAB",9);

        КодыКлавиш.Вставить("BACKSPACE",8);

             КодыКлавиш.Вставить("ENTER",13);

             КодыКлавиш.Вставить("SHIFT",16);

             КодыКлавиш.Вставить("CTRL",17);

             КодыКлавиш.Вставить("ALT",18);

             КодыКлавиш.Вставить("CAPSLOCK",20);

        КодыКлавиш.Вставить("SPACE",20);

        КодыКлавиш.Вставить("END",35);

             КодыКлавиш.Вставить("HOME",36);

        КодыКлавиш.Вставить("LEFT",37);

             КодыКлавиш.Вставить("UP",38);

        КодыКлавиш.Вставить("RIGHT",39);

        КодыКлавиш.Вставить("DOWN",40);

        КодыКлавиш.Вставить("INS",45);

        КодыКлавиш.Вставить("DEL",46);

             КодыКлавиш.Вставить("F1",112);

             КодыКлавиш.Вставить("F2",113);

             КодыКлавиш.Вставить("F3",114);

             КодыКлавиш.Вставить("F4",115);

             КодыКлавиш.Вставить("F5",116);

             КодыКлавиш.Вставить("F6",117);

             КодыКлавиш.Вставить("F7",118);

             КодыКлавиш.Вставить("F8",119);

             КодыКлавиш.Вставить("F9",120);

             КодыКлавиш.Вставить("F10",121);

             КодыКлавиш.Вставить("F11",122);

             КодыКлавиш.Вставить("F12",123);

             текКод = КодыКлавиш.Получить(ВРЕГ(КодКлавиши));

             Если текКод=Неопределено Тогда

                    Возврат Неопределено;

             Иначе 

                 КодКлавиши = текКод;

             КонецЕсли;

       КонецЕсли;

      

      

    Модификатор = 0;

       Если Alt Тогда

             Модификатор = Модификатор + 16;

       ИначеЕсли Ctrl Тогда

             Модификатор = Модификатор + 8;

       ИначеЕсли Shift Тогда

             Модификатор = Модификатор + 4;

       КонецЕсли;

 

    стрВнутр = "{""#"",69cf4251-8759-11d5-bf7e-0050bae2bc79,1," + Символы.ПС + "{0," + КодКлавиши + "," + Модификатор + "}" + Символы.ПС + "}";

    Возврат ЗначениеИзСтрокиВнутр(стрВнутр);

КонецФункции

 

После того как мы привяжем основные клавиши, мы сможем сэкономить место на ТСД, если уберем основные под таблицу, поместив ее на передний план.

 

 

 

Теперь сделаем привязки элементов формы так, чтобы они масштабировались.

    

 

 

Когда возникает событие формы «ПередОткрытием», форма еще имеет исходные размеры. Мы запомним эти размеры. Потом уже после открытия формы и изменения ее под размер экрана мы отмасштабируем шрифты (а элементы формы изменят размер сами в соответствии с настройками привязок) следующей процедурой, в которой увеличим шрифт либо в соответствии с новыми размерами формы, либо подстроив его под размер поля ввода по формуле, что 1 пункт размера шрифта это ¾ пиксела:

 

Процедура ПриИзмененииРазмеровФормы(Форма,сткИсходныеРазмеры=0) Экспорт

       Если сткИсходныеРазмеры=0 Тогда

             сткИсходныеРазмеры = Новый Структура("Ширина,Высота",240,320);

       КонецЕсли;

 

       КоэфУвеличения =  Окр(Форма.Высота/сткИсходныеРазмеры.Высота,0);

      

       Для каждого Элемент Из Форма.ЭлементыФормы Цикл

             Если ТипЗнч(Элемент) = Тип("ПолеВвода") Тогда

                    текШрифт =  Элемент.Шрифт;

                    текРазмер =  (Элемент.Высота-2)*3/4;

                    Элемент.Шрифт = Новый Шрифт(текШрифт,,текРазмер);

             ИначеЕсли ТипЗнч(Элемент) = Тип("ТабличноеПоле") Тогда

                    текШрифт =  Элемент.Шрифт;

                    текРазмер =  текШрифт.Размер*КоэфУвеличения;

                    Элемент.Шрифт = Новый Шрифт(текШрифт,,текРазмер);

                    Элемент.ШрифтШапки =  Новый Шрифт(текШрифт,,текРазмер);

                   

                    КоэфШирины =  Форма.Ширина/сткИсходныеРазмеры.Ширина;

                    Для Каждого текКолонка Из  Элемент.Колонки Цикл

                           Если текКолонка.Видимость Тогда

                                  текКолонка.Ширина = текКолонка.Ширина*КоэфШирины;

                           КонецЕсли;

                    КонецЦикла;

 

             Иначе

                    Попытка

                           текШрифт =  Элемент.Шрифт;

                    Исключение

                        Продолжить;

                    КонецПопытки;

              текШрифт =  Элемент.Шрифт;

                    текРазмер =  текШрифт.Размер*КоэфУвеличения;

                    Элемент.Шрифт = Новый Шрифт(текШрифт,,текРазмер);

                    Если ТипЗнч(Элемент) = Тип("Кнопка") Тогда

                           Если Элемент.Имя = "КнопкаЗакрыть" Тогда

                                  Элемент.СочетаниеКлавиш =ВернутьСочетаниеКлавиш("ESC");

                           ИначеЕсли Элемент.Имя = "КнопкаВверх" Тогда

                       Элемент.СочетаниеКлавиш =ВернутьСочетаниеКлавиш("UP");

                           ИначеЕсли Элемент.Имя = "КнопкаВниз" Тогда

                       Элемент.СочетаниеКлавиш =ВернутьСочетаниеКлавиш("DOWN");

                           ИначеЕсли Элемент.Имя = "КнопкаВвод" Тогда

                       Элемент.СочетаниеКлавиш =ВернутьСочетаниеКлавиш("ENTER");

                           КонецЕсли;

                    КонецЕсли;

             КонецЕсли;         

       КонецЦикла;

       Возврат;

КонецПроцедуры

 

 События «ПослеОткрытия» нет, но есть событие, которое срабатывает сразу же После открытия формы. Это  - «ОбновлениеОтображения». Мы этим событием для определения конечных размеров формы и  установления размеров шрифтов воспользуемся только раз и вызовем от-туда функцию, которая изменит размеры шрифтов.

 

В итоге получим модуль формы:

 

Перем сткИсходныеРазмеры;

Перем ФлФормаОткрыта;

 

Процедура ОбновлениеОтображения()

       Если НЕ ФлФормаОткрыта Тогда

             ПриИзмерениеРазмеровФормы(ЭтаФорма,сткИсходныеРазмеры);

             ФлФормаОткрыта = Истина;

       КонецЕсли;

КонецПроцедуры

 

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

       ФлФормаОткрыта = Ложь;

       сткИсходныеРазмеры  = Новый Структура("Ширина,Высота",ЭтаФорма.Ширина,ЭтаФорма.Высота);

КонецПроцедуры

 

Функции «ПриИзмененииРазмеровФормы» и «ВернутьСочетаниеКлавиш» мы поместим в глобальный модуль, чтобы их можно было вызвать из других форм.

 

 

См. также

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Обработка предназначена для редактирования картинок в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Также обработка может быть использована из встроенного языка как объект для редактирования картинок. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Данная обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    61797    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

Работа с интерфейсом Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    54403    16    21    

42

Управление дашбордами

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    16698    21    4    

35

Новогоднее оформление для 1С

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    10738    750    elcoan    45    

106

Конструктор HTML, CSS и javascript

Инструментарий разработчика Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

2 стартмани

10.04.2023    9617    151    acces969    31    

118

Модель состояния для MVC

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

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    3666    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12082    1    5    

10
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Magister 134 21.02.13 01:28 Сейчас в теме
Оригинальный способ назначения горячих клавиш!
Зачет :)
2. Angeros 21.02.13 04:39 Сейчас в теме
Я что-то вообще не понял что это за функция "ВернутьСочетаниеКлавиш"?! Кто ее вызывает? Откуда взялся уид в конце функции?
3. Angeros 21.02.13 04:45 Сейчас в теме
По(2)вник походу, но непонятно откуда вы такой метод выдумали?!
5. chekonst 41 21.02.13 10:15 Сейчас в теме
(3) Angeros,
Методу назначения горячих клавиш нашел уже давно, где то в дебрях интернета. Мне ее лишь пришлось немного доработать. А основная метода по ТСД родилась после того, как в очередной раз "достали" с изменением размеров ТСД. "Задолбало" каждый раз переписывать или перенастраивать.
6. SatanClaws 143 21.02.13 10:44 Сейчас в теме
4. YuraLu 21.02.13 06:53 Сейчас в теме
Я в реале сталкивался с такой проблемой. Сяду курить методу. Если получится, то прекрасно...
7. Angeros 21.02.13 10:44 Сейчас в теме
По моему настоящий програмерский пост. То что и нужно. +
8. dyak84 21.02.13 11:04 Сейчас в теме
Спасибо очень пригодилось
9. Mell 21.02.13 12:03 Сейчас в теме
Интересный пост, имеем много ТСД, но подключали их только стандатрными способами. Узнал много нового)
10. pablo_escobar 21.02.13 16:25 Сейчас в теме
Что то не пойму как использовать эти формы на ТСД? В режиме терминального доступа?
11. chekonst 41 21.02.13 16:31 Сейчас в теме
Да, именно в терминальном режиме
12. Milanick 22.02.13 10:14 Сейчас в теме
Ребята, кто работал с ТСД и штрих кодами, подскажите , с чего начать можно. Горю желанием попробовать сие чуда техники, но не знаю как подойти к этому
13. chekonst 41 22.02.13 10:23 Сейчас в теме
С покупки ТСД. Подключение к 1С через терминальное соединение. У ТСД разрешения обычно 240*320 или 480*640. В ТСД установлена программа для передачи штрих кода непосредственно в поле ввода, она позволяет передать код через терминальное соединение в приложение.
Можно для пробы взять также телефон с разрешением 240*320 или 480*640 и операционной системой windows for mobile ну или небольшой GPS навигатор с wifi с windows CE. Считывать он штрих коды, конечно не будет, но на нем можно отладить интерфейс.
14. Светлый ум 406 22.02.13 10:27 Сейчас в теме
Респект, то чего обычно не хватает под рукой.
15. Milanick 22.02.13 10:51 Сейчас в теме
chekonst
Есть список ТСД, которые нормально интегрятся с 1С, без бубнов?
18. expert.1c8 22.02.13 21:01 Сейчас в теме
(15) Да тоже интересен такой список для склада, например, дешевый сегмент,
личный опыт - это часто и есть та самая реклама..
16. chekonst 41 22.02.13 11:03 Сейчас в теме
Выпускают разные ТСД под разные задачи, под разные температурные и влажностные режимы: складские , почтовые и прочие. Список здесь в открытом доступе опубликовать не могу, т.к. это будет либо рекламой либо антирекламой.
17. tolyan_ekb 104 22.02.13 12:31 Сейчас в теме
Есть информация на сколько хватает зарядки ТСД в режиме терминального доступа? Есть ли другая технология, например, веб-клиент, которая выигрывает по энергозатратам?
19. opus70 73 05.05.13 18:08 Сейчас в теме
подскажите как назначить кнопкам клавиши
не понятно где использовать
ВернутьСочетаниеКлавиш(...
20. CheBurator 3119 24.12.14 04:27 Сейчас в теме
Незачет
Отсутствуют скрины-примеры получившейся формы
Меня как потребителя мало интересует код
В первую очередь интересует юзабельный интерфейс

Возможно из статьи почерпну полезное
Придется видимо переписывать интерфейс промышленной wms на восьмерке
Оставьте свое сообщение