Как построить цепочку асинхронных вызовов

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

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

Программирование приемы

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

Постановка задачи

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

Вложенная схема выполнения асинхронных вызовов (Классический способ)

Стандартный подход к решению данной задачи можно прочитать тут и тут
Схематично его можно изобразить так

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

Линейная схема выполнения синхронных вызовов

Если бы по условию задачи можно было бы использовать модальные вызовы, то схема выглядела бы так.


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

Линейная схема выполнения асинхронных методов

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

Сценарий
&НаКлиенте
Процедура ВыполнитьСценарийСДиалогами(Результат = Неопределено, ПараметрыСценария = Неопределено) Экспорт
	
	НачатьОтсчетШагов(ПараметрыСценария);
	
	Оповещение = Новый ОписаниеОповещения("ВыполнитьСценарийСДиалогами", ЭтаФорма, ПараметрыСценария);
	
	// проверка 1
	Если ЭтотШагЕщеНеВыполнялся(ПараметрыСценария) Тогда
		ТекстВопроса = "Это вопрос 1. Продолжить?";
		ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
		Возврат;
	ИначеЕсли ЭтоРезультатВыполненногоШага(ПараметрыСценария) И Результат <> КодВозвратаДиалога.Да Тогда
		// сюда попадаем если пользователь не ответил Да на первый вопрос
		// выход из процедуры без открытия асинхронного метода - прервет выполнение сценария
		Возврат; 
	КонецЕсли;
	
	// проверка 2
	Если ЭтотШагЕщеНеВыполнялся(ПараметрыСценария) Тогда
		Если ЧастьТоваровОтсутствуетНаСкладе() Тогда
			ТекстВопроса = "Это вопрос 2. Хотите заменить отсутствующие товары?";
			ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена);
			Возврат;
		КонецЕсли;
	ИначеЕсли ЭтоРезультатВыполненногоШага(ПараметрыСценария) Тогда
		Если Результат = КодВозвратаДиалога.Отмена Тогда
			Возврат; 
		ИначеЕсли Результат = КодВозвратаДиалога.Нет Тогда
			// переходим к следующему шагу сценария
		ИначеЕсли Результат = КодВозвратаДиалога.Да Тогда
			ОткрытьФормуПодбораАналогов = Истина;
		КонецЕсли;
	КонецЕсли;
	
	// продолжение проверки 2. Открываем форму подбора аналогов асинхронно и обрабатываем результат
	Если ЭтотШагЕщеНеВыполнялся(ПараметрыСценария) Тогда
		Если  ОткрытьФормуПодбораАналогов = Истина Тогда
			ОткрытьФорму("Обработка.ПодборАналоговНоменклатуры.Форма", 
							ПараметрыСценария.ДополнительныеПараметры, 
							ЭтаФорма, , , , 
							Оповещение, 
							РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;) 
			);
			Возврат;
		КонецЕсли;
	ИначеЕсли ЭтоРезультатВыполненногоШага(ПараметрыСценария) Тогда
		ВыполнитьДействияСАналогами(Результат);
	КонецЕсли;
	
	// проверка 3. вопрос в цикле
	Если ЭтотШагЕщеНеВыполнялся(ПараметрыСценария) 
		ИЛИ (ЭтоРезультатВыполненногоШага(ПараметрыСценария) 
				И Результат = КодВозвратаДиалога.Да) // повторяем вопрос, пока пользователь отвечает Да
		Тогда
		ТекстВопроса = "Это вопрос 3. Задать его еще раз?";
		ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
		Возврат;
	КонецЕсли;
	
	
	// действия после проверок
	ВыполнитьОсновныеДействия();
	
КонецПроцедуры
Служебные методы
&НаКлиенте
Процедура НачатьОтсчетШагов(ПараметрыСценария)
	
	Если ПараметрыСценария = Неопределено Тогда
		ПараметрыСценария = Новый Структура;
	КонецЕсли;
	
	Если НЕ ПараметрыСценария.Свойство("ПредыдущийШаг") Тогда
		// при первом запуске основной процедуры это свойство отстуствует
		ПараметрыСценария.Вставить("ПредыдущийШаг", 0);
	КонецЕсли;
	
	ПараметрыСценария.Вставить("ТекущийШаг", 0);
	
КонецПроцедуры

&НаКлиенте
Функция ЭтотШагЕщеНеВыполнялся(ПараметрыСценария)
	
	ПараметрыСценария.ТекущийШаг = ПараметрыСценария.ТекущийШаг + 1;

	Если ПараметрыСценария.ПредыдущийШаг >= ПараметрыСценария.ТекущийШаг Тогда
		Возврат Ложь;
	КонецЕсли;
	
	ПараметрыСценария.ПредыдущийШаг = ПараметрыСценария.ТекущийШаг;
	
	Возврат Истина;
	
КонецФункции

&НаКлиенте
Функция ЭтоРезультатВыполненногоШага(ПараметрыСценария)

	Возврат ПараметрыСценария.ПредыдущийШаг = ПараметрыСценария.ТекущийШаг;
	
КонецФункции


Данный подход очень похож на синхронную цепочку и лишен описанных выше недостатков классического способа.

Файлы

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

Послесловие

Данная схема была разработана при решении производственной задачи. Источником идеи послужило вот это видео

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

Наименование Файл Версия Размер
Цепочка вопросов

.epf 6,76Kb
2
.epf 6,76Kb 2 Скачать
Цепочка вопросов при записи формы линейным способом (8.3 режим совместимости 8.2.13)

.cf 10,89Kb
4
.cf 10,89Kb 4 Скачать

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. vipetrov2 11.01.17 07:36 Сейчас в теме
Можно было бы и по проще сделать. Все вопросы записать в список значений или написать функцию для конвертации номера вопроса в текст вопроса.
	Если ПараметрыСценария = Неопределено Тогда
		// первый вход в процедуру выполняется без параметров
		ПараметрыСценария = Новый Структура;
		ПараметрыСценария.Вставить("ТекущийШаг", 0);
	Иначе
		Если Результат <> КодВозвратаДиалога.Да Тогда
			Возврат;
		КонецЕсли;
		ПараметрыСценария.ТекущийШаг = ПараметрыСценария.ТекущийШаг + 1;
	КонецЕсли;
	
	Если СписокЗначений.Количество() = ПараметрыСценария.ТекущийШаг Тогда
		ВыполнитьОсновныеДействия();
		Возврат;
	КонецЕсли;
	ТекстВопроса = СписокЗначений[ПараметрыСценария.ТекущийШаг];
	//ТекстВопроса = ПолучитьТекстВопроса(ПараметрыСценария.ТекущийШаг);
	//Если ТекстВопроса = Неопределено Тогда
	//	ВыполнитьОсновныеДействия();
	//	Возврат;
	//КонецЕсли;
        Оповещение = Новый ОписаниеОповещения("ВыполнитьСценарийСДиалогами", ЭтаФорма, ПараметрыСценария);
	ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Показать
