Столкнулся с необходимостью выводить информацию на второй дисплей для покупателей. Написал внешнюю программу для реализации данной задачи. Программа читает файл, находящийся в папке с программой 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);
Исключение
КонецПопытки;
КонецЕсли;
КонецПроцедуры // ПриЗакрытии()
Процедура ТоварыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ВторойДисплей Тогда
ВывестиИнформациюНаВторойДисплей();
КонецЕсли;
КонецПроцедуры // ТоварыПриОкончанииРедактирования()
Процедура ТоварыПослеУдаления(Элемент)
Если ВторойДисплей Тогда
ВывестиИнформациюНаВторойДисплей();
КонецЕсли;
КонецПроцедуры // ТоварыПослеУдаления()
Процедура УслугиПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ВторойДисплей Тогда
ВывестиИнформациюНаВторойДисплей();
КонецЕсли;
КонецПроцедуры // УслугиПриОкончанииРедактирования()
Процедура УслугиПослеУдаления(Элемент)
Если ВторойДисплей Тогда
ВывестиИнформациюНаВторойДисплей();
КонецЕсли;
КонецПроцедуры // УслугиПослеУдаления()
В