Программа - всплывающий клиент для оповещения и работы с 1С без интерактивного запуска самого 1С:Предприятия пользователем

18.02.15

Разработка - Инструментарий разработчика

Клиент при запуске подключается к 1C:Предприятию. После этого висит в системном трее и с определенной периодичностью опрашивает базу данных. В случае каких-либо изменений, показывает пользователю необходимую информацию. Также, прямо в окне клиента можно реализовать Web интерфейс для каких-нибудь несложных действий, например, утверждения Заявок или Участия в корпоративном чате. Таким образом можно организовать двустороннюю связь Клиент - 1С:Предприятие без открытия главного окна программы.

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

Наименование Файл Версия Размер
PopUp1C.exe, файлы клиента, настроек и прочее
.rar 725,87Kb
57
.rar 1.2.0.0 725,87Kb 57 Скачать
Выгрузка демонстрационной базы данных. В конфигурации множество примеров реализаций. (Общий модуль - PopUp1C)
.rar 45,99Kb
52
.rar 45,99Kb 52 Скачать

//------------------------------------------------------------------------------------------------------------------------------------
Состав комплекта

PopUp1C.exe - Программа-клиент
PopUp1C.ini - файл настроек клиента (редактируется блокнотом). Должен иметь то же название, что и исполняемый файл клиента.
PopUp1C.html - Файл общего шаблона для всех окон программы. При выводе очередных данных в этом файле строка "PopUp1C Content" заменяется на содержание.
default.css - Файл html стилей, используемых при выводе страниц клиента.
ReadMe.html - Файл этого описания.
IMG\*.png - Картинки, используемые системой.
SCR\*.png - скриншоты клиента 
1Cv8.dt - Демонстрационная база данных 1С:Предприятие 8.2 с общим модулем PopUp1C, который наглядно демонстрирует возможности системы.

//------------------------------------------------------------------------------------------------------------------------------------
Быстрый старт

- Восстановить из 1Cv8.dt базу данных 1С:Предприятие (можно 8.2, а можно и 8.3, убрав все ограничения)
- Открыть блокнотом файл PopUp1C.ini и в нем прописать:

Путь к развернутой базе данных 1С (имя пользователя и пароль не менять):
;Строка подключения к базе данных
DB="File='F:\c++\PopUp1C\Db';usr='Иванов';pwd='';"

Тип Com, используемый в Вашей системе. Для 8.2 это будет "V82.Application". Для 8.3 это будет "V83.Application".
;COM объект
Application=V82.Application

- Запустить клиента и убедиться, что он не выдает в своем окне ошибок.

- После появления клиентсвого окна с основным меню все готово, можно попробовать различные режимы работы.

//------------------------------------------------------------------------------------------------------------------------------------
Алгоритм работы

По-умолчанию, клиент открывает и постоянно держит Com соединение с базой данных. Но, если период опроса выставить довольно большой, то можно указать, что соединяться нужно каждый раз при опросе базы данных (PermanentConnection=0)
[CONFIG]
;Сохранять постоянное соединение
PermanentConnection=1

Клиент после соединения вызывает в 1С глобальную функцию, указанную в настройках ini файла:
[INDEX]
;Первоначально вызываемая глобальная функция в 1С PopUpIndex(Параметр1="") Экспорт
IndexFunction = PopUpIndex
;В 1С глобальная функция получит это значение:
Parameter1=

Полученный из функции html код помещает в шаблон PopUp1C.html на место строки "PopUp1C Content" и получившийся результат выводит в свой экран.
Если пользователь свернул клиента в системный трей, но текст с последнего опроса этой функции изменился - окно клиента автоматически всплывает поверх всех приложений Windows.
Значок в системном трее имеет контекстное меню, которое позволяет управлять видимостью клиента. При выборе пункта "Update" окно клиента также показывается, если было скрыто.
По левой кнопке на значке клиента - просто показывается.

Во время работы пользователь может переходить по ссылкам или выполнять какие-либо действия в окне клиента, но, если при очередном запросе к базе данных html код от текущей функции изменится - окно клиента будет полностью обновлено!

//------------------------------------------------------------------------------------------------------------------------------------
Особенности работы и написания html кода для страниц клиента

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


Существует несколько перехватываемых клиентом управляющих ID объектов:

<a href="" ID="Home">Home</a> - отправляет пользователя на начальную функцию, описанную в [INDEX]IndexFunction и в дальнейшем вызывает её, пока не будет переопределения.
<a href="" ID="Update">Update</a> - запрашивает данные у текущей функции, не дожидаясь срабатывания таймера. Таймер [MAIN]TimeUpdate запускается сначала.
<a href="" ID="Cancel">Cancel</a> - cкрывает окно клиента, оставляя его в системном трее.
<a href="" ID="Exit">Exit</a> - завершает работу клиента.
<a href="" ID="Page" Name="FunctionName">Page</a> - запрашивает глобальную функцию 1С с именем FunctionName, делает её текущей и в дальнейшем вызывает её, пока не будет переопределения.
<a href="" ID="Function" Name="FunctionName">Function</a> - запрашивает глобальную функцию 1С с именем FunctionName, делает её текущей и в дальнейшем вызывает её, пока не будет переопределения. Не отличается от предыдущего.
<a href="" ID="Procedure" Name="ProcedureName">Procedure</a> - вызывает глобальную процедуру 1С с именем ProcedureName (но не запоминает её) после чего обновляется, вызывая текущую функцию.
<a href="" ID="Command" Name="CommandString">Command</a> - выполняет командную строку системы при помощи API ShellExecuteEx. В CommandString может быть даже любой URL - откроется браузер, любое имя файла с параметрами, просто командная строка.

Объектов с одинаковыми ID на одной странице может быть сколько угодно.

//------------------------------------------------------------------------------------------------------------------------------------
Передача данных в 1С:Предприятие

При вызове ID "Page", "Function" и "Procedure" в функции и процедуры 1С передается один параметр. Этот параметр - строка из всех управляемых элементов текущей страницы клиента. В общем виде что-то типа:

ИмяЭлемента ТипЭлемента ТэгЭлемента ЗначениеЭлемента
Doc000000001 checkbox <INPUT type=checkbox border=0 name=Doc000000001>
Doc000000002 checkbox <INPUT CHECKED type=checkbox border=0 name=Doc000000002> 1
Doc000000003 checkbox <INPUT type=checkbox border=0 name=Doc000000003>
accept button <INPUT id=Function type=button value=OK name=accept> OK

Строки разделены символом перевода строк, а колонки - табуляцией. Всего колонок четыре. В демонстрационной базе есть функция, которая преобразует эту строку в таблицу значений:
ПараметрВТаблицу(Знач Параметр, МинимумКолонок=0) Экспорт
После чего с этими данными можно работать как угодно 
//------------------------------------------------------------------------------------------------------------------------------------
Известные проблемы

По непонятным пока причинам, при соединении с базами данных, запускаемыми в режиме управляемого приложения свойство соединения Visible установлено в TRUE, что приводит к появлению окна 1С. После установки соединения, мы его, конечно, спрятали, но на долю секунды оно все-равно появляется ;о((( Устанавливать свойство до соединения бесполезно. С обычными приложениями такого не наблюдается.

//------------------------------------------------------------------------------------------------------------------------------------

29.01.2015

Обновление. Клиент 1.1.1.2. Конфигурация демобазы изменена к лучшему.

- V8*.Connector без запуска экземпляра самого 1С-приложения

- Возможность включить JavaScript в окне

- Начало блока быстрого анализа OnLine/OffLine

- Добавлены параметры ini-файла настроек

- Нормальная работа в клиент-серверном режиме

- Компиляция проекта в режиме, не требующем внешних библиотек

- Исправлены ошибки по утечке памяти

- Обработка для отладки вызываемых функций

- Мелкие изменения.

//------------------------------------------------------------------------------------------------------------------------------------

18.02.2015

- Добавлена возможность работы через HttpСервис

- HttpСервис есть в демобазе. На самом деле выполняет роль "заглушки", вызывая глобальные функции

- Встроенная интерактивная авторизация

- Расширено контектное/систрейное меню

- Возможность включить JavaScript в основном окне

- Запоминает последний используемый раздел

- Добавлен отдельный таймер периода подключения

- Небольшие изменения

- Пароль Иванова 123. HttpСервис с логином, но без пароля, работать не будет


PopUp PopUp1C Информер Всплывающее окно Com

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 руб.

02.09.2020    119918    656    389    

701

Infostart PrintWizard

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

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    7008    20    6    

37

Infostart УДиФ: Управление данными и формами

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

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

10000 руб.

10.11.2023    3246    10    1    

31

SALE! 30%

PowerTools

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

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

3600 2520 руб.

14.01.2013    177341    1070    0    

846

Многопоточность. Универсальный «Менеджер потоков» 2.1

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

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99204    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    17914    6    8    

38

1С HTML Шаблоны / HTML Templates

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

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    27945    3    10    

14

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23490    15    15    

31
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ekaruk 4892 27.01.15 15:17 Сейчас в теме
Интересная штука.
На чем написана?
Можно ли самостоятельно расширять функционал?
2. Kis_s 141 27.01.15 15:41 Сейчас в теме
(1) ekaruk, Написана на С++ (Microfoft Visual Studio + MFC). Функционал можно расширять до бесконечности - всё содержимое окон формируется в виде html кода в глобальных функциях 1С. Клиент лишь компонует результат вызова функций 1С с шаблоном, следит, когда этот html изменился и нужно всплывать ..... ну и отслеживает клики по управляемым элементам html, чтобы перехватить командные и выполнить определенные действия ... ;о) .... например, перейти на вызов другой функции ...
36. Vorchun_76 14 20.03.15 09:47 Сейчас в теме
(2) Доброго времени. Предвидится ли использование данной программы на Андроиде?
3. Kis_s 141 27.01.15 15:45 Сейчас в теме
(1) ekaruk, Причем функции очень простые, вот, например, страница калькулятора (все они есть в демобазе):

Функция PopUpКалькулятор(Параметр="", ПредыдущаяСтрока="", СтрокаРезультат = "") Экспорт
	Стр = "<img src='IMG\calc.png'><br><br>"+Символы.ПС;
	
	Если СтрокаРезультат<>"" Тогда
		Стр = Стр + СтрокаРезультат+"<br><br>";
	КонецЕсли;
	
	Стр = Стр + "Что посчитать: ";
	Стр = Стр + "<input name='TextCalc' type='Text' border='3' value='"+ПредыдущаяСтрока+"'>";
	
	//добавляем кнопку OK
	Стр = Стр + "<input id='Function' name='PopUpCalc' value='OK' type='Button'>"+Символы.ПС;
	
	Стр = Стр + "<br><br><i>Введите любую формулу и нажмите ОК. 1С выполнит вычисление и вернет результат или ошибку.</i>"+Символы.ПС;
	
	Возврат Стр;
КонецФункции

Функция PopUpCalc(Параметр="") Экспорт
	ТП = ПараметрВТаблицу(Параметр, 4);
	
	СтрТП = ТП.Найти("TextCalc",ТП.Колонки[0].Имя);
	ПредыдущаяСтрока = "";
	Результат = "";
	Если СтрТП<>Неопределено Тогда
		ПредыдущаяСтрока = СтрТП[3];
		Попытка
			Результат = Вычислить(СтрТП[3]);
			СтрокаРезультат = "<font color='#4978af'><b>"+СокрЛП(СтрТП[3])+" = "+СокрЛП(Результат)+"</b></font>";
		Исключение
			Результат = ОписаниеОшибки();
			СтрокаРезультат = "<font color='#f97e7e'><b>"+СокрЛП(СтрТП[3])+" = "+СокрЛП(Результат)+"</b></font>";
		КонецПопытки;
	КонецЕсли;
	
	Возврат PopUpКалькулятор(Параметр="", ПредыдущаяСтрока, СтрокаРезультат);
КонецФункции
Показать
4. script 128 27.01.15 19:20 Сейчас в теме
Скажите, а чем не устраивает родной метод "ПоказатьОповещениеПользователя()" ?
5. kapustinag 27.01.15 20:06 Сейчас в теме
(4) script, Рискну ответить за автора.
Посмотрите внимательнее приложенные картинки. То, что можно в (0) реализовать, в ПоказатьОповещениеПользователя() и не снилось.
soulsteps; +1 Ответить
6. Kis_s 141 27.01.15 22:26 Сейчас в теме
(4) script, Попробую объяснить ...
1. Не требуется интерактивного запуска 1С:Предприятия от пользователя. Все мы прекрасно знаем, что не будет начальство с открытой 1Ской сидеть ... да и отмазка "У меня не была программа открыта" делает систему оповещения через "ПоказатьОповещениеПользователя()" не оптимальной идеей ....
2. У данного клиента размер окна оповещения изменяется пользователем, так что влезает больше информации... и она может быть структурирована!
3. У данного клиента есть возможность вставлять не одну ссылку, а любое количество полноценных DHTML объектов, включая кнопки, переключатели, поля ввода текста, ссылки, картинки и т.д. Вообщем, хоть полноценный веб-сайт рисуй в окне. Что, кстати, позволяет делать его окна гораздо более интересными с точки зрения эргономики и юзабилити ....
4. У пользователя есть возможность изменять какие-то значения прямо в окне клиента не отвлекаясь на запуск основного окна 1Ски. Т.е. вносить изменения в базу!
5. Окно клиента можно в любой момент свернуть в системный трей, если некогда, а потом вернуться к обработке его информации, просто развернув окно из контекстного меню значка систрея ....
6. Т.к. окно клиента является потомком iExplorer, то прямо в нем можно организовать переход на контекстный поиск по Гуглю или на web-сервер 1С предприятия, если он есть ...
7. Сам по себе клиент, если честно, может работать не только с 1С, но и с любой другой системой, поддерживающей Com соединение ;о). Он полноценный Com-клиент. Может подключаться по стандартам Com, запрашивать у сервера перечень процедур, функций ... вызывать их .... если нужно, то и на v7.7 - то он тоже будет работать...
8. Если проект получит развитие, то вполне возможно держать соединение не с одной базой данных, а с любым их количеством ;о)

Это навскидку ;о)
7. reddima 28.01.15 07:58 Сейчас в теме
Добрый день,

интересное решение, но

ОС Win 7

попробовал, при запуске приложения вываливается ошибка "Не удалось запустить приложение поскольку его параллельная конфигурация неправильна...".

Что бы это могло быть?
11. Kis_s 141 28.01.15 10:57 Сейчас в теме
(7) reddima, Проект скомпилирован в режиме "Use MFC in a Shared DLL", т.е. использует внешние dll системы, что позволяет существенно уменьшить его размер (исполняемый файл 87 Кб). Обычно этого хватает. Если же библиотек не хватает - выводит эту ошибку. Я бы посоветовал установить пакеты microsoft visual c++ 2008 redistributable * для вашей системы. Они бесплатны и гуглятся в два счета В дальнейшем попробую перекомпилировать проект в режиме "Use MFC in a Static Library" и проблема должна исчезнуть ....

(8) reddima, В описании есть:
Открыть блокнотом файл PopUp1C.ini и в нем прописать:
;Строка подключения к базе данных
DB="File='F:\c++\PopUp1C\Db';usr='Иванов';pwd='';"

(10) ruslan0277, Возможно. Но очень трудно определить, начал ли пользователь менять что-то в окне клиента - придется вешать перехват на все DHTML элементы, а это напряжно. Да еще при учете, что в этом окне принудительно отключен JawaScript ... Скорее всего, попробую повесить вопрос при активном и видимом окне клиента ...

(9) anig99, Так пользуйтесь ;о)))
12. ruslan0277 4 28.01.15 11:08 Сейчас в теме
(11) А если разделить на главная/не главная страница? И соответственно главную обновлять без вопроса, на второстепенных с вопросом.
15. Kis_s 141 28.01.15 12:22 Сейчас в теме
(12) ruslan0277, Сейчас работа клиента проста и понятна - Есть Текущая глобальная функция 1С, которую он с завидной периодичностью вызывает и её результат выводит в окно .... она может быть изменена согласно логике управляющих команд .... текущей станет другая ... как только возвращаемые данные будут отличаться от предыдущего вызова - перерисовываем окно клиента .... логично предположить, что пользователь уже что-то понатыкал в окне клиента ... скорее всего, я сделаю так: перехватываем что-нибудь типа WM_LBUTTONDOWN и считаем, что данные окна изменились ... тогда при обновлении можно и спросить .... но только не модально, т.к. таймер опроса базы повиснет, а многопоточность использовать не хочется .... Если же разделять на окна, то это уже SDI/MDI приложение получится. Там другие родители у классов и т.д и т.п. ... все переписывать .... и нереально усложнять ... в целом - нужно переспать с этой мыслью и сделать какое-то элегантное решение ...
ruslan0277; +1 Ответить
13. reddima 28.01.15 11:12 Сейчас в теме
(11) Спасибо большое за ответы, по серверу я попробовал указать данные имени сервера и базы данных, но не получилось. Срока была DB="srvr='1c82';Ref='uat_prof';usr='Администратор';pwd='12345';"
14. Kis_s 141 28.01.15 12:10 Сейчас в теме
(13) reddima, Если в окне клиента пишет "Error: GetIDsOfNames: PopUpIndex (Не найдена функция PopUpIndex) " - 1С говорит, что нет у неё такой, видимой извне, глобальной функции. Следует сделать вот что: В свойствах ОбщийМодуль.PopUp1C установить галочку "Клиент *"... на различных платформах и даже в рамках текущих 8.3 релизов 1С ведет себя по-разному ;о(((

Если не помогает - скопируйте сюда ошибку из окна клиента. И не забудьте, что вызываемые функции должны быть, и должны быть рабочими!!! Попробуйте вызвать их из любой внешней обработки и посмотрите, что они возвращают.

PS Правда, тогда могут возникнуть проблемы при другой компоновке ;о(. По-хорошему, функции нужно разделить по модулям НаСервере и НаКлиенте ... сделаю попозже ...
18. reddima 28.01.15 14:24 Сейчас в теме
(14) Спасибо, это помогло, на сервере тоже работает.
1. И еще, пока ваше приложение заходит в базу, выдается сообщение "Действие не может быть завершено так как программа не отвечает на запросы..." "Переключиться, повторить..".
2. И если устанавливаю, что каждый раз нужно подключаться к базе (не сохранять постоянным соединение), то на каждый раз запускается новый процесс 1сv8.exe, т.е. получается, что он старый не гасит при выходе из него?
20. Kis_s 141 28.01.15 15:58 Сейчас в теме
(18) reddima, спасибо, что помогаете выявлять проблемы .... Что касается Com - соединения, то, видимо, 1Ска не быстро откликается, вот и проходит время .... вечером погоняю в таком режиме на sql базах ....

На текущий момент я переделал глобальные модули:

1. PopUp1C (Свойства Глобальный/Клиент/Сервер)
Функция PopUpIndex(Параметр="") Экспорт
	
	Стр = "<img src='IMG\home.png'>"+Символы.ПС;
	Стр = Стр + "Бюджеты"+Символы.ПС;
	Стр = Стр + "Калькулятор"+Символы.ПС;
	Стр = Стр + "Ссылки"+Символы.ПС;
	Стр = Стр + "Часы"+Символы.ПС;
	Стр = Стр + "Описание"+Символы.ПС;
	Стр = Стр + "О программе"+Символы.ПС;
	
	Возврат Стр;
КонецФункции

Функция PopUpБюджеты(Параметр="") Экспорт
	Возврат PopUp1CНаСервере.PopUpБюджетыНаСервере(Параметр);
КонецФункции

Процедура PopUpУтвердить(Параметр="") Экспорт
	PopUp1CНаСервере.PopUpУтвердитьНаСервере(Параметр);
КонецПроцедуры

Функция PopUpКалькулятор(Параметр="", ПредыдущаяСтрока="", СтрокаРезультат = "") Экспорт
	Возврат PopUp1CНаСервере.PopUpКалькуляторНаСервере(Параметр);
КонецФункции

Функция PopUpCalc(Параметр="") Экспорт
	Возврат PopUp1CНаСервере.PopUpCalcНаСервере(Параметр);
КонецФункции

Функция PopUpСсылки(Параметр="") Экспорт
	Стр = "<img src='IMG\links.png'>"+Символы.ПС;
	
	
	Стр = Стр + "Yandex в этом окне"+Символы.ПС;
	Стр = Стр + "Yandex в новом окне IE"+Символы.ПС;
	Стр = Стр + "Google в окне браузера по-умолчанию"+Символы.ПС;
	Стр = Стр + "Диск c:\ в проводнике"+Символы.ПС;
	Стр = Стр + "Диск c:\ в этом окне"+Символы.ПС;
	
	Стр = Стр + "Для возврата назад из некоторых ссылок воспользуйтесь пунктом Home контекстного меню значка в системном трее!"+Символы.ПС;
	
	Возврат Стр;
КонецФункции

Функция PopUpЧасы(Параметр="") Экспорт
	Стр = "<img src='IMG\time.png'>"+Символы.ПС;
	
	Стр = Стр + ""+СокрЛП(ТекущаяДата())+""+Символы.ПС;
	
	Стр = Стр + "Эта страница будет автоматически появляться при каждом опросе 1С, т.к. содержание ответа от 1С (строка времени) меняется!"+Символы.ПС;
	
	Возврат Стр;
КонецФункции

Функция PopUpИнформация(Параметр="") Экспорт
	Стр = "<img src='IMG\favorites.png'>"+Символы.ПС;
	
	Стр = Стр + "PopUp1C v1.1 ©AltSystem 2015vaniev12@gmail.com"+Символы.ПС;
	
	Возврат Стр;
КонецФункции
Показать


2. PopUp1CНаСервере (Свойства Сервер/Вызов сервера)
Функция СтрокаВМассив(Знач Стр, Разделитель, МинимальноЭлементов=0) Экспорт
	мДанных = Новый Массив;
	Поз = Найти(Стр,Разделитель);
	Пока Поз<>0 Цикл
		мДанных.Добавить(Лев(Стр,Поз-1));
		Стр = Сред(Стр,Поз+1);
		
		Поз = Найти(Стр,Разделитель);
	КонецЦикла;
	Если Стр<>"" Тогда
		мДанных.Добавить(Стр);
	КонецЕсли;
	Пока мДанных.Количество()<МинимальноЭлементов Цикл
		мДанных.Добавить("");
	КонецЦикла;
	Возврат мДанных;
КонецФункции

Функция ПараметрВТаблицу(Знач Параметр, МинимумКолонок=0) Экспорт
	//В параметре приходит массив из эленемнов DHTML, примерно такой (разделители = перевод строки и табуляция):
	
	//Doc000000001	checkbox	<INPUT type=checkbox border=0 name=Doc000000001>		
	//Doc000000002	checkbox	<INPUT CHECKED type=checkbox border=0 name=Doc000000002>	1	
	//Doc000000003	checkbox	<INPUT type=checkbox border=0 name=Doc000000003>		
	//accept	button	<INPUT id=Function type=button value=OK name=accept>	OK
	
	Т = Новый ТаблицаЗначений;
	
	мСтрок = СтрокаВМассив(Параметр, Символы.ПС);
	Для ИндексСтрок=0 По мСтрок.ВГраница() Цикл
		мЗначений = СтрокаВМассив(мСтрок[ИндексСтрок], Символы.Таб, МинимумКолонок);
		
		Пока Т.Колонки.Количество()<мЗначений.Количество() Цикл
			Т.Колонки.Добавить("_"+СокрЛП(Т.Колонки.Количество()));
		КонецЦикла;
		
		СтрТ = Т.Добавить();
		Для ИндексКолонок=0 По мЗначений.ВГраница() Цикл
			СтрТ[ИндексКолонок] = мЗначений[ИндексКолонок];
		КонецЦикла;
	КонецЦикла;
	
	Пока Т.Колонки.Количество()<МинимумКолонок Цикл
		Т.Колонки.Добавить();
	КонецЦикла;
	
	Возврат Т;
КонецФункции

Функция ПолучитьТаблицуДокументов() Экспорт
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	Бюджет.Ссылка,
	|	Бюджет.ВерсияДанных,
	|	Бюджет.ПометкаУдаления,
	|	Бюджет.Номер,
	|	Бюджет.Дата КАК Дата,
	|	Бюджет.Проведен,
	|	Бюджет.Кому,
	|	Бюджет.ОтКого,
	|	Бюджет.Утвержден,
	|	Бюджет.Сумма,
	|	Бюджет.Комментарий
	|ИЗ
	|	Документ.Бюджет КАК Бюджет
	|ГДЕ
	|	Бюджет.Кому = &Кому
	|
	|УПОРЯДОЧИТЬ ПО
	|	Дата";
	
	Запрос.УстановитьПараметр("Кому",ИмяПользователя());
	
	Возврат Запрос.Выполнить().Выгрузить();
КонецФункции

Функция PopUpБюджетыНаСервере(Параметр="") Экспорт
	ТД = ПолучитьТаблицуДокументов();
	
	//выводим таблицу
	Стр = "<img src='IMG\documents.png'>"+Символы.ПС;
	Стр = Стр + "<font color=de4d4d>Документы на акцепт:</font>"+Символы.ПС;
	Стр = Стр + "<table bgcolor=#ffffff cellSpacing='0' cellPadding='5' border='0'>"+Символы.ПС;
	Стр = Стр + "<tr bgcolor=#ffffff><td>Документ</td><td>От кого</td><td>Сумма</td><td>Комментарий</td><td>Утвердить</td></tr>"+Символы.ПС;
	Для Каждого СтрТД Из ТД Цикл
		ЧетнаяСтрока = ТД.Индекс(СтрТД)%2;
		checked = ?(СтрТД.Утвержден," checked","");
		Стр = Стр + "<tr bgcolor="""+?(ЧетнаяСтрока,"#ffffff","#f0f0f0")+""">
			|<td>"+СокрЛП(СтрТД.Ссылка)+"</td>
			|<td>"+СокрЛП(СтрТД.ОтКого)+"</td>
			|<td>"+Формат(СтрТД.Сумма,"ЧДЦ=2")+"</td>
			|<td>"+СокрЛП(СтрТД.Комментарий)+"</td>
			|<td><div><input border=0 class='checkbox0' bgcolor=#ffffff type='checkbox' name='Doc"+СтрТД.Номер+"'"+checked+"></div></td>
		|</tr>"+Символы.ПС;
	КонецЦикла;
		
	//добавляем кнопку OK в последнюю строку
	Сообщение = "Покупайте наших слонов...";
	
	Стр = Стр + "<tr bgcolor=#ffffff><td colspan='4'><marquee scrollamount='3'>"+Сообщение+"</marquee></td><td> <input id='Procedure' name='PopUpУтвердить' value='OK' type='Button'> </td></tr>"+Символы.ПС;
	Стр = Стр + "</table>"+Символы.ПС;
	
	Стр = Стр + "Проставьте утвержденные бюджеты и нажмите ОК. Данные в базе изменятся."+Символы.ПС;
	
	//Возврат СокрЛП(ТекущаяДата())+""+Символы.ПС+Стр;
	Возврат Стр;
КонецФункции

Процедура PopUpУтвердитьНаСервере(Параметр="") Экспорт
	//В параметре приходит массив из эленемнов DHTML, примерно такой (разделители = перевод строки и табуляция):
	
	//Doc000000001	checkbox	<INPUT type=checkbox border=0 name=Doc000000001>		
	//Doc000000002	checkbox	<INPUT CHECKED type=checkbox border=0 name=Doc000000002>	1	
	//Doc000000003	checkbox	<INPUT type=checkbox border=0 name=Doc000000003>		
	//accept	button	<INPUT id=Function type=button value=OK name=accept>	OK
	
	ТП = PopUp1CНаСервере.ПараметрВТаблицу(Параметр, 4);
	ТД = PopUp1CНаСервере.ПолучитьТаблицуДокументов();
	
	Для Каждого СтрТП Из ТП Цикл
		Если НРег(СтрТП[1])="checkbox" Тогда
			СтрТД = ТД.Найти(Сред(СтрТП[0],4),"Номер");
			Если СтрТД<>Неопределено Тогда
				Утвержден = ?(СокрЛП(СтрТП[3])="1",Истина,Ложь);
				Если Утвержден<>СтрТД.Утвержден Тогда
					Док = СтрТД.Ссылка.ПолучитьОбъект();
					Док.Утвержден = Утвержден;
					Если Не Док.Проведен Тогда
						Док.Записать(РежимЗаписиДокумента.Запись);
					Иначе
						Док.Записать(РежимЗаписиДокумента.Проведение);
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

Функция PopUpКалькуляторНаСервере(Параметр="", ПредыдущаяСтрока="", СтрокаРезультат = "") Экспорт
	Стр = "<img src='IMG\calc.png'>"+Символы.ПС;
	
	Если СтрокаРезультат<>"" Тогда
		Стр = Стр + СтрокаРезультат+"";
	КонецЕсли;
	
	Стр = Стр + "Что посчитать: ";
	Стр = Стр + "<input name='TextCalc' type='Text' border='3' value='"+ПредыдущаяСтрока+"'>";
	
	//добавляем кнопку OK
	Стр = Стр + "<input id='Function' name='PopUpCalc' value='OK' type='Button'>"+Символы.ПС;
	
	Стр = Стр + "Введите любую формулу и нажмите ОК. 1С выполнит вычисление и вернет результат или ошибку."+Символы.ПС;
	
	Возврат Стр;
КонецФункции

Функция PopUpCalcНаСервере(Параметр="") Экспорт
	//В параметре приходит массив из эленемнов DHTML, примерно такой (разделители = перевод строки и табуляция):
	
	//TextCalc	text	<INPUT value=10+15 border=3 name=TextCalc>	10+15	
	//PopUpCalc	button	<INPUT id=Function type=button value=OK name=PopUpCalc>	OK
	
	ТП = ПараметрВТаблицу(Параметр, 4);
	
	СтрТП = ТП.Найти("TextCalc",ТП.Колонки[0].Имя);
	ПредыдущаяСтрока = "";
	Результат = "";
	Если СтрТП<>Неопределено Тогда
		ПредыдущаяСтрока = СтрТП[3];
		Попытка
			Результат = Вычислить(СтрТП[3]);
			СтрокаРезультат = ""+СокрЛП(СтрТП[3])+" = "+СокрЛП(Результат)+"";
		Исключение
			Результат = ОписаниеОшибки();
			СтрокаРезультат = ""+СокрЛП(СтрТП[3])+" = "+СокрЛП(Результат)+"";
		КонецПопытки;
	КонецЕсли;
	
	Возврат PopUpКалькулятор(Параметр, ПредыдущаяСтрока, СтрокаРезультат);
КонецФункции
Показать


Тестировал на sql - вроде все отпускается. При непостоянном подключении, действительно, есть проблемы - будем решать, что же делать ;о)))
22. BorovikSV 1036 28.01.15 21:46 Сейчас в теме
(11) А нельзя скомпилировать так, чтобы не приходилось гуглить библиотеки? Борьба с размером исполняемого файла дело конечно благородное, но не за счет же приобретения дополнительных заморочек. Тем более с современным развитием интернета этот аспект почти неактуален.
25. Kis_s 141 29.01.15 17:08 Сейчас в теме
(22) BorovikSV, Уже ... новая версия именно такая и будет .... получается в сумме около 500 Кб .....
(23) Angry, Спасибо за идеи .... будем воплощать по мере возможности ... Тем более (А ведь никто не сказал!), я лихо промахнулся, и, вместо ComConnector использовал полноценное Com-соединение .... ;о((( .... спать нужно больше ....

На данный момент новый релиз "в процессе отладки" ... есть проблемы с утечкой памяти .... отлавливаю .... как будет готово - выложу.
Сделано:
- Нормальный V8*.ComConnector. Без запуска процесса 1С, через нормальное внешнее соединение... V8*.Application пока оставил ...
- Нормальное поведение и отображение OnLine/OffLine без криков об ощибке соединения и т.д....
- Часы работы, чтобы отцеплялась от базы ...
- 1С обработка для тестирования глобальных процедур с выводом их результата в html и возможностью прямо там покликать по ссылкам ...
- Включаемое самологирование для отладки проблем ...
- Команды Back/Forvard
- Отслеживание изменений элементов пользователем и вопрос при обновлении...
- Нормальная работа демобазы на клиент-серверном варианте..
- Несколько управляющих команд от функций 1Са... (но вот уважаемый Angry набросал еще ;о))))
- Многое по-мелочи ...
8. reddima 28.01.15 09:05 Сейчас в теме
И как увязать ее с базой на сервере 1С?
9. anig99 2841 28.01.15 09:10 Сейчас в теме
ООО!!!! Это именно то, что я недавно искал и давно задумал!
10. ruslan0277 4 28.01.15 09:35 Сейчас в теме
Во время работы пользователь может переходить по ссылкам или выполнять какие-либо действия в окне клиента, но, если при очередном запросе к базе данных html код от текущей функции изменится - окно клиента будет полностью обновлено!

А почему бы не спрашивать пользователя "Текущие данные формы изменились по таймауту. Обновить или где?". Имхо, принудительно прерывать работу пользователя не есть гуд.

Очень хорошая и полезная идея.

ЗЫ Жаль потестировать не могу
16. adva 45 28.01.15 12:32 Сейчас в теме
Извиняюсь, народ, как из форума перейти на саму публикацию?
17. Kis_s 141 28.01.15 12:46 Сейчас в теме
19. Angry 11 28.01.15 14:45 Сейчас в теме
Идея супер. Реализация хорошо.
А почему на COM а не на WEB сервисе?

П.С, Может кто знает аналог на веб сервисах? Штука-то полезная.
21. Kis_s 141 28.01.15 16:01 Сейчас в теме
(19) Angry, Никогда не соединялся программно с Webом 1Са .... если есть примеры реализации с открытым кодом, да еще чтобы можно было вызвать глобальные функции (язык не важен) - с радостью посмотрю ... возможно, реализую ....
23. Angry 11 29.01.15 16:35 Сейчас в теме
(21) Примеры работы с Web сервисами есть на инфостарте. Так же в 8.3 есть и Http сервисы.
У COM соединения есть большие недостатки: ест память, долго грузится и не уверен на счет лицензий.

Кроме способа подключения нашел проблемы:
1) Возврат строкой прост, но мало практичен, не хватает например:
а) Принудительно показать, даже если данные не изменились
б) Изменить размер окна, варианты вроде: конкретный размер в px или avto, для того что бы всё убралось
в) Флажок вроде особо важного, что бы посреди экрана показалось.
г) Изменить периодичность обновлений
д) Запрет перезаписи окна, тут может быть вариант, как с аськой, новое уведомление появляется в новом окне, например выше.
2) Пользователь может утащить окно за край экрана и больше ему "не мешает".
3) Ява скрипт в странице, вроде прочел отключен, но это удобный инструмент для интерактивных действий.
4) Снова вспомню аську, если окно просто информационное, то удобней его прятать простым щелчком в любом свободном месте.
5) Как себя ведет программа если на сервере его грубо выключат?
6) Заметил, что при завершении программы COM клиент выкинул 1С-ное окно подтверждения.
24. AllexSoft 29.01.15 17:01 Сейчас в теме
классно! как раз подобное надо мне) думал писать уже, а тут вот подарок ))
ПС: присоединяюсь к комментариям о веб-сервисах.. реально было бы удобнее и проще
26. Angry 11 29.01.15 17:57 Сейчас в теме
Ещё пожелание:
Передать в 1С пользователя, домен и компьютер под которым запущен PopUp1C
Предлагаю использовать для безопасности. Т.к. опознавать пользователя надо, а хранить пароль и логин в ини файле мягко сказать не безопасно, да и в настройке муторно, лучше определение пользователя перевесить на внутренности 1С. А входить в COM под пользователем, который интерактивно запустить 1С не сможет.
27. kns77 100 30.01.15 13:46 Сейчас в теме
Давно в заявках висит подобное от клиента, никак руки не доходили, надо будет попробовать посмотреть
28. Angry 11 30.01.15 14:57 Сейчас в теме
Хорошо, клиент сервер теперь работает, по скорости по тестируем.
Теперь есть проблемы:
1) Не у всех COM Connector работает, лечится длинными манипуляциями (пока разбираюсь)
2) Не работает от имени ограниченного пользователя, под админом работает.
29. dj_serega 390 30.01.15 16:44 Сейчас в теме
Когда будет реализовано через http-сервисы обязательно скачаю =))). COM, имхо, не подходит под данный функционал.
Особенности http можно найти на инфостарте.
+ скорость работы быстрее
+ можно передать через httpответ HTML страничку
+ вроде как не требует лицензии
- нужно публиковать базу
30. apxi 69 02.02.15 10:59 Сейчас в теме
(29) Вот реализованная как сервер, запускается там где лежит база 1С, по http обрабатывает команды и жрет только одну лицензию http://infostart.ru/public/297399/
31. dj_serega 390 02.02.15 16:12 Сейчас в теме
(30) apxi, Так там окно браузера нужно. А тут программка в трее (что очень удобно). Уже знаю где можно использовать данный функционал.

Окно в браузере я могу сделать. Сформировать html-страничку не вопрос. А вот что-то похожее на эту публикацию я сделать не смогу, вот и прошу автора.
33. ruslan0277 4 06.02.15 14:20 Сейчас в теме
(31)dj_serega, а чем данная форточка не браузер? :)
34. dj_serega 390 12.02.15 00:10 Сейчас в теме
(33) ruslan0277, Ну так браузер это отдельная прога, где "случайно" можно перейти в одноклассники :) А тут не получится если не напрограмить :)
32. chmv 03.02.15 10:01 Сейчас в теме
Это то о чем я постоянно думаю
35. Asmody 17.02.15 11:01 Сейчас в теме
От этой штуки один шаг до стандартного виндового гаджета (которые как виджеты). Или плитки.
37. dj_serega 390 08.05.15 12:52 Сейчас в теме
мне чет кажется что разработчик забил на это приложение :(
38. Kis_s 141 08.05.15 23:14 Сейчас в теме
Ребят, сорри, не было в стране .... в ближайшие дни всем отвечу ....
39. dj_serega 390 12.07.16 15:19 Сейчас в теме
(38) Привет :)
Ну как там? Очень жду продолжения данной разработки :)
40. v3rter 12.07.16 15:28 Сейчас в теме
Очень смущает пароль в открытом виде в текстовом файле.
Оставьте свое сообщение