IE2017

Вывод информации на второй дисплей (дисплей покупателя)

Программирование - Практика программирования

Программа для обеспечения взаимодействия 1С со вторым дисплеем.

Столкнулся с необходимостью выводить информацию на второй дисплей для покупателей. Написал внешнюю программу для реализации данной задачи. Программа читает файл, находящийся в папке с программой 1.htm, и, если  дата записи файла была изменена с момента последнего отображения, то тогда отображает его на экране. При запуске программы она автоматически запускается на втором мониторе и через 10 секунд разворачивается во весь экран. Если второй монитор отключен, то запуск произойдет на основном мониторе. Тогда пользователь должен успеть включить второй и перетащить на него за десять секунд или закрыть программу и запустить ее после включение дополнительного монитора. Если не успели закрыть программу до ее разворачивания на весь экран, то закрыть можно через стандартную комбинацию клавишь Alt F4. Интервал проверки файла на изменения 1 секунда. Файл 1.htm созадется из табличного документа и это позволяет вывести любую информацию на дисплей стандартными средствами 1С, исключая, разве что видео(для этого уже нужно формировать файл вручную). Для работы программы необходим Net Frame Work (для XP версия 4.0, для Vista и выше 4.5.2), как правило, он в системе уже установлен при установке других прогрмм.

Пример вывода заказа покупателя для конфигурации 1С:УПП

Перем ВторойДисплей,МакетВторойДисплей,МакетРеклама;

Процедура ПриОткрытии()
	//проверяем нужно ли выводить информацию на второй дисплей
        //если есть папка с программой C:\secondmonitor, то значит второй дисплей используется
	КаталогНаДиске = Новый Файл("C:\secondmonitor");
	ВторойДисплей=Ложь;
	Если КаталогНаДиске.Существует() Тогда
		ВторойДисплей=Истина;
		МакетВторойДисплей=ПолучитьОбщийМакет("ВторойДисплей");
                МакетРекама=ПолучитьОбщийМакет("Реклама");
		ВывестиИнформациюНаВторойДисплей();
	КонецЕсли;	
КонецПроцедуры // ПриОткрытии()

Процедура ВывестиИнформациюНаВторойДисплей()
	Если Товары.Количество()+Услуги.Количество()=0 Тогда
		Возврат;
	КонецЕсли;	
	ТабДок=Новый ТабличныйДокумент;
	Область=МакетВторойДисплей.ПолучитьОбласть("Шапка");
	Область.Параметры.Ссылка=Ссылка;
	ТАбДок.Вывести(Область);
	Итого=0;
	НомерСтроки=1;
	Для каждого СтрокаТЧ из Товары Цикл
		Область=МакетВторойДисплей.ПолучитьОбласть("Строка");
		Область.Параметры.Заполнить(СтрокаТЧ);
		Область.Параметры.НомерСтроки=НомерСтроки;
		НомерСтроки=НомерСтроки+1;
		Итого=Итого+СтрокаТЧ.Сумма;
		ТабДок.Вывести(Область);
	КонецЦикла;
	Для каждого СтрокаТЧ из Услуги Цикл
		Область=МакетВторойДисплей.ПолучитьОбласть("Строка");
		Область.Параметры.Заполнить(СтрокаТЧ);
		Область.Параметры.НомерСтроки=НомерСтроки;
		НомерСтроки=НомерСтроки+1;
		Итого=Итого+СтрокаТЧ.Сумма;
		ТабДок.Вывести(Область);
	КонецЦикла;
	Область=МакетВторойДисплей.ПолучитьОбласть("Подвал");
	Область.Параметры.Итого=Итого;
	ТабДок.Вывести(Область);
        ТабДок.Вывести(МакетРеклама.ПолучитьОбласть("Реклама"));
	Попытка
		ТабДок.Записать("C:\secondmonitor\1.htm",ТипФайлаТабличногоДокумента.HTML);
	Исключение
		
	КонецПопытки;
КонецПроцедуры

Процедура ОбработкаВыбора(ЗначениеВыбора, Источник) Экспорт

	Если ВторойДисплей Тогда
		ВывестиИнформациюНаВторойДисплей();
	КонецЕсли;	
	
КонецПроцедуры // ОбработкаВыбора()

Процедура ПриЗакрытии()

	Если ВторойДисплей Тогда
		ТабДок=Новый ТабличныйДокумент;
                ТабДок.Вывести(МакетРеклама.ПолучитьОбласть("Реклама"));
		Попытка
			ТабДок.Записать("C:\secondmonitor\1.htm",ТипФайлаТабличногоДокумента.HTML);
		Исключение
			
		КонецПопытки;
	КонецЕсли;
	
КонецПроцедуры // ПриЗакрытии()