2. json 11.01.17 09:21 Сейчас в теме
(1) Попробуйте представить, как вы будете реализовывать предлагаемый вами вариант в реальной жизни. Например, вопросы могут иметь различные коды возврата, а не только Да/Нет, перед вопросом возможно нужно будет делать проверку, и задавать вопрос, только если она не прошла. После ответа на вопрос пользователя иногда потребуется выполнить какое-нибудь действие, а не просто перейти к следующему шагу. Не всегда нужно прерывать сценарий после ответа Нет. Перечисленными мною примерами реальная жизнь не ограничивается. Предлагаемая в публикации схема мне кажется более гибкой и наглядной. Пример в ней упрощен, для облегчения понимания описываемого приема. Кстати, в приложенных к публикации файлах, примеры чуть поинтереснее, чем в публикации
По поводу того, что вариант со списком проще - не готов согласиться, но тут каждый может реализовать так, как считает правильным.
molodoi1sneg; sergey512; igel9780; MrRune; +4 Ответить
19. vipetrov2 13.01.17 11:43 Сейчас в теме
(2) Если фантазию включить, то можно вместо Списка Значений, сделать Таблицу Значений с 2-мя столбиками: текст вопроса и правильный ответ. Почему мой вариант не проще? Надо адаптировать под конкретный случай только 1 процедуру, т.е. заполнить таблицу вопросов и ответов. И мой вариант гораздо производительнее потому что на 10 вопросе у тебя будет 10 раз проверяться тот или не тот шаг, а у меня с сразу вопрос задается.

А вообще буквально недавно надо было на стороне клиента сделать НачатьПроверкуСуществования(..) и потом если нет каталога, создать его НачатьСозданиеКаталога().
Но бывает еще сложнее задача когда надо через цикл сделать несколько вызовов НачатьХХХ, потом после оповещения еще вызвать НачатьХХХ и при этом у процедур оповещений разное количество параметров. Например у НачатьУдалениеФайлов процедура оповещения имеет только 1 параметр.
29. json 14.01.17 00:15 Сейчас в теме
(19)
Вы скорее всего имели не таблицу значений, а массив структур, т.к. действия выполняются на клиенте
Но даже если мы будем использовать такую коллекцию, то нам придется выбирать между двумя невыгодными вариантами:
1. Либо писать процедуру обхода такой коллекции для каждого сценария. Тогда каждый такой обход будет содержать специфические для данного сценария действия. В чем же тогда простота?
2. Либо нужно написать очень универсальный метод, в котором каждый элемент коллекции шагов должен содержать множество ключей, типа "СоответствиеДействийИОтветов", "ОтветДляПрерыванияСценария" и т.п. в таком духе. Похожий подход с массивом структур уже реализован в БСП, правда он используется для другого. Если интересно, можете посмотреть в демо БСП (2.3.2) внешнюю обработку ЗагрузкаНоменклатурыИзПрайсЛистаСоСценарием.epf, а в ней функцию СформироватьСценарий(). Я предполагаю, что если попытаться написать универсально, то получится что-то подобное. Там довольно большой объем служебного кода, трудно быстро понять, какие параметры за что отвечают. Хотя этот механизм и рабочий, но порог вхождения в работу с ним - довольно высокий.

В моем примере (я его чуть усложнил) всего три универсальные обслуживающие процедуры и одна основная. При этом читаемость (описания шагов) не страдает, по сравнению с описанием сценария, а универсальность намного выше
3. vandalsvq 1172 11.01.17 10:12 Сейчас в теме
(0) а промисы все равно удобнее ))))))
Yashazz; pumbaE; orefkov; json; +4 Ответить
4. json 11.01.17 10:27 Сейчас в теме
5. unichkin 1332 11.01.17 10:54 Сейчас в теме
6. s22 19 11.01.17 12:57 Сейчас в теме
13. Fragster 1037 12.01.17 12:07 Сейчас в теме
(6) 1с вообще могла это прозрачно для прикладного программиста сделать. Но, поскольку "азаза! в хруме не работает!!!" залепили костыль за неделю, а переделывать не стали, чтобы не ломать обратную совместимость. Наоборот, только усугубляют все, добавляя всякие "начать..." (см. двоичные данные), не понимая, что это влечет разный код на клиенте и на сервере, которого становится всё больше и больше. Ну и вермишель с этими оповещениями.
Остается надежда на 8.4/9.0...

Следующий такой ошибкой стала "защита от опасных действий", но она не столь сильно влияет (просто "защита" не защищает, а немного усложняет жизнь программистам).
FilatovRA; neikist; 1cWin; bendarik; Yashazz; cefew; zqzq; kraynev-navi; +8 Ответить
7. Synoecium 711 11.01.17 14:05 Сейчас в теме
Интересный подход, сам задумывался над такими неудобствами управляемых форм. Возникло такое предположение, что есть смысл пробрасывать через ПараметрыСценария данные, которые используются в нескольких проверках. Т.е. проверяем наличие в структуре некоторых "кэшированных" переменных и если они не заполнены тогда заполняем их. Тогда не надо будет их получать в каждой проверке/итерации.
28. json 13.01.17 23:26 Сейчас в теме
(7) исправил пример в публикации по вашей рекомендации. Основная процедура вроде как упростилась.
Также немного усложнил пример, чтобы продемонстрировать гибкость данного способа
8. starik-2005 2252 11.01.17 14:21 Сейчас в теме
Можно деревом описать сценарий. В корне - вопрос, в подчиненных ветках - ответы, в подчиненных ответам ветках - следующие вопросы. Ну и так далее. Также можно в дереве добавить ключ перехода на любой из уровней, и если он заполнен - получить новые вопросы/ответы из соответствующего узла, а если не заполнен - из подчиненного.

Типа так:
Вопрос
1 - Ответ 1
2 -- Вопрос 2
3 --- Ответ Х
4 --- Ответ У
5 - Ответ 2
6 -- Вопрос 3
7 --- Ответ Z
8 ---- --- ИД = 2 (переход к ветке вопросов с ИД 2)

Чем не метод?
9. bulpi 179 11.01.17 18:08 Сейчас в теме
Гланды через ж :)
Evil Beaver; YPermitin; +2 7 Ответить
10. json 11.01.17 21:55 Сейчас в теме
(9) посмотрел в карточку автора этого комментария. Все комментарии в таком стиле. Никакого конструктива. Везде подобные бессмысленные фразы. Даже спрашивать не буду, что его не устроило.
11. starik-2005 2252 11.01.17 21:58 Сейчас в теме
(10) решил тоже посмотреть. Как оказалось, у нас в Вами разные взгляды на адекватность )))
12. json 11.01.17 22:27 Сейчас в теме
(11) Я не упоминал адекватность. Я лишь высказал свое наблюдение, что такого рода комментарии неконструктивны и бессмысленны.
Меня всегда удивляли подобные комментаторы, которые бросают вот такие фразы. Ведь толку от них ноль.
Ну не нравится тебе статья, пройди дальше, не читай. Ведь никто же не заставляет. Возможно другим она будет полезна.
Бывает, что не согласен с точкой зрения автора - значит аргументируй. Может действительно у человека есть здравая мысль. Пусть не скрывает ее.
А какой смысл от пустых обвинений?
eeeio; dj_serega; igel9780; jONES1979; o.nikolaev; +5 Ответить
14. Evil Beaver 6923 13.01.17 10:32 Сейчас в теме
Вы, возможно, удивитесь, но я хочу сказать, что цепочки асинхронных диалогов это вселенское зло. Если ваш UI/UX такое использует, то он плохо спроектирован. И исключительно из-за неудачного дизайна UI возникла потребность изобретения несомненно интересного решения, приведенного в статье. Беда только в том, что его можно было не изобретать, пересмотрев подход к взаимодействию с пользователем.

