Javascript и 1С. Кросс-платформенное взаимодействие

Публикация № 398366

Разработка - Практика программирования

javascript html 1c взаимодействие

Что делать, если необходим богатый интерфейс, а управляемые формы нам его не могут обеспечить? Использовать HTML и JavaScript. В статье рассмотрено взаимодействие кода 1С и JavaScript, работающее на любой платформе: толстый, тонкий и веб-клиент, под Windows и Linux.

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

Предлагается решение, которое работает как в тонком, так и в веб-клиенте. Под Windows и Linux.

Примечание: при упоминании работоспособности в тонком клиенте, также подразумевается работоспособность и в толстом клиенте (управляемое приложение).



Взаимодействие кода 1С и JavaScript.

Вызов методов языка JavaScript из кода 1С.

Методы JavaScript могут быть вызваны из 1C так:

<Окно документа>.funcName(funcArgs);

Глобальные переменные доступны следующим образом:

<Окно документа>.varName;

Для браузера Internet Explorer окно документа доступно через

Элементы.ПолеHTMLДокумента.Документ.parentWindow

Для остальных браузеров через

Элементы.ПолеHTMLДокумента.Документ.defaultView


Подготовка переменных модуля для взаимодействия с JavaScript и вызов функции:

&НаКлиенте
Перем ДокументПервогоБраузера;

&НаКлиенте
Перем ОкноПервогоБраузера;

&НаКлиенте
Процедура ПервыйБраузерДокументСформирован(Элемент)
		
	// Сохранение элементов document и window в переменные модуля формы,
	// для последующего быстрого доступа к элементам и функциям.
	ДокументПервогоБраузера = Элемент.Документ;
	ОкноПервогоБраузера 	= ДокументПервогоБраузера.parentWindow; // IE
	Если ОкноПервогоБраузера = Неопределено Тогда
		ОкноПервогоБраузера = ДокументПервогоБраузера.defaultView; // Прочие браузеры
	КонецЕсли;

	ОкноПервогоБраузера.createButtons(МассивКнопокПервогоБраузера);

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

Подробнее остановимся на передаваемых агрументах.

В тонком клиенте под Windows, помимо примитивных типов Строка, Число, Булево.., в функцию JavaScript можно передавать и  нативные объекты 1С, такие как Структура, Массив, Соответствие, УправляемаяФорма, и др. Затем, в теле javascript функции доступны свойства и методы этих объектов.

Пример:

&НаКлиенте
Процедура СоздатьКнопки(Команда)
	
	МассивКнопок = Новый Массив;	
	...
	Для Сч = 1 По КоличествоКнопок Цикл
		...
		СтруктураКнопки = Новый Структура;
		СтруктураКнопки.Вставить("Заголовок", 		ЗаголовокКнопки);
		СтруктураКнопки.Вставить("ИмяКоманды", 		ИмяКоманды);
		СтруктураКнопки.Вставить("РазмерТекста", 	РазмерТекста);
		СтруктураКнопки.Вставить("ЦветТекста", 		ЦветТекста);
				
		МассивКнопок.Добавить(СтруктураКнопки);
	КонецЦикла;		
	
	ОкноПервогоБраузера.createButtons(МассивКнопок);
	
КонецПроцедуры
function createButtons(buttonsArray)
{
	var buttonsCount = buttonsArray.Количество(); // Доступны методы и свойства массива 1С
	for(var i = 0; i < buttonsCount; i++)
	{
		var ПараметрыКнопки = buttonsArray.Получить(i);

		var btn = document.createElement('div'); 
		btn.id 			= ПараметрыКнопки.ИмяКоманды; 
		btn.innerText 		= ПараметрыКнопки.Заголовок;	
		btn.style.fontSize 	= ПараметрыКнопки.РазмерТекста;			
		btn.style.color 	= ПараметрыКнопки.ЦветТекста;	
		 				
		container.appendChild(btn);                        
	}  
}  

Данный метод очень удобен, и он подходит, если хватает возможности работы в тонком клиенте в ОС Windows.

В тонком клиенте под Linux, а также в веб-клиенте метод не работает. При передаче структур, массивов, соответствий в аргумент функции, в её теле эти агрументы равны undefined. Работает передача строк, чисел, булев.

Решением возникшей проблемы является использование формата обмена данными JSON. Что это такое - см. https://ru.wikipedia.org/wiki/JSON

Массивы, Структуры и Соответствия преобразуются в их строковое представление, и передаются в функцию. Затем, в теле функции они преобразовываются в объекты языка javascript, такие как Array и Object.

Функции сериализации и десериализации в/из JSON:

&НаКлиенте
Функция СериализоватьВJSON(СериализуемыйОбъект)
	
	#Если ВебКлиент Тогда	
		СтрокаJSON = СериализоватьВJSONНаСервере(СериализуемыйОбъект);
	#Иначе
		ЗаписьJSON = Новый ЗаписьJSON; 
		ЗаписьJSON.УстановитьСтроку();
		НастройкиСериализации = Новый НастройкиСериализацииJSON();
		НастройкиСериализации.СериализовыватьМассивыКакОбъекты = Ложь;
		ЗаписатьJSON(ЗаписьJSON, СериализуемыйОбъект, НастройкиСериализации, "ПреобразованиеВJSON", ЭтотОбъект); 
		СтрокаJSON = ЗаписьJSON.Закрыть();
	#КонецЕсли
	
	Возврат СтрокаJSON; 

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

&НаСервереБезКонтекста
Функция СериализоватьВJSONНаСервере(СериализуемыйОбъект)
	
	ЗаписьJSON = Новый ЗаписьJSON; 
	ЗаписьJSON.УстановитьСтроку();
	НастройкиСериализации = Новый НастройкиСериализацииJSON();
	НастройкиСериализации.СериализовыватьМассивыКакОбъекты = Ложь;
	ЗаписатьJSON(ЗаписьJSON, СериализуемыйОбъект); 
	// ЗаписатьJSON(ЗаписьJSON, СериализуемыйОбъект, НастройкиСериализации, "ПреобразованиеВJSON", ЭтотОбъект); 
	//
	// ЭтотОбъект недоступнен в безконтекстном вызове, поэтому нужно либо поместить эту функцию в общий модуль, 
	// либо изменить директиву компиляции в &НаСервере
	СтрокаJSON = ЗаписьJSON.Закрыть();
		
	Возврат СтрокаJSON; 

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

&НаКлиентеНаСервереБезКонтекста
Функция ПреобразованиеВJSON(Свойство, Значение, ДополнительныеПараметры, Отказ) Экспорт
	
	// Данная функция вызывается для всех свойств, тип которых не поддерживает преобразование в формат JSON напрямую.
	// Они нам не нужны, поэтому всегда отказ от их записи.
	Отказ = Истина;	
	
	// Можно сделать преобразование в строку.
	// Значение = Строка(Значение);
	// Возврат Значение;
	
КонецФункции