Процедура ТоварыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
	
        Если ВторойДисплей Тогда
		ВывестиИнформациюНаВторойДисплей();
	КонецЕсли;	
		
КонецПроцедуры // ТоварыПриОкончанииРедактирования()

Процедура ТоварыПослеУдаления(Элемент)
	
        Если ВторойДисплей Тогда
		ВывестиИнформациюНаВторойДисплей();
	КонецЕсли;	

КонецПроцедуры // ТоварыПослеУдаления()

Процедура УслугиПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)

	Если ВторойДисплей Тогда
		ВывестиИнформациюНаВторойДисплей();
	КонецЕсли;	

КонецПроцедуры // УслугиПриОкончанииРедактирования()

Процедура УслугиПослеУдаления(Элемент)

	Если ВторойДисплей Тогда
		ВывестиИнформациюНаВторойДисплей();
	КонецЕсли;	

КонецПроцедуры // УслугиПослеУдаления()




В 

Скачать файлы

Наименование Файл Версия Размер
SecondMonitor.exe
.exe 43,50Kb
25.07.16
7
.exe 43,50Kb 7 Скачать
SecondMonitorXP.exe
.exe 43,50Kb
25.07.16
4
.exe 43,50Kb 4 Скачать

См. также

Комментарии
1. ивасько богдан (zaliznyj) 21.12.16 13:32 Сейчас в теме
Что бы вывести информацию на второй монитор достаточно скачать и установить файл SecondMonitor.exe ?
2. Максим Биенко (Bienko) 112 21.12.16 21:14 Сейчас в теме
Добрый вечер! Не совсем! SecondMonitor.exe выводит html файл, который расположен в его папке. Сам же файл вам нужно формировать самостоятельно. Оптимальный вариант через табличный документ. В описании пример формирования такого файла для заказа конфигурации УПП.
3. ивасько богдан (zaliznyj) 21.12.16 22:39 Сейчас в теме
(2)Если не подключон второй монитор то SecondMonitor.exe не запустится? Под рукой нету второго монитора не могу понять. все ли я правильно сделал
4. Максим Биенко (Bienko) 112 22.12.16 07:15 Сейчас в теме
Она запуститься, но на основном дисплее. Через несколько секунд она развернется на весь экран. Крестика не будет (после развертывания). Закрыть можно через ATL-F4
5. ивасько богдан (zaliznyj) 23.12.16 09:18 Сейчас в теме
(4)Доброе утро Максим! Спасибо за SecondMonitor.exe. Установил без особых проблем. Работает все супер. Дешево просто и еффективно. Очень хорошая получилась обработка для вывода на монитор покупателя. Очень доволен. Оправдала все мои надежды. Большое спасибо за решение мох проблем!!!!

При установке возникло две маленьких проблемы:
1. Я как чайник не сообразил что ( ПолучитьОбщийМакет("ВторойДисплей");) Макеты нужно создать самому.
2. В описании примера В строке кода МакетРекама=ПолучитьОбщийМакет("Реклама") в процедуре Процедура ПриОткрытии() пропущена буква Л. Долго не мог открыть Макет реклама. Говорю что ЧАЙНИК. Поэтому не удивляйтесь.

Есть еще одна проблемка при запуске SecondMonitor.exe
- ЗапуститьПриложение("C:\secondmonitor\secondmonitor.exe")
Приложение открывается но URL-Адрес указывается не правильно Берется из каких то предварительных настроек. Поэтому запустить его можно только вручную
Нельзя ли Исправить?

6. Максим Биенко (Bienko) 112 23.12.16 14:02 Сейчас в теме
Добрый день! По поводу ЗапуститьПриложение("C:\secondmonitor\secondmonitor.exe"). У меня везде прописано в автозапуске операционной системы. Менеджеры приходят на работу и при включении компьютера программа сразу запускается и целый день работает. Так запускается нормально. Сам путь берется из пути запуска программы. В самой команде ЗапуститьПриложение(<СтрокаКоманды>, <ТекущийКаталог>, <ДождатьсяЗавершения>, <КодВозврата>) есть ТекущийКаталог. Попробуй его указать "C:\secondmonitor\". Самой простой вариант (кто его знает как 1с запускает, может и в темп копирует предварительно или еще чего) запускать не саму программу тогда, а bat файл, а уже из него запускать программу. Так должно работать, даже если 1с будет этот батник куда-то копировать.
7. Максим Биенко (Bienko) 112 23.12.16 14:04 Сейчас в теме
Еще может быть на момент запуска файл в папке программы не существует (если вы его программно удаляете в каких-то случаях)
8. ивасько богдан (zaliznyj) 23.12.16 15:09 Сейчас в теме
Спасибо. Открывается програмно без проблем.
9. Рамиль Гаджиев (hajiyevrr) 23.02.17 14:37 Сейчас в теме
Оставьте свое сообщение