Многопоточность

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

Администрирование - Производительность и оптимизация (HighLoad)

Увеличиваем скорость загрузки данных в 20 раз. Как следует использовать многопоточность и готовый модуль для внедрения.

Добрый день, коллеги.

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

Введение

Вот, сколько я проработал и не разу всерьез не задумывался о многопоточности, пока не начал работу над проектом "Классификатор адресов Украины". При работе в рамках этого проекта столкнулся с необходимость загрузки большого объема данных в конфигурацию, а точнее - необходимо было создать множество элементов в разных справочниках, счет шел на 10-ки а то и 100-ни тысяч элементов...

И как бы меня стало очень сильно "напрягать" продолжительная загрузка данных в рамках тестирования. Ну, что же теперь? Решил поискать в "интернетах", и к сожалению, нашел только старые статьи(но по большому счету ничего с тех времен не изменилось). Да и готового, качественного решения не нашел, пришлось писать самому. И к моему удивлению, скорость загрузки я смог увеличить в 20 раз, благодаря элементарному коду... Какой же глупый я был)

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

Ну, как говорится, "погнали".

Внедрение

1. Создаем общий модуль(серверный), называем его "Многопоточность".

2. Копируем в него ниже изложенный код:


#Область ПрограммныйИнтерфейс

// Запускается выполнение указанной процедуры в много поточном режиме 
//
// Параметры:
//  ИмяПроцедуры - Строка - имя экспортной процедуры общего модуля или модуля менеджера объекта, 
//                          которую необходимо выполнить в фоне (ЭкспортнаяПроцедура).
//                          Например, "МойОбщийМодуль.МояПроцедура", "Документы.МойДокумент.МояПроцедура".
//                          У процедуры должен быть один формальный параметр:
//                          * ПараметрыЭкспортнойПроцедуры - Произвольный - произвольные параметры ПараметрыЭкспортнойПроцедуры;
//  СписокДанных - Массив - массив данных, которые будут разделены на части и переданы процедуру,
//                          которая указа в параметре "ИмяПроцедуры".
//  КоличествоПотоков - Число - количество потоков на которое необходимо разделить обработку СпискаДанных,
//                              значение по умолчанию равно 2.
//  Ожидание - Булево - признак указывающий на необходимость ожидания выполнения всех фоновых заданий,
//                      Истина - ожидать пока выполнятся все задания и потом возвращать управление в вызываемый код,
//                      Ложь - возвращать управление в вызываемый код сразу после создания всех заданий.
//
// Возвращаемое значение:
//  <Отсутствует> - 
//
// Варианты вызова:
//  Запустить(ИмяПроцедуры, СписокДанных) - 
//
Функция Запустить(Знач ИмяПроцедуры, Знач СписокДанных, Знач КоличествоПотоков = Неопределено, Знач Ожидание = Истина) Экспорт

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

	// Проверка остатка данных,
	// при необходимости выполнение "ЭкспортнаяПроцедура" с остатком данных,
	// количество которых меньше рассчитаного размера порции.
	Если Данные.Количество() > 0 Тогда
		ЗапуститьВФоне(ИмяПроцедуры, Данные, СписокФоновыхЗаданий);		
	КонецЕсли;
	
	// Ожидание при необходимости и задержка передачи управления в вызываемый код.
	Если Ожидание Тогда
		ФоновыеЗадания.ОжидатьЗавершенияВыполнения(СписокФоновыхЗаданий);
	КонецЕсли;
	
КонецФункции // Запустить()

#КонецОбласти

#Область СлужебныйПрограммныйИнтерфейс

Функция ЗапуститьВФоне(ИмяПроцедуры, СписокДанных, СписокФоновыхЗаданий)
	
	Параметры = Новый Массив;
	Параметры.Добавить(СписокДанных);

	СписокФоновыхЗаданий.Добавить(
		ФоновыеЗадания.Выполнить(ИмяПроцедуры, Параметры));

	СписокДанных.Очистить();
	