&НаКлиенте
Функция ДесериализоватьИзJSON(СтрокаJSON)
	
	#Если ВебКлиент Тогда
		ДесериализованныйОбъект = ДесериализоватьИзJSONНаСервере(СтрокаJSON);
	#Иначе
		ЧтениеJSON = Новый ЧтениеJSON(); 
		ЧтениеJSON.УстановитьСтроку(СтрокаJSON); 
		ДесериализованныйОбъект = ПрочитатьJSON(ЧтениеJSON); 
		ЧтениеJSON.Закрыть();
	#КонецЕсли	
	
	Возврат ДесериализованныйОбъект;
	
КонецФункции

&НаСервереБезКонтекста
Функция ДесериализоватьИзJSONНаСервере(СтрокаJSON)
	
	ЧтениеJSON = Новый ЧтениеJSON(); 
	ЧтениеJSON.УстановитьСтроку(СтрокаJSON); 
	ДесериализованныйОбъект = ПрочитатьJSON(ЧтениеJSON); 
	ЧтениеJSON.Закрыть();
	
	Возврат ДесериализованныйОбъект;
	
КонецФункции

Используются механизмы работы с JSON, реализованные в платформе 8.3.6.1977.

Для платформы 8.3.5 и ранее, можно использовать разработку господина Александра Переверзева, доступную по адресу //infostart.ru/public/119601/.

Теперь, прежде чем передавать структуру в функцию JavaScript, преобразуем её в строку:

JSONМассивКнопокПервогоБраузера = СериализоватьВJSON(МассивКнопокПервогоБраузера);
ОкноПервогоБраузера.createButtons(JSONМассивКнопокПервогоБраузера);

Изменится и код функции Javascript, так как строку нужно преобразовать обратно в объект, пусть и не 1С-овский, но удобный для обработки:

function createButtonsWithJSON(buttonsData)
{
	var buttonsData = JSON.parse(buttonsData);
	
	for(var i in buttonsData)
	{
		var ПараметрыКнопки = buttonsData[i];

		var btn = document.createElement('li'); 
		btn.id = ПараметрыКнопки.ИмяКоманды; 
		...                                    
	}
}  

Глобальный объект JSON, используемый для сериализации и парсинга (десериализации) в javascript, доступен начиная с Internet Explorer 8.

HTML документ в тонком клиенте, по умолчанию, даже при наличии установленного IE11, отображается в режиме совместимости с IE5 (Quirks mode), поэтому необходимо его перевести в Standarts mode установной тега <meta http-equiv="X-UA-Compatible" content="IE=EDGE" /> в теле тега head.

Если на компьютере установлен IE7 (когда переход в режим минимум IE8 невозможен), то нужно использовать следующий скрипт: https://github.com/douglascrockford/JSON-js/blob/master/json2.js

который реализует функционал работы с JSON в IE < 8 (по аналогии с работой с JSON в платформе начиная с версии 8.3.6.1977, и до неё).

В функции javascript можно создавать массивы или объекты javascript, заполнять их, и возвращать в 1C.

&НаКлиенте
Процедура ПолучитьОбъектИзJavaScript(Команда)
	
	JSONСтруктураОтвета = ОкноПервогоБраузера.getDataFromJavaScript(""); 
	// Нужно передать любой параметр, например пустую строку, иначе функция не выполняется,
	// а переменной принимающей результат присваивается ссылка на эту функцию (COMОбъект).	
	СтруктураОтвета = ДесериализоватьИзJSON(JSONСтруктураОтвета);
	
	Для Каждого КлючИЗначение Из СтруктураОтвета Цикл
		Сообщить("Ключ: " + КлючИЗначение.Ключ + " Значение: " + КлючИЗначение.Значение);	
	КонецЦикла;
	
КонецПроцедуры
function getDataFromJavaScript()
{
	var arr = []; // Массив
	arr.push(555);
	arr.push("Строка в массиве");
	
 	var obj = {}; // Объект (структура)
 	obj["Ключ1"] = "Пробная строка";
 	obj["Ключ2"] = 7777;
 	obj["Ключ3"] = true;
 	obj["Ключ4"] = arr;
 	
 	return JSON.stringify(obj);
}

Вызов методов 1С из JavaScript

В тонком клиенте под Windows доступен очень удобный метод:

В HTML документе создается глобальная переменная, например externalForm. При загрузке документа, переменной externalForm присваивается ссылка на текущую упрваляемую форму, доступную через ЭтотОбъект или ЭтаФорма.

Затем, в коде JavaScript становятся доступны любые клиентские экспортные методы и переменные модуля данной управляемой формы.

Пример:

// В документе html, в теге script объявляем глобальную переменную.
var externalForm = null;
var timer = null;
var counter = 0;

function startTimer() 
{        
    alert(externalForm.ПеременнаяМодуля);
            
    timer = setInterval(function() 
    {
        externalForm.МетодВызываемыйИзJavaScript("Значение переменной conunter: " + counter++);
    }, 1000);
}

function stopTimer()
{
    clearInterval(timer);
}
&НаКлиенте
Перем ПеременнаяМодуля Экспорт;

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    ...
    ПеременнаяМодуля = "Значение переменной модуля";
    
КонецПроцедуры

&НаКлиенте
Процедура ПервыйБраузерДокументСформирован(Элемент)
	
	...		
	ОкноПервогоБраузера.externalForm = ЭтаФорма;
	
КонецПроцедуры

&НаКлиенте
Процедура ЗапуститьТаймер(Команда)
	
	ОкноПервогоБраузера.startTimer();
	
КонецПроцедуры

&НаКлиенте
Процедура ОстановитьТаймер(Команда)
	
	ОкноПервогоБраузера.stopTimer();
	
КонецПроцедуры

&НаКлиенте
Процедура МетодВызываемыйИзJavaScript(Данные) Экспорт
    
    Сообщить(Данные);
    
КонецПроцедуры

В тонком клиенте на Linux и в веб-клиенте методы и свойства переменной externalForm не доступны в javascript, их значение - undefined, поэтому используется следующая методика:

Объявляем глобальную переменную javascript, в которую будем помещать передаваемое значение.

var interactionVariable = null;

В документ добавляем невидимую кнопку

<button id="interactionButton" style="display: none">Кнопка взаимодействия</button>

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

interactionVariable = "МетодВызываемыйИзJavaScript через interactionButton. Значение переменной conunter: " + counter;
interactionButton.click();

И обрабатываем событие ПриНажатии у поля HTML документа.

&НаКлиенте
Процедура ПервыйБраузерПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
	
	НажатыйЭлемент = ДанныеСобытия.Element;
	Если НажатыйЭлемент.id = "interactionButton" Тогда
		МетодВызываемыйИзJavaScript(ОкноПервогоБраузера.interactionVariable);
		
		// Или: Заглушка = Вычислить(ОкноПервогоБраузера.interactionVariable + "()");
		// Поле для фантазии большое	
	КонецЕсли;
	
КонецПроцедуры

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

Прикреплена демонстрационная обработка.

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

Наименование Файл Версия Размер
ВзаимодействиеJavaScriptИ1C

.epf 12,23Kb
210
.epf 12,23Kb 210 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. VitaliyCeban 415 14.09.15 11:59 Сейчас в теме
Еще один интересный приём передачи данных JavaScript -> 1C, работающий только в тонком/толстом клиентах на Windows.

