Асинхронная концепция программирования в «1С:Предприятие 8» или выполнение программного кода «в фоне»

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

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

#1C #Лаборатория Аксиом #axiomlab #Асинхронное программирование

Как правило, в реальных задачах оказывается недопустимым длительное выполнение обработчика события, поскольку при этом программа не может реагировать на другие события - блокируется пользовательский интерфейс.
В данной статье рассмотрены следующие вопросы:
1. Концепция асинхронного программирования
2. Фоновые задания в «1С:Предприятие 8»
3. Пример асинхронного выполнения длительных серверных операций с помощью фонового задания
4. Пример асинхронного выполнения длительных серверных операций с помощью фонового задания с использованием БСП.

Концепция асинхронного программирования

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

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

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

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

 

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

 

Фоновые задания в «1С:Предприятие 8»

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

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

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

 

Клиент-серверный вариант

В клиент-серверном варианте планированием выполнения заданий занимается планировщик заданий, который физически располагается в менеджере кластера.

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

Файловый вариант

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

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

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

Каждое из перечисленных приложений выполняет собственные фоновые задания. Если приложение инициировало несколько фоновых заданий, то выполняются они последовательно, в порядке поступления.

 

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

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

 

Пример асинхронного выполнения кода в «1С:Предприятие 8»

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

Продемонстрируем всю простоту и изящество асинхронного выполнения кода в «1С:Предприятие 8»!

Шаг 1. Создадим новую ИБ для разработки конфигурации

Шаг 2. В конфигурации добавим общий модуль «АсинхронныеОбработчики»

Почему мы добавили общий модуль? Тут все просто: для выполнения асинхронных операций в «1С:Предприяте 8» применяются фоновые задания, у которых имеется свой менеджер - «МенеджерФоновыхЗадания». У этого объекта есть метод «Выполнить», с помощью которого как раз и запускается фоновое задание.

Обратимся к синтакс-помощнику.

 

Таким образом, нам понадобится общий модуль.

 

 

Шаг 3.  В общем модуле «АиснхронныеОбработчики» добавим экспортную процедуру НашаДлительнаяОперация()

Процедура НашаДлительнаяОперация(Длительность) Экспорт
	// Имитация продолжительного действия (Длительность сек.).
		ДатаНачалаОперации = ТекущаяДата();
		Пока ТекущаяДата() - ДатаНачалаОперации < Длительность Цикл
	КонецЦикла;
КонецПроцедуры

Шаг 4. Добавляем в конфигурацию обработку «АсинхроннаяКонцепцияПрограммирования» (можно создать внешнюю обработку)

 

На форму добавляем один реквизит:

- Длительность (Число)

и две команды

- ВыполнитьДлительнуюОперацию;

- ВыполнитьДлительнуюОперациюАсинхронно.

Шаг 5.  Согласно синтакс-помощнику заполняем модуль формы

&НаКлиенте
Процедура ВыполнитьДлительнуюОперацию(Команда)
	ВыполнитьДлительнуюОперациюНаСервере();
КонецПроцедуры

&НаСервере
Процедура ВыполнитьДлительнуюОперациюНаСервере()
	АсинхронныеОбработчики.НашаДлительнаяОперация(Длительность);
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьДлительнуюОперациюАсинхронно(Команда)
	ВыполнитьДлительнуюОперациюАсинхронноНаСервере();
КонецПроцедуры

&НаСервере
Процедура ВыполнитьДлительнуюОперациюАсинхронноНаСервере()

	Параметры = Новый Массив;
	Параметры.Добавить(Длительность);
	
	ФоновыеЗадания.Выполнить("АсинхронныеОбработчики.НашаДлительнаяОперация", 
		Параметры, Новый УникальныйИдентификатор, "Пример асинхронной концепции программирования");	
	
КонецПроцедуры
 

Шаг 6. Запускаем и проверяем!

Результат:

- если мы нажимаем на кнопку «Выполнить длительную операцию», то пользовательский интерфейс на «Длительность» секунд блокируется;

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

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

 

Отладить программный код, который выполняется в «фоне» мы можем, если в параметрах отладки установим соответствующее свойство.

 

Пример асинхронного выполнения кода в «1С:Предприятие 8» с использование БСП

Пример реализации асинхронной концепции программирования в «1С:Предприятие 8» в БСП рассмотрим на примере обработки «Текущие дела».

 

 

