Многопоточность в 1С, клиент-серверный вариант

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

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

мультипоточность многопоточность параллелизм

Многопоточность - это свойство системы выполнять одновременно более одной операции (в пределе - более одной программы), позволяя в ряде случаев добиться существенного роста производительности программного продукта...

Пролог.

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

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

Введение.

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

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

Как это работает?

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

В итоге у нас вырисовывается такая схема:

Управляющая процедура -> Поставщик данных (запрос)  -> Фоновое задание (порция данных) -> Отчет о выполнении -> Управляющая процедура.

Математическая модель будет выглядеть так:

  1. Получаем данные для обработки.
  2. Задаем количество фоновых заданий.
  3. Создаем массив для хранения фоновых заданий.
  4. Если количество стартованных фоновых заданий меньше, чем задано - п.5., иначе п.7.
  5. Стартуем фоновое задание и передаем ему оговоренное количество данных.
  6. Еще есть данные? Да - п.4, нет - выход (или подождем через ОжидатьЗавершения(МассивФЗ), после чего выйдем).
  7. Проверяем, есть ли в массиве задание, которое уже отработало. Если есть - п.5., иначе п.7.

Практическая задача.

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

Дано:

  1. Регистр сведений "СферическиеКони" с измерением "Конь" (справочник "Кони") и ресурсом "ПлотностьСреды" (число 15,10) .
  2. Мы добавили параметр "СопротивлениеСреды", характеризующий сопротивление среды при максимальной скорости данного коня. Именно его и надо заполнить.

Предположим, что коней у нас много и заполнение без многопоточности займет много времени.

Опишем для начала рабочую процедуру:

Процедура ЗаполнитьСопротивлениеСреды(ИсточникДанных) Экспорт
    Для Каждого Ст ИЗ ИсточникДанных Цикл
        Рег = РегистрыСведений.СферическиеКони.СоздатьМенеджерЗаписи();
        Рег.Конь = Ст.Конь;
        Рег.Прочитать();
        Рег.СопротивлениеСреды = ПолучитьСопротивлениеСредыДляКоня(Ст.Конь.МаксСкорость, Ст.Конь.Радиус, Рег.ПлотностьСреды);
        Рег.Записать();
    КонецЦикла;
КонецПроцедуры

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


Теперь опишем управляющую процедуру:

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

  МассивФЗ = Новый Массив;
  КоличествоЗаданий = 10;
  КоличествоДанныхДляЗадания = 100;
  МассивДанныхЗадания = Новый Массив;
  Для Каждого Ст ИЗ ИсточникДанных Цикл
      МассивДанныхЗадания.Добавить(Ст);
      Если МассивДанныхЗадания.Количество() = КоличествоДанныхДляЗадания Тогда
          Пока МассивФЗ.Количество() = КоличествоЗаданий Цикл
              Для Каждого ФЗ ИЗ МассивФЗ Цикл
                  // не помню, как получается задание, но как-то так - нет под рукой 1С
                  // смысл в том, чтобы проверить статус у запущенного задания, и если он не активен - освободить место в массиве ФЗ
                  Если НЕ ФоновыеЗадания.ПолучитьФоновоеЗаданиеПоГуид(ФЗ).Статус = СтатусыФЗ.Активно Тогда
                      МассивФЗ.Удалить(МассивФЗ.Найти(ФЗ));
                      Прервать; // выйдем из "бесконечного" цикла, когда хотябы одно из заданий закончилось
                  КонецЕсли;
              КонецЦикла; // ФЗ
          КонецЦикла; // КоличествоФЗ
          МассивПараметров = Новый Массив;
          МассивПараметров.Добавить(МассивДанныхЗадания);
          ФЗ = ФоновыеЗадания.Выполнить("ОбщийМодуль.ЗаполнитьСопротивлениеСреды", МассивПараметров);
          МассивФЗ.Добавить(ФЗ.ГУИД);
          МассивДанныхЗадания = Новый Массив;
      КонецЕсли; // КоличествоДанныхДляЗадания
  КонецЦикла;
  Если МассивДанныхЗадания.Количество() > 0 Тогда
      МассивПараметров = Новый Массив;
      МассивПараметров.Добавить(МассивДанныхЗадания);
      ФЗ = ФоновыеЗадания.Выполнить("ОбщийМодуль.ЗаполнитьСопротивлениеСреды", МассивПараметров);
  КонецЕсли;

Собственно, что мы сделали? Создали массив заданий и определили параметры обработки (количество потоков, количество данных в потоке). Далее заполнили массив данными, проверили, есть ли свободное место в массиве, если нет - дождались, и передали в фоновое задание для обработки. После чего поместили ГУИД ФЗ в массив.


Заключение.

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

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. andy23 434 22.06.15 00:34 Сейчас в теме
Регистр "СферическиеКони" звучит очень даже не плохо! А многопоточность тема хорошая, актуальная.
2. starik-2005 2214 22.06.15 01:10 Сейчас в теме
(1) andy23, как показывает практика, статьи о ней (многопоточности) и 1С появились аж в 2008-м году (то, что я смог найти - может что и раньше есть). Но и сейчас применение данного механизма доступно небольшому кругу посвященных ))
3. insurgut 191 22.06.15 06:55 Сейчас в теме
А по факту многопоточность так же внутри одного ядра выполняется?
7. starik-2005 2214 22.06.15 09:20 Сейчас в теме
(3) insurgut, в действительности фоновое задание запускается отлельным потоком на сервере 1с. Дальше потоком рулит ОС, выделяя ему память и ядро. Если процессорных ядер больше одного - происходит реальное распараллеливание, но даже на одном ядре код нескольких потоков может выполняться быстрее, т.к. waitы и sleepы - задержки - позволяют другим потокам в это время чтото делать.

В реальной жизни существует масса задач, скорость выполнения которых обратно пропорциональна количеству процессов (если их не больше количества ядер). Операции ввода-вывод, кстати, используют задержки, которые могут утилизироваться многопоточностью.
8. insurgut 191 22.06.15 10:07 Сейчас в теме
(7) если не ошибаюсь (что не исключено ;)), один процесс RPHOST выполняется на 1 ядре. И получается все зависит от того, какой RPHOST (если их несколько) будет выполнять тот или иной поток. Ситуация, что все они будут выполнятся на одном и том же рпхосте не исключена. И беда в том, что повлиять на это возможности уже нет (конечно и тут я могу ошибаться, поправьте если что). Но в любом случае, как вы сами и указали, все многопоточность сведется к одной последовательной операции чтения с диска. Но тут на помощь нам идет сам SQL, который возможно заранее все уже выгрузил в память.

P.S. Очень интересно было бы увидеть данные по приросту скорости выполнения при использовании приведенного метода многопоточности на реальной базе :)
9. pscorp 5 22.06.15 10:15 Сейчас в теме
(8) rphost выполняется не на одном ядре, он как раз может утилизировать все ядра. То, что это так можно убедиться запустив сервер 1с с одним процессом и увидев, что нагрузка попадает на все ядра. Из-за убеждения, что один процесс использует только одно ядро многие рекомендуют запускать рабочих процессов по числу ядер. На курсе 1с:Эксперт про это как раз рассказывают.
10. starik-2005 2214 22.06.15 10:23 Сейчас в теме
(8) insurgut, Вам, конечно, уже ответили, но я могу несколько дополнить. В случае вычисления в фоновом задании выражения на встроенном языке без обращения к ресурсам сервера SQL вы ограничены ресурсами сервера 1С, но если у происходит обращение к серверу СУБД - картина меняется. Т.к. АДО-механизм использует задержки при обращении к серверу, ожидая ответ, то второй поток даже на одном ядре может инициировать в это время еще одно соединение с сервером СУБД, утилизируя его вычислительные ресурсы. Отсюда мораль: если бОльшую часть работы мы перенесем на сервер СУБД, то можно запустить больше потоков на сервере 1С.
42. KroVladS 33 05.08.15 09:38 Сейчас в теме
(8) insurgut,
P.S. Очень интересно было бы увидеть данные по приросту скорости выполнения при использовании приведенного метода многопоточности на реальной базе :)

реальные результаты http://forum.infostart.ru/forum24/topic83924/message889711/#message889711
4. fancy 9 22.06.15 07:55 Сейчас в теме
Посмотрел код, получается, если массив заданий заполнен -ищем первое отработавшее задание и удаляем его из списка. Если же таких отработанных заданий в массиве будет несколько, то на мой взгляд будет оптимальнее их сразу все удалить, тогда для следующей порции данных уже не надо будет пробегать по массиву и искать неактивное задание (т. е предлагаю убрать оператор "Прервать")
5. WKBAPKA 222 22.06.15 08:46 Сейчас в теме
(4) fancy, это же пример. а по факту потом можно оптимизировать и оптимизировать. Автору спасибо за статью!
6. DoctorRoza 22.06.15 09:09 Сейчас в теме
Предложенная идея была озвучена в курсе по Оптимизации Бурмистрова Александра сколько - то там месяцев назад. Ничего нового, чего-то там записать в независимый РС несколькими ФЗ. При имеющейся архитектуре 1С да и перечню решаемых задач (ну рассчитайте себестоимость в несколько потоков!) многопоточность пока неактуальна!
dark_wolf; comol; newgluk; Gilev.Vyacheslav; spezc; SuhoffGV; +6 Ответить
45. avto1c 05.08.15 13:59 Сейчас в теме
(6) DoctorRoza, не актуальна пока вы не группа компаний по 20 - 50 пользователей в каждой. В противном случае появляются задачи для которых есть возможность и необходимость распараллеливания вычислений.
11. Jen1978 19 22.06.15 12:44 Сейчас в теме
Многопоточность можно применять по-разному, кто мешает к примеру запустить несколько потоков с разными функциями, которые к примеру получают разные данные из базы. На выходе, получим почти одновременно выполненные запросы и таблицы с ответами.
Пришлось как-то изучить Java. Только самые азы. Так вот там все построено на многопоточности.
12. genayo 22.06.15 20:09 Сейчас в теме
(6 Более того, я например сейчас работаю со специализированной конфой, написанной где-то в 2011 - 2012 году, где эта технология применяется в полный рост...
13. amon_ra 19 23.06.15 10:17 Сейчас в теме
А если взять в расчет файловую базу, то там как многопоточность организовывать? Через обработчик ожидания? Серверными все, конечно, понятно, а вот как обстоит дело с файловыми? Кто-нибудь пробовал?
14. starik-2005 2214 23.06.15 12:55 Сейчас в теме
(13) amon_ra, вряд ли при чтении из файловой базы удастся добиться ускорения при многопоточности, т.к. все упрется в клиентскую машину (ОС, диски, ядра, ...). Если ядер много, то что-то вычислить на встроенном языке без обращения к БД будет быстрее, но для этого уже механизм фоновых заданий вряд ли подойдет.
15. vde69 913 24.06.15 08:08 Сейчас в теме
вот тут обсуждал многопоточность http://www.forum.mista.ru/topic.php?id=743705
там даже с примером обратной связи от всех потоков....
16. starik-2005 2214 24.06.15 11:44 Сейчас в теме
(15) vde69, связи потоков и управляющей процедуры реализуются через метод "Сообщить" в ФЗ и функцию чтения сообщений у текущего потока. В описании схемы я как раз указал, что ФЗ может передавать данные управляющей процедуре, но в мат.модель и код я этого не добавил. Могу исправить и опубликовать статью о том, как это сделать (типа "прогресс-бар для мультипоточных вычислений") ))
17. dusha0020 929 24.06.15 12:12 Сейчас в теме
Мне интереснее не сама многопоточность на фоновых заданиях, а механизмы обратной связи от потоков, или если хотите способы как сделать многопоточными не процедуры, а функции. Возврат через ВременноеХранилище не проходит. Что остается? ВременныйФайл, СообщениеПользователю, специальный регистр сведений. Может есть у автора более простые и красивые решения?
18. starik-2005 2214 24.06.15 13:27 Сейчас в теме
(17) dusha0020, все зависит от того, что Вы собираетесь с этим делать. "В оригинале" для синхронизации многопоточных вычислений применяются блокировки (mutex), позволяющие собирать результаты функций в некотором узле. Вопрос только в том, что далать с результатами. Если писать в регистр -то проще делать это сразу в потоке, если использовать для последующих вычислений, то, в принципе, для не сильно объемных данных писать через "Сообщить(ЗначениеВСтрокуВнутр(Результат))" в ФЗ, откуда уже разворачивать через "Для каждого Сообщение ИЗ ФЗ.ПолучитьСообщения() Цикл массивРезультатов.Добавить(ЗначениеИЗСтрокиВнутр(Сообщение.Текст)) КонецЦикла". В принципе, это уже тема для новой статьи - могу написать с примерами.
22. dusha0020 929 24.06.15 16:04 Сейчас в теме
(18) Про писать в регистр и чтение сообщений ФЗ я знаю:) Интересовался более изящными способами в контексте 1С.
23. starik-2005 2214 24.06.15 16:41 Сейчас в теме
(22) dusha0020, а чем способ с сообщениями ФЗ не понравился? Вы до конца дочитали?
33. dusha0020 929 25.06.15 08:45 Сейчас в теме
(23) Дочитал до конца, но давайте подумаем о практической пользе многопоточности. Например, если я выделяю некие промежуточные расчеты и собираю промежуточные результаты в параллельных потоках. Если промежуточный результат не велик и не сложен, то для большого объема вычислений нужно создать сотни и тысячи фоновых заданий, получить результаты и собрать их вместе. А параллельность выражается не количеством потоков, а количеством процессоров, то есть от такого деления реальной пользы будет не много за вычетом накладных расходов по сборке - разборке заданий и результатов.
Мне кажется правильнее делить задачу на 6-10 больших фрагментов и получать результаты большими порциями. Обработка 6-10 фрагментов в одном потоке, это, согласитесь, не обработка тысяч мелких ответов. Но вот в состоянии ли ЗначениеВСтроку() перенести ТЗ из 50 000 строк и 10-12 колонок числовых данных?
34. starik-2005 2214 25.06.15 09:19 Сейчас в теме
(33) dusha0020, не совсем верно. хотя тоже имеет право на существование. Накладные расходы на создание потока в принципе существенны, и при пустом цикле от 1 до даже 1000000 ощутимой разницы не будет, но при проведении документов, если регистры заполняются таким образом, что исключаются взаимоблокировки (читайте "библию 1С" - там об этом подробно написано, да и вообще в литературе по разработке приложений, использующих СУБД все это есть), выигрыш от мультипоточности весьма велик. Для нас оптимальным было 30-50 документов и 8-12 потоков. Средняя скорость проведения документа было примерно 0,1 сек против 0,9-1,1 секунды в один поток.
39. engineer74 27.07.15 21:09 Сейчас в теме
(18) Да с примерами интересна тема "способ с сообщениями ФЗ"
40. starik-2005 2214 28.07.15 22:48 Сейчас в теме
(39) engineer74, да, можно писать через сообщить(текст) в ФЗ. Если ща последнюю минуту не было сообщений - ФЗ зависло. У нас так ФЗ в регистр пишет, если время определенное прошло - система убивает задание и стартует новое, после чего чистит регистр от старого задания и размещает там информацию о новом. При старте ФЗ ему передается ключ, по которому оно себя в регистре ищет.

Кстати, ФЗ может иногда отваливаться - вместе с убиваемым менеджером кластера rphost'ом. У нас так печать работает в 5 потоков на Linux-сервера печати на базе CUPS. Т.к. они постоянно вылетали, и до включения полнейшего лога сервака мы не понимали, почему. В итоге сделали регистр, куда клались данные, отсортированные по потокам, и каждые 10 минут запускали задание, которое проверяло, есть ли фоновые задания с определенным именем. Если нет, и в регистре не пусто - запускало по новой и отправляло письмо админам. В итоге нашли проблему - одновременное подключение внешней компоненты печати ШК. Обернули в "мутекс" - все стало стабильно. Как-то отключили "допечатывание" - 2 недели проработало без этого - даже не заметили. Ни одно задание не отвалилось, ни один rphost не умер.
engineer74; +1 Ответить
48. DarkAn 960 29.05.17 13:37 Сейчас в теме
(17) Если вопрос об обмене данных еще актуален - http://infostart.ru/public/626117/
19. spezc 678 24.06.15 14:42 Сейчас в теме
многопоточность в 1С это и есть сферический конь в вакууме. в отдельной взятой высосанной из пальца задаче вы его сможете применить, но не более того.
20. starik-2005 2214 24.06.15 14:52 Сейчас в теме
(19) spezc, обоснуйте свою позицию. У нас в организации многопоточность применяется от пакетного формирования печатных форм механизма автоматической печати и до обмена данными. Везде это приводит к весьма существенному улучшению производительности. Например, формирование печатных форм вместо трех часов занимает 50 минут (при пяти потоках).
21. karapuzzzz 63 24.06.15 15:50 Сейчас в теме
Это мой пример контроля помеченных на удаление с получением результата. Этот пример отработает не быстрее штатного т.к. функция "НайтиПоСсылкам()" и так многопоточная. Остальную часть этой обработки я так и не доделал. Ожидал, что прироста на поиске я не получу, а вот на удалении большого количества должен.
Если Многопоточность Тогда
		ЧислоСтрокВТаблице = Результат.Количество();
		// объем порции данных для обработки каждым потоком
		РазмерПорции = Цел(ЧислоСтрокВТаблице/ЧислоПотоков);
		// массив, где будут храниться фоновые задания
		МассивЗаданий = Новый Массив;
		МассивАдресовВХранилище = Новый Массив;
		Для НомерПотока = 1 По ЧислоПотоков Цикл
			// определяем индекс для начала обработки данных данным потоком
			// разные потоки обрабатывают разные части таблицы
			ИндексНачала = (НомерПотока - 1)*РазмерПорции;
			Если (НомерПотока = ЧислоПотоков) Тогда
				// если это последний поток, то он обрабатывает все оставшиеся данные
				// т.к. число потоков может не быть кратно количеству строк в таблице
				РазмерПорции = ЧислоСтрокВТаблице-(ЧислоПотоков*РазмерПорции)+РазмерПорции-1;
			КонецЕсли;
			МассивЗадания = Новый Массив;
			АдресВХранилище = ПоместитьВоВременноеХранилище(Неопределено);
			Для Счетчик = ИндексНачала По ИндексНачала+РазмерПорции Цикл
				МассивЗадания.Добавить(Результат[Счетчик])
			КонецЦикла; 
			// определяем массив параметров для процедуры
			НаборПараметров = Новый Массив;
			НаборПараметров.Добавить(МассивЗадания);
			НаборПараметров.Добавить(ИндексНачала);
			НаборПараметров.Добавить(РазмерПорции);
			НаборПараметров.Добавить(АдресВХранилище);
			// запуск фонового задания
			Задание = ФоновыеЗадания.Выполнить("МодульРегламентныхЗаданий.ПолучитьТаблицуНайденных", НаборПараметров);
			// добавляем задание в массив, чтобы потом отследить выполнение
			МассивЗаданий.Добавить(Задание);
			МассивАдресовВХранилище.Добавить(АдресВХранилище);
		КонецЦикла;
		// проверим результат выполнения фоновых заданий
		Если МассивЗаданий.Количество() > 0 Тогда
			Попытка
				ФоновыеЗадания.ОжидатьЗавершения(МассивЗаданий);
			Исключение
				Предупреждение("Ошибка поиска ссылок");
			КонецПопытки;
		КонецЕсли;
		
		ВсеНайденные = Новый ТаблицаЗначений;
		Для каждого ТекАдресВХранилище Из МассивАдресовВХранилище Цикл
			
			ТекТаблица = ПолучитьИзВременногоХранилища(ТекАдресВХранилище);
			Если ВсеНайденные.Колонки.Количество()=0 Тогда
				ВсеНайденные = ТекТаблица.СкопироватьКолонки();
			КонецЕсли; 
			
			Для Каждого ТекСтрокаДанные Из ТекТаблица Цикл
				НоваяСтрока = ВсеНайденные.Добавить();
				ЗаполнитьЗначенияСвойств(НоваяСтрока,ТекСтрокаДанные);
			КонецЦикла;
			
		КонецЦикла; 
	Иначе
		ВсеНайденные = НайтиПоСсылкам(Результат);
	КонецЕсли;
Показать

И общий модуль:
Процедура ПолучитьТаблицуНайденных(Результат, ИндексНачала, РазмерПорции, АдресВХранилище) Экспорт
	ВсеНайденные = НайтиПоСсылкам(Результат);
	ПоместитьВоВременноеХранилище(ВсеНайденные, АдресВХранилище);
КонецПроцедуры
24. rtnm 598 24.06.15 22:59 Сейчас в теме
Управляющая функция жестко зациклена - не стоит демонстрировать такой код.
25. starik-2005 2214 24.06.15 23:00 Сейчас в теме
(24) rtnm, да что Ви говорите ))) Не стоит писать то, в чем Ви не понимаете )))
27. starik-2005 2214 24.06.15 23:22 Сейчас в теме
(25) для тех, кто все же не понял, как мы выходим из цикла, на всякий случай внес комментарии в код. Г-н rtnm, будучи хорошим специалистом, совершенно верно подметил, что цикл так просто не кончается. Но, слава Богу, есть программисты и получше. В данном конкретном случае цикл завершается оператором "прервать" после удаления первого отработавшего задания из массива фоновых заданий. После этого количество заданий будет больше, чем количество элементов массива, что приведет к выходу и из второго цикла.
Есть другой путь - процедура ОжиданиеЗавершения(массивФЗ). Но тогда мы теряем асинхронность. Мы запустили 10 заданий, они могут выполняться разное время, но ожидая завершения всех заданий мы теряем в производительности. надеюсь, теперь всем все понятно.
28. rtnm 598 24.06.15 23:31 Сейчас в теме
(27) вообще, речь о том, что код управляющей процедуры зря тратит процессорное время, гоняя свой цикл без устали.
Если управляющая функция находится на клиенте, то стоит присмотреться к ПодключитьОбработчикОжидания, а если на сервере (это ваш случай), то к ФоновыеЗадания.ОжидатьЗавершения с выставленным таймаутом
29. starik-2005 2214 24.06.15 23:35 Сейчас в теме
(28) rtnm, ну минусы-то Вы сильны ставить, а вот разобраться с проблемой не хотите, получается. Вот Вам ссылка:
http://www.forum.mista.ru/topic.php?id=626984
// Старый добрый WaitForMultipleObjects() в исполнении 1С вышел не айс. //

Вот такие "добрые дяди" с ожиданием завершения и удивляются, почему это эффективность маловата. Стоит также иметь ввиду, что получение фонового задания ждет ответа от сервера - в это время никаких инструкций не выполняется.
30. rtnm 598 24.06.15 23:45 Сейчас в теме
(29) минус вам за ваш слог в комментариях. Если бы вы в статье написали, что ФоновыеЗадания.ОжидатьЗавершения (с указанным таймаутом) работает как-то не очень, то моих комментариев вы бы и не увидели. По существу, вы проверяли что ФоновыеЗадания.ОжидатьЗавершения (с указанным таймаутом) сейчас работает как-то не очень?
31. starik-2005 2214 24.06.15 23:54 Сейчас в теме
(30) rtnm, во-первых, какое задание мы ожидаем? Все? Если все, то может так оказаться, что одно из заданий будет работать в 2 раза дольше, чем остальные. В итоге мы теряем вычислительные ресурсы сервера. И в 8.2. действительно до сих пор наблюдаются проблемы с работой ожидания завершения.
Во-вторых, использование бесконечного цикла не является моветоном в программировании. Читайте тут: https://ru.wikipedia.org/wiki/%D0%91%D0%B5%D1%81%D0%BA%D0%BE%D0%BD%D0%B5%D1%87%D0­%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB

/////////////////
Роль бесконечных циклов в Тьюринг-полноте языков[править | править вики-текст]
Любой цикл можно представить как бесконечный цикл, в теле которого есть проверка условия выхода и команда выхода из цикла.

Любая программа может быть написана при помощи:

бесконечных циклов;
команд выхода из цикла;
операторов ветвления (if-then);
последовательностью команд, исполняемых одна после другой;
Примечание: обратите внимание, что универсальный оператор GOTO (безусловный переход) не нужен, а достаточно специального оператора выхода из цикла, при этом, в случае n вложенных циклов потребуется n специальных операторов выхода из цикла (кроме небольшого количества языков с расширенным синтаксисом операторов выхода) или один оператор GOTO и одна метка.
/////////////////////////////

rtnm. учите мат.часть - это очень полезно. И запомните, если Вас всегда хвалят и всегда с Вами согласны - вы не развиваетесь. Я объективную развернутую критику крайне приветствую, но Ваше "Управляющая функция жестко зациклена - не стоит демонстрировать такой код." просто показывает, что в программировании, увы, Вы ничего не смыслите. Уж извините, но как есть.
26. starik-2005 2214 24.06.15 23:14 Сейчас в теме
(24) rtnm, уважаемый, я, конечно, понимаю, что не все специалисты - хорошие. Но не стоит свои личные проблемы понимания чужого кода принимать близко к сердцу. Будьте проще и люди к Вам потянутся (с) )))
32. rtnm 598 25.06.15 00:12 Сейчас в теме
Спасибо огромное, теперь то я все понял!!!
35. engineer74 26.07.15 19:38 Сейчас в теме
мне надо многопотоковость для загрузки данных из удаленныхточек
36. starik-2005 2214 26.07.15 21:11 Сейчас в теме
(35) engineer74, а в чем проблема?
37. engineer74 26.07.15 21:58 Сейчас в теме
(36) Может,уже обсуждали, Если фоновое задание зависло - как идентифицировать зависшее задание?
38. starik-2005 2214 27.07.15 10:55 Сейчас в теме
(37) engineer74, ну тут множество разных способов. Но важно выяснить, почему зависает задание. Причин тоже множество:
- запуск внешнего приложения - ФЗ будет ждать, пока оно завершит работу.
- запрос - ФЗ будет ждать, пока возвратятся данные.
- COM-объект - ФЗ будет ждать ответа.
- 1С тоже может повесить задание, но я таких примеров не встречал.
engineer74; +1 Ответить
41. KroVladS 33 05.08.15 08:56 Сейчас в теме
(0)
тема на инфостарте 2013г http://infostart.ru/public/182139/
книга знаний на мисте 2008г http://kb.mista.ru/article.php?id=696

а вообще очень полезная вещь, если кому то поможет пусть лучше дубли будут.
43. starik-2005 2214 05.08.15 11:58 Сейчас в теме
(41) KroVladS, да, о многопоточности пока не очень много статей. Так что новыми статьями в принципе продвигаем технологию, актуализируя "бренд" ))) Много - не мало!
44. starik-2005 2214 05.08.15 12:05 Сейчас в теме
(41) KroVladS, в принципе, отличие этой статьи в том, что здесь описывается технология скармливания пакетов с балансировкой нагрузки. Т.е. функции получения данных и их обработки разделены. Данные получаются потоком, достигая некоторого предела передаются в фоновое задание для обработки, при этом количество ФЗ ограничено определенным значением. Другими словами, здесь выделен отдельно управляющий заданиями механизм. В следующей статьея рассматриваю технологию создания "мьютекса" - в конкретном варианте - механизма выделения блока монопольного исполнения (critical code)
46. alex_4x 81 14.08.15 09:33 Сейчас в теме
1С Сделали работу с потоками на "отъ-ись" Типа реализовано, а то что хреново и не работает - это уже мелочи.

Должно быть как в NET -
1. определил спектр видимости переменных (в каждом потоке свой экземплар, или указанные потоки работают с одними и теми же переменными)
2. определил функции или процедуры, которые будут запускаться
3. запустил параллельно процедуры, с возможностью передачи управления по исключению или если всё хорошо (continuous)
4. ожидаем завершения нужных процедур (не в цикле!!!)
47. starik-2005 2214 14.08.15 17:39 Сейчас в теме
(46) alex_4x, есть функция ОжидатьЗавершения, в качестве аргументов передается список фоновых заданий. Чем плохо? .NET на клиенте выполняет многопоточный код, а 1С на сервере. Реализация вполне нормальная, способы обмена данными с потоком в принципе реализуемы. остается уточнить, какую именно задачу Вы хотите решить, и из этой предметной позиции уже говорить о сильных и слабых сторонах реализации в той или иной системе.
49. triviumfan 24 06.09.19 17:17 Сейчас в теме
Сергей, не подскажете, а как получать процент выполнения задания или заданий в обычном приложении?
Куда обычно скидывают состояния? Отдельную таблицу создавать как-то некрасиво. Хранилище общий настроек?
50. triviumfan 24 07.09.19 11:05 Сейчас в теме
(49) Разобрался. У фонового задания есть метод "ПолучитьСообщенияПользователю()", который получает то, что можно сообщить с помощью объекта "СообщениеПользователю".
starik-2005; +1 Ответить
51. raev72ru 25.05.20 13:51 Сейчас в теме
// не помню, как получается задание, но как-то так - нет под рукой 1С - В смысле?
вы что с телефона запостили? Ехали в маршрутке и решили, а не запостить ка мне про 1с в инфостарт.. ? (не смотря на то что с памятью у вас сомнения!)
Это не серьезно, ради чего это было сделано?
Я лично после этого комментария потерял уровень серьезности намерений вложить вклад в развитие программистов ищущих решения, не хотелось бы чтобы вы были примером им. Если сможете то старайтесь!
52. starik-2005 2214 26.05.20 18:13 Сейчас в теме
(51)
Это не серьезно, ради чего это было сделано?
Я как Эйнштейн - не заучиваю физических констант. Все статьи пишу на основе опыта, но не гляжу в 1С.

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

Статья рассказывает о многопоточности, о принципах, а не дает код, который любой дурак скопирует куда-то, а потом будет гадать, почему же у него что-то не получилось. Статья излагает мат.часть, которую нужно прежде всего понять. И код получения фонового задания - это не тот код, который должен вызывать подобную реакцию, а то напрашивается мысль, а понял ли читатель вообще хоть что-то?
53. raev72ru 27.05.20 07:59 Сейчас в теме
(52) Какой интересный подход. Решение завернутое в дополнительный труд. Если к примеру скопировать можно было и вставить, за тем отладчиком понять что и как работает и по понятой модели написать свой код. То тут же нужно понять модель визуализируя результаты в уме. Интересный подход, время не экономит но развивает мышление. Ясно. Спасибо за пояснения.
54. starik-2005 2214 27.05.20 12:59 Сейчас в теме
(53)
Спасибо за пояснения.
Всегда пожалуйста.
Оставьте свое сообщение

См. также

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

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

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    35333    ids79    40    

Улучшенный конструктор запроса тонкого клиента (УИР)

Инструментарий разработчика Консоль запросов v8 1cv8.cf Бесплатно (free)

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

07.09.2020    2894    Evg-Lylyk    13    

Пробуем Снегопат (устанавливаем и настраиваем полнофункциональную триальную версию)

Снегопат, openconf v8 Бесплатно (free)

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

31.08.2020    8823    kuntashov    63    

paste1c.ru - сервис для обмена кодом для 1С:Предприятия

Прочие инструменты разработчика v8 Бесплатно (free)

Paste1C.ru - сервис для обмена кодом для 1С:Предприятия c подсветкой синтаксиса и подсказками.

21.08.2020    5776    salexdv    48    

Легкий способ обновления измененной конфигурации Промо

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

Легкий способ обновления измененной конфигурации. Сервис подготовки расширения конфигурации

25.10.2017    23620    avk72    63    

1С:EDT. Куда пинать, чтобы полетело?

EDT v8 УНФ Россия Бесплатно (free)

Работал в 1С Конфигуратор и решил перейти на 1С EDT. Не получилось сразу. Потребовалась модификация компьютера.

19.08.2020    4599    pa240775    33    

Снегопат – Dev или Ops?

Снегопат, openconf v8 Бесплатно (free)

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

17.08.2020    4825    orefkov    44    

Динамический список, ключи записей. Нюансы

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

Заметки об особенностях динамических списков с произвольным запросом и видом ключа, отличным от "Авто"

07.08.2020    1782    Yashazz    4    

Перевод интерфейса конфигурации с использованием программы 1С:Переводчик Промо

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

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

09.02.2015    33262    boogie    21    

Редактор HTML

Инструментарий разработчика Прочие инструменты разработчика v8 1cv8.cf Россия Бесплатно (free)

Инструмент из состава набора "Универсальные инструменты 1С" для быстрой адаптации html страниц для корректного отображения в Поле HTML документа

03.08.2020    1307    cprit    3    

Глобальное меню разработчика для управляемых форм

Инструментарий разработчика v8 v8::УФ 1cv8.cf Бесплатно (free)

Подсистема "Инструменты разработчика". Глобальное контекстное меню разработчика для управляемых форм в толстом клиенте.

03.08.2020    3441    tormozit    14    

Консоль кода и зачем она нужна

Прочие инструменты разработчика v8 Бесплатно (free)

Когда использовать, обзор консолей кода: плюсы - минусы.

27.07.2020    4524    Evg-Lylyk    47    

Будни автоматизации или "мне нужна программка для 3D упаковки" Промо

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

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

24.03.2014    45411    ildarovich    116    

Unit-тесты с помощью 1C:Enterprise Development Tools

EDT v8 Бесплатно (free)

Концепция TDD требует перестроения подходов к разработке и наличия инструментов для запуска Unit-тестов. Про написание плагина для EDT, который содержит в себе инструменты написания, анализа результатов и запуска Unit-тестов для конфигураций 1С на конференции Infostart Event 2019 Inception рассказал ведущий специалист по внедрению компании 1С-Рарус Александр Капралов.

11.06.2020    4045    doublesun    7    

Шпаргалка. Автоматическое тестирование внешних отчетов и обработок в нескольких информационных базах

Прочие инструменты разработчика v8 Бесплатно (free)

Используем Автоматизированное тестирование на практике. Простой код для обновления и запуска внешних отчетов и обработок в нескольких ИБ. Создаем рабочее решение с нуля.

02.05.2020    4461    pparshin    21    

Партионный учет по двум количественным показателям

Математика и алгоритмы Учет ТМЦ v8 1cv8.cf Оптовая торговля, дистрибуция, логистика Россия УУ Бесплатно (free)

Особенности учета партионной системы при наличии двух количественных показателей.

26.03.2020    3446    lastcontra    4    

Приемы обработки больших данных в 1С Промо

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

Рассказ об эффективных приемах организации обработок больших объемов данных на платформе 1С

07.08.2015    67479    tormozit    27    

Treemapping — способ визуализации данных древовидной структуры. Карта-схема дерева

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

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

18.02.2020    4941    randomus    20    

EDT + УТ 11.4 + БП 3.0 + Расширения. ЧАСТЬ 03

EDT v8 Бесплатно (free)

Групповая разработка в EDT.

21.01.2020    4424    YuriYuriev    3    

EDT + УТ 11.4 + БП 3.0 + Расширения. Часть 02

EDT v8 Бесплатно (free)

Продолжение "путевых заметок" про EDT...

09.01.2020    6301    YuriYuriev    31    

Сервис обмена кодом Промо

Инструментарий разработчика v8 1cv8.cf Бесплатно (free)

Бывало так, что вам нужно быстро показать кому-то свой код, но опубликовать его негде, так как популярные сервисы просто не поддерживают раскраску кода 1С? Теперь решение есть!

26.06.2015    20509    Infactum    23    

[После]Новогодние задачи

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

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

30.12.2019    3086    Alxby    23    

EDT + УТ 11.4 + БП 3.0 + Расширения. ЧАСТЬ 01

EDT v8 Бесплатно (free)

...продолжаем мучить(ся с) EDT

28.12.2019    6647    YuriYuriev    8    

EDT 1.16. Первые 20 часов работы

EDT v8 Россия Бесплатно (free)

Первое знакомство с 1C:Enterprise Development Tools, версия 1.16.0.363.

25.12.2019    10838    YuriYuriev    13    

XDTO - это просто Промо

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

С появлением платформы 8.1 фирма “1С” представила механизм, носящий интригующее название XML Data Transfer Objects или, если коротко - XDTO. По традиции, документирование механизма составлял тот, кто хорошо разбирался в вопросе, а стало быть опустил “и так понятные” с его точки зрения моменты. Целью данной статьи (или цикла статей, как получится) стало желание поделиться накопленным опытом. Мне кажется, многие неочевидные вещи в механизме XDTO необходимо осветить получше.

24.12.2012    296835    Evil Beaver    173    

Мониторим производительность с помощью 1С RAS

Инструментарий разработчика Производительность и оптимизация (HighLoad) v8 1cv8.cf Бесплатно (free)

Подключаемся и анализируем данные через 1С RAS. Необходимо выполнить 5 пунктов и серьезный инструмент мониторинга будет у вас в руках.

19.12.2019    11728    ivanov660    16    

Разбор любого JSON-объекта в соответствующую структуру

Инструментарий разработчика WEB v8 1cv8.cf Бесплатно (free)

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

13.11.2019    9737    user665435_al.windstorm    15    

Git для 1С-ника и другие технологии групповой разработки

Инструментарий разработчика Git (GitHub, GitLab, BitBucket) v8 1cv8.cf Россия Бесплатно (free)

У многих специалистов в отношении Git сложились стереотипы, мешающие начать работу с этим прекрасным и удобным инструментом. Почему его не стоит бояться, и чем он может упростить жизнь 1С-никам, рассказал архитектор ГК «Невада» Станислав Ганиев.

28.10.2019    12885    stas_ganiev    16    

1C:Enterprise Development tools (EDT) или кодим в Eclipse Промо

EDT v8 Бесплатно (free)

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

11.04.2015    77358    DitriX    297    

Про ТабДок или TabDoc Pro

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

Табличный документ – всем знакомый и привычный компонент продукта 1С. Про оптимизацию работы табличного документа, его проблемы и недостатки в своем докладе на конференции Infostart Event 2019 Education рассказал ведущий программист BIA-Technologies Князьков Алексей.

11.09.2019    6642    AKnyazkov    26    

FastCode - сервис шаблонов кода 1С

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

Удобный поиск по базе шаблонов кода, БСП, ответы на вопросы, помощь сообщества программистов 1С. Клиент для поиска прямо в Конфигураторе!

10.09.2019    10271    m.bolsun    23    

Регистры бухгалтерии. Общая информация

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

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    29405    YPermitin    24    

TurboConf:Шаблоны - сервис для поиска и хранения фрагментов кода Промо

Инструментарий разработчика v8 1cv8.cf Бесплатно (free)

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

13.08.2014    22534    m.bolsun    68    

"Хочу универсально!" [Часть 1]

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

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

02.09.2019    9901    SeiOkami    35    

Как мы разрабатываем в EDT

EDT Инструментарий разработчика v8 Бесплатно (free)

EDT – это новая среда разработки, на которую сейчас перешли разработчики фирмы «1С». Однако до сих пор существует ряд «белых пятен», касающихся как теоретической, так и практической части применения этого инструмента. Про опыт перехода на разработку в EDT на конференции INFOSTART EVENT 2018 EDUCATION рассказал начальник сектора разработки в компании «Группа Полипластик» Владимир Крючков.

23.08.2019    12657    ivanov660    24    

Иерархия без "В ИЕРАРХИИ"

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

Говорится о том, как эффективно представлять иерархию в СУБД, как получать и использовать эти представления при решении задач в запросной технике. Уточняются и дополняются запросы из статьи "Уровни, глубина, прародители, циклы и аналоги запросом" [https://infostart.ru/public/160707/].

22.08.2019    12561    ildarovich    19    

Самоучитель языка запросов 1С. Промо

Практика программирования Решение задач на 1С:Специалист Математика и алгоритмы v8 v8::Запросы Бесплатно (free)

Сервис для изучения запросов 1С: "Консоль изучения запросов 1С:Предприятие 8". Теперь и с конструктором запросов!

07.05.2013    110435    bpc222    327    

EnterpriseData – часть 3. Загрузка данных, идентификация объектов

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

Основные этапы загрузки данных через EnterpriseData. Идентификация объектов загружаемых полностью и по ссылке. Приведены схемы процессов загрузки данных. Описание основных операций и обработчиков. Перечень процедур БСП, используемых при загрузке данных, структура «КомпонентыОбмена».

22.08.2019    15236    ids79    8    

Быстрый ввод кода

Инструментарий разработчика v8 1cv8.cf Бесплатно (free)

Упрощение рутинного ввода кода.

19.08.2019    4726    ranis888    13    

1С:EDT. Первые шаги… или есть ли альтернатива конфигуратору?

EDT v8 Бесплатно (free)

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

15.08.2019    24889    ellavs    108    

Решение транспортной задачи запросом Промо

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

Списание по двум последовательностям партий запросом (без программной обработки)

1 стартмани

30.04.2014    35141    bforce    22    

Подходы, методы и инструменты UX/UI для разработки эффективных интерфейсов на 1С

Работа с интерфейсом Инструментарий разработчика v8 Бесплатно (free)

Интерфейсам в 1С обычно уделяют мало внимания. Это в итоге снижает востребованность платформы, делает ее неконкурентной, лишает большой доли рынка. Как не потерять старых клиентов и привлекать новых с помощью интерфейсов, а главное – как сделать «правильный» интерфейс, рассказал участникам конференции Infostart Event 2018 Education управляющий партнер и основатель консалтинговой группы WiseAdvice Иван Тягунов.

07.08.2019    11284    IvanAT1981    15    

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

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

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

25.07.2019    54385    AlbinaAAA    28    

FizzBuzz на 1С. Чем короче, тем веселее. Варианты принимаются...

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

Мне было скучно, я не мог себя заставить написать ничего полезного. И читал статью на Хабре. Потом я читал комментарии, а потом... нет я не ушел смотреть котиков на ютюбе. Я решил сделать несколько решений задачки FizzBuzz на 1С, с целью "чем короче, тем лучше". Прошу сильно не пинать, это просто развлечение для вечера.

24.07.2019    5480    vandalsvq    16    

Подсистема "COMExchange": консоль запросов в режиме «Консоль кода». Промо

Консоль запросов v8 1cv8.cf Россия Бесплатно (free)

Описана возможность использования обработки «Консоль запросов 1С+ADO» в качестве «консоли кода». При этом имеется возможность помещения результатов вычислений в «табло формул». Кроме результатов вычислений в это «табло» можно также вывести время выполнения и описание обработанных ошибок времени исполнения.

03.04.2014    26072    yuraos    2    

Управление качеством кода

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

О SonarQube, АПК, EDT. Какие преимущества дает их использование. Для каких команд подходит.

22.07.2019    16684    Stepa86    33    

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

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

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

17.07.2019    36628    ids79    27    

Что делает "В ИЕРАРХИИ" в запросе?

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

Описание действий платформы 1С при использовании конструкции "В ИЕРАРХИИ" в запросах.

16.07.2019    27706    YPermitin    34    

Парсер запросов 1С. Часть 1: Введение, разбор математических выражений Промо

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

Рано или поздно становится скучно решать типичные задачи, для которых придумана 1С. Голова пухнет от бухгалтерских терминов и очередных "хотелок" пользователей. Именно в такие моменты хочется гордо поднять голову, воскликнуть "Но я же программист!" и заняться чем-то интересным. В цикле статей я постараюсь доступно описать, как устроены парсеры в целом и на примере парсера языка запросов 1С. Требования к навыкам читающего: основы языка 1С, основы алгоритмизации.

1 стартмани

04.12.2013    30763    juntatalor    49    

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

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

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

25.06.2019    54143    ids79    25    

Реализуем Стек, Очередь и Приоритетную очередь в 1С

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

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

24.06.2019    14300    RonX01    65    

Организация хранения промежуточных данных

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

Организация хранения промежуточных данных в процедуре сверки.

29.05.2019    4236    scientes    1    

Вычисление 200 тысяч знаков числа pi

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

В статье рассматриваются возможности платформы выполнять сверхточные вычисления без использования сложных алгоритмов и внешних компонент на примере вычисления числа pi.

28.05.2019    8013    Oleg_nsk    96