function call1C()
{
	var obj = externalForm.ВычислитьКод1СИзJavascript("Новый Структура");
	obj.Вставить("ПолеСтруктуры", "Значение поля стурктуры");
	externalForm.МетодВызываемыйИз1С(obj);
}

&НаКлиенте
Функция ВычислитьКод1СИзJavascript(Код) Экспорт
	
	Возврат Вычислить(Код);
		
КонецФункции

&НаКлиенте
Функция МетодВызываемыйИз1С(Данные) Экспорт
	
	Сообщить(Данные.ПолеСтруктуры);
		
КонецФункции
Показать
fancy; le0nid; json; WizaXxX; Gilev.Vyacheslav; zergnm; kote; +7 Ответить
23. unpete 563 21.09.15 15:58 Сейчас в теме
(1) Ремарка: события на вебстранице возникают асинхронно, форма 1С, в общем случае, может какие-то из виртуальных кликов пропустить. Тип переменной interactionVariable лучше сделать строкой и не просто присваивать, а дописывать в неё json очередного сообщения. На стороне формы 1С реализовать очередь, в которую складывать элементы массива из interactionVariable и последовательно обрабатывать.
user1011519; kote; +2 Ответить
24. VitaliyCeban 415 22.09.15 09:13 Сейчас в теме
(23) unpete, Хоть и не замечал пропусков, но ваш метод всё же, более надёжен, спасибо. Одно непонятно, как поведет себя одновременный .pop() у этого стека в 1С, и .push() в javascript, при отсутствии mutex'ов.
25. unpete 563 22.09.15 12:24 Сейчас в теме
(24) В моих проектах пропуски были решение из практики.
как поведет себя одновременный .pop() у этого стека в 1С, и .push() в javascript
Поведёт себя плохо, решение не идеальное, но вероятность проблем ниже.
34. Alxby 537 26.12.16 08:17 Сейчас в теме
(23), (24) Хотел было написать комментарий о механизме обмена, но потом решил оформить его отдельной статьей http://infostart.ru/public/570446/
fillin; salamankas; VitaliyCeban; +3 Ответить
55. diziburda1 21.05.20 17:07 Сейчас в теме
(1)hello is there any english document ? I didnt understand it :) Basicly i need when i click a event in html document i want to start 1c procedure or function how can i do it ?
2. kote 522 14.09.15 17:23 Сейчас в теме
Прочитал с большим интересом :) В своё время "подружил" HTML-форму c Flash элементом на нём - с передачей данных туда и обратно.. но потом flash умер и всё как то сошло на нет :)
В общем, управляемые формы уже не мучал в этом отношении.

Пишите еще. Интересно, насколько можно улучшить UI у 1С с помощью js - фото и видео бы добавить в следующих статьях.. и посмотреть работу таких фреймворков в окне 1С, как Angular/React/.. и т.п.

Жму руку и буду ждать продолжения..
user1201038; +1 Ответить
5. VitaliyCeban 415 14.09.15 22:00 Сейчас в теме
(2) kote, Постараюсь написать полезный материал.

(3) yurii_host, Функции javascript объявляются в HTML документе, между тегами <sc ript> </sc ript>
Простейший пример https://learn.javascript.ru/hello-world.

Исходный код HTML документа можно хранить в макете типа ТекстовыйДокумент. Хотя есть и макет типа Документ HTML, с мгновенным просмотром результата изменений, но хранить код в нем не советую, так как конфигуратор портит код, работающий с новыми версиями браузеров.

Создаете реквизит формы, с типом Строка, переностите его на форму, изменяете тип элемента с Поле ввода на Поле HTML документа. Получаете содержимое макета ТекстовыйДокумент и присваиваете его созданному реквизиту с типом Строка.

(4) vano-ekt, Нужно указывать мета-тег x-ua-compatible для перевода браузера в Standards mode, тогда документ будет отображаться в режиме версии, установленной на компьютере. Тег присутствует в статье. Проблема реальна, когда сборка Windows на компьютере старая, и установлен IE8, или IE7. Поэтому нужно писать разметку HTML таким образом, чтобы обеспечивать совместимость и с этими браузерами.

Для решения которое я разрабатываю, я выбрал минимальный порог - IE8. То есть, если хотите чтобы приложение работало, обновите ваш IE6/7 до IE8, так как для поддержки IE7 нужно слишком много костылей. Такой же порог выбрали и разработчики 1С для веб-клиента.

Надо сделать коллективное обращение в 1С, об отказе использования IE WebContol в толстом/тонком клиентах под Windows, и переход на Webkit, с вшитием его в платформу, то есть чтобы версия Webkit не зависела от того что установлено на компьютере.
7. vandalsvq 1198 15.09.15 03:05 Сейчас в теме
(5) указание совместимости - это лишь костылек, который в полной мере не решит проблему. Большинство современных java- библиотек поддерживаться будут крайне ограниченно или вообще никак (поскольку большинству надо хотя бы IE8+). На текущий момент работу в 1С с java лично для себя немного закрыл, в пользу связки web-приложение + http сервисы. Да есть ряд неудобств, но пережить можно. По крайней мере пока webkit не появится. Хотя тут тоже такой нюанс, пока 1С добавит, пока платформа выйдет, пока займет значимую часть среди пользователей ))))). В общем не скоро будет оное ))))
8. minimajack 73 15.09.15 08:01 Сейчас в теме
(7) vandalsvq, ХВАТИТ ПУТАТЬ.
java - никакого отношения к javascript не имеет ВООБЩЕ.
user1021675; kadild; +2 Ответить
11. vandalsvq 1198 15.09.15 23:50 Сейчас в теме
(8) minimajack, слушай, если я для упрощения печатания написал java (хотя понятно контексту общения о чем идет речь) что теперь на гильотину? Сейчас уже исправить не могу, но сразу говорю, что имел в виду javascript.
(10) ну вот не знаю, не знаю. Ты это, например, ангулару (1.4) скажи с его директивами вроде ng-if, которые при использовании вываливают 1С на бок. Тестил правда всего на нескольких релизах (8.3.6.2ххх, 8.3.5.ххх - не помню точно), но так и было. На компе стоит ie "припоследнейший", вот винда только 7-я, но она то не при чем? Кстати эти же странички прекрасно работают в ie (правда как всегда для оформления в css приходится хаки использовать), про гугл и сафари молчу, там понятно что все путем. Так что, по чем купил, по тому и отдаю.
Готов предоставить для тестирования код.

Пы.сы. интересная идея возникла, попробовать накидать тестовую страничку для проверки директив ангулара... как найдется минутка накидаю.
10. VitaliyCeban 415 15.09.15 09:12 Сейчас в теме
(7) vandalsvq, Указание использовать последний доступный Standards mode решает проблемы. Библиотеки работают, так, как нужно.
Как я описал выше, проблема действительно присутствует когда у пользователя просто не установлен на компьютере IE8+.

(6) logarifm, Успокойтесь, отбросьте негатив, попробуйте javascript, весьма вероятно - Вам понравится.
17. kote 522 17.09.15 09:32 Сейчас в теме
(5)
Надо сделать коллективное обращение в 1С, об отказе использования IE WebContol в толстом/тонком клиентах под Windows, и переход на Webkit, с вшитием его в платформу, то есть чтобы версия Webkit не зависела от того что установлено на компьютере.