Логика следующая: во время запуска программы инициализируется рабочая область начальной страницы, куда можно вывести форму обработки «Текущие дела». Эта форма заполняется текущими делами пользователя, а чтобы ее заполнить необходимо время. Если бы у разработчиков не было возможности асинхронно выполнять код, то на все время заполнения формы обработки пользовательский интерфейс был бы заблокирован!

 

Проанализируем программный код формы.

Событие формы «ПриСозданииНаСервере» вызывает процедуру «ЗапуститьФоновоеЗадание» - это то, что нам и нужно. 

 

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

 

И здесь мы видим, что используется менеджер фоновых заданий и его метод «Выполнить». Отметить, что разработчики сохраняют уникальный идентификатор фонового задания.

И Что же дальше? А дальше нам необходимо отловить момент выполнения задания.

Для этого разработчики применяют метод ПодключитьОбработчикОжидания(<ИмяПроцедуры>, <Интервал>, <Однократно>).

В подключаемой процедуре Подключаемый_ПроверитьВыполнениеЗадания() разработчики вызывают функцию ЗаданиеВыполнено(ИдентификаторЗадания)


Данная функция по идентификатору проверяет выполнения фонового задания.

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

 

Таким образом, асинхронная концепция программирования в «1С:Предприятие 8» незначительно увеличивает трудоемкость решения задач для разработчика, но заметно улучшает функциональность программы с точки зрения пользователя.

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. recon 107 04.04.15 13:08 Сейчас в теме
Отличная статья! Но у фоновых заданий есть и подводные камни, связанные с ошибками (или фичами?) платформы. В частности 1С не контролирует расход процессорного времени при выполнении фонового задания и десяток фоновых заданий, выполняющих какой то "тяжелый" расчет, могут запросто положить сервер на лопатки. Выход - перенос менеджера фоновых заданий на другой сервер (доступно с платформы 8.3), а значит фоновые задания будут выполняться на выделенном сервере. Возможно в новых релизах что то поменялось
Ну и периодически на сервере может зависнуть процесс фонового задания. 1С хоть и реализовала метод аварийного завершения фонового процесса, но на самом деле он всего лишь посылает команду завершения, не завершая принудительно процесс. Приходится контролировать зависшие процессы периодически через консоль сервера.
Rustig; maljaev; +2 Ответить
2. Infactum 300 05.04.15 12:05 Сейчас в теме
Конечно на безрыбье и рак рыба, но называть это все асинхронным программированием будет не совсем корректно. Для реализации полноценного асинхронного программирования нужна либо нормальная работа с обратными вызовами, либо Promise/Deferred. Очень рекомендую по смотреть в сторону node.js + callback/promise или C# + async/await, чтобы понять, как именно все это должно работать. По факту сейчас за 1С просто стыдно :(
G_101343795907160391674; pqt; vpndos; it@contlog.ru; vvp117; boln; Gang031; ybatiaev; johny1987; It-developer; Drfreeman; sigmov; sbcode; brr; 7OH; Kuzja_R; cefew; nSpirit2; perpleks; Жолтокнижниг; +20 3 Ответить
3. pumbaE 643 05.04.15 13:35 Сейчас в теме
(2) Ну так используйте Показатьоповещение, бесконечный loop и подключитьобработчик ожидания. Превращать в callback ад, код ради "стыдно" не имеет смысла.
В том же питоне, попытались не реализовывать сразу весь ужас callback и не превращать в код в спагети.
4. Infactum 300 05.04.15 14:00 Сейчас в теме
(3) pumbaE, в питоне есть asyncio. Я на callback модели и не настаивал, специально привел несколько примеров.
И к слову о JS и "callback hell" - это проблема исключительно начинающих программистов. Использование библиотек типа node-async или отказ от обратных вызовов в пользу обещаний решает все это на корню.
5. pumbaE 643 05.04.15 14:21 Сейчас в теме
(4) в типовой поставке 1с нет ни тестирования, ни документации кода, как получить работающий код при малейшем изменении одного из обещаний?
Уже сейчас можно с трудом отладить модель подписок в БСП, пока инструментов нет для нормальной поддержки кода.
9. nSpirit2 09.04.15 12:20 Сейчас в теме
Много много букав совсем не о чем :)
К сожалению пока вся концепция 1с завязана на том что клиентские приложение само отслеживает выполнилось фоновое задание или нет.
Обилие описания плюсов о том что пользовательский интерфейс не блокируется по большей части преувеличение удобности этого для пользователя. Мы не завешиваем окно пользователя но не факт ему нужно работать пока не закончиться длительная операция. Отслеживание работы пользователя по большей части показывает, что выполнение отчета в фоне не как не помогает пользователю работать так как он ожидает результат. Для моей базы это примерно 70 процентов. Так что речь о оставлении возможности интерактивной работы пользователя по большей части надумана. Так как любая длительная операция которая необходима пользователю по большей части не требует не блокировки интерфейса это скорее удобность работы так как пользователи по большей части не многозначны и ожидают результата своих действий перед выполнением следующей задачи. Основная удобность всех фоновых процессов к сожалению сводиться к возможности незаметно для пользователя обновлять часть видимой ему информации. Либо перенос в них задач результат выполнения которых пользователь не ожидает.