Модальность не нужна. Попытки ее вернуть, применяя указанные обходные решения, ни к чему хорошему не приведут. Много вы видите в интернетах "цепочек модальных диалогов" на сайтах? А пользоваться удобно, как ни странно.
bendarik; Yashazz; pisarevEV; dark_wolf; +4 Ответить
15. Fragster 1037 13.01.17 10:45 Сейчас в теме
(14) вот пример от учебного центра 1с: абстрактный блокнот, если текст модифицирован, то вопрос, "сохранить?", если новый, то показать диалог выбора имени, если файл существует, то показать вопрос о замене. Это стандартное поведение большинства программ. Отказываться от модальности не следует. другое дело, что 1с смешала модальность (т.е. недоступность частей интерфейса кроме "модальных") и асинхронность.
Текущие диалоги, вызываемые через ПокахатьXyz() - модальные. И ничего не мешало сделать эту модальность "асинхронной", т.е. не блокирующей основной поток на клиенте и с использованием старого синтаксиса.

Описание "правильного" костыля http://www.1c-uc3.ru/video.html в видеоуроках (буэээ..).
16. Evil Beaver 6923 13.01.17 11:26 Сейчас в теме
Ну приведенные примеры они не требуют "цепочки". По сути, нужно выбрать какой диалог показать, и показать его немодально. И вообще, сей пример синтетический (т.е. надуманный). Было бы интересно обсудить что-то из жизни. Я такой пример придумать не смог....

И да, под "модальностью" в предыдущем сообщении я понимал именно блокирующую текущий поток модальность, а не сам концепт "модального окна".
17. Fragster 1037 13.01.17 11:34 Сейчас в теме
(16) вопрос даже не в цепочках. вопрос в том, что, например, диалог перед записью формы уже становится невозможным без своей кнопки "записать и закрыть". ну и различие клиентского и серверного кода (подключить внешнюю компоненту/начать подключение, двоичные данные, и прочее), катастрофическое увеличение сложности и количества обслуживающего кода - всё это накапливается как снежный ком, хотя может быть скрыто от программиста 1с.
18. Fragster 1037 13.01.17 11:35 Сейчас в теме
(16)
По сути, нужно выбрать какой диалог показать

а если не надо сохранять? а если надо перевыбрать файл/изменить имя вместо перезаписи? То, что в данном случае этот модальный диалог в цикле - системный, глобально ничего не меняет.
21. json 13.01.17 12:34 Сейчас в теме
(16)
Вот примеры из жизни (было несколько месяцев назад при доработке ерпи)

Требуется добавить проверки в заказ поставщику перед действием Провести и закрыть
1. Проверить, что сумма заказа соответствует бюджету. Вывести вопрос
2. Проверить, что остаток после заказа плюс остаток на складе - не превысит норму. Если превысит - вывести вопрос.
3. Проверить ограничения, накладываемые поставщиком (что количество товара больше или равно минимальной партии). Вывести вопрос

При проведении поступления
1. Проверить соответствие цен в поступлении ценам в заказе. Если различаются - вывести сумму отклонения и вопрос.
2. Проверить соответствие количества в поступлении количеству в заказе. Если некоторый товар не пришел, то предложить: ничего не делать, перенести в новый заказ (открыть мастер создания заказа поставщику), удалить из текущего, вернуться к редактированию.

Эти проверки были добавлены поверх существующих типовых. Нетрудно догадаться, что это все будет развиваться и усложняться со временем. Через некоторое время у заказчика появятся новые хотелки.
23. Evil Beaver 6923 13.01.17 13:58 Сейчас в теме
(21)
1. Проверить, что сумма заказа соответствует бюджету. Вывести вопрос
2. Проверить, что остаток после заказа плюс остаток на складе - не превысит норму. Если превысит - вывести вопрос.
3. Проверить ограничения, накладываемые поставщиком (что количество товара больше или равно минимальной партии). Вывести вопрос


Зачем три вопроса вместо одного окна с перечнем проблем? Вы, пожалуй, невнимательно прочитали мое первое сообщение. Потребность в цепочках вопросов возникает при некачественно спроектированном взаимодействии с пользователем. Три вопроса вместо одного - это некачественное взаимодействие. Вырождающееся впоследствии в необходимость разработки "цепочек вопросов в асинхронном режиме".
slax; bendarik; cefew; +3 Ответить
24. Fragster 1037 13.01.17 14:24 Сейчас в теме
(23) выше бы приведен пример с работой с файлами. Например пакетная выгрузка чего-либо в папку: проверить существование (асинх), при наличии - задать вопрос про очистку (асинх), очистить(асинх), скопировать файлы (асинх), отрапортовать пользователю.
вторая ветка - при отстутсвии - создать (асинх), скопировать файлы (асинх), отрапортовать пользователю.
25. json 13.01.17 14:35 Сейчас в теме
(23)
Согласен, что некачественное и что лучше сделать одну форму.
Но тут возникают противоречия.
Во-первых, если уже есть решение, которое построено через вопросы. Что делать? Часть вопросов будет в одной форме, а часть в отдельных окнах. Переделывать?
Во-вторых, бюджет на то, чтобы нарисовать интерфейс - больше, чем на более простое решение.
В-третьих, что делать, если нужно в одной из проверок открыть другую уже существующую форму (например, мастер создания Заказа поставщику)?
В-четвертых, был еще такой случай, что сначала нужна была одна проверка. Сделали через вопрос. Потом понадобилась еще одна. И никто уже написанное другим разработчиком не переделывает и в бюджет не закладывает.

Но мне подход без цепочки тоже нравится больше, в том случае есть возможность его использовать
26. boln 1029 13.01.17 16:08 Сейчас в теме
(23)
Потребность в цепочках вопросов возникает при некачественно спроектированном взаимодействии с пользователем. Три вопроса вместо одного - это некачественное взаимодействие. Вырождающееся впоследствии в необходимость разработки "цепочек вопросов в асинхронном режиме".
А вот это не факт. Выше уже говорилось про "абстрактный блокнот", но эта последовательность задания вопросов характерна и для прикладной обработки, например "Консоль запросов" и "Консоль СКД".

Сможете предложить решение без цепочки вопросов?
30. vandalsvq 1172 16.01.17 12:34 Сейчас в теме
(23) на самом деле лапша с асинхронными вызовами бывает весьма забавной. И даже если там нет вопросов. Например: пользователь выбрал файл, файл либо xml, либо zip-архив.

И так поток действий...
1. Проверка наличия файла
2. Проверка свойств файла (для получения расширения)
3. Если архив распаковка
4. Если архив проверка существования файла в распакованном каталоге
5. Загрузка данных файла
Большинство этих действий асинхронны, получится целый набор описаний оповещений которые должны сработать последовательно (ну или в обход). Вот в таких случаях конечно удобно, если бы был менеджер асинхронных действий.

Хотя в тех же js promise у меня был бы очень простой код:
getFile() // обещаем что сообщим когда получим файл
.then(getFileAttr) // обещаем что сообщим когда получим свойства файла
.then(unzipFile) // обещаем что сообщим когда распакуем, а если не архив то вернем resolve
.then(loadFileData) // загружаем данные
.catch(errorHandler) // перехватим ошибку


Я не люблю несколько вопросов, предупреждений и прочих всплывающих окон подряд. Тут я согласен, что надо пересматривать алгоритмы, выводить одно сообщение с набором нестыковок. Но вот что касается не диалоговых асинхронных вызовов, тут пока не очень удобно работать.
BigB; artbear; +2 Ответить
31. boln 1029 16.01.17 14:04 Сейчас в теме
(30)
Большинство этих действий асинхронны, получится целый набор описаний оповещений которые должны сработать последовательно (ну или в обход). Вот в таких случаях конечно удобно, если бы был менеджер асинхронных действий.
Угу, проходили все это на практике. Отсюда и появился "стек оповещений" :)