.. и более того - учитывая сколько геморроя.. не СКОЛЬКО ГЕМОРРОЯ доставляет web-клиент, когда у пользователей постоянно обновляется Хром/Фаерфокс.. может, вообще стоит выпустить СВОЮ СБОРКУ хрома/фаерфокса - которая будет гарантированно работать с 1С через web?

Ведь загвоздка, на самом деле - хоть тонкий клиент и весит меньше, чем дистрибутив броузера - проблема в правах на установку и зависимости тонкого клиента от версии платформы на сервере.. Ну сделали бы как то - вариантов море - например, тонкий клиент, портабельный/не требующий установки - распаковал и работай.. или обновление чтобы не требовало прав на установку ПО.. или вообще - чтоб тонкий клиент не требовал соответствия версии сервера и своей (т.е. по сути специализированный такой броузер базы 1С)..
18. unpete 563 17.09.15 20:58 Сейчас в теме
(5)
Надо сделать коллективное обращение в 1С, об отказе использования IE WebContol
Подобные обращения писались многократно. Цитирую дословно ответ С. Нуралиева с весеннего партнерского семинара 2015 года: "Это сложно и очень опасно".
и переход на Webkit

Лучше, не базовый Webkit, а Blink с движком V8 (Chromium) - поддержка ES6-ES7 там намного лучше. Например, Object.Observe() или ServiseWorkers работают только в V8. В других javascript движках еще даже не анонсированы.

(7) vandalsvq,
указание совместимости - это лишь костылек, который в полной мере не решит проблему
Проблему подтверждаю. Платформа 1С аварийно завершает работу при нетривиальных манипуляциях с DOM внутри поля HTMLДокумента.

(6) logarifm,
Так почему продолжаем стонать и упорно лезть на кактус, работайте на других системах
Платформа 1С содержит гениальные объекты данных. Про регистр, документ, справочник и ссылочную типизацию можно говорить только в превосходной степени.
При этом, та же платформа содержит серьёзные архитектурные ошибки в модели тонкого и веб-клиентов. Эти проблемы не решить рефакторингом или оптимизацией, т.к. их корни в постановке задачи, а не в реализации. Попытки применить педали и костыли - естественны. Перед людьми возникают задачи и они пытаются их решать используя доступные в платформе средства.
почему не стать одним из разработчиков

Так и поступили. См. metadata.js
dvsidelnikov; DAAbramov; manuel; salamankas; Makushimo; VitaliyCeban; kote; +7 Ответить
22. kote 522 21.09.15 11:17 Сейчас в теме
for all, (18) unpete,

Всем рекомендую посмотреть на metadata.js - из 18 поста.. И задумка и исполнение на высоте. Правда, не бесплатно для коммерческого использования - но посмотреть стоит.
3. json 14.09.15 21:01 Сейчас в теме
Очень интересная статья. Автору респект за развитие направления по расширению возможностей 1С.

Не смог понять из описания, где хранится код на жабаскрипте.
Если я хочу объявить, например, javascript-функцию, то где конкретно я должен прописать ее код?
4. vano-ekt 848 14.09.15 21:14 Сейчас в теме
ПолеHTMLДокумента ис суксь, ибо ie6 или какой там
6. logarifm 1088 14.09.15 23:56 Сейчас в теме
не могут в полной мере удовлетворить потребность в богатом и отзывчивом интерфейсе


А вы значит можете??? Тоесть вы думаете, что добавив эту пидаль и вуаля 1С вдруг стала красивей. Ну если Вы такой крутой и можете критиковать 1С так почему не стать одним из разработчиков этой 1С и исправить то что вам не нравиться.

Если проанализировать ИС то 80% статей начинается, 1С не сделала то. 1С криво сделала это... Так почему продолжаем стонать и упорно лезть на кактус, работайте на других системах...
9. json 15.09.15 08:54 Сейчас в теме
(6) logarifm,
javascript - это не педаль и не костыль. Разработчики из фирмы 1С тоже используют javascript в типовых конфигурациях (БП 2.0, ЗУП). Некоторые вещи 1с-кой не реализуешь (например, предпросмотр при наведении, некоторые виды диаграмм и др.) типовыми средствами. Но применение таких рюшечек повышает привлекательность и удобство интерфейса.

и еще один факт. Над улучшением возможностей платформы 1С работает только одна фирма 1С, а сообщество javascript - по всему миру. Очевидно, что javascript - развивается интенсивнее.