Что относительно описания в БСП. Я думал будет больше функции из модулей <color #FF6347>ДлительныеОперации</>*.
Такие функции как СообщитьПрогресс и ПрочитатьПрогресс к сожалению не нашли отражения в примере хотя именно для длительных операций они весьма интересны. Что интересно. C помощью него можно выполнять не только экспотрные процедуры но и команды отчетов и обработок что значительно удобней чем строковых адресов в функции.

Простите но статья по большей части не о чем. Ждем детального продолжения.

(5) pumbaE, То что вы по прежнему кушайте кактус совсем не значит что другие тоже его едят. Есть и инструменты для тестирования и инструменты для документирования. А относительно спагети. Вы пробуйте написать паралельно вычисление на фоновых заданиях вам callback счастьем покажется.

(4) Infactum, К слову а JS в 1с со всей этой концепцией фоновых вычислений по большей части не хватает возможности помещения в переменные ссылок на функции для дальнейшего их использования.
ybatiaev; Chai Nic; softgarant; Gang031; alexey.kutya; +5 1 Ответить
15. AXIOMLAB24 09.04.15 13:01 Сейчас в теме
(9) nSpirit2, благодарю за детальный комментарий!
По пунктам,
п.1
Простите но статья по большей части не о чем.

Нет предела совершенству - будем стараться, будем работать над собой!

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

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

п.3
Что относительно описания в БСП. Я думал будет больше функции из модулей <color #FF6347>ДлительныеОперации</>*

Главной задачей статьи является попытка передать КОНЦЕПЦИЮ асинхронного программирования, но с небольшими и понятными примерами в "1С:Предприятие".

Ждем детального продолжения.

Если тема заинтересует достаточное количество специалистов, то продолжение следует!
Alf06; zadoy; Gang031; Rustig; +4 Ответить
32. Dipod 77 24.08.18 13:45 Сейчас в теме
(9) В случае серверной базы с помощью фоновых заданий можно писать асинхронные обработки, которые распараллеливают выполнение алгоритма на несколько потоков.

Вот пример сферической задачи в вакууме:
Требуется создать очень много элементов справочника в базе, например, 4 миллиона.

Проц у меня 4-хядерный. Если запустить выполнение обработки создания элементов справочника синхронным алгоритмом, то будет использоваться только одно ядро процессора.

Если 4 миллиона элементов разбить на диапазоны по миллиону и запустить создание этих элементов в 4-х фоновых заданиях, то получаем загрузку проца в 100% и ускорение выполнения задачи в 4 раза (если не упремся в другие аппаратные ограничения, например в скорость записи на диск).
33. Denanhel 13.09.18 16:47 Сейчас в теме
(32)
Требуется создать очень много элементов справочника в базе, например, 4 миллиона.
Поделюсь своим печальным опытом... На выходе получаем "Конфликт блокировок при выполнениии транзакций" Для записи в БД такой подход очень бы не советовал использовать..
34. Dipod 77 14.09.18 11:37 Сейчас в теме
(33) Согласен, что есть вероятность конфликта блокировок, но я лично пробовал так создавать элементы и даже создавать и проводить документы, и конфликта блокировок не наблюдал. Но это еще не доказывает, что конфликта никогда не произойдет :-)
35. Denanhel 15.09.18 09:04 Сейчас в теме
(34) Всё зависит от объёма данных, записываемых в базу и количества потоков. Мне нужно было записывать от 10 до 100 тысяч товаров в самописную конфигурацию раз в час. К тому же платформа 8.2. Блокировки не управляемые. Пробовал в 24 потока организовать (процессор позволяет). - тьма блокировок. Разложил на 4 потока. Блокировки пропали. Вот только скорость соответственно в 6 раз упала. Ну соответственно нужно искать компромисс... А так согласен плюсом идёт еще и то что можно сохранить адрес хранилища в локальной переменной и когда нужно получить ответ. Я допустим запускаю создание товаров в фоне, а в то же время загружаю справочник свойств этих товаров в отдельном потоке, а затем уже согласно полученным данным имея загруженные товары и свойства собираю регистр значений свойств. Получается гораздо быстрее чем делать всё поочередно.
garibyanlev; Dipod; +2 Ответить
36. Dipod 77 17.09.18 09:50 Сейчас в теме
(35)Да, я экспериментировал на платформе 8.3 и всего в 4 потока :-)
6. klinval 308 06.04.15 09:21 Сейчас в теме
&НаСервере
Процедура ВыполнитьДлительнуюОперациюАсинхронноНаСервере()

    Параметры = Новый Массив;
    Параметры.Добавить();
    
    ФоновыеЗадания.Выполнить("АсинхронныеОбработчики.НашаДлительнаяОперация", 
        Параметры, Новый УникальныйИдентификатор, "Пример асинхронной концепции программирования");    
    