Но развитых средств асинхронного программирования в языке 1С вряд ли приходится ожидать. Во-первых, все эти асинхронные заморочки возникают только для веб-клиента - а этот вариант работы пользователя все же не преобладающий, хотя спектр его применения и растет. А во-вторых, компилятор - самая консервативная и трудно поддающаяся развитию часть платформы. Заметили, наверное: возможности платформы, начиная с 8.2, расширяются только за счет увеличения числа классов объектов платформы, а не развития языковых средств и конструкций.
32. starik-2005 2252 13.02.17 10:46 Сейчас в теме
(31) а мне кажется, что язык тоже развивается. Асинхронные методы для вызова диалогов, подключения внешних компонент, чтения файлов и прочее - это вполне правильное движение в нужную сторону. Думаю, что со временем 1С откажется от тонкого клиента в пользу браузера и от конфигуратора в пользу EDT. Дальше все будет работать в модели сервиса, когда система 1С будет встроена в технологический стек компании, отвечая за свой локальный функционал бухгалтерской базы. Если они дойдут в развитии языка до описания ОРМ, то это будет весьма большой шаг вперед навстречу производительности, которой в 1С сейчас нет, ибо нет возможности использовать ни шардинг, ни кеширование объектов (в том же Redis'е, например, или Memcache). И это весьма ограничивает 1С, как продукт.

Сейчас все языки двигаются в сторону асинхронности, многопоточности, функциональности. Лямбда-функции и рекурсивные механизмы активно внедряются даже в С++, который раньше не был таким функциональным. И сделано это, полагаю, для лучшей распараллеливаемости, ибо функциональная парадигма весьма способствует этому.
33. Fragster 1037 13.02.17 11:10 Сейчас в теме
(32) это - не развитие. Развитие - это не "больше строк для тех же действий" и "более запутанная структура программы", а как раз наоборот.
в js уходят от этого в сторону промисов, до этого - были замыкания и люмбды, которые помогали писать в болееменее синхронном стиле (по крайней мере строки визуально шли в одном месте и по порядку), в дотнете - в сторону async/await. и на момент появления "асинхронности" в 1с - эти механизмы уже были.
Ценность 1с как раз в том, что она скрывает от прикладного программиста все эти низкоуровневые дела. Вы просто не пытались сделать обновление на новую версию программы, скажем, с изменением структуры данных, причем так, чтобы это прошло безопасно, не на 1с.
34. starik-2005 2252 13.02.17 13:51 Сейчас в теме
(33) так не на 1С применяются миграции в ОРМ, а в плане кода - рефакторинг идет от объектов в ООП (тот же S.O.L.I.D.), когда все максимально отделено друг от друга и один объект - одна четкая конкретная функция, вместо генерации универсальных велосипедов.

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

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

Я не говорю, что 1С - штука идеальная. Она прежде всего очень медленная - это основное. При этом она позволяет сделать какой-нибудь интерфейсный прототип с хранимыми в СУБД данными достаточно быстро (не быстрее, конечно, чем Tcl/Tk, но тоже вполне сопоставимо по времени).
35. boln 1029 13.02.17 15:33 Сейчас в теме
(32)
а мне кажется, что язык тоже развивается. Асинхронные методы для вызова диалогов, подключения внешних компонент, чтения файлов и прочее - это вполне правильное движение в нужную сторону.
Это не языковые конструкции, а просто расширение объектной модели. В других языках асинхронность реализуется именно через языковые конструкции. Поэтому там просто, а в 1С сложно.
36. starik-2005 2252 13.02.17 16:39 Сейчас в теме
(35) ну там она тоже реализуется по-разному. Если говорит о промисах, то это - да, языковая конструкция, но в пределе это метод соответствующего объекта со своим прототипом. В 1С обработчик оповещения - это тоже отдельный объект. Другое дело, что мы не имеем доступа к его прототипу (интерфейсу) для переопределения или расширения. Фактически промис - если говорим о нем, как о расширении языка - это функция с двумя аргументами-функциями, возвращающая еще один промис, который также может возвратить промис и так далее. Очень удобно цепочки асинхронные строить. Но это всего лишь функция - не более. 1С тоже может такую функцию напилить, просто она не умеет функции иначе как в объекте описания оповещения передать.
37. boln 1029 13.02.17 21:21 Сейчас в теме
(36) Налицо тенденция использовать языковую конструкцию вида Async:
https://msdn.microsoft.com/ru-ru/library/windows/apps/hh464924.aspx

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

Есть и еще одна причина глобального характера: 1С продает не платформу, а готовые решения. Поэтому им нафиг не вперлось ни ООП, ни вообще какое-либо развитие языка: команду своих 30-40 штатных разработчиков легко построить, чтобы писали на том, что дают, и хотелки-помечтовки свои при себе держали. А проблемы сторонних разработчиков, пишущих с нуля, при таком целевом раскладе никого не волнуют.
Steelvan; pisarevEV; +2 Ответить
38. starik-2005 2252 14.02.17 11:57 Сейчас в теме
(37) сторонним разработчикам никто не мешает писать на чем угодно, используя 1С как ящик для красивых отчетиков пользователям - этакий BI. Зашоренность сторонних разработчиков и их полное погружение под желтого гиганта - это их собственные сексуальные проблемы нереализованной юности. Кому надо - тот 1С-ом не ограничивается.

А мелкософтовский MSDN по сцылке говорит, что это для 8-й венды, а кто на 10-ке творит - нажмите другую сцылку. Но асинхронность - это не дань моде, а попытка утилизировать дополнительные процессорные ядра.

Просто, как мне кажется, некоторых студентов в ВУЗах переучивают излишне, а потом они, видя nginx или redis, которые позиционируются как безблокировочные однопоточные приложения, начинают всем говорит о том, что вот, мол, асинхронность - зло, многопоточность - медленная. Ну это дань нашему отставшему образованию - не более. На сайте Интела для разработчиков прямо с порога про многопоточность втирают, что без этого ни один уважающий себя программист жить не может в мире современном.
39. boln 1029 14.02.17 13:17 Сейчас в теме
(38)
сторонним разработчикам никто не мешает писать на чем угодно, используя 1С как ящик для красивых отчетиков пользователям - этакий BI. Зашоренность сторонних разработчиков и их полное погружение под желтого гиганта - это их собственные сексуальные проблемы нереализованной юности. Кому надо - тот 1С-ом не ограничивается.
Это, конечно, так. Кому надо, тот внешние возможности найдет способ подтянуть.

Я просто предупредил, чтобы не ждали некоторые от встроенного языка платформы 1С:Предприятие чудес вроде ООП и разных прочих async'ов/await'ов - и сказал, почему я так считаю.
22. boln 1029 13.01.17 13:25 Сейчас в теме
Респект за еще один подход к разруливанию "асинхронных пробок".

Сам почти 2 года назад озаботился этим. Применил сущность типа "стек" для организации очередности возврата глубоких асинхронных вызовов. Сделал даже видеокурс для УЦ-3:
http://www.1c-uc3.ru/video.html
27. herfis 386 13.01.17 16:15 Сейчас в теме
40. Yashazz 3613 14.02.17 13:47 Сейчас в теме
В погоне за малонужным веб-интерфейсом 1C слепили костыль и долго старательно объясняли, что это фича и что всё так и надо. При этом трогательно перепутав немодальность, многопоточность и асинхронность. А мы теперь имеем чудовищный код, про который кулуарно все матерятся, но...

А ещё забавляют наивные мечтания. 1С это система для бухгалтеров, расчётчиков и кадровиков. Несколько меньше - для торгашей. 1С это периодически забывают и начинают лепить совсем уж маразм, но потом их на конференциях окорачивают. Так вот, нахрен этот веб-интерфейс не нужен. Люди работают через rdp-терминалы. А в терминалах на мощные машины и толстый клиент прекрасно себя чувствует.

Желающие мечтать - спросите у Сергея Нуралиева о сроках появления интерфейса "Такси" в мобильном приложении)))
42. boln 1029 14.02.17 16:16 Сейчас в теме
(40)
Так вот, нахрен этот веб-интерфейс не нужен.
Вероятно, это прицел на облачные технологии:
http://v8.1c.ru/fresh/whatis.htm