думаю, для того, чтобы высказывать подобные замечания объективно, вам явно не хватает знаний в области возможностей этого языка.
Gendelf; manuel; baton_pk; Chif13; Gilev.Vyacheslav; sikuda; amon_ra; unpete; Taktic; infostart user; fvadim; slavap; FSerg; VitaliyCeban; +14 Ответить
12. TuneSoft 16.09.15 08:12 Сейчас в теме
Интересно, но всё это неактуально для мобильного приложения на 1С :(
gigapevt; kvovka; +2 Ответить
14. kvovka 30 16.09.15 08:31 Сейчас в теме
(12) tunesoft, вот именно. Ждем, когда заработает на мобильной платформе.
19. unpete 563 17.09.15 21:07 Сейчас в теме
(12) tunesoft, (14) kvovka,
Ждем, когда заработает на мобильной платформе
Два вопроса:
  • Можно пример задачи для которой из мобильной платформы нужен доступ к браузеру?
  • Почему бы эту задачу не решить прямо в браузере?
27. kvovka 30 30.09.15 08:07 Сейчас в теме
(19) unpete, клиентов все устраивает в мобильном, кроме интерфейса.
13. Makushimo 157 16.09.15 08:20 Сейчас в теме
Наконец-то появляются статьи на тему использования html в 1C.
Автор, спасибо

Вопрос, на который не могу найти ответ. Может подскажете

Как в 1С в поле html документа сделать раскрывающийся текст ?
ну вот как на этом сайте цитаты кода 1С отображаются:
небольшой спойлер, нажимаешь на "показать" или на заголовок спойлера и разворачивается весь текст внутри.
16. vandalsvq 1198 16.09.15 14:11 Сейчас в теме
(13) Makushimo, jQuery тебе в помощь. Там есть метод show смотри в его сторону.
В html будет примерно так

// HTML
<h1 id='blockctrl'>Показать</h1>
<div id='hideblock' style='display:none'>Тут содержимое блока</div>

// JS
$("#blockctrl").click(
    function() {
        $("#hideblock").show("slow");
    }
);
Показать
15. iliabvf 16.09.15 10:14 Сейчас в теме
Большое спасибо! Как раз была идея полностью заменить интерфейс Такси на дизайнерский из html + css + js.
Как заметили выше, с мобильным приложением все хуже.

Буду ждать продолжения.
20. olbu 18.09.15 13:57 Сейчас в теме
открываю под 8.2 обычное приложение вот это <Окно документа>.funcName(funcArgs);, у меня вываливается ошибка
{Форма.Форма.Форма(153)}: Метод объекта не обнаружен (fff)
Браузер.fff("ГГГГГ");
получается в моем случае не видно функции fff...

<script>
function fff(M) {alert(M);}
</script>
21. VitaliyCeban 415 21.09.15 09:30 Сейчас в теме
(20) olbu, Загрузите обработку на файловый хостинг, могу посмотреть в чём проблема. И напишите версию IE, установленную на компьютере. А также, через какой клиент запускаете.
26. sikuda 649 24.09.15 18:22 Сейчас в теме
Чашечка с кофе это эмблема java, а не javascript. Не путайте пожалуйста.

Hitler And The Downfall Of Silverlight
https://youtu.be/RRFiu0xfQzw
28. quick 574 30.09.15 10:20 Сейчас в теме
превосходный пример, как раз то что нужно. Надоело писать интерфейсы под все версии.
29. alprk 23.11.16 11:17 Сейчас в теме
ПараметрыКнопки = buttonsArray.Получить(i);


var ПараметрыКнопки
30. VitaliyCeban 415 23.11.16 12:25 Сейчас в теме
(29) alprk, Дополнено, спасибо.
31. anig99 2767 09.12.16 14:18 Сейчас в теме
Для УФ (управляемых форм) есть одно замечание.
ОкноПервогоБраузера.externalForm = ЭтаФорма;
использовать нельзя. Это циклическая ссылка и при закрытии клиента всё остается висеть в памяти и на сервере. Неизвращенными способами обойти это нельзя. Гораздо проще переделать на ПриНажатии, как описано здесь http://infostart.ru/public/338126/

Для простых форм циклическая ссылка - тоже зло, но там реально наплодить костылей, чтобы циклическую ссылку устранить при закрытии клиента.
32. VitaliyCeban 415 09.12.16 15:21 Сейчас в теме
(31) А если в ПередЗакрытием вызвать ОкноПервогоБраузера.externalForm = null; ? Счетчик ссылок должен уменьшиться.

Метод ПраНажатии описан в этой статье, правда уклон я сделал на его кроссплатформенность. В тиражном решении использую только его (из за упомянутой кроссплатформенности).
33. anig99 2767 12.12.16 14:33 Сейчас в теме
(32) если есть циклическая ссылка, то окно закрывается только визуально, т.к. закрывается родительское окно клиента 1с. Фактически же окно не закрывается, оставаясь в памяти компьютера и сервера. Соответственно ни ПередЗакрытием, ни ПриЗакрытии не запускаются. Я несколько часов потратил на обдумывание, как это можно обойти в тонком клиенте, но понял, что эффективнее потратить время на переделку на ПриНажатии.
41. pencil 24.05.17 00:54 Сейчас в теме
(33) Проверил, ПередЗакрытием прекрасно запускается. Да и было бы странно, если бы нет, это же ПЕРЕД закрытием, оно в принципе должно запускаться когда объект формы еще существует.

К сожалению, вызов функций 1С через ПриНажатии не всегда возможно использовать. Обнаружил тут, что если веб-документ построен на фреймах (не в смысле <iframe> используется, а на <frameset>. Да, есть извращенцы, которые до сих пор так делают) то это событие у поля HTML вообще не вызывается.
35. Lord_Alexandr 27.01.17 17:04 Сейчас в теме
Пытаюсь в браузере Chrome v55.x.x.x вызвать глобальную javascript-функцию через
ДокументПервогоБраузера.defaultView.<ИмяМетода>();
Получил сообщение 1С: Метод объекта не обнаружен <ИмяМетода>.
При этом доступ к глобальным javascript-переменным есть. А с вызовами ошибка.
Что я делаю не так?

Через ДокументПервогоБраузера.parentWindow в IE и тонком/толстом клиентах работает все прекрасно.
36. json 28.01.17 11:01 Сейчас в теме
(35) очень интересно. А можно вас попросить выложить пример кода по созданию ком объекта хрома?
Насколько мне известно сам хром (и другие браузеры кроме ие) не имеют ком интерфейса. Вы наверное какую-нибудь стороннюю dll используете?

Я бы тоже поэкспериментировал в этом направлении
38. VitaliyCeban 415 30.01.17 11:42 Сейчас в теме
(36) COMОбъект в случае веб-клиента (не IE) не используется. Насколько помню, ДокументПервогоБраузера.defaultView имеет тип ВнешнийОбъект.
39. Lord_Alexandr 24.02.17 15:08 Сейчас в теме
(36) Я использую механизм описанный в данной статье, никакого com-объекта тут нет. Обращение в web-клиенте идет через iframe.
Проблема в том, что в W3C браузерах document ничего не знает о window, поэтому о parentWindow не может быть и речи, а defaultView немного иной объект. Видимо потому вызов глобальных функций не работает у меня.
37. VitaliyCeban 415 30.01.17 11:40 Сейчас в теме
(35) Если выложите обработку, в которой воспроизводится проблема, смогу посмотреть.
40. Lord_Alexandr 24.02.17 15:15 Сейчас в теме
(37) Обработка изначальна была проста как валенок, т.к. делал исходя из статьи.
Сейчас уже решил проблему не через вызов глобальных функций window, а через запись всех параметров в глобальную javascript-переменную и генерацию события click специальной скрытой кнопки. А уже в javascript-обработчике click анализирую содержимое глобальной переменной и выполняю необходимые действия.
42. fillin 213 10.06.17 00:02 Сейчас в теме
Спасибо за статью. Очень помогла.
Внесу свои 5 копеек.

1. Часто интерфейсы библиотек JS реализуют как функции. Примерно так:
(function(){
	// Внутренняя реализация
	...
	// Интерфейс
	var moduleInterface= function(){};
	...
	// Экспорт
	window.moduleName = moduleInterface;
}());
Показать

В JS обращение к свойствам и методам библиотеки происходит, как обычно, через точку: moduleName.method()
Но в 1С в этом случае надо обращаться к модулю, как к функции: moduleName().method()

2. Сделал заменитель запрещенной функции eval - аналог Выполнить и Вычислить в 1С.
(function(moduleName){
	"use strict";

	/**
	 * Выполняет код, полученный из строки code с параметрами paramsDesc в контексте context.
	 * Параметры, описанные в paramsDesc передаются в аргументах, начиная с 4-го.
	 *
	 * Примеры использования:
	 *	executeCodeFromString('', 'console.log("Hi!")')(); // Hi!
	 *	executeCodeFromString('a, b', 'return a + b', null, 1, 2); // 3
	 */
	function executeCodeFromString(paramsDesc, code, context) {
		var func = new Function(paramsDesc, code);
		return func.apply(context || window, [].slice.call(arguments, 3));
	}

	var moduleInterface = function(){};
	moduleInterface.executeCodeFromString = executeCodeFromString;

	// Экспорт
	window[moduleName||"myModule"] = moduleInterface;

}(/*Здесь можно переопределить внешнее имя модуля*/));
Показать

Пример использования:
	// Объявим короткое имя
	jsWindow = Элементы.ДокументHTML.Документ.parentWindow;
	myModule = jsWindow.myModule();

	// Выполним проивольный код на стороне JavaScript
	myModule.executeCodeFromString("", "alert('Привет!')");
	// Передадим произвольный контекст в 3-м параметре
	Сообщить(myModule.executeCodeFromString("", "return this.ИмяФормы", ЭтотОбъект));  // ВнешнийОтчет.ВнешнийОтчет1.Форма.Форма
	
	// Вычислим что-нибудь с передачей параметров
	Сообщить(myModule.executeCodeFromString("a, b, c", "return Math.max(a, b, c)", , 1, 5, 4));  // 5
	// Опишем новую функцию на стороне JS, а потом вызовем ее
	myModule.executeCodeFromString("", "myModule.sum = new Function('a, b', 'return a + b  //Это могла бы быть очень большая функция ')");
	Сообщить(myModule.executeCodeFromString("a, b", "return myModule.sum(a, b)", , 4, 10));  // 14
	Сообщить(myModule.executeCodeFromString("", "return myModule.sum(this.Высота, this.Ширина)", Элементы.ДокументHTML));  // У меня получилось 60
Maximysis; fancy; logos; pahalovo; pm74; VitaliyCeban; +6 Ответить
43. kadild 08.10.17 20:35 Сейчас в теме
Плюс за статью.
Только уберите, пожалуйста, лого чашки кофе. Java к JavaScript'у никакого отношения не имеет. У JavaScripta есть свое лого. Из-за таких вот ляпов в других ресурсах ржут над одинэсниками.
CyberCerber; +1 Ответить
44. TylerDerdenIII 18.01.18 10:39 Сейчас в теме
В веб-клиенте Элементы.ДокументHTML.Документ = Неопределено. В толстом/тонком все норм. В чем может быть дело?
45. json 18.01.18 11:15 Сейчас в теме
(44) Возможно, что Поле HTML не отображается на форме (либо Видимость = ЛОЖЬ, либо располагается на невидимой закладке).
48. vladnet 367 16.10.19 10:15 Сейчас в теме
(44) Никто не нашел решения данной проблемы?

В веб-клиенте Элементы.ДокументHTML.Документ = Неопределено

это просто засада, все работает в а веб клиенте нет
46. frkbvfnjh 604 09.10.19 13:52 Сейчас в теме
&НаКлиенте
Процедура ПервыйБраузерДокументСформирован(Элемент)
    
    ...        
    ОкноПервогоБраузера.externalForm = ЭтаФорма;
    
КонецПроцедуры


В тонком клиенте, на платформе 8.3.15.1565 (даже под Windows) - не работает! Значение не меняется при присвоении формы, но если к примеру присвоить простой тип (число или строку), то значение в переменной меняется, так что прикрыли лавочку походу...
47. vladnet 367 16.10.19 10:14 Сейчас в теме
(46) Скорее всего это из за того что сейчас используется webkit, он не может так как эксплорер ссылки поддерживать на непонятные объекты
TuneSoft; +1 Ответить
49. Бэнни 136 01.12.19 11:29 Сейчас в теме
(47) и чего делать в таком случае?
50. Бэнни 136 02.12.19 04:22 Сейчас в теме
(49)разобрался, проще генерить события в js, и программно нажимать на невидимую кнопку, а она уже сама вызовет событие элемента "ПриНажатии" и там уже все разруливать.
51. s_vidyakin 63 26.12.19 17:59 Сейчас в теме
Прикрутил vue.js к странице, удобно передавать обычный массив данных, а Vue передает в компонент и красиво выводит
52. OptimusMaximus 14.01.20 11:23 Сейчас в теме
А если к примеру нужно написать регламентное задание по обмену например есть решение на java
далее утыкаемся в то что элемента на форме мы разместить не можем а и соответствено вызвать функцию
Для браузера Internet Explorer окно документа доступно через

Элементы.ПолеHTMLДокумента.Документ.parentWindow
Для остальных браузеров через

Элементы.ПолеHTMLДокумента.Документ.defaultView
54. diziburda1 21.05.20 15:54 Сейчас в теме
hello is there any english document ? I didnt understand it :) Basicly i need when i click a event in html document i want to start 1c procedure or function how can i do it ?
56. VitaliyCeban 415 21.05.20 17:15 Сейчас в теме
(54)