КонецПроцедуры
Показать

Вы случайно не забыли в параметрах передать длительность?
ybatiaev; AXIOMLAB24; +2 Ответить
7. AXIOMLAB24 06.04.15 09:45 Сейчас в теме
(6) klinval, Спасибо! Подправил.
38. ybatiaev 54 19.09.19 15:06 Сейчас в теме
(6) Ещё бы не мешало перед запуском фонового задания проверять уже запущенные фоновые задания. Некоторые можно плодить, а некоторые нет. К примеру, одно не закончилось, а ваша программа по функции ПодключитьОбработчикОжидания запускает точно такой же. Один не закончился из-за загрузки системы, второй запустился и ещё больше нагрузил систему...
Мой пример с проверкой для разного вида фоновых дажаний
//головная функция запуска фоновых заданий с оценкой
Процедура ПроверитьЗапуститьФоновоеЗадание(Наименование, НаименованиеПроцедуры, Параметры_, ЗапуститьБезПроверки=Ложь) Экспорт
	//ФоновыеЗадания.ПолучитьФоновыеЗадания() // тут все, без отбора
	Отбор = новый структура("Состояние, Наименование", СостояниеФоновогоЗадания.Активно, Наименование);
	КоличествоФЗ = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор).Количество();
	ЗапускатьСледующееФоновоеЗадание = ?(КоличествоФЗ > 0, Ложь, Истина);

	Если ЗапускатьСледующееФоновоеЗадание или ЗапуститьБезПроверки Тогда
		фз = ФоновыеЗадания.Выполнить("АсинхронныеОбработчики."+НаименованиеПроцедуры, Параметры_, Новый УникальныйИдентификатор, Наименование);    
	КонецЕсли;
КонецПроцедуры
Показать
8. Rustig 1742 09.04.15 12:07 Сейчас в теме
(0) проект интересный!

....а как мы жили раньше без этого?!.....
я учил бухгалтеров так: запускаете один сеанс бухгалтерии, запускаете формирование ОСВ,
открываете второй сеанс бухгалтерии и продолжаете работу во втором сеансе....

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

ybatiaev; +1 Ответить
10. pumbaE 643 09.04.15 12:24 Сейчас в теме
Есть и инструменты для тестирования и инструменты для документирования
поделитесь хотя-бы названиями.
11. nSpirit2 09.04.15 12:35 Сейчас в теме
(10) pumbaE,
https://github.com/xDrivenDevelopment/xUnitFor1C ну для тестирования вот вам ссылка. Посмотрите) А то куда ведет ссылка ответ на вопрос про документацию.
shalimski; JohnyDeath; kuntashov; Pr-Mex; lustin; +5 Ответить
12. pumbaE 643 09.04.15 12:40 Сейчас в теме
(11) дайте догадаюсь документацию в wiki?
13. nSpirit2 09.04.15 12:46 Сейчас в теме
(12) pumbaE, Ну в моем случае это git + некоторые скрипты для извлечения комментариев из хода.
14. pumbaE 643 09.04.15 12:54 Сейчас в теме
(13) не поделитесь скриптами по документированию и опытом работы с xUnitfor1c?
Какие режимы работы тестируете (управляемые формы, обычные формы)?
Используете ли 8.3.5 кнопку нажималку для тестового случая?
Как часто запускаете тесты? Автоматизировали ли CI в виде какого-либо сервиса сборки? Автоматизировали ли CD для обновления production базы?
Какие затраты на написание тестов были вначале, какие сейчас?