Они там пишут:
пользователи сервиса используют размещенные в сервисе прикладные решения через Интернет с помощью обычного интернет-браузера или тонкого клиента
Т. е. для выхода в облако через мобильное устройство, где платформу - тонкий клиент - не установишь.
43. Yashazz 3613 14.02.17 23:36 Сейчас в теме
(42) Ну только если... Всё равно это даже не половина рынка. А в моей практике обычно разговоры про облака заканчиваются обычным терминалом на обычный хороший сервер, за которым ухаживают спецы, как и за конфой. И всё.
44. Bonov 18.02.17 10:00 Сейчас в теме
(43) вот уж не согласен, что 1с только для бухов и что веб интерфейс не нужен вовсе. Наоборот, я за развитие платформы в этом направлении. Это универсальность, безопасность и функциональность. А так же уже возможность отказаться от винды в принципе и других сторонних приложений. Я и наш продукт идем по пути интеграции всего учета в 1с, начиная от документов, бухгалтерии и заканчивая телефонией, факсами, смс, обменов с подрядчиками и клиентами, веб сервисов для клиентов, мобильных приложений и пр.
herfis; starik-2005; +2 Ответить
46. starik-2005 2252 23.02.17 12:21 Сейчас в теме
(44)
заканчивая телефонией, факсами, смс
Ну я надеюсь Вы астерикс на 1С не стали писать, а взяли готовый? В этом плане велосипеды не всегда полезны, а с учетом доступности 1С даже в продуктиве весьма далекой от хотя бы 99% с APDEX 90, переносить все жизненные вещи в 1С просто саботаж против своей организации.
47. Yashazz 3613 23.02.17 15:41 Сейчас в теме
(44)
Я и наш продукт идем по пути интеграции всего учета в 1с, начиная от документов, бухгалтерии и заканчивая телефонией, факсами, смс, обменов с подрядчиками и клиентами, веб сервисов для клиентов, мобильных приложений и пр.
Когда я был молодой и наивный мечтатель, я тоже всем предлагал и всячески продвигал такое в компании, где работал. Компания была не из мелких, поле было непаханое. Прошло много лет. Бухгалтерия работает в 1С. Остальное всё так же на уровне менеджерских файликов, вордов-эксельчиков, кривых поделок на дельфе и си-шарпе для CRM, фигулек для мобильного приложения ещё на чём-то... Поменьше громких фраз, как космические корабли бороздят известно что))) Если бизнесу это не припрёт совсем, то никакой супер-1С не будет. Собственно, и бухгалтеры рады бы работать на чём-то более адекватном, чем БП 3.0, но отчётность сдавать надо, поэтому вынуждены. Так-то.
56. Bonov 24.02.17 09:16 Сейчас в теме
(47) Вы просто не смогли, а я смог, и у нас нет ни одного сотрудника, не работающего в общей базе 1С. Астериск конечно же отдельный, но все же тоже интегрированный. И куча клиентов, которые по вебу имеют доступ к базе. Быть может, у меня нет особых проблем, потому что все написано с нуля и из других конф и БСП взято всего лишь несколько универсальных функций. А вообще с костылями, тормозами и усложнившейся логикой новых продуктов я конечно же согласен.
60. Yashazz 3613 26.02.17 11:14 Сейчас в теме
(56) Хорошо, что смогли. Только не думайте, что это Ваша заслуга. Это заслуга административного ресурса, который железными палками загнал всех в Вашу систему. Не имеет значения, самописная она или типовая. Имеет значение лишь одно - есть ли тот, кто заставит всех работать в 1С, или такого нет. Если нет - хоть наизнанку вывернитесь, но ничего не изменится; на Ваш функционал будут класть и продолжать кропать эксельчики. Если есть - работать будут хоть в ERP, колоться и жрать кактус, хоть в нормальной конфе. А от нас с Вами, коллега, в этой ситуации зависит исчезающе мало.
61. Bonov 26.02.17 21:07 Сейчас в теме
(60) Раз Вы не зная ни меня, ни мою компанию, ни мою роль в процессе, ни качество выстроенной системы, делаете какие то выводы, то грош цена любым Вашим высказываниям...

Любой сотрудник будет работать там, где ему удобнее. И я считаю, что именно задача ИТ сделать такую инфраструктуру, чтобы людям было УДОБНО. А единая система, которая позволяет выполнять ВСЕ действия, не переключаясь на другие не интегрированные с ней программы, именно таким решением и является. Именно таким путем идет 1С. И я здесь вместе с ней, потому что мой разум не ограничен мыслями, что 1С - это только бухгалтерия.
62. starik-2005 2252 26.02.17 22:20 Сейчас в теме
(61)
Любой сотрудник будет работать там, где ему удобнее.
Невозможно не согласиться. Другое дело, что зачастую удобнее - это и быстрее тоже. Если для получения отчета бухгалтер будет ждать полчаса (да, такое бывает), то она в это время чаю заварит и с тортиком с коллегами попьет. Но если это входящий вызов в коллцентре и сотруднику просто необходимо знать, что за клиент позвонил, то тут уже и трех секундной реакции не хватит - нужна реакция в доли секунды. Именно по-этому мы в свое время не стали тянуть все в 1С, а сделали для операторов коллцентра отдельный интерфейсик в вебе, в который автоматически падала информация о звонящем. И лицензии целы, и операторы довольны. Но если кому-то не жалко лицензий для оператора коллцентра, то я рад тому, как идут его дела - видимо денег некуда девать, Отдайте мне!
63. Yashazz 3613 27.02.17 00:49 Сейчас в теме
(61)
Раз Вы не зная ни меня, ни мою компанию, ни мою роль в процессе, ни качество выстроенной системы, делаете какие то выводы, то грош цена любым Вашим высказываниям...
На ИС Ваш профиль не информативен, публикаций у Вас нет. Я высказался с позиции программиста 1С. Если Вы крутой босс, тогда мои Вам извинения. И перестаньте пихать всюду качеств системы, оно не играет никакой роли. Кривая дрянь типа первых УТ 11.2 и 11.3 пошла "на ура" просто потому, что все были вынуждены.

Любой сотрудник будет работать там, где ему удобнее. И я считаю, что именно задача ИТ сделать такую инфраструктуру, чтобы людям было УДОБНО. А единая система, которая позволяет выполнять ВСЕ действия, не переключаясь на другие не интегрированные с ней программы, именно таким решением и является.

Сотрудник будет работать там, где ЕМУ удобнее. А удобнее - это привычнее. А привычнее - это в экселе, ворде, блокноте, на коленке. ИТ тут бессильна. Есть хорошая ковбойская поговорка: "и один человек может привести лошадь на водопой, но даже 10 не заставят её пить". Тут что-то может только адм.ресурс. Ну, вам повезло, но это исключение. Звёзды так сошлись, бывает.

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

...наивные вы ребята. Вот пообщаетесь с реальными клиентами, вроде крупных госконтор или контор с участием гос.капитала, сра-а-азу всё поймёте. И попробуйте вякнуть, например, гендиру Росгосстраха, что 1С это не только бухгалтерия и что "разум ограничен". Ага. Вам сразу всё очень доходчиво объяснят, где Вы, где место 1С, и где место ИТ как сервисного подразделения)))
64. Bonov 27.02.17 08:43 Сейчас в теме
(63)
И попробуйте вякнуть, например, гендиру Росгосстраха, что 1С это не только бухгалтерия и что "разум ограничен". Ага. Вам сразу всё очень доходчиво объяснят, где Вы, где место 1С, и где место ИТ как сервисного подразделения)))