In html document create a global variable like
var interactionVariable = null;


Then create an invisible button
<button id="interactionButton" style="display: none">Interaction button</button>


At any place you want to call 1C from Javascript, run these two strings of code:

interactionVariable = "assign here your data, it can be, for example, JSON.stringify(myObject)";
interactionButton.click();


And in 1C form, HTML document has only 2 events: DocumentComplete and OnClick.
You need the second one.

&AtClient
Procedure WebBrowserOnClick(Element, EventData, ....)
    
    ClickedElement = EventData.Element;
    If ClickedElement.id = "interactionButton" Then
        MyData = Elements.WebBrowser.defaultView.interactionVariable; // or parentWindow, instead of defaultView, for IE and platform ver. < 8.3.14
        // Do anything you want with MyData
           
    EndIf;
    
EndProcedure
Показать
eeeio; Artem-B; +2 Ответить
57. VitaliyCeban 415 21.05.20 17:18 Сейчас в теме
(54) If you used JSON.stringify at Javascript side, then you can parse it back from MyData variable to an object, at 1C side, with 1C's JSONReader
58. diziburda1 21.05.20 18:35 Сейчас в теме
59. Vix 27 17.07.20 22:52 Сейчас в теме
столкнулся с тем, что в тонком и веб клиенте ДокументПервогоБраузера.defaultView, Поле HTML.document = Неопределено. Не понятно почему возникает это, платформа 8.3.15 с режимом совместимости 8.3.12. Причем изначально с первого раза все работало, спустя неделю уже перестало.
Оставьте свое сообщение

См. также

FormCodeGenerator Программная доработка форм. Часть 2 (Режим работы "Режим сравнения форм") на примере ERP 2.5 Промо

Практика программирования Адаптация типовых решений Прочие инструменты разработчика v8 1cv8.cf Абонемент ($m)

Данная публикация является продолжением описания функционирования обработки "FormCodeGenerator " в режиме сравнения форм и генерирования кода на основании сравнения. Подходит для перевода уже доработанных форм с интерактивной доработки на программную. Данный режим работы обработки снизит издержки при дальнейших обновлениях конфигураций.

5 стартмани

21.12.2020    4168    19    huxuxuya    11    

[mobile] Переносим HTML интерфейс на 1С

Работа с интерфейсом Мобильная разработка v8 v8::Mobile 1cv8.cf Бесплатно (free)

Разберем методы переноса HTML интерфейса на 1С на примере реализации нижнего меню для мобильного приложения. Сравним методы между собой. Данные методы можно применять не только для мобильной разработки, но и для веб-клиента и т.д

02.11.2020    6398    leobrn    65    

Интерактивная справка по объектам 1С (подключаемое расширение)

Практика программирования Работа с интерфейсом v8 ERP2 Абонемент ($m)

База знаний, подключаемая к объектам основной базы. Пополняется интерактивно, формируется в виде статей прямо в 1С (текст, картинки, таблицы, ссылки). Есть возможность прикрепления файлов, привязки к объектам 1С, возможности рейтинга и комментирования пользователями.

3 стартмани

29.09.2020    10064    63    sapervodichka    43    

Самый простой парсинг и обработка веб-страниц в 1С

WEB Универсальные функции v8 1cv8.cf Бесплатно (free)

Рассмотрим самый простой парсинг веб-страниц средствами платформы 1С и еще некоторые полезные приемы работы с веб-страницами.

07.08.2020    7622    YPermitin    21    

Вам нравятся запросы в 1С? Промо

Практика программирования Разработка v8 v8::Запросы 1cv8.cf Абонемент ($m)

Речь не только о том, что простейший запрос с "легальным" оформлением растянется на пол-экрана, речь еще обо всем, что нужно написать "в нагрузку" к тексту запроса. Все эти "Новый Запрос", "УстановитьПараметр" и последующие пляски с обработкой результата... Пора с этим заканчивать!

1 стартмани

03.07.2019    23812    6    m-rv    90    

Сбор информации об изменении состояния и вывод в виде направленного графа с помощью vis.js

Практика программирования v8 1cv8.cf Бесплатно (free)

В публикации опишу схему данных сбора истории изменения реквизита и вывода в виде графа.

29.03.2020    1738    malikov_pro    2    

html + css + js в поле HTML документа 1С на примере решения задачи ханойских башен

Практика программирования v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Рассматривается пример использования html + css + js в полеHTMLдокумента 1с. Вызов функций javascript со стороны 1С с передачей параметров. Решение головоломки "Ханойская башня" с визуализацией в среде 1С.

1 стартмани

11.11.2019    8268    9    mangushov    0    

Конвейер проверки качества кода

Инструментарий разработчика Практика программирования Математика и алгоритмы v8 1cv8.cf Абонемент ($m)

Jenkinsfile для выполнения проверки качества кода. Собирает информацию с АПК, EDT и BSL-LS. Сопоставляет ошибки с гит-репозиторием, выгруженным ГитКонвертором. Отправляет в Сонар.

3 стартмани

04.09.2019    30267    27    Stepa86    46    

ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование) ЗНАЧЕНИЯ ("001", "Новый товар") Промо

Практика программирования v8 v8::Запросы 1cv8.cf Абонемент ($m)

Вас не обманывают ваши глаза, это запрос на изменение данных! И это работает без прямого доступа к БД, регистрации и смс.

1 стартмани

01.06.2018    33040    88    m-rv    58    

Алгоритмы поиска пути в графе

Практика программирования Разработка v8 1cv8.cf Абонемент ($m)

Реализуем алгоритмы поиска пути в графе на платформе 1С 8.3, такие как алгоритм А*, поиск в ширину, жадный поиск, алгоритм Дейкстры и вконце волновой.

1 стартмани

09.07.2019    20085    12    RonX01    10    

Работа с публикациями "Инфостарт"

Практика программирования О сообществе WEB v8 УУ Абонемент ($m)

Работа с рублевыми публикациями на сайте "Инфостарт": ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.

1 стартмани

13.09.2018    24515    13    RocKeR_13    16    

HTTP Сервисы: Путь к своему сервису. Часть 3

Инструментарий разработчика Практика программирования v8 1cv8.cf Абонемент ($m)

Продолжение статьи «HTTP Сервисы: Путь к своему сервису. Часть 2». В предыдущих частях мы использовали только Get, в этой части поговорим о других методах и длительных операциях.

1 стартмани

27.08.2018    44895    64    dsdred    17    

Заполняем по шаблону (по умолчанию) Промо

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

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

1 стартмани

08.02.2018    31040    20    mvxyz    17    

Позиционирование в помещении с помощью нейросети по сигналу Wi-Fi. Интерактивная карта склада в 1С с показом позиции

Инструментарий разработчика Практика программирования v8 Абонемент ($m)

Данная публикация содержит в себе редактор и интерактивную карту склада или иного помещения, на которой в реальном времени отображается позиция устройства, координаты которого вычисляются по уровням сигнала нескольких роутеров Wi-Fi. В статье и приложенным к ней разработкам предлагаются инструменты и методика для реализации вычисления точной геопозиции внутри помещений с помощью нейронной сети. Конфигурация написана на релизе 1С:Предприятие 8.3.12.1412, клиентское приложение имеет минимальный уровень совместимости SDK -16.

5 стартмани

09.08.2018    31543    28    informa1555    26    

Работа с данными выбора

Практика программирования Работа с интерфейсом v8 Россия Абонемент ($m)

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

1 стартмани

17.07.2018    56918    21    kalyaka    16    

Определение местоположения (GPS координат) мобильного устройства в web-клиенте

Универсальные обработки v8 1cv8.cf Абонемент ($m)

От руководства поступила задача оснастить планшетами транспорт, чтобы на планшеты приходили задания из 1С, а само руководство могло видеть в своём кабинете, где данный транспорт находится в данный момент. Данная разработка это всего лишь наработка по получению координат устройства, на котором запущен тонкий клиент в браузере мобильного устройства.

1 стартмани

31.05.2018    8660    8    belchonokh    5    

Нечеткий поиск одним запросом Промо

Практика программирования v8 1cv8.cf Абонемент ($m)

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

1 стартмани

28.12.2015    30664    72    vasvl123    9    

Полезные примеры составления схемы компоновки данных #2

Практика программирования v8 v8::СКД 1cv8.cf Абонемент ($m)

Еще один набор примеров как решить частные задачи в СКД

1 стартмани

22.05.2018    35375    11    SITR-utyos    13    

Печатная форма, сделанная как расширение конфигурации для БП 3.0. Новые возможности БСП

Практика программирования Универсальные печатные формы v8 БП3.0 Абонемент ($m)

Печатные формы на внешних обработках скоро канут в лету. На смену им приходят ПФ, реализованные в виде расширений конфигурации. Не нашел на сайте примеров таких расширений. Привожу пример подобного расширения для БП 3.0.

1 стартмани

06.12.2017    29544    56    kwazi    6    

Паузы при исполнении кода (Sleep для 1С)

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

Решил проверить все найденные варианты паузы для 1С. В результате получилась обработка для тестирования и небольшая статья с итогом.

1 стартмани

28.11.2017    56564    15    swimdog    46    

1С: Предприятие + корпоративный чат, как наладить оперативные уведомления за 10 минут Промо

Практика программирования v8 Абонемент ($m)

Как сделать автоматические уведомления о разных событиях из 1С в корпоративный чат MyChat для сотрудников компании

1 стартмани

14.08.2016    51116    36    Demanoidos    60    

Макет в СКД - пример всех возможных типовых вариантов

Практика программирования Инструментарий разработчика v8 v8::СКД 1cv8.cf Абонемент ($m)

Макет СКД: наглядное представление того, что, как и куда выводится при типовых настройках.

1 стартмани

09.11.2017    24308    77    freelancer    4    

Telegram-боты

Практика программирования v8 Абонемент ($m)

Описание теории, разбор архитектуры и пример реализации telegram-ботов. Сразу скажу, со структурированием изложения мало что могу поделать. :) редакция от 18.07.2018 Правки последней редакции выделены жирным.

1 стартмани

01.09.2017    37357    141    PLAstic    59    

Умный дом на 1С + ардуино

Практика программирования v8 Абонемент ($m)

Конфигурация для автоматизации быта программиста 1C и не только. В данной статье будет рассказано, как можно использовать 1С для задач, не входящих в стандартные рамки этой платформы. Например, управление домом. В качестве периферии для подключения будет использован микроконтроллер (МК) Ардуино, но на нём не будет никакой логической нагрузки, весь процесс будет проходить на сервере 1С. Работа с пинами ввода/вывода происходит напрямую из 1С.

1 стартмани

07.08.2017    25333    21    sasha777666    64    

Быстрое определение интервалов в запросе Промо

Практика программирования v8 Абонемент ($m)

В статье описывается новый метод определения интервалов между данными различных записей в запросе. В отличие от общеизвестного метода, время работы предлагаемого метода зависит от объема данных ЛИНЕЙНО. Это обеспечивает ему значительный выигрыш по быстродействию на больших объемах данных. В качестве иллюстрации возможностей метода приведен отчет, показывающий гистограмму распределения времени между продажами.

1 стартмани

01.10.2015    55872    35    ildarovich    41    

Автоматическое отключение неактивных веб-клиентов

Администрирование данных 1С v8 1cv8.cf Абонемент ($m)

У вас организован доступ в базу через веб-клиент для посторонних лиц (веб-портал, веб-витрина, и т.д.), и вы испытываете проблему нехватки лицензий 1С из-за того, что пользователи оставляют открытыми вкладки с 1С, не работая в них? Есть решение!

1 стартмани

20.07.2017    19305    25    VitaliyCeban    14    

Расширения конфигураций 1С: учимся перехватывать методы

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

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

1 стартмани

30.05.2017    148427    13    signum2009    48    

Регулярные выражения – это просто. Построитель и отладчик регулярных выражений

Инструментарий разработчика Практика программирования v8 1cv8.cf Абонемент ($m)

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

1 стартмани

13.03.2017    34783    119    romasna    49    

Хранение файлов в томах на диске (для УПП 1.3) Промо

Практика программирования v8 УПП1 Абонемент ($m)

Доработка типовой УПП 1.3 в плане хранения присоединенных файлов вне базы данных

2 стартмани

05.06.2016    62110    11    wowik    32    

Распознавание текста с помощью нейросетей Google Cloud Vision и 1С

Практика программирования v8 1cv8.cf Абонемент ($m)

Возможности Google Cloud Vision в распознавании текста.

1 стартмани

08.02.2017    33559    137    kiv1c    18    

Графическая схема. Управление при помощи XDTO.

Практика программирования v8 Абонемент ($m)

В статье описывается методика программного управления элементами графической схемы при помощи механизма XDTO. Приложена готовая к использованию библиотека функций для создания и удаления графических объектов, а также для связи элементов схемы соединительными линиями.

2 стартмани

16.01.2017    25639    114    Alxby    23    

Простой редактор плана помещения JavaScript

Практика программирования Работа с интерфейсом v8 1cv8.cf Абонемент ($m)

На ресурсе сейчас очень много решений, которые позволяют редактировать карты, используя географические схемы. Так же много решений, которые позволяют редактировать объекты онлайн веб-карт. Мне же нужно было простое решение, для того чтобы расставить квадратные объекты на плане, показать их пользователю. Ну и распечатать, опять же. Я решил написать простенький редактор на JavaScript с использованием библиотеки Raphael.

1 стартмани

23.11.2016    23657    99    igel9780    22    

Остатки на каждый день в запросе Промо

Практика программирования Учет ТМЦ Учет ТМЦ v8 1cv8.cf УУ Абонемент ($m)

Запрос формирует остатки товаров на каждый день в пределах выбранного периода.

1 стартмани

26.04.2016    67325    19    arakelyan    22    

Работа с двоичными данными на примере чтения файлов изображений. Новые возможности 8.3.9

Практика программирования WEB v8 1cv8.cf Россия Абонемент ($m)

В статье приводятся новые функции по работе с двоичными данными, появившимися в версии платформы 8.3.9 , на примере анализа формата и размера изображений. А также пример отправки изображения через API ВКонтакте с помощью новых объектов (без использования ОбъединитьФайлы())

1 стартмани

14.11.2016    30236    17    Anton64    23    

Загрузка файлов на сервер с прогрессом и докачкой

Практика программирования v8 1cv8.cf Россия Абонемент ($m)

Пример использования новых возможностей платформы 8.3.9 по низкоуровневой работе с двоичными данными для инкрементальной передачи файлов на сервер.

1 стартмани

04.10.2016    15134    54    mrstomak    21    

Несколько шаблонов для доработки типовых конфигураций

Практика программирования Инструментарий разработчика v8 v8::УФ Абонемент ($m)

Предлагаю несколько каркасов для создания новых объектов в типовых конфигурациях. Это выжимка из кода нескольких конфигураций, которая позволит быстро и красиво создавать и дорабатывать объекты метаданных с соблюдением идеологии исходной системы

1 стартмани

03.10.2016    39273    96    json    25    

HTTP-сервис: отчеты [Расширение]

Практика программирования Работа с интерфейсом v8 1cv8.cf Абонемент ($m)

Это HTTP-сервис, который возвращает почти любой отчет в HTML, XLSX или в JSON. Сохраните вариант отчета, получите на него ссылку и можно получить данные без захода в 1С. Работает в конфигурациях на основе БСП 2.3.3+, для отчетов на СКД и в 1С 8.3.8+

2 стартмани

30.08.2016    29883    144    Stepa86    15    

Недокументированное использование стандартных форм Upd.

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

Вам не хватает возможностей в платформе 1С или у Вас нет времени на углубленное изучение платформы 1С? Рассмотрены возможности использования стандартных форм, вызываемых из платформы.

1 стартмани

26.07.2016    31000    92    ZhokhovM    65    

БСП 2.3 и БСП 3.0: Просто про выполнение внешней обработки в фоне (c индикацией прогресса выполнения)

Инструментарий разработчика Практика программирования БСП (Библиотека стандартных подсистем) v8 1cv8.cf Абонемент ($m)

Простое пояснение о том, как сделать внешнюю обработку с фоновым выполнением и индикацией процесса для любой конфигурации на основе БСП 2.3.2. UPDATE 20/09/19: добавлен вариант обработки с индикацией процента выполнения и статусом выполнения для БСП 3.0.

1 стартмани

18.05.2016    67794    200    rozer    66    

Еще один способ расчета остатков на каждый день в запросе

Математика и алгоритмы Практика программирования v8 Абонемент ($m)

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

1 стартмани

24.04.2016    37428    51    ildarovich    23    

Вывод печатных форм с запросом данных в форму "Печать документов" из подсистемы БСП "Печать".

Практика программирования БСП (Библиотека стандартных подсистем) v8 1cv8.cf Абонемент ($m)

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

1 стартмани

29.03.2016    101657    197    lopatin    14    

Выполнение JavaScript кода из 1С в объекте Поле HTML Документа (HTML 5) и вызов события в 1С ПриНажатии

Практика программирования v8 1cv8.cf Россия Абонемент ($m)

Пример выполнения JS кода из 1С в Поле HTML Документа под управляемыми формами, с удобным получением результата в 1С(С помощью вызова привязанного события ПриНажатии к элементу ПолеHTMLДокумента)

1 стартмани

22.03.2016    87998    165    igo1    54