Мне было-бы очень интересно услышать ответы на эти вопросы.
troubleshooter; pbazeliuk; Rustig; +3 Ответить
27. nSpirit2 11.04.15 10:27 Сейчас в теме
(14) pumbaE, xUnitfor1c познакомились примерно в июле 2014. Случайно наткнулся в Гугле. С тем учетом что наша компания по факту занимается разработкой и продажей ПО которое сами и пишем (не 1с ). Cсобственно к разработке на 1с для внутренних нужд применяются те же требования. Используем для CI что то отдаленно напоминающее TeamCity. С возможностью автоматического тестирования и выкладки при условии динамического обновления. В части тестов интерфейсов после полного перехода на Управляемые формы в конце июня используем xUnitfor1c.

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

Относительно документирования используем большую часть возможностей которые дает Git. В текущей ситуации пытаемся понять насколько возможно использовать стандартный git-flow для 1с не храня бинарники *.cf на всякий случай.
Это если совсем коротко.
28. artbear 1312 12.05.15 17:13 Сейчас в теме
Что-то я эту тему пропустил.
И упоминание "моей прелести" xUnitFor1C также :)

(27) А используете именно Gui/интерфейсные тесты в xUnitFor1C (через кнопко-нажималку) или обычные тесты в УФ для xUnitFor1C также юзаете?
19. lustin 10.04.15 13:00 Сейчас в теме
16. lustin 10.04.15 12:27 Сейчас в теме
(11) nSpirit2, ;-) сделал мой день ;-)
CSiER; nofx; pbazeliuk; kuntashov; +4 Ответить
18. nSpirit2 10.04.15 12:52 Сейчас в теме
(16) lustin, Нуу я все таки надеюсь что эта часть будет сильно популярна в среде 1С разработчиков что бы было меньше объяснять новым разработчикам.
(17) lustin, Я описания на github прочитал. Идея конечно отличная не подскажите к быстро будет развиваться функциональность. К несчастью функционал БСП она пока не покрывает есть ли план развития ?
20. lustin 10.04.15 13:13 Сейчас в теме
(18) nSpirit2

1. по развитию надо спрашивать у https://plus.google.com/+ЕвгенийПавлюк - не могу определенно сказать какие у него дальнейшие планы. Сейчас насколько я понимаю была основная цель - поделиться подсистемой.

2.
что бы было меньше объяснять новым разработчикам.
тут вот какое дело, только без обид - потому что это было весело...

мы также поступаем - советуем всем использовать подходы и инструментарий. Тот же xUnit или https://github.com/silverbulleters/vanessa-behavoir, но блин... вы дали ссылку на инструментарий одному из авторов ;-) https://github.com/pumbaEO
21. nSpirit2 10.04.15 13:19 Сейчас в теме
(20) Неожиданные высказывания для разработчика :D Теперь и я ржу :D
22. pumbaE 643 10.04.15 14:39 Сейчас в теме
(21) ну основное мое замечание касалось "типовой"(поставки, типового функционала от 1с).
24. JohnyDeath 299 10.04.15 17:29 Сейчас в теме
(11) Весело наблюдать за тем, как советуют поучиться инструменту одному из основных разработчиков этого инструмента )))
wazup666; ybatiaev; u_n_k_n_o_w_n; nofx; artbear; tormozit; kuntashov; Evil Beaver; karapuzzzz; +9 Ответить
25. Evil Beaver 7036 10.04.15 18:11 Сейчас в теме
(24) JohnyDeath, Ну это же круто, это признание!
JohnyDeath; kuntashov; +2 Ответить
26. pumbaE 643 10.04.15 19:34 Сейчас в теме
(25), (24), (16) тролли. Я, наоборот, рад тому, что кто-то другой знает и использует данный инструмент.

p.s.:
Мне все таки интересен ответ на (14) вопрос, хоть частичный.
h00k; artbear; nSpirit2; JohnyDeath; kuntashov; +5 Ответить
17. lustin 10.04.15 12:43 Сейчас в теме
(0) Ну это всё конечно хорошо, но раз уж тема актуальна и поднята, но это не наш метод - нет у нас доверия стабильности БСП, потому что нет тестов на эту функциональность, как верно заметили в (5)

А что же тогда наш метод ? Вот вам пример вчера публикации на Хабре:

1. Исходная публикация http://habrahabr.ru/post/255387/
2. Репозиторий на github https://github.com/wizi4d/TaskManagerFor1C
3. Кстати *внезапно* подсистема накрыта тестами https://github.com/wizi4d/TaskManagerFor1C/tree/master/%D0%A2%D0%B5%D1%81%D­1%82%D1%8B
23. karapuzzzz 63 10.04.15 16:55 Сейчас в теме
От себя добавлю как можно передавать параметры и ловить результат.
Для начала создаем временное хранилище:
АдресВХранилище = ПоместитьВоВременноеХранилище(Неопределено);

Потом создаем массив, в который заносим адрес в хранилище и остальные параметры:
НаборПараметров = Новый Массив;
НаборПараметров.Добавить(АдресВХранилище);
НаборПараметров.Добавить(Параметр1);
НаборПараметров.Добавить(Параметр2);
НаборПараметров.Добавить(Параметр3);

Если идет распараллеливание задания, то создается массив заданий и массив адресов в хранилище.
В самом задании результат помещаем в хранилище:
ПоместитьВоВременноеХранилище(Результат, АдресВХранилище);

После того как словили факт окончания выполнения задания можно обработать результат. Для этого получаем результат из хранилища и делаем что хотим с этим:
Результат = ПолучитьИзВременногоХранилища(АдресВХранилище)

frkbvfnjh; a45; +2 Ответить
29. WKBAPKA 225 25.09.15 09:17 Сейчас в теме
Статья довольно таки интересная.
Для решения некоторых задач оч. даже полезная
30. kote 522 16.01.17 23:10 Сейчас в теме
Тоже делал механизм параллельной работы на фоновых заданиях..

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

Сделайте запуск фонового задания СообщениеИзФоновогоЗадания, которое будет вызываться из Вашего задания.
В параметрах - передайте Сообщение для пользователя..

В самом же задании принудительно вызывайте ошибку и выводите своё сообщение для пользователя, не прерывая первоначального задания.
31. vitonya 79 16.05.18 12:01 Сейчас в теме
1С что-то оптимизирует, городит, а в результате, программа все медленней работает. ОПТИМИЗАЦИЯ, мля!!!
Chai Nic; +1 Ответить
37. masteroll 20.06.19 19:23 Сейчас в теме
Спасибо! Отличная статья!
Оставьте свое сообщение

См. также

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    80502    Serginio    113    

Полезные примеры СКД, ч.1

Практика программирования v8::СКД Бесплатно (free)

Подборка видео по решению различных задач в отчетах на СКД.

30.03.2021    7385    Neti    18    

Обзор полезных методов БСП 3.1.4

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

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

25.03.2021    21336    rayastar    49    

Повышение качества разработки. Статья 4. Почему код становится плохим, и как с этим бороться

Практика программирования Методология управления разработкой Бесплатно (free)

Учебный курс по теории и практике программирования. Бесплатно. В виде структурированного текста. Статья 4. Эта статья посвящена причинам возникновения проблем с качеством кода и методикам их преодоления.

22.03.2021    1192    Артано    5    

Звуковое управление в 1С 8.3 Промо

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

В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.

16.03.2021    3881    velemir    31    

Telegram бот на PHP

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

Сделаем простого Telegram бота на PHP.

01.03.2021    4496    John_d    8    

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions

Универсальные функции Практика программирования v8 Бесплатно (free)

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020    5795    comol    31    

«Варп-двигатель» для «среза последних»

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

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

10.08.2020    3556    hobi    49    

Использование программных перечислений, ч.1: строковые константы Промо

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

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

10.12.2016    39241    unichkin    74    

1С: Документооборот, Data Science и Python

Документооборот и делопроизводство Математика и алгоритмы ДО Бесплатно (free)

В статье рассказывается о создании и обучении модели Data Science на языке Python и интеграции с системой 1С: Документооборот

04.08.2020    2854    Vaganov_Alexey    9    

Не спеша, эффективно и правильно – путь разработки. Часть 3. Практика

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

Черновой вариант книги Никиты Зайцева, a.k.a.WildHare. Разработкой на платформе 1С автор занимается с 1996-го года, специализация — большие и по-хорошему страшные системы. Квалификация “Эксперт”, несколько успешных проектов класса “сверхтяжелая”. Успешные проекты ЦКТП. Четыре года работал в самой “1С”, из них два с половиной архитектором и ведущим разработчиком облачной Технологии 1cFresh. Ну — и так далее. Не хвастовства ради, а понимания для. Текст написан не фантазером-теоретиком, а экспертом, у которого за плечами почти двадцать три года инженерной практики на больших проектах.

29.06.2020    11723    WildHare    33    

Не спеша, эффективно и правильно – путь разработки. Часть 2. Теория

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

Черновой вариант книги Никиты Зайцева, a.k.a.WildHare. Разработкой на платформе 1С автор занимается с 1996-го года, специализация — большие и по-хорошему страшные системы. Квалификация “Эксперт”, несколько успешных проектов класса “сверхтяжелая”. Успешные проекты ЦКТП. Четыре года работал в самой “1С”, из них два с половиной архитектором и ведущим разработчиком облачной Технологии 1cFresh. Ну — и так далее. Не хвастовства ради, а понимания для. Текст написан не фантазером-теоретиком, а экспертом, у которого за плечами почти двадцать три года инженерной практики на больших проектах.

22.06.2020    12045    WildHare    23    

Вспомогательные инструкции в коде 1С Промо

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

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    33396    tormozit    105    

Не спеша, эффективно и правильно – путь разработки. Часть 1. Парадигма

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

Черновой вариант книги Никиты Зайцева, a.k.a.WildHare. Разработкой на платформе 1С автор занимается с 1996-го года, специализация — большие и по-хорошему страшные системы. Квалификация “Эксперт”, несколько успешных проектов класса “сверхтяжелая”. Успешные проекты ЦКТП. Четыре года работал в самой “1С”, из них два с половиной архитектором и ведущим разработчиком облачной Технологии 1cFresh. Ну — и так далее. Не хвастовства ради, а понимания для. Текст написан не фантазером-теоретиком, а экспертом, у которого за плечами почти двадцать три года инженерной практики на больших проектах.

15.06.2020    18361    WildHare    34    

Применение математических достижений в решении сложных задач бизнеса

Математика и алгоритмы Бесплатно (free)

Как правило, самые сложные задачи решаются с точки зрения математики очень легко. Но чтобы найти правильное решение, важно понять бизнес-цель, которую достигает эта задача. О практическом применении математических достижений для эффективного решения сложных задач бизнеса на конференции Infostart Event 2019 Inception рассказал Дмитрий Мишнов.

25.05.2020    4231    Mishnov    17    

JSON в запросах DaJet QL

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

Практические примеры работы с JSON непосредственно в языке запросов. Перенос курсов валют между УТ и БП. Требуется SQL Server 2016 и выше.

24.04.2020    4257    zhichkin    6    

Оформление и рефакторинг сложных логических выражений Промо

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

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

20.09.2012    80432    tormozit    131    

Визионное программирование

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

Новый способ программирования и его практическая демонстрация.

22.04.2020    4992    mkalimulin    111    

Улучшение пооперационного планирования в 1С:ERP 2.4 внешними средствами

Математика и алгоритмы Производительность и оптимизация (HighLoad) Бесплатно (free)

Задача построения оптимального производственного расписания требует сравнения тысяч и десятков тысяч вариантов. Выполнять такие вычисления средствами платформы 1С Предприятие нецелесообразно. Как реализовать пооперационное планирование с использованием генетических алгоритмов и параллельных вычислений в докладе на конференции Infostart Event 2019 Inception рассказал генеральный директор компании «ИНТЕХ» Сергей Сафаров.

02.03.2020    6394    ildarovich    8    

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

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

Продолжаю (и заканчиваю) тему с автоматическим решением инцидентов. Перейдем от теории к практике.

25.02.2020    4702    Repich    9    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

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

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    51441    tormozit    51    

Использование машинного обучения для решения инцидентов

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

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

18.02.2020    7577    Repich    17    

Программная работа с настройками СКД

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

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    49190    ids79    26    

[СКД] Программное создание схемы компоновки данных

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

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    35300    John_d    22    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

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

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    48219    tormozit    74    

Часовой на страже логов

Практика программирования Инструментарий разработчика Бесплатно (free)

При поддержке решений, которые установлены у большого количества пользователей на различных системах, очень важно вовремя получать подробную информацию о возникших проблемах. О том, как собирать логи и анализировать полученные данные в трекере ошибок Sentry на конференции Infostart Event 2019 Inception рассказал Андрей Крапивин.

13.01.2020    8555    Scorpion4eg    8    

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

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

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    27871    kuzyara    38    

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

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

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

07.10.2019    35428    HostHost    41    

Развитие 1С программиста Промо

Практика программирования Личная эффективность Бесплатно (free)

Делюсь своим опытом и видением развития 1С программиста.

17.10.2018    23718    pashamak    64    

Native внешняя компонента для оповещения по UDP или TCP

Разработка внешних компонент v8 Абонемент ($m)

Native внешняя компонента для оповещения по UDP или TCP, которая реализует возможность в 1С передавать сообщения с сервера на клиента. Исходный код компоненты также представлен.

1 стартмани

06.10.2019    13042    30    vdv2701    37    

Таблица значений. Нюансы

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

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

01.10.2019    45355    Yashazz    50    

СКД. Отчеты с картинками

Практика программирования Работа с интерфейсом v8::СКД 1cv8.cf Бесплатно (free)

Решение популярных кейсов с картинками в отчетах на СКД.

25.09.2019    28049    YPermitin    46    

Выгрузка документа по условию Промо

Практика программирования Разработка v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    16834    m-rv    3    

СКД не только для отчетов

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

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

18.09.2019    20873    YPermitin    36    

[Шпаргалка] Программное создание элементов формы

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

Программное создание практически всех популярных элементов формы.

06.09.2019    79816    rpgshnik    70    

Агрегатные функции СКД, о которых мало кто знает

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

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    65419    ids79    55    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

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

16.04.2019    21528    m-rv    17    

Приватный блокчейн и 1С популярно

Практика программирования Блокчейн Бесплатно (free)

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

02.09.2019    6701    mkalimulin    140    

Кодогенерация и метагенерация в 1С

Практика программирования Инструментарий разработчика Бесплатно (free)

В своем докладе на конференции INFOSTART EVENT 2018 EDUCATION Дмитрий Белозеров рассказал о разработке инструмента, позволяющего программно работать с метаданными 1С и писать скрипты для выполнения тех же действий, которые выполняет разработчик в конфигураторе –  с какими сложностями и нюансами пришлось столкнуться, и что получилось в итоге.

26.08.2019    9410    kirovsbis    28    

Отслеживание выполнения фонового задания

Практика программирования Универсальные функции Разработка v8 1cv8.cf Бесплатно (free)

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    39765    ids79    19    

Как сделать запрос на изменение данных Промо

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

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

01.06.2018    33812    m-rv    22    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

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

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    124220    ids79    72    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

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

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    88063    ids79    14    

Обработчики событий при записи объектов. Зачем и что за чем?

Математика и алгоритмы v8 Бесплатно (free)

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта.... Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

25.07.2019    87969    AlbinaAAA    33    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

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

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

05.12.2017    29288    itriot11    34    

Как проводятся документы в типовых конфигурациях от 1С

Математика и алгоритмы Практика программирования Разработка v8::ОУ ERP2 УТ11 Россия УУ Бесплатно (free)

В свое время, когда только начинал шаги в 1С и изучал, как проводятся документы в конфигурациях на платформе 1С по книге "Разработка управляемого интерфейса" (Хрусталева Е.Ю.), и там были представлены примеры совсем далекие от того, как сейчас проводятся документы в современных конфигурациях от 1С.

24.07.2019    32735    skv_79    35    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    43053    ids79    27    

Интеграция сценарного тестирования в процесс разработки

Практика программирования Инструментарий разработчика Бесплатно (free)

Разработчик системы «Тестер» Дмитрий Решитко в своем докладе на конференции INFOSTART EVENT 2018 EDUCATION показывает, что процесс тестирования можно очень плотно интегрировать в процесс разработки, что внедрение тестирования – это возможность развития программиста как такового, позволяющая ему упорядочивать ход мыслей и оставаться «в фокусе». Навыки построения процесса кодирования на стыке с тестированием сокращают время на концентрацию, освобождают от страха перед изменениями и улучшают память разработчика.

08.07.2019    9890    grumagargler    7    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования Разработка v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    20884    SeiOkami    52    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    66517    ids79    26    

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Практика программирования Производительность и оптимизация (HighLoad) v8 v8::Запросы Бесплатно (free)

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    28314    dmurk    148