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

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

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

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

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

Пролог.

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

В реальной жизни существует масса задач, скорость выполнения которых обратно пропорциональна количеству процессов (если их не больше количества ядер). Операции ввода-вывод, кстати, используют задержки, которые могут утилизироваться многопоточностью.
8. insurgut 197 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 2524 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 12 22.06.15 07:55 Сейчас в теме
Посмотрел код, получается, если массив заданий заполнен -ищем первое отработавшее задание и удаляем его из списка. Если же таких отработанных заданий в массиве будет несколько, то на мой взгляд будет оптимальнее их сразу все удалить, тогда для следующей порции данных уже не надо будет пробегать по массиву и искать неактивное задание (т. е предлагаю убрать оператор "Прервать")
5. WKBAPKA 227 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 23 23.06.15 10:17 Сейчас в теме
А если взять в расчет файловую базу, то там как многопоточность организовывать? Через обработчик ожидания? Серверными все, конечно, понятно, а вот как обстоит дело с файловыми? Кто-нибудь пробовал?
14. starik-2005 2524 23.06.15 12:55 Сейчас в теме
(13) amon_ra, вряд ли при чтении из файловой базы удастся добиться ускорения при многопоточности, т.к. все упрется в клиентскую машину (ОС, диски, ядра, ...). Если ядер много, то что-то вычислить на встроенном языке без обращения к БД будет быстрее, но для этого уже механизм фоновых заданий вряд ли подойдет.
15. vde69 919 24.06.15 08:08 Сейчас в теме
вот тут обсуждал многопоточность http://www.forum.mista.ru/topic.php?id=743705
там даже с примером обратной связи от всех потоков....
16. starik-2005 2524 24.06.15 11:44 Сейчас в теме
(15) vde69, связи потоков и управляющей процедуры реализуются через метод "Сообщить" в ФЗ и функцию чтения сообщений у текущего потока. В описании схемы я как раз указал, что ФЗ может передавать данные управляющей процедуре, но в мат.модель и код я этого не добавил. Могу исправить и опубликовать статью о том, как это сделать (типа "прогресс-бар для мультипоточных вычислений") ))
17. dusha0020 1030 24.06.15 12:12 Сейчас в теме
Мне интереснее не сама многопоточность на фоновых заданиях, а механизмы обратной связи от потоков, или если хотите способы как сделать многопоточными не процедуры, а функции. Возврат через ВременноеХранилище не проходит. Что остается? ВременныйФайл, СообщениеПользователю, специальный регистр сведений. Может есть у автора более простые и красивые решения?
18. starik-2005 2524 24.06.15 13:27 Сейчас в теме
(17) dusha0020, все зависит от того, что Вы собираетесь с этим делать. "В оригинале" для синхронизации многопоточных вычислений применяются блокировки (mutex), позволяющие собирать результаты функций в некотором узле. Вопрос только в том, что далать с результатами. Если писать в регистр -то проще делать это сразу в потоке, если использовать для последующих вычислений, то, в принципе, для не сильно объемных данных писать через "Сообщить(ЗначениеВСтрокуВнутр(Результат))" в ФЗ, откуда уже разворачивать через "Для каждого Сообщение ИЗ ФЗ.ПолучитьСообщения() Цикл массивРезультатов.Добавить(ЗначениеИЗСтрокиВнутр(Сообщение.Текст)) КонецЦикла". В принципе, это уже тема для новой статьи - могу написать с примерами.
22. dusha0020 1030 24.06.15 16:04 Сейчас в теме
(18) Про писать в регистр и чтение сообщений ФЗ я знаю:) Интересовался более изящными способами в контексте 1С.
23. starik-2005 2524 24.06.15 16:41 Сейчас в теме
(22) dusha0020, а чем способ с сообщениями ФЗ не понравился? Вы до конца дочитали?
33. dusha0020 1030 25.06.15 08:45 Сейчас в теме
(23) Дочитал до конца, но давайте подумаем о практической пользе многопоточности. Например, если я выделяю некие промежуточные расчеты и собираю промежуточные результаты в параллельных потоках. Если промежуточный результат не велик и не сложен, то для большого объема вычислений нужно создать сотни и тысячи фоновых заданий, получить результаты и собрать их вместе. А параллельность выражается не количеством потоков, а количеством процессоров, то есть от такого деления реальной пользы будет не много за вычетом накладных расходов по сборке - разборке заданий и результатов.
Мне кажется правильнее делить задачу на 6-10 больших фрагментов и получать результаты большими порциями. Обработка 6-10 фрагментов в одном потоке, это, согласитесь, не обработка тысяч мелких ответов. Но вот в состоянии ли ЗначениеВСтроку() перенести ТЗ из 50 000 строк и 10-12 колонок числовых данных?
34. starik-2005 2524 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 2524 28.07.15 22:48 Сейчас в теме
(39) engineer74, да, можно писать через сообщить(текст) в ФЗ. Если ща последнюю минуту не было сообщений - ФЗ зависло. У нас так ФЗ в регистр пишет, если время определенное прошло - система убивает задание и стартует новое, после чего чистит регистр от старого задания и размещает там информацию о новом. При старте ФЗ ему передается ключ, по которому оно себя в регистре ищет.

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

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

Вот такие "добрые дяди" с ожиданием завершения и удивляются, почему это эффективность маловата. Стоит также иметь ввиду, что получение фонового задания ждет ответа от сервера - в это время никаких инструкций не выполняется.
30. rtnm 603 24.06.15 23:45 Сейчас в теме
(29) минус вам за ваш слог в комментариях. Если бы вы в статье написали, что ФоновыеЗадания.ОжидатьЗавершения (с указанным таймаутом) работает как-то не очень, то моих комментариев вы бы и не увидели. По существу, вы проверяли что ФоновыеЗадания.ОжидатьЗавершения (с указанным таймаутом) сейчас работает как-то не очень?
31. starik-2005 2524 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 2524 24.06.15 23:14 Сейчас в теме
(24) rtnm, уважаемый, я, конечно, понимаю, что не все специалисты - хорошие. Но не стоит свои личные проблемы понимания чужого кода принимать близко к сердцу. Будьте проще и люди к Вам потянутся (с) )))
32. rtnm 603 25.06.15 00:12 Сейчас в теме
Спасибо огромное, теперь то я все понял!!!
35. engineer74 26.07.15 19:38 Сейчас в теме
мне надо многопотоковость для загрузки данных из удаленныхточек
36. starik-2005 2524 26.07.15 21:11 Сейчас в теме
(35) engineer74, а в чем проблема?
37. engineer74 26.07.15 21:58 Сейчас в теме
(36) Может,уже обсуждали, Если фоновое задание зависло - как идентифицировать зависшее задание?
38. starik-2005 2524 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 2524 05.08.15 11:58 Сейчас в теме
(41) KroVladS, да, о многопоточности пока не очень много статей. Так что новыми статьями в принципе продвигаем технологию, актуализируя "бренд" ))) Много - не мало!
44. starik-2005 2524 05.08.15 12:05 Сейчас в теме
(41) KroVladS, в принципе, отличие этой статьи в том, что здесь описывается технология скармливания пакетов с балансировкой нагрузки. Т.е. функции получения данных и их обработки разделены. Данные получаются потоком, достигая некоторого предела передаются в фоновое задание для обработки, при этом количество ФЗ ограничено определенным значением. Другими словами, здесь выделен отдельно управляющий заданиями механизм. В следующей статьея рассматриваю технологию создания "мьютекса" - в конкретном варианте - механизма выделения блока монопольного исполнения (critical code)
46. alex_4x 82 14.08.15 09:33 Сейчас в теме
1С Сделали работу с потоками на "отъ-ись" Типа реализовано, а то что хреново и не работает - это уже мелочи.

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

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

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

См. также

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

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

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

10.11.2018    45150    ids79    46    

Что за ? в коде, или Секретный оператор в 1С

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

Инкремент, модуль и прочая магия, которая скрыта под символом "?"

21.10.2021    8544    SeiOkami    41    

Механизм анализа данных. Кластеризация.

Математика и алгоритмы Анализ учета v8 v8::DataMining Бесплатно (free)

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

31.08.2021    2137    dusha0020    8    

Практическое применение операции копирования массива

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

Решение задачи https://projecteuler.net/problem=250 из Project Euler средствами 1C.

02.08.2021    974    scientes    2    

Как работает серверный вызов в 1С Промо

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

Клиент-серверная архитектура заложена в платформе изначально — со времен «1С:Предприятие 8.0». Однако при разработке на 8.0 и 8.1 о разделении кода на клиентскую и серверную часть можно было не заботиться, поскольку на клиенте (на толстом клиенте) был доступен тот же функционал, что и на сервере. Всё изменилось с выходом платформы «1С:Предприятие 8.2», когда появился тонкий клиент. Теперь на клиенте доступен один функционал, на сервере — другой. Клиент и сервер «общаются» между собой с помощью серверного вызова. Конечно, это усложнило процесс разработки, но с другой стороны – можно создавать более оптимальные (быстрые) решения, поскольку все сложные задачи выполняются на сервере.

18.11.2017    67732    pahich    84    

Запрос всей номенклатуры с характеристиками

Математика и алгоритмы v8 ERP2 УТ11 КА2 Бесплатно (free)

Сравнение различных вариантов запроса всей номенклатуры с характеристиками (УТ11.4, КА 2.4, ERP 2.4).

1 стартмани

30.07.2021    945    Daemonold    3    

Распределенные алгоритмы РИБ 1С

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

Небольшое исследование на тему применимости классических распределённых алгоритмов репликации и синхронизации данных между узлами обмена РИБ 1С.

02.07.2021    1273    zhichkin    1    

Чтоб в СКД по таблице значений был порядок!

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

Сортировка СКД и источник - таблица значений. Заметка.

28.06.2021    1383    Yashazz    0    

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

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

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

25.10.2017    24559    avk72    63    

Чем воспользоваться для распознавания котиков в 1С?

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

На митапе по инструментам для расширения возможностей 1С выступил Олег Филиппов. Он сравнил подходы Native API, COM, Docker и Serverless, и рассказал, как упростить использование в 1С алгоритмов, реализованных на других языках, с помощью облачной технологии «Функция как сервис».

12.04.2021    3468    comol    10    

Последний раз про срез последних (на каждую дату в запросе)

Инструментарий разработчика Консоль запросов Универсальные функции Практика программирования v8 v8::Запросы Бесплатно (free)

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

15.02.2021    11354    randomus    47    

Рекурсия для начинающих

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

Рассмотрен подход к пониманию рекурсий. Приведены примеры из реальной практики.

10.02.2021    2642    szv    5    

Универсальная функция для программного выполнения СКД Промо

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

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

20.05.2015    31877    dj_serega    18    

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

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

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

07.09.2020    6358    Evg-Lylyk    19    

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

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

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

07.08.2020    5416    Yashazz    6    

Редактор HTML

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

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

03.08.2020    3374    cprit    3    

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

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

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

09.02.2015    38841    boogie    21    

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

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

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

03.08.2020    5513    tormozit    26    

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

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

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

26.03.2020    4528    lastcontra    5    

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

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

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

28.02.2020    2557    real_MaxA    1    

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

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

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

24.03.2014    46837    ildarovich    117    

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

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

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

18.02.2020    6545    randomus    20    

Эволюция расширения конфигурации

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

С каждым днем всё больше возможностей появляется в расширении конфигурации, но не все до сих пор работают даже на платформе 8.3.6! Давайте окунемся в историю появления и эволюции расширения конфигурации, чтобы знать и понимать, когда можно применить тот или иной функционал!

06.02.2020    15593    Xershi    45    

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

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

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

30.12.2019    3424    Alxby    23    

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

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

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

07.08.2015    71417    tormozit    29    

Как работают управляемые формы и тонкий клиент 1С – взгляд "из-под капота"

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

Переход на управляемые формы перевернул процесс разработки на 1С, заставив программистов менять привычные подходы к описанию логики работы интерфейса. Руководитель компании «Цифровой Кот» Юрий Лазаренко в своем докладе на конференции Infostart Event 2019 Inception рассказал о том, как устроены управляемые формы и как правильно работать с тонким клиентом платформы 1С:Предприятие.

23.12.2019    17792    TitanLuchs    23    

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

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

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

19.12.2019    15521    ivanov660    49    

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

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

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

13.11.2019    19883    user665435_al.windstorm    15    

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

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

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

26.06.2015    20919    Infactum    23    

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

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

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

28.10.2019    14696    stas_ganiev    17    

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

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

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

11.09.2019    7805    AKnyazkov    26    

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

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

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

05.09.2019    47187    YPermitin    25    

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

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

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

24.12.2012    331784    Evil Beaver    184    

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

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

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

02.09.2019    10732    SeiOkami    35    

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

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

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

23.08.2019    15660    ivanov660    31    

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

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

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

22.08.2019    15143    ildarovich    24    

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

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

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

07.05.2013    115454    bpc222    327    

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

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

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

22.08.2019    18803    ids79    8    

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

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

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

19.08.2019    5189    ranis888    13    

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

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

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

07.08.2019    13579    IvanAT1981    18    

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

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

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

1 стартмани

30.04.2014    36100    bforce    22    

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

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

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

25.07.2019    114428    AlbinaAAA    49    

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

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

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

24.07.2019    36876    skv_79    37    

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

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

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

24.07.2019    6062    vandalsvq    19    

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

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

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

1 стартмани

04.12.2013    31309    juntatalor    49    

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

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

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

22.07.2019    19618    Stepa86    40    

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

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

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

17.07.2019    48845    ids79    27    

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

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

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

16.07.2019    47528    YPermitin    34    

Сервис для изучения методов платформы 1С:Предприятие 8. Бесплатно! Промо

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

Бесплатный ON-Line сервис изучения методов платформы 1С:Предприятие 8. Подготовка к аттестации 1С:Специалист on-line! Тестовые задания по различным видам учета! Подсказки для оптимального решения!

27.06.2013    51320    bpc222    53    

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

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

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

25.06.2019    76944    ids79    28    

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

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

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

24.06.2019    16503    RonX01    66    

Почему вообще работает мой запрос? или Ещё раз о планах запросов

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

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

10.06.2019    10297    DataReducer    12    

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

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

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

29.05.2019    4573    scientes    1