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

Программа для обеспечения взаимодействия 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:secondmonitor1.htm",ТипФайлаТабличногоДокумента.HTML);
Исключение

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

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

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

КонецПроцедуры // ОбработкаВыбора()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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




В 

14 Comments

  1. zaliznyj

    Что бы вывести информацию на второй монитор достаточно скачать и установить файл SecondMonitor.exe ?

    Reply
  2. Bienko

    Добрый вечер! Не совсем! SecondMonitor.exe выводит html файл, который расположен в его папке. Сам же файл вам нужно формировать самостоятельно. Оптимальный вариант через табличный документ. В описании пример формирования такого файла для заказа конфигурации УПП.

    Reply
  3. zaliznyj

    (2)Если не подключон второй монитор то SecondMonitor.exe не запустится? Под рукой нету второго монитора не могу понять. все ли я правильно сделал

    Reply
  4. Bienko

    Она запуститься, но на основном дисплее. Через несколько секунд она развернется на весь экран. Крестика не будет (после развертывания). Закрыть можно через ATL-F4

    Reply
  5. zaliznyj

    (4)Доброе утро Максим! Спасибо за SecondMonitor.exe. Установил без особых проблем. Работает все супер. Дешево просто и еффективно. Очень хорошая получилась обработка для вывода на монитор покупателя. Очень доволен. Оправдала все мои надежды. Большое спасибо за решение мох проблем!!!!

    При установке возникло две маленьких проблемы:

    1. Я как чайник не сообразил что ( ПолучитьОбщийМакет(«ВторойДисплей»);) Макеты нужно создать самому.

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

    Есть еще одна проблемка при запуске SecondMonitor.exe

    — ЗапуститьПриложение(«C:secondmonitorsecondmonitor.exe»)

    Приложение открывается но URL-Адрес указывается не правильно Берется из каких то предварительных настроек. Поэтому запустить его можно только вручную

    Нельзя ли Исправить?

    Reply
  6. Bienko

    Добрый день! По поводу ЗапуститьПриложение(«C:secondmonitorsecondmonitor.exe»). У меня везде прописано в автозапуске операционной системы. Менеджеры приходят на работу и при включении компьютера программа сразу запускается и целый день работает. Так запускается нормально. Сам путь берется из пути запуска программы. В самой команде ЗапуститьПриложение(<СтрокаКоманды>, <ТекущийКаталог>, <ДождатьсяЗавершения>, <КодВозврата>) есть ТекущийКаталог. Попробуй его указать «C:secondmonitor». Самой простой вариант (кто его знает как 1с запускает, может и в темп копирует предварительно или еще чего) запускать не саму программу тогда, а bat файл, а уже из него запускать программу. Так должно работать, даже если 1с будет этот батник куда-то копировать.

    Reply
  7. Bienko

    Еще может быть на момент запуска файл в папке программы не существует (если вы его программно удаляете в каких-то случаях)

    Reply
  8. zaliznyj

    Спасибо. Открывается програмно без проблем.

    Reply
  9. hajiyevrr

    как можно проверить ?

    Reply
  10. TODD22

    Здравствуйте.

    Почему может не отображать содержимое?

    В каталоге C:secondmonitor есть файл 1.htm. Браузером открывается.

    Но после запуска открывается окно в котором написано что не удалось отобразить страницу, не верный путь ли попробуйте обновить и тд.

    В чём может быть проблема?

    Reply
  11. Bienko

    Добрый день! По вашему описанию все должно работать. Пришлите файл 1.htm, — я его у себя проверю.

    Reply
  12. TODD22

    Всё отлично заработало. Проблема была в том что файл secondmonitor лежал не в той же папке что и файл 1.htm.

    Reply
  13. TODD22

    А чем сделано отображение html файла?

    У меня в браузере файл выглядит не так как в secondmonitor.

    Между табличной частью и картинкой у меня есть отступ. В браузере(хром и IE) он меньше. А когда открываю монитором то отступ увеличивается в 2 раза….

    Reply
  14. maipochta

    видео пробовал кто-нибудь выводить? Попробовал несколько способов в hml файле, не сработало.

    Reply

Leave a Comment

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