Вот тут Вы правильно заметили... В РГС ИТ именно там, где Вы думаете. А вот если взять коммерческих передовых страховщиков, то там совсем все по другому... Это по собственному опыту.

P.S. Повторюсь: я согласен, что типовые конфы - ужасные тормоза, что БСП перегруженный монстр, но не согласен с тем, что 1С не нужно расти как учетной системе за пределами бухгалтерии.
45. starik-2005 2252 23.02.17 12:18 Сейчас в теме
(43)
Всё равно это даже не половина рынка.
Как-то йаху сказало студентам, что их поисковый движок им неинтересен. Ну и где сейчас йаху, а где сейчас гугл. Через три года все это убожество типа толстых клиентов окончательно перестанет поддерживаться, решения будут активно переносится на тонкий клиент и веб-платформу. Потом админам надоест переустанавливать клиентское ПО, и все медленно и верно мигрируют в браузер. Большая часть не 1С мира давно уже живет в браузере, одни желто-красные тормозят, а сообщество им в этих тормозах помогает )))
49. Yashazz 3613 23.02.17 16:00 Сейчас в теме
(45)
убожество типа толстых клиентов
Убожество - это то, что 1С называет тонким клиентом. Убожество - это то, что 1С называет немодальностью и асинхронностью. Убожество - это интерфейс Такси. По всему - по степени удобства для разработчика и для пользователя, по быстродействию разработки и работы. Вот что истинное убожество.

Попробуйте объяснить клиенту, почему УТ 11, пустая и новая, дико тормозит при попытке открыть "Все функции", или любую форму списка, или вообще при нажатии любой кнопки, а его, клиента, огроменная УТ 10.3 за 10 лет всё делает мгновенно) Почему треть экрана в "Такси" занята неотключаемой пустотой, а чтоб смотреть данные, приходится всё время скроллить форму.
Попробуйте объяснить мне, почему на клиенте в 1С нет объекта "Таблица значений", или метаданных, или почему нельзя управлять составом данных формы, передаваемым на сервер, или почему, на самом деле, сделали этот адский костыль под названием обработка оповещения.
Почему так тормозит конфигуратор при разработке управляемой формы, и почему эта якобы "управляемая" в разы менее доступна для настройки дизайна, чем обычная, тормозит сильнее и жрёт больше ресурса.
Короче говоря - я много лет занимался разработкой под тонкий, веб, с управляемыми формами. И мой вывод - это уродство.

все медленно и верно мигрируют в браузер.
В этом нет ничего хорошего, равно как и в тенденциях развития софта вообще. После 2010 года софт вообще массово превратился в полное гуано, целиком зависящее от сети. Сравните нормальный, а оттого популярный, 2010-й аутлук, и ублюдочный 2013-й, к примеру. Ну и главное. Пока в базах данных будут сведения, за которые руководство будет опасаться, а интернет не будет 100% безопасным никогда, до тех пор эти базы данных будут где угодно, но не торчать веб-клиентами в браузерах.

Кстати о браузерах: вот сейчас ИС сглючил при отправке этого текста. Вы себе представляете восторг менеджера, который час набивал документ, а потом сеть/браузер/1С глюканули, и всё пропало? А я вот работал по сети с СППР, где это было нормой, и никогда больше не порекомендую своим клиентам использовать веб-клиент 1С. Но, конечно, если ваша задача - впарить "моднявый" продукт в тренде "все в сеть", а дальше трава не расти, то, конечно, флаг в руки.
50. starik-2005 2252 23.02.17 18:53 Сейчас в теме
(49) ну плохому танцору всегда обувь жмет.
Медленно работает - это на сколько медленно и что именно? Если взять пустую базу и открыть все действия, то ничего медленного не будет. Тут не проблема толстого/тонкого клиента - тут проблема излишней раздутости конфигурации, которая должна делать простые вещи. Но все же не хотят что-то делать сами, поэтому или копипастят (и этим поддерживают авторов, еще раз рассказывающих об основах), или тащат в свою систему все подряд (БСП - все стопиццот версий, модулей, картинок, макетов, ...). В принципе нет ничего плохого во фреймворках, но то, сколько всяких модулей понапихано в ту же третью бухню - вот это вымораживает. Весь тот функционал можно с командой не слишком умных выпускников какого-либо ВУЗа запилить на PHP за достаточно небольшое время. Вообще, тормоза - это извлечение всех команд формы, связанных с размещенными на ней данными и глобальными командами - вот они там уйму времени получаются.

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

Браузеры давно уже вполне безопасны, ибо HTTPS начиная с TLS 1.1 безопасен. Настроить подобное внутри сети вообще не является проблемой - достаточно самоподписанного сертификата, сгенерированного на веб-сервере. Но в действительности защиту информации дает не шифрование трафика, а ролевое разделение и нескомпрометированные учетные данные. Внутри корпоративной сети как раз доступ к информационной системе из браузера - это вполне здоровая практика.

По поводу глюка с отправкой, то и 1С нередко глючит и вылетает. Но как раз клиент-серверная архитектура позволяет серверу работать с множеством клиентов, а клиентам быть лишь поставщиками данных для сервера. Тут все упирается в архитектуру решений: если программист постоянно гоняет данные на сервер, таким образом обрабатывая их по-частям, то такой программист просто живет еще в мире старых реалий. Или ему нужно обработать данные на клиенте, а потом все целиком передать на сервер для записи, или ему нужно все сразу не сервере обрабатывать. Но пользователя при этом необходимо как-то проинформировать. И вот тут как раз эта "асинхронность" и должна применяться, когда на сервере запущен процесс обработки, а на клиенте запущен обработчик ожидания, функция которого сводится к тому, чтобы опросить серверный процесс на предмет прогресса и отобразить эту информацию пользователю. 1С это пока иначе как через фоновые задания делать не умеет - очень ее жаль по этому поводу. Но примерно так же дело обстоит и в прочих клиент-серверных приложениях, так что не все так плохо. Другое дело, что иногда в 1С программисты за тарелку супа делают эту асинхронность просто везде. И это даже не их проблема - это проблема общей архитектуры, когда просто дана команда повесить все на свете на обработчик длительных операций. И на столько уж они усираются, что даже обработку управления регламентными и фоновыми заданиями перепилили на оный функционал, что привело к тому, что она еще дольше стала работать, но хоть теперь интерфейс не висит - и то радость )))
41. Yashazz 3613 14.02.17 13:54 Сейчас в теме
Погодите, стоп. Т.е. вся идея этой публикации - замыкание на одну процедуру, в которой всё крутится? Господа, но это ж лютый баян, это ещё года три назад делали и публиковали. Или я не вижу некоей новизны?

Ну и, тогда уж, надо учесть, что не у всех асинхронников завершающая процедура имеет два параметра, и что платформа не понимает юмора, как обязательные они объявлены или нет, поэтому одной супер-процедурой всё равно не обойтись. По количеству аргументов, у меня таких "ловчих" обычно 3-4 штуки на разные случаи.
48. Yashazz 3613 23.02.17 15:57 Сейчас в теме
52. Yashazz 3613 23.02.17 22:25 Сейчас в теме
По поводу немодальности и асинхронности, то тут у нас с Вами совершенно разное понимание. Мне, например, гораздо удобнее напилить управляемую форму любой сложности, чем потом мучиться с привязками обычной формы. Да и сама 1С вечно натворит руками программистов за тарелку супа с обычными формами кучу кривых привязок, скрытых панелей, невидимых страниц - потом замучишься искать, где там и что в каком элементе спрятано. Объединить старую и новую формы нереально, в управляемой же форме все элементы в дереве, БСП позволяет просто и легко привязывать команды и дополнительные реквизиты к форме.

Управляемая форма "любой" сложности сложнее 10-15 групп - начинает вешать конфигуратор. На любом известном мне релизе. Привязки позволяют, хоть и помучившись, сделать то, чего на УФ просто ваще никак не сделать. Лучше плохо ехать, чем хорошо стоять, так считаю. Мог бы сказать насчёт плохого танцора и привязок, которые на самом деле элементарны, да Вы и сами поняли.
Скрытые панели и элементы? Так вот почему невидимый элемент в обычных формах виден, а в управляемых - нет. Это чтоб нам жилось легче! Искать замучились? А дерево объектов формы не пробовали юзать, оно в обычных очень даже есть, а? Или Вы про него не в курсе?
Объединить, говорите, нереально? То-то при копипасте в обычных формах всё куда надо плюхается, а в управляемых либо не копируется, либо криво (команды вяжутся не пойми куда, объекты не вяжутся к командам, пути к данным полей бьются, ряд случаев просто кончается вылетом с дампом).
Про БСП не буду. Во-первых, это уже не о платформе речь, а во-вторых, не хочу об этой дряни вообще разговаривать.
53. Yashazz 3613 23.02.17 22:28 Сейчас в теме
Браузеры давно уже вполне безопасны, ибо HTTPS начиная с TLS 1.1 безопасен. Настроить подобное внутри сети вообще не является проблемой - достаточно самоподписанного сертификата, сгенерированного на веб-сервере. Но в действительности защиту информации дает не шифрование трафика, а ролевое разделение и нескомпрометированные учетные данные. Внутри корпоративной сети как раз доступ к информационной системе из браузера - это вполне здоровая практика.
Объясните это бизнесмену, поднявшемуся в 1990-е. Что в сети - то уязвимо. Безопасен только сервер в подвале за решёткой, и флешка в кармане гендира.
58. boln 1029 25.02.17 04:48 Сейчас в теме
(53)
Объясните это бизнесмену, поднявшемуся в 1990-е. Что в сети - то уязвимо. Безопасен только сервер в подвале за решёткой, и флешка в кармане гендира.
Но ведь и это поколение не вечно - стоит ли на него ориентироваться стратегически? Когда-то бабушкам приходилось объяснять, что электричество лучше керосина, а дедушкам - что автомобиль лучше лошади, хотя эти новшества и имеют свои собственные риски и уязвимости...
54. Yashazz 3613 23.02.17 22:38 Сейчас в теме
Кстати, с абзацем насчёт асинхронности и тарелки супа - соглашусь. Да, по-хорошему, должно работать так. Но Вы правильно описали, что меры не знают и, делая, не всегда думают.

Очень хочется управлять кэшированием на клиенте и отправкой на сервер более гибко. Как в нормальных мобильных приложениях, если девайс вдруг без связи. Хочется уметь рулить временем жизни этих данных. Хочется рулить отправкой на сервер гибче, чем "БезКонтекста" или с контекстом. Да только увы.
55. starik-2005 2252 24.02.17 00:03 Сейчас в теме
Не люблю спорить с пенсионерами - слишком скучно.
59. Yashazz 3613 26.02.17 11:10 Сейчас в теме
(55)
Не люблю спорить с пенсионерами - слишком скучно.
Тогда тем более нам с Вами, молодым, есть о чём поспорить, только уже не тут, где оффтопим, а, например, в личке)
57. Fragster 1037 24.02.17 18:47 Сейчас в теме
Вот фрагмент асинхронного кода на js:
	client.callApi('messages.getDialogs', {offset_date: 0, offset_id: 0, offset_peer: peer, limit: 0})
		.then(result => { // тут оказываемся в конце асинхронного вызова
		let chats = result.chats.list;
		return chats.reduce((promise, elem) => {
			return promise.then((resArray) => {
				if (elem.creator) { // если свойство creator установлено, то делаем еще один асинхронный вызов
					return client.callApi('messages.getFullChat', {chat_id: elem.id}).then((res) => { // по завершению которого 
						resArray.push(res); // кладем результат в массив-накопитель
						return Promise.resolve(resArray);
					});
				} else {
					return Promise.resolve(resArray); // если ничего не надо делать - вызываем метод-пустышку (типа ВыполнитьОбработкуОповещения)
				}
			});
		}, Promise.resolve([]));
	}).then(result => { // обрабатываем результат
Показать


он вызывает асинхронный метод messages.getDialogs, результатом является массив. Затем выполняется обход массива с вызовом асинхронного метода для каждого элемента, последовательно (еще есть Promice.all, который запускает всё параллельно, но сервер за такое банит :))
результаты каждого вызова кладутся в массив. Когда все вызовы завершатся, переходим в //обрабатываем результат
Не используется ни одной глобальной переменной.
Как подобное реализовать в 1с (например рекурсивный обход со всякими файловыми функциями начатьполучение и асинхронное чтение из файлов) - плохо представляю.

хотя данный пример кода показывает, что в js все тоже не так гладко, но, по крайней мере, такие асинхронные цепочки получаются локализованными и последовательными. Также пример показывает асинхронное ветвление, которое в 1с превращается в ещё бОльшее спагетти.
65. Yashazz 3613 27.02.17 10:58 Сейчас в теме
1С не нужно расти как учетной системе за пределами бухгалтерии.
Нужно, конечно, и прекрасно, что развиваются и средства платформы, и конфигурации самого разного профиля в самых разных отраслях. Мне доводилось использовать 1С и для ВУЗовской библиотеки как документографическую ИС с хитрыми видами поиска (всё по науке))), и для чтения башорга, и для выкачивания порнухи, да простит мне Нуралиев) Я же говорю про уровень понимания "в массах" и что об него убиться можно. И говорю, что асинхронность в понимании 1С несколько странна, и что костылями попахивает. Только и всего.

p.s. вот мне так наглядно 10 лет объясняли в таких конторах, где место 1С, что энтузиазма - ни на килобайт.
66. vadim1011985 83 27.02.17 11:11 Сейчас в теме
Возможно кому-то пригодится Отказ от модальности с ИТС
Например там узнал что программа может сама переделать цепочку модальных вызовов в не модальные
68. herfis 386 27.02.17 11:16 Сейчас в теме
(66) Я всегда немодальные диалоги пишу через написание модальных с последующим авторефакторингом :)
69. vadim1011985 83 27.02.17 11:20 Сейчас в теме
(68) Век живи , век учись. Иногда просто не успеваю за всеми новшествами и узнаю о них когда они перестают быть таковыми и становятся обыденностью )))
70. herfis 386 27.02.17 11:44 Сейчас в теме
(69) Чтобы не пропустить ничего интересного - достаточно читать список изменений в новых релизах.
А из рефакторинга самые полезные функции - переименование и вынос блока кода в процедуру. Это базовые возможности любых нормальных IDE, без которых жутко неудобно, если привык.
Без легкого переименования у не тру-программера может не подняться рука на смену имени на более подходящее (тру-программеры понимают, как это важно).
А вынос блока кода в процедуру очень хорошо подходит к стилю программирования многих (меня в том числе). Мало кто способен в голове сразу выстроить инфраструктуру будущего кода на микроуровне (понятно, что глобальные блоки продумываешь сразу). Обычно пишешь простыню и структурируешь ее по ходу. И эта возможность заметно упрощает процесс.
Еще несколько интересных советов по настройке конфигуратора я вычитал у Хрусталевой в книжке "101 совет начинающим разработчикам" (настройка подстветки текущего идентификатора, например - нигде до этого не встречал, а ведь реально полезно).
71. vadim1011985 83 27.02.17 11:53 Сейчас в теме
(70) некоторые изменения я все-же читаю, но толку от этого пока не применишь на практике
67. herfis 386 27.02.17 11:12 Сейчас в теме
"И ты прав, и ты прав"
Сделав ставку на УФ, 1С "просела" в части решений, где тонкий клиент не нужен. Толстый клиент жрет меньше серверных ресурсов, более отзывчив, позволяет строить более продвинутые интерфейсные решения, "моноприложение" разрабатывать проще. И далеко не всегда это перебивается плюсами тонкого клиента.
Но выхода особого у 1С не было. Тонкие клиенты - это понятный и устойчивый тренд, а поддерживать параллельно две архитектуры - глупо по многим причинам. Но там, где тонкий клиент не нужен - да, страдает клиент :)
И я больше согласен с Bonov и starik-2005 - вокруг себя я вижу все больше ситуаций, когда тонкий клиент приносит реальный профит. Да, даже в средне-больших организациях может не быть потребности в тонком клиенте. Но все чаще возникает. И да - все чаще 1С используется для сквозной автоматизации предприятия и как интеграционная платформа уровня предприятия (не в последнюю очередь благодаря тонкому клиенту). Но да, я сейчас говорю не про типовые решения...
Да и за один только динамический интерфейс тонкому клиенту можно простить многое.
Разработчика УФ тоже форсит на многие полезные вещи - распределение нагрузки, система доступов, минималистичный интерфейс... Убийство толстого клиента давно пора понять и простить :)
БСП тоже зря тут ругаете. Не взять в самописку подсистемы управления доступом, контактной информацией, печати, РИБ (по необходимости) и еще пару-тройку полезностей - это надо быть ССЗБ.
72. Yashazz 3613 01.03.17 18:58 Сейчас в теме
Да и за один только динамический интерфейс тонкому клиенту можно простить многое
Да кому он нужен? Никто из известных мне юзеров сам себе формы не настраивал и хочет. Руководству не нравится, что каждый может настроить "в свою степь" и это не поощряется. Нафига оно?
А вот простить конфигуратору, что управляемая форма, блин, открывается полторы минуты (на хорошем сервере) - лично я не могу. Клиент не понимает, почему время работ так выросло, и платить за тормоза конфигуратора не хочет. И скажите ещё мне, что у меня руки кривые, что я плохой танцор, и что форму документа типовой конфы без изменений в конфигураторе неправильно открываю)))
Оставьте свое сообщение

См. также

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

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

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

5 стартмани

21.12.2020    1966    12    huxuxuya    11    

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

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

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

3 стартмани

29.09.2020    7869    46    sapervodichka    40    

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

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

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

3 стартмани

04.09.2019    27433    22    Stepa86    46    

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

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

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

1 стартмани

09.07.2019    18722    12    RonX01    10    

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

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

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

1 стартмани

03.07.2019    22186    5    m-rv    88    

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

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

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

1 стартмани

13.09.2018    22929    13    RocKeR_13    16    

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

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

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

1 стартмани

27.08.2018    40827    63    dsdred    17    

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

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

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

5 стартмани

09.08.2018    29633    26    informa1555    26    

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

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

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

1 стартмани

01.06.2018    31580    88    m-rv    57    

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

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

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

1 стартмани

17.07.2018    51720    18    kalyaka    16    

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

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

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

1 стартмани

22.05.2018    32973    11    SITR-utyos    13    

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

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

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

1 стартмани

06.12.2017    28048    54    kwazi    6    

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

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

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

1 стартмани

08.02.2018    29505    19    mvxyz    17    

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

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

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

1 стартмани

28.11.2017    49956    13    swimdog    43    

Выбор файла и загрузка его на сервер в асинхронном режиме

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

Несколько библиотечных процедур, упрощающих жизнь разработчика при отключенном режиме модальности.

1 стартмани

22.10.2017    32309    json    3    

Telegram-боты

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

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

1 стартмани

01.09.2017    34751    134    PLAstic    59    

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

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

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

1 стартмани

28.12.2015    29093    71    vasvl123    9    

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

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

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

1 стартмани

07.08.2017    23938    21    sasha777666    63    

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

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

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

1 стартмани

30.05.2017    137647    13    signum2009    48    

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

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

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

1 стартмани

13.03.2017    32885    115    romasna    49    

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

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

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

1 стартмани

14.08.2016    49462    36    Demanoidos    60    

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

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

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

1 стартмани

08.02.2017    31226    131    kiv1c    18    

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

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

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

2 стартмани

16.01.2017    23761    106    Alxby    23    

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

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

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

1 стартмани

23.11.2016    22205    97    igel9780    22    

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

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

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

1 стартмани

01.10.2015    53532    35    ildarovich    41    

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

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

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

1 стартмани

14.11.2016    27810    16    Anton64    22    

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

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

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

1 стартмани

04.10.2016    14167    53    mrstomak    21    

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

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

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

1 стартмани

03.10.2016    37826    96    json    25    

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

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

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

2 стартмани

30.08.2016    28172    143    Stepa86    15    

Использование методов глобального контекста в системе компоновки данных или недокументированные возможности СКД

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

Прочитал на форуме, что СтрРазделить() и ТекущаяДата() работают в языке выражений системы компоновки данных. Почитал справку, там ничего не нашёл, поэтому не поверил. Посмотрел на практике – и правда работает… В данной статье попытался привести весь перечень методов, работающих в СКД, но не описанных в документации.

1 стартмани

05.08.2016    38757    26    klinval    40    

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

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

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

1 стартмани

26.07.2016    29524    78    ZhokhovM    60    

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

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

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

2 стартмани

05.06.2016    59610    11    wowik    32    

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

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

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

1 стартмани

18.05.2016    64376    191    rozer    65    

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

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

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

1 стартмани

26.04.2016    62169    19    arakelyan    20    

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

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

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

1 стартмани

24.04.2016    35801    50    ildarovich    23    

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

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

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

1 стартмани

29.03.2016    94886    185    lopatin    14    

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

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

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

1 стартмани

22.03.2016    84246    162    igo1    54    

Количество дней недели (понедельников/вторников/...) в заданном диапазоне одним запросом

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

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

1 стартмани

03.03.2016    19182    1    Alexander.Shvets    5    

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

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

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

1 стартмани

17.02.2016    51857    54    yuraos    17    

Отображение прогресса выполнения длительных операций в БСП и их отладка в текущем сеансе.

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

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

1 стартмани

17.02.2016    58000    188    balanton    23    

Яндекс.Деньги "Благотворительность"

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

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

1 стартмани

16.02.2016    24280    8    Tatitutu    5    

Мастер рассылки e-mail 2.2 для управляемых форм

Практика программирования Email v8 v8::УФ ERP2 БП3.0 УТ11 Абонемент ($m)

Для пользователей: переделанный из старый разработки под 8.2 с использованием библиотеки Мастер рассылки e-mail 2.2 (ERP, УТ, БП) (Только управляемые формы), который теперь может запускаться под любой версией платформы с разрешенными или запрещенными модальными/синхронными вызовами в конфигурации. Также удобный выбор e-mail и их владельцев с помощью отбора динамического списка по любым критериям и галочки исключения.

1 стартмани

29.12.2015    39763    20    milkers    4