КонецФункции // ЗапуститьВФоне()

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Функция РассчитатьРазмерПорции(КоличествоДанных, КоличествоПотоков)

	Возврат Цел(КоличествоДанных / КоличествоПотоков);
	
КонецФункции // РассчитатьРазмерПорции()

Функция РассчитатьКоличествоПотоков(КоличествоДанных, КоличествоПотоков)

	Возврат ?(КоличествоПотоков <> Неопределено, КоличествоПотоков, 2)
	
КонецФункции // РассчитатьКоличествоПотоков()

#КонецОбласти

В коде прописал комментарии, так, что думаю, при внимательном чтении проблем возникнуть не должно.

3. Начинаем наслаждаться и использовать.

 

Использование

Теперь в любом серверном методе вам необходимо всего лишь вызвать функцию Запустить нашего созданного общего модуля Многопоточность.

Пример вызова:

Многопоточность.Запустить("КлассификаторАдресовУкраины.ЗагрузитьРайоныКОАТУУ", СписокРайонов, 10);

где:

  • КлассификаторАдресовУкраины - это общий модуль(серверный)
  • ЗагрузитьРайоныКОАТУУ - это экспортная процедура модуля КлассификаторАдресовУкраины
  • СписокРайонов - массив данных, а в массиве у меня лично элементы с типом - Структура
  • 10 - количество потоков.

Пример реализации процедуры, которою будем вызывать:

Процедура ЗагрузитьРегионыКОАТУУ(СписокДанных) Экспорт
	
	Для Каждого Элемент Из СписокДанных Цикл
		
		// траляля
		
	КонецЦикла;	    

КонецПроцедуры // ЗагрузитьРегионыКОАТУУ

В этой процедуре в параметр попадает часть(кусок) данных из тех данных которые мы передали в функцию Многопоточность.Запустить()

 

Заключение

Вот собственно и все, надеюсь, все доступно объяснил, у кого есть предложения по улучшению - предлагайте. Буду рад!)

З.Ы. Использую функции, а не процедуры, т.к. планирую что-то доработать, а что, еще не придумал)))

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

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. tech_supp19 18.03.20 08:32 Сейчас в теме
А почему не использовали готовые модули "Длительные операции" из БСП?
portwein; potoyalo; mvxyz; Evg-Lylyk; lk255; +5 Ответить
2. kaliuzhnyi 18.03.20 09:41 Сейчас в теме
(1)
Я там не увидел многопоточности. А вы видели?
3. tech_supp19 18.03.20 09:58 Сейчас в теме
(2) Конечно. Так же как и в этой публикации я вижу фоновые задания, как бы Вы их не назвали.
portwein; lk255; +2 Ответить
6. kaliuzhnyi 18.03.20 10:19 Сейчас в теме
(3)
Ну если вы не видите разницы между одним фоновым заданием и двумя фоновыми заданиями которые выполняются параллельно. То мне сложно что-то объяснить.
И да, вы можете использовать ДлительныеОперации, только перед этим не забудьте разбить ваши данные на части.
user1035175; +1 1 Ответить
10. tech_supp19 18.03.20 10:45 Сейчас в теме
(6) Мне ничего не мешает запускать несколько операций с разными параметрами.
11. kaliuzhnyi 18.03.20 10:57 Сейчас в теме
(10) Так никто-же не заставляет использовать...
Только тогда вам все эти циклы и разбития данных на части необходимо писать в своей форме и/или модуле, и тогда ваш код превратится в свалку, а чтобы не было свалки нужно создать отдельный модуль(о чем и написано в статье) и в этом модуле прописать практически все то-же что и у меня выложено...
А когда вам необходимо будет загрузить подряд 5 справочников(область, район, город, улица, дом) и при этом именно ПОДРЯД, т.к. каждый справочник подченен другому... Я бы посмотрел на ваш код где подряд 5 массив с разбиением данных и 10 раз запуск Длительных операций, тогда ваш код станет просто непригодным к использованию.
К тому же не стоит забывать о разных конфигурациях, где код загажен до такой степи, что плакать хочется, в том числе есть конфигурации где некоторые умники полезли править типовые механизмы, также есть самописные, и если вам приходится приходится работать только с типовыми и не "правленными" конфигурациями то вам повезло очень сильно.
А этот модуль рассчитан на то, чтобы его закинуть в любую конфигурацию, и работать сразу.
frkbvfnjh; Fox-trot; +2 Ответить
13. VmvLer 18.03.20 11:03 Сейчас в теме
(11) "О боже, как же я прекрасен")
user1371486; Lyolik; tech_supp19; +3 Ответить
14. kaliuzhnyi 18.03.20 11:32 Сейчас в теме
(13) Наверное по с равнению с вами да... Мне случайно не с вашим кодом приходится работать который написан задним местом?
16. VmvLer 18.03.20 11:36 Сейчас в теме
(14) вы всегда переходите на личности когда сталкиваетесь с критикой или вас просто плохо учили вести диалог?)
Lyolik; CyberCerber; +2 Ответить
24. kaliuzhnyi 18.03.20 13:03 Сейчас в теме
(16) Так вы же первый перешли на личности...
user843241; the1; +2 Ответить
26. kaliuzhnyi 18.03.20 13:04 Сейчас в теме
(16) Я всего лишь пытался донести практическую пользу от выложенного модуля.
41. tech_supp19 23.03.20 09:59 Сейчас в теме
(11)
Только тогда вам все эти циклы и разбития данных на части необходимо писать в своей форме


Логичнее это вынести в отдельный модуль - обертку над длительными операциями (которые есть во всех актуальных конфигурациях). В котором будет разбивка параметров и запуск необходимого числа фоновых заданий.
4. Eskimos 26 18.03.20 10:05 Сейчас в теме
Вот этот массив:
Данные = Новый Массив;

Я бы очищал после каждого вызова:
 ЗапуститьВФоне(ИмяПроцедуры, Данные, СписокФоновыхЗаданий);
pm74; vano-ekt; kaliuzhnyi; +3 Ответить
7. kaliuzhnyi 18.03.20 10:21 Сейчас в теме
37. riposte 278 21.03.20 07:32 Сейчас в теме
Автор, конечно, тот еще молодец, но,
не стоит забывать о разных конфигурациях, где код загажен до такой степи, что плакать хочется, в том числе есть конфигурации где некоторые умники полезли править типовые механизмы
...
А этот модуль рассчитан на то, чтобы его закинуть в любую конфигурацию, и работать сразу.

Хорошо, давай посмотрим.
	КоличествоДанных = СписокДанных.Количество();
	КоличествоПотоков = РассчитатьКоличествоПотоков(КоличествоДанных, КоличествоПотоков);
	РазмерПорции = Цел(КоличествоДанных / КоличествоПотоков);

	Данные = Новый Массив;
	Для Каждого Элемент Из СписокДанных Цикл
		
		// Добавление данных в порцию.
		Данные.Добавить(Элемент);
		
		// Проверка размера порции и при достижении рассчитаного размера,
		// запуск выполнения в фоне "ЭкспортнаяПроцедура".
		Если Данные.Количество() = РазмерПорции Тогда
			ЗапуститьВФоне(ИмяПроцедуры, Данные, СписокФоновыхЗаданий);
	                Данные = Новый Массив; // Забыли очистить данные? Или очищаем в ЗапуститьВФоне?
		КонецЕсли;
		
	КонецЦикла;
Показать

А что делать с остатком деления?

P.S. Если исполняемый код обхода массива был таким, как в публикации, при замере времени выполнения, а Данные не очищались - прирост "в 20 раз" как бы становится понятен. Было обработана 1\20 часть данных, потому и в 20 раз быстрее :3
Прикрепленные файлы:
ВнешняяОбработка1.epf
38. kaliuzhnyi 21.03.20 20:05 Сейчас в теме
(37)
А что делать с остатком деления?

Смотрите внимательнее!
40. riposte 278 21.03.20 20:40 Сейчас в теме
39. kaliuzhnyi 21.03.20 20:07 Сейчас в теме
(37)
// Забыли очистить данные? Или очищаем в ЗапуститьВФоне?

Еще раз посмотрите внимательнее!
5. vano-ekt 546 18.03.20 10:19 Сейчас в теме
8. kaliuzhnyi 18.03.20 10:26 Сейчас в теме
(5) Принцип тот же. Но в той статье нужно думать)) и подгонять под себя. А я выложил просто готовый модуль который готов к использованию.
9. RocKeR_13 770 18.03.20 10:32 Сейчас в теме
(8)
Но в той статье нужно думать))

Напомнило недавнюю фразу кандидата на должность стажера
А что, тут еще книжки нужно читать?
12. VmvLer 18.03.20 11:00 Сейчас в теме
велик конеш.
да и для таких задач как классификаторы где данные можно четко разделить на порции иногда
проще запустить несколько сеансов чем связываться с капризами фоновых, которые падают как
дебютантки на балах поле первого бокала.

многопоточность в учетных задачах 1С, на данный момент, миф.
15. kaliuzhnyi 18.03.20 11:34 Сейчас в теме
(12) А есть другие варианты?)
Ну, миф не миф, а у меня время загрузки сократилась в десятки раз. А главное результат.
&rew; davdykin; +2 Ответить
17. VmvLer 18.03.20 11:40 Сейчас в теме
(15) Расчеты себестоимости в УТ, ЕРП и прочие "окабаневшие" процессы запускают десятки фоновых якобы в целях многопочтности, а толку?

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

не вижу смысла далее вести диалог, вы правы в своих заблуждениях)
18. dinopopyys 118 18.03.20 12:33 Сейчас в теме
ну в целом да, своего рода многопоточность. Автор молодец.
Другое дело зачем она в 1с? - очень мало применения.
kaliuzhnyi; +1 2 Ответить
21. Nikola23 479 18.03.20 12:54 Сейчас в теме
(18)
Загрузка данных из внешних источников
Обработка запросов веб-сервера
Постобработка данных
Удаление помеченных объектов
Закрытие месяца. В последних версиях платформы решение систем линейных уравнение сделали многопоточным (или обещали сделать)
Проведение по регистрам, если они не связаны особой бизнес-логикой

Комментаторы, дополнят список
19. user1371486 18.03.20 12:43 Сейчас в теме
Читая такие статьи, все больше убеждаюсь, что ИС окончательно скатывается в помойку. Скоро найти нормальную инфу будет не реально. остались статьи о жизни, проектном управлении, да вот такие вот шедевры. Скоро начнутся статьи, как один массив разделить на несколько.
azhilichev; vladimirmatancev; CyberCerber; Evg-Lylyk; DarkAn; +5 4 Ответить
29. kaliuzhnyi 18.03.20 13:14 Сейчас в теме
(19)
А вы много знаете способов разделить массив на несколько? А какой будет эффективнее?
32. user1371486 18.03.20 15:06 Сейчас в теме
(29) Вам, голубчик, уже и без того в комментах напихали. Ибо оптимальный способ разделения массива на части Вы, увы, не осилите.
33. kaliuzhnyi 18.03.20 21:47 Сейчас в теме
(29) Из-за таких как вы голубчик, потом страдают заказчики...
И потом приходится переделывать ваш г*но код приходится, где разделение массива происходит через задний проход.
36. user1371486 19.03.20 09:27 Сейчас в теме
(33) Переход на личности засчитан.
Далее. Мои заказчики страдают? А вдруг я работаю госпожой в БДСМ-салоне, и они приходят ко мне именно пострадать. Через какой проход - не суть важно. Я же не публикую это на ИС: смотрите, как ускоряется код после N ударов плеткой программисту.

P.S.
В следующий раз правильно выбирайте номер поста в ответ. А то ведь оно заразно - сегодня номер поста не тот, завтра не ту переменную на вход в функцию подсунете.
20. buganov 144 18.03.20 12:53 Сейчас в теме
Вот же о многопоточности в 1С. Отлично расписано.И я бы даже сказал, что данная статья просто повторяет статью Бурмистрова.
https:// /articles/как-ускорить-1с-многопоточность/
22. Nikola23 479 18.03.20 12:58 Сейчас в теме
(20) ссылка не работает.

Репосты и ремиксы - это наша реальность.

Ничего страшного, если автор переоформит повторно ранее написанное.
Кто-то поймет по его описанию, кто-то поймет тему по статье 7ми летней давности.

Ну а нытики с комментариями "раньше было лучше" всегда есть, были и будут.

Даже Аристотель в своих писал "молодежь уже не та".
25. buganov 144 18.03.20 13:04 Сейчас в теме
(22) да не ною я. Репосты и ремиксы ценны тем, что дополняют оригинальную статью, а не просто копипастят.
Вот ссылка.
https://xn----1-bedvffifm4g.xn--p1ai/articles/%D0%BA%D0%B0%D0%BA-%D1%83%D1%81%D0%BA%D0%BE%D1%80%D0%B8%D1%82%D1%8C-1%D1%81-%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D0%BE%D1%82%D0%BE%D1%87­%D0%BD%D0%BE%D1%81%D1%82%D1%8C/
28. kaliuzhnyi 18.03.20 13:12 Сейчас в теме
(25) кстати эту статью я не нашел, наверное плохо искал.
Ремиксы и репосты полностью с вами согласен. Кто-то поймет другою статью а кто-то эту.
У меня так часть бывает... Даже код может быть одинаковый но автор мне объяснил по другому и я сразу понял что к чему...
23. buganov 144 18.03.20 13:02 Сейчас в теме
Кстати, странно, что при двух потоках аж в 20 раз увеличилась скорость. Откуда такой прирост, если данные дробятся "как бог на душу положит" или перед передачей в процедуру Вы уже разбиваете? Если готовые данные передаете, то тем более не вижу смысла дробить еще раз.
Поясню. Допустим, у нас есть таблица данных из, скажем из миллиона строк, которые нужно впихнуть быстро в, например, регистр сведений.
Эта таблица отлично бьется в разрезе каких-то полей, например, по полю Склад. Пусть складов в таблице 10, значит будет 10 потоков, больше не стоит, можно сильно нагрузить сервера. И это был бы наиболее верный алгоритм.
В связи с этим, правильней, я считаю, оставлять дробление данных на руки разработчика, который просто передаст в длительную операцию запись, а потом просто подождет завершения всех потоков
27. kaliuzhnyi 18.03.20 13:08 Сейчас в теме
(23) На сервере скорость увеличилась примерно в раза, если использовать 2 потока. На картинках посмотрите. Время указано в секундах. В двадцать раз скорость загрузки увеличилась когда я "жахнул" 20 потоков)))
31. DarkAn 927 18.03.20 14:33 Сейчас в теме
(0) уж не знаю как Вы искали информацию по многопоточности, но на том же ИС их более, чем достаточно
Ваша реализация, показанная в данной статье, САМАЯ простая. Она не учитывает множество нюансов по работе с потоками.

В далеком 2017 году я уже писал (https://infostart.ru/public/626117/ 52 комментарий)

https://infostart.ru/public/182139/
Это самый простой способ распараллелить, и не самый оптимальный. Его основные минусы:
* Необходимо обдумывать как разбить обрабатываемый массив на части (порции) (В предоставленной статье порция - это склад).
*
ФоновыеЗадания.ОжидатьЗавершения(МассивЗаданий);
тут узкое место в том, что пока ПАЧКА фоновых заданий не отработает полностью новое не запуститься. Если в первую выборку попадет один гигантский склад и 9 маленьких, но при этом в общей выборке их предположи 11, то последний 11 склад будет ждать завершения всего блока, ходя 9 потоков по сути будут давно свободны.
* Не реализована обратная связь между потоками и клиентом, хотя допил не большой,
* И САМОЕ ГЛАВНОЕ, если в потоке произойдет ЛЮБАЯ ошибка, хоть ожидание захвата таблицы, он просто прекратит свою жизнь, и Вам ни как об этом не сообщит


Ваше решение имеет еще ряд недоработок, в частности:
* я скажу что мне надо 5 потоков, а будет запущено 6, т.к. в 6 попадет "хвост" данных
* а что будет если размер порции будет < 1?
* а есть ли смысл запускать в потоках если данных в подаваемой выборке мало?
* и т.д.

Если Вам будет интересно, можете ознакомиться с моей публикацией на тему многопоточности (https://infostart.ru/public/778905/), возможно найдете идеи для своего проекта.
vladimirmatancev; user1371486; dime2; kaliuzhnyi; kiruha; +5 Ответить
34. kaliuzhnyi 18.03.20 22:03 Сейчас в теме
(31)
я скажу что мне надо 5 потоков, а будет запущено 6, т.к. в 6 попадет "хвост" данных

спасибо, исправлю.
а что будет если размер порции будет < 1?

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

а тут уже решает разработчик который запускает эту процедуру.

вашу статью обязательно прочту, она на первый взгляд хорошо изложена)

но допустим статья которую вы привели - https://infostart.ru/public/626117/ , довольно сложная в понимании, к таким статьям необходимо переходить после того будут понятны элементарные вещи, которые собственно я и описал...
30. frkbvfnjh 574 18.03.20 14:32 Сейчас в теме
З.Ы. Использую функции, а не процедуры, т.к. планирую что-то доработать, а что, еще не придумал)))

На мой взгляд, процедуры вообще зло, все должно быть функциями, пусть даже они будут возвращать "Неопределено", в частности боль начинается когда не можешь выполнить процедуру во время отладки, просто потому, что она процедура.
CyberCerber; +1 Ответить
42. AlX0id 30.03.20 08:12 Сейчас в теме
(30)
И более того - каждая функция должна возвращать информацию об успешности/неуспешности выполнения )
Ну это как по мне.
35. _ASZ_ 95 19.03.20 08:05 Сейчас в теме
Простой код, решение задачи "в лоб"...
А если один или несколько из потоков будут завершены аварийно или "убиты" на кластере? Удобно ли отлаживать код, обернутый в такие конструкции? Есть и более зрелые решения.
dsdred; user1371486; +2 Ответить
43. user612295_death4321 05.04.20 09:23 Сейчас в теме
Если продумать на перед, что выполняемые фоновые порции не попадут на конкурентную запись (не просядет железка, не будет блокировок 1С или СУБД), то это вполне рабочий вариант с ускорением выполнения операций.

Подобным способом увеличили скорость проведения документов реализации, прирост в скорости проведения получился в ускорении в 4-5 раз, по сравнению с последовательным проведением документов по 1му, и теперь склад не при каких обстоятельствах не готов возвращаться к старому механизму. Правда УППшечку пришлось перед этим очень плотно готовить, переписать механизм допроведения документов + перевести базу в RCSI, выпилить весь говнокод с обращениями через точку к полям ссылочного типа и все, вуаля, все счастливы.
Оставьте свое сообщение

См. также

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

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

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

27.01.2020    9744    ids79    26       

Базовый курс по обмену данными в системе 1С:Предприятие. Онлайн-интенсив с 12 по 28 мая 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, обеспечивающих обмен данными между различными прикладными 1С-решениями и взаимодействие с другими информационными системами. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”.

5500 рублей

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

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

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

15.01.2020    11314    John_d    22       

Последовательности событий. Шпаргалка

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

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

30.12.2019    7245    kuzyara    33       

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

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Базовый курс для начинающих 1С-программистов. Онлайн-интенсив со 2 июня по 2 июля 2020 г. Промо

Данный онлайн-курс является начальной ступенью по изучению базовых принципов программирования в системе “1С:Предприятие” и предназначен для обучения 1С-программированию “с нуля”.

4500-9500 рублей

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

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

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

05.09.2019    31426    ids79    50       

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Три костыля. Сказ про фокусы в коде

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

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

03.09.2019    19506    YPermitin    80       

Подборка программ для взаимодействия с ЕГАИС Промо

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

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

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

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

17.08.2019    22349    ids79    16       

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

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

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

08.08.2019    44147    ids79    36       

Онлайн-курс «Автоматизация процессов управления МТО: методика сбора и формализации требований» с 1 апреля по 13 мая 2020 года. Промо

Цель курса - повысить полноту и качество сбора и формализации требований к автоматизации процессов управления материально-техническим обеспечением. Курс основан на процессном подходе, позволяет в полном объеме выявить и учесть все факторы, влияющие на специфику процессов управления МТО. Участники курса получают теоретические знания в области организации процессов управления МТО и готовый инструментарий для сбора и формализации требований по автоматизации этих процессов (шаблоны, опросники, модели).

40000 рублей

Фоновое выполнение кода в 1С - это просто

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

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

02.08.2019    22409    avalakh    21       

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

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

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

26.07.2019    34528    ids79    11       

Онлайн-интенсив "1C:Предприятие для программистов: Бухгалтерские задачи" с 22 июня по 8 июля 2020 г. Промо

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

4900 рублей

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

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

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

17.07.2019    24015    ids79    27       

Регистры сведений. За кулисами

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

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    18367    YPermitin    13       

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

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

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

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

04.07.2019    14888    SeiOkami    49       

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

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

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

25.06.2019    36960    ids79    17       

Онлайн-курс «Практические аспекты внедрения регламентированного учета и расчета себестоимости в 1С:ERP на крупных промышленных предприятиях» с 20 апреля по 15 мая 2020 года. Промо

Курс рассчитан для подготовки экспертов по регламентированному учету и учету затрат для внедрения на крупных промышленных предприятиях с «исторически сложившимся» учетом

9000 рублей

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

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

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

11.06.2019    19215    dmurk    144       

Регистры накопления. Структура хранения в базе данных

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

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

16.05.2019    31853    YPermitin    30       

1C:Предприятие для программистов: Расчетные задачи (зарплата). Онлайн-интенсив с 01 по 17 июня 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, которые предназначены для автоматизации периодических расчетов, а именно - для расчета зарплаты. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей прикладного решения “1С:Зарплата и управление персоналом” и прочих прикладных решений, в которых реализован функционал расчета зарплаты.

4900 рублей

Выполнение внешней обработки в фоновом задании

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

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    21003    Eret1k    23       

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

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

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

25.04.2019    12140    m-rv    2       

DevOps для 1С. Онлайн-курс проходит с 16 апреля по 11 июня 2020 года. Промо

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

12000 рублей

5 простых шагов и 15 минут на разворачивание инструмента мониторинга проблем производительности базы 1С

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) Производительность и оптимизация (HighLoad)

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

18.04.2019    24500    ivanov660    77       

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

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

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

16.04.2019    15521    m-rv    16       

Лучшие программы за прошедший месяц Промо

Инфостарт подготовил ТОП-25 самых продаваемых и популярных на текущий момент программ. При формировании списка учитывается аналитика продаж и запросы клиентов за последний месяц.

О расширениях замолвите слово...

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

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    26365    ellavs    125       

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

Статья Программист Стажер Нет файла v8 Windows Бесплатно (free) Практика программирования Разработка

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

28.03.2019    21168    ellavs    83