Многопоточная выгрузка одного сообщения обмена

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

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

обмен данными планы обмена многопоточное выполнение фоновые задания сообщение обмена параллельное выполнение

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

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

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

Заранее прошу прощения если это "баян". В таком случае просьба дать ссылки где почитать источники.

Код состоит из двух частей:

1. Управление формированием фоновых заданий и объединение результатов их работы.

2. Управление выполнением списка фоновых заданий.

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

Идея заключается в следующем:

1. Мы как обычно начинаем выгрузку.

2. В момент, когда начинаем выбирать изменения, мы распараллеливаем запись файла сообщения обмена по объектам конфигурации, которые входят в состав плана обмена. Для каждого такого объекта мы создаём отдельное фоновое задание и пишем все его изменения в отдельный файл - часть сообщения обмена. Подробнее можно посмотреть в моей статье в разделе "Запись изменений в сообщение обмена".

3. Ожидаем завершения выполнения всех сформированных заранее фоновых заданий.

4. Объединяем результаты фоновых заданий в один главный файл сообщения обмена.

5. Завершаем выгрузку как обычно.

Код главной управляющей процедуры выглядит следующим образом:

Процедура СформироватьСообщениеОбмена()
	
	УзелОбмена = ПланыОбмена.Тестовый.НайтиПоНаименованию("Узел получатель", Истина);
	
	// Получаем список объектов конфигурации, который входят в состав плана обмена
	СоставПланаОбмена = Метаданные.ПланыОбмена.Тестовый.Состав;
	
	// Открываем главный файл сообщения обмена
	ЗаписьXML = Новый ЗаписьXML();
	ПолноеИмяФайла = КаталогСообщений + "\" + Строка(УзелОбмена.УникальныйИдентификатор()) + ".xml";
	ЗаписьXML.ОткрытьФайл(ПолноеИмяФайла);
	
	// Создаём объект "ЗаписьСообщенияОбмена" и блокируем узел (объектная блокировка)
	ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
	ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена);
	НомерСообщения = ЗаписьСообщения.НомерСообщения;
	
	// Массив фоновых заданий - по одному на каждый объект конфигурации, который входит в состав плана обмена
	СписокФоновыхЗаданий = Новый Массив();
	
	// Количество постоянно активных фоновых заданий.
	// Управление их выполнением осуществляется специальными процедурами (см. ниже).
	// Обычно их количество должно равняться количеству ядер сервера.
	// На практике нужно подбирать их количество в зависимости от загрузки сервера.
	// Слишком большое количество фоновых заданий может "положить" сервер.
	КоличествоАктивныхЗаданий = 4;
	
	// Цикл формирования списка фоновых задний и их параметров
	Для Каждого Элемент Из СоставПланаОбмена Цикл
		
		ИмяЗадания = "Экспорт сообщения № " + Формат(НомерСообщения, "ЧГ=0") + ": " + Элемент.Метаданные.ПолноеИмя();
		
		Параметры = Новый Массив();
		Параметры.Добавить(УзелОбмена);
		Параметры.Добавить(НомерСообщения);
		Параметры.Добавить(Элемент.Метаданные);
		
		ПараметрыФоновогоЗадания = Новый Структура();
		ПараметрыФоновогоЗадания.Вставить("ИмяЗадания", ИмяЗадания);
		ПараметрыФоновогоЗадания.Вставить("ИмяПроцедуры", "ОбщийМодульОбменаДанными.ВыполнитьВыгрузкуИзмененийОбъектаКонфигурации");
		ПараметрыФоновогоЗадания.Вставить("ПараметрыПроцедуры", Параметры);
		
		СписокФоновыхЗаданий.Добавить(ПараметрыФоновогоЗадания);
		
	КонецЦикла;

	// Передача списка фоновых заданий управляющим процедурам на выполнение
	// Формируем части сообщения обмена по одному файлу для каждого объекта конфигурации
	ВыполнитьФоновыеЗадания(СписокФоновыхЗаданий, КоличествоАктивныхЗаданий);
	
	// Собираем все части сообщения обмена вместе в главном файле (см. выше)
	СформироватьЕдиноеСообщениеОбмена(СоставПланаОбмена, УзелОбмена, НомерСообщения, ЗаписьXML);
	
	// Завершаем формирование сообщения обмена
	ЗаписьСообщения.ЗакончитьЗапись();
	
КонецПроцедуры

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

Функция ПолучитьИмяФайлаЧастиСообщенияОбмена(УзелОбмена, НомерСообщения, ОбъектМетаданных)
	
	Возврат КаталогСообщений +
		"\" +
		Строка(УзелОбмена.УникальныйИдентификатор()) +
		"_" +
		Формат(НомерСообщения, "ЧГ=0") +
		"_" +
		ОбъектМетаданных.Имя + ".xml";
		
КонецФункции

Процедура, которая формирует файл части сообщения:

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

Собираются все части вместе такой процедурой:

Процедура СформироватьЕдиноеСообщениеОбмена(СоставПланаОбмена, УзелОбмена, НомерСообщения, ЗаписьXML)
	
	Для Каждого ОбъектМетаданных Из СоставПланаОбмена Цикл
		
		ПолноеИмяФайла = ПолучитьИмяФайлаЧастиСообщенияОбмена(УзелОбмена, НомерСообщения, ОбъектМетаданных);
		
		Файл = Новый Файл(ПолноеИмяФайла);
		Если Файл.Существует() Тогда
			
			ЧтениеТекста = Новый ЧтениеТекста(ПолноеИмяФайла, КодировкаТекста.UTF8);
			
			// Дописываем часть в главный файл сообщения обмена
			ЗаписьXML.ЗаписатьБезОбработки(ЧтениеТекста.Прочитать());
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

Внимание!

Накладные расходы на создание файлов частей сообщения + последующее их объединение в один главный файл сообщения могут "съесть" всю выгоду от распараллеливания процесса. Это зависит от размеров такого сообщения. Тестируйте код перед его применением!

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

Наименование Файл Версия Размер
Многопоточная выгрузка одного сообщения обмена

.txt 8,28Kb
1
.txt 8,28Kb 1 Скачать

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

Вознаграждение за ответ
Показать полностью
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. TODD22 18 05.12.16 14:50 Сейчас в теме
Этот код я так понимаю пишет в один файл? То есть это для выгрузки в один узел?
А можно таким же способом выгружать сразу по нескольким узлам? Например по 4 магазинам?
2. zhichkin 934 05.12.16 15:09 Сейчас в теме
(1)
Этот код я так понимаю пишет в один файл? То есть это для выгрузки в один узел?

Этот код пишет несколькими заданиями в один файл - формирует одно сообщение обмена. Соответственно это сообщение для одного узла.
А можно таким же способом выгружать сразу по нескольким узлам? Например по 4 магазинам?

Если дописать логику формирования сообщений по нескольким узлам, то да, можно. Хоть для 100 узлов одновременно, если сервер потянет.
3. caponid 05.12.16 17:24 Сейчас в теме
Вот тут "ЧтениеТекста.Прочитать()" вполне возможно получить когда нибудь "Out of memory". причем внезапно.. память течет и фрагментируется.
А вот тут "Выборка.Получить()" вместо объекта - блокировку
4. zhichkin 934 05.12.16 17:57 Сейчас в теме
(3) Спасибо за дельный комментарий!
Вы правы - в таком виде код отправлять в бой никак нельзя.
Цель статьи: озвучить идею и дать прототип решения.
В целях упрощения восприятия исходный код максимально сокращён.
8. caponid 06.12.16 12:02 Сейчас в теме
(4)
Вы правы, блокировки обычно вот тут возникают - ПланыОбмена.ВыбратьИзменения
И дополнение - зачем все переносить в один файл? - это все таки довольно затратная операция. Проще все таки тогда все передать пакетом файлов - записать их имена в сообщение обмена - да и при загрузке многопоточку организовать
Как то так...
Для Каждого ОбъектМетаданных Из СоставПланаОбмена Цикл
    КраткоеИмяФайла = ПолучитьКраткоеИмяФайлаЧастиСообщенияОбмена(УзелОбмена, НомерСообщения, ОбъектМетаданных);
    Файл = Новый Файл(ПолноеИмяФайла);
	Если Файл.Существует() Тогда
		ЗаписьXML.ЗаписатьНачалоЭлемента("metaFiles", "http://metafiles");
		ЗаписьXML.ЗаписатьАтрибут("metaName", ОбъектМетаданных.ПолноеИмя());
		ЗаписьXML.ЗаписатьАтрибут("File", КраткоеИмяФайла);
		ЗаписьXML.ЗаписатьКонецЭлемента();	
	КонецЕсли;
КонецЦикла;
Показать
starik-2005; +1 Ответить
9. zhichkin 934 06.12.16 12:41 Сейчас в теме
(8) Да, "ВыбратьИзменения" генерирует UPDATE номера сообщения в таблице регистрации изменений объекта. Если таблица большая, то эта команда выполняется долго и это может приводить даже к ошибкам превышения таймаута ожидания. Подробнее можно почитать в статье, ссылку на которую я даю в этой публикации.

По поводу отправки пакета файлов и организации многопоточной загрузки данных на принимающей стороне: согласен, можно (вероятно даже нужно) делать и так. Фантазия ограничена только возможностями. Цель этой публикации была именно в том, чтобы показать возможность.
5. zhichkin 934 05.12.16 18:47 Сейчас в теме
(3) Кстати, при управляемом режиме блокировок "Выборка.Получить()" не рискует нарваться на блокировку. Получится "грязное" чтение, так как при read_commited_snapshot = ON мы получим версию данных до начала блокирующей транзакции (UPDATE или DELETE в данном случае).
6. Makushimo 157 06.12.16 06:25 Сейчас в теме
Про выгрузку по правилам обмена тут можно и не заикаться?
7. zhichkin 934 06.12.16 08:12 Сейчас в теме
(6) Почему Вы так решили? Можно конкретный пример?
ПКО, например, можно передать в фоновое задание в виде параметра ... Возможно это потребует некоторой переделки самих правил, но сам механизм КД, на мой взгляд, это не отменяет.
10. caponid 07.12.16 16:17 Сейчас в теме
Не тянет это на публикацию - нет цельной идеи.
11. Tangram 154 07.12.16 17:15 Сейчас в теме
Сейчас на практике реализую порционный обмен (по правилам обмена).
Я пошел другим путем - весь массив изменений, заранее выбранный запросами, бьется на порции, а потом каждая порция выбирается и выгружается.
По метаданным неудобно - в выгрузке может быть несколько сотен одинаковых объектов, например Реализаций, велика вероятность нарваться на блокировку.
zhichkin; +1 Ответить
12. zhichkin 934 07.12.16 19:14 Сейчас в теме
(11)
потом каждая порция выбирается и выгружается

Это тоже вариант.
Уточните, пожалуйста, изменения заранее выбираются куда? В оперативную память?
Вы ПланыОбмена.ВыбратьИзменения используете? Что указываете в качестве третьего параметра фильтрации выборки?
велика вероятность нарваться на блокировку

Уточните, пожалуйста, какую блокировку Вы имеете ввиду? В какой момент выгрузки?

Обычно блокировка, которая мешает, это команда UPDATE при вызове ПланыОбмена.ВыбратьИзменения. Она возникает только на этом этапе и её длительность зависит исключительно от количества изменений в таблице и третьего параметра фильтрации этого метода. Предполагаю, что Вы используете массив ссылок на объекты, который является порцией данных ... Если это так, то, вероятно, это самая удачная реализация выборки изменений.
13. Tangram 154 07.12.16 22:52 Сейчас в теме
(12) да , изменения заранее выбираются в память. сейчас обмен в стадии тестов, в боевой базе у меня первоначально 70000-200000 объектов к выгрузке, надеюсь, сервер х64 простит мне это
В ВыбратьИзменения в третий параметр отдаю массив из 50-200 ссылок на объекты, выбранный из основного массива.
14. Tangram 154 07.12.16 23:08 Сейчас в теме
а вот про блокировки интересно...
Мои опыты на КА 1.1 (с изменениями) показывают следующее:
ВыбратьИзменения() отрабатывает оч. быстро, данные из боевой базы: 177000 объектов в выборке за 6 секунд.
А вот потом начинается мистика (или суровая реальность), из-за которой я затеял порционный обмен:
фактически все 177000 объектов блокируются на запись до окончания выгрузки до операторов
// Завершаем запись сообщения
ЗаписьСообщения.ЗакончитьЗапись();

ЗаписьXML.Закрыть();
Причем это я проверял даже на копии: выбираю все изменения, там 150 документов "Реализация". выбираю из них первые 50 и на них делаю ВыбратьИзменения(). иду отладчиком по процедуре выгрузки (я слегка модиф. типовую) и в другом сеансе пытаюсь проводить документы. Пока не пройдет ЗакончитьЗапись(), ни один из "выбранных" 50 документов перепровести нельзя (стандартная ошибка MS SQL на превышение времени блокировки), остальные пожалуйста.
16. zhichkin 934 07.12.16 23:59 Сейчас в теме
(14)
все 177000 объектов блокируются

Какой режим управления блокировками у Вас используется (автоматический или управляемый)? Где начинается и заканчивается транзакция? Нет ли эскалации блокировок? Какой набор данных блокируется на самом деле (нет ли сканов)? На все эти вопросы нужно дать однозначный ответ.

Не настаиваю, но рекомендую почитать мою статью про планы обмена: http://infostart.ru/public/561460/ Там всё очень подробно расписано, в том числе про блокировки. Кстати, если будут замечания или дополнения, то я с удовольствием внесу их в статью =)
15. Tangram 154 07.12.16 23:44 Сейчас в теме
А вот сейчас воспроизвел ситуацию на типовой КА 1.1.61.2 и все документы, попавшие в ВыбратьИзменения(), спокойно перепроводятся в процессе выгрузки...
Завтра попробую 1.1.78 и походу буду искать блокировку в доработках...
17. zhichkin 934 08.12.16 00:05 Сейчас в теме
(15) Интересно, а у Вас случайно нет там где-нибудь начала транзакции типа "НачатьТранзакцию" после "ВыбратьИзменения" или до этого, а "ЗафиксироватьТранзакцию" где-нибудь после "ЗакончитьЗапись" ? Чисто теоретически получилась бы одна большая транзакция, для которой все остальные были бы вложенными ... Честно говоря, была у меня мысль проверить такой случай, но руки пока что не дошли =) Если это неожиданно так, то границы транзакции могут быть значительно шире ...
18. Tangram 154 08.12.16 00:16 Сейчас в теме
(17)
а у Вас случайно нет там где-нибудь начала транзакции

есть, причем это типовой код.... сейчас проверю...
19. zhichkin 934 08.12.16 00:22 Сейчас в теме
(18) Если у Вас на уровне SQL Server не отключена эскалация блокировок до уровня всей таблицы для таблицы регистрации изменений, то UPDATE более 5000 записей этой таблицы в результате вызова метода "ВыбратьИзменения" может привести к блокировке всей таблицы. Кажется я об этом тоже в своей вышеупомянутой статье писал ...
20. Tangram 154 08.12.16 00:28 Сейчас в теме
типовой код примерно такой:
НачатьТранзакцию();
ВыбратьИзменения(...все...);

Далее Цикл по выборке, но через каждые условно 10 объектов
идет ЗафиксироватьТранзакцию(); НачатьТранзакцию();

и в типовой конфе реально объекты, захваченные в первой десятке, отпускаются после первого же ЗафиксироватьТранзакцию().
а в моей базе почему-то не так...
Спасибо большое за наводки, завтра на свежую голову буду копать дальше. Если что интересное для науки найду, напишу ).
21. kolya_tlt 24 11.01.17 14:24 Сейчас в теме
Добрый день, Дмитрий.
вы не пробовали объединить общие для всех узлов справочники\регистры и выгрузить их один раз для всех узлов?
22. zhichkin 934 11.01.17 14:40 Сейчас в теме
(21) Нет не пробовал. Если бы я решал подобную задачу, то я бы отказался от регистрации изменений по всем узлам. Делал бы это для одного какого-то узла по умолчанию, например, а потом выгружал бы один раз.
Кроме этого, после выгрузки по всем узлам нужно обновить значение реквизита "НомерОтправленного" для каждого из них. При этом обновить это значение нужно не только в плане обмена, но и в служебной таблице регистрации изменений объекта. Без вызова метода "ВыбратьИзменения" плана обмена сделать это невозможно, а первым обязательным (!) параметром этого метода является узел плана обмена. Короче говоря, всё сильно связанно друг с другом ...
23. kolya_tlt 24 12.01.17 09:22 Сейчас в теме
(22) поясните почему вы выбрали решение с одним узлом и как поддержка будет в этом случае контролировать обмен на скажем 500 магазинов?
24. zhichkin 934 12.01.17 13:55 Сейчас в теме
(23) Стоп =) Конкретного решения для конкретной ситуации я не принимал =) Я дал, так скажем, дружеский совет =) Не более того =)

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

По поводу 500 магазинов ... На моей практике РИБ в районе 150 узлов "умирает" или требует постоянного внимания и рукоприкладства. В таких случаях делается своя нетиповая разработка.
Оставьте свое сообщение

См. также

Перенос объектов 1С Промо

Перенос данных из 1C8 в 1C8 v8 v8::УФ 1cv8.cf Абонемент ($m)

Простой и наглядный перенос объектов между любыми базами 1С 8 с предварительным анализом на возможные различия в данных (через файл, через интернет, через буфер обмена). Интерактивная настройка правил обмена на стороне источника и получателя. В обработке есть удобный обзор по подсистемам, поиск и обработка данных по заданному фильтру. Сравнение объектов, поиск ссылок. Конструктор кода по созданию объектов, написание скриптов и отладка мини-функций в УФ. Отключение/включение регламентных заданий. Регистрация/снятие с регистрации объектов в планах обмена. И многое другое. Инструменты администратора в одной обработке.

1 стартмани

16.03.2015    96894    2097    moolex    199    

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

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

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

5 стартмани

21.12.2020    4079    19    huxuxuya    11    

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

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

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

3 стартмани

04.09.2019    30157    27    Stepa86    46    

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

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

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

1 стартмани

03.07.2019    23747    6    m-rv    90    

Выгрузка данных из УТ 11.3/11.4 в БП 3.0 (перенос документов и справочной информации из "Управление торговлей" ред. 11.3/11.4 в "Бухгалтерия предприятием" ред. 3.0). Обновлен до УТ 11.3.4.х/11.4.7х и БП 3.0.7х.х Промо

Обмен через XML Перенос данных из 1C8 в 1C8 v8 БП3.0 УТ11 Абонемент ($m)

Данная обработка предназначена для выгрузки в формате XML данных из программы «Управление торговлей» ред. 11.3/11.4 по основным группам документов (документы покупки/продажи товаров и услуг, складские документы, счета-фактуры, ценообразование), а также набор основных справочников. Загрузка данных в БП ред. 3.0 через обработку «Универсальный обмен данными XML». Основная цель обработки – оптимизация работы бухгалтеров во время обмена данными между программами, а также выборочная корректировка загруженных ранее документов.

04.03.2016    60222    4    SEOAngels    64    

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

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

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

1 стартмани

13.09.2018    24445    13    RocKeR_13    16    

Обмен данными между УТ 10.3 и Розницей 2.2 (правила обмена данными между "Управлением торговлей" ред. 10.3. и "Розницей" ред. 2.2) Промо

Обмен через XML Перенос данных из 1C8 в 1C8 Оптовая торговля Розничная торговля Оптовая торговля Розничная торговля v8 УТ10 Розница УУ Абонемент ($m)

Данные правила предназначены для обмена в формате XML данных из программы «Управление торговлей» ред. 10.3. и "Розница" ред. 2.2 по основным группам документов и основных справочников. Загрузка данных осуществляется через встроенную обработку «Универсальный обмен данными XML». Основная цель обработки – корректировка типовых правил на выявленные ошибки и расширение выгрузки для корректной выгрузки данных по ЕГАИС и продажам в целом. Протестировано до УТ 10.3.47.х и Розница 2.2.11.х

3 стартмани

16.09.2016    49544    2    SEOAngels    65    

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

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

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

5 стартмани

09.08.2018    31465    28    informa1555    26    

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

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

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

1 стартмани

17.07.2018    56771    21    kalyaka    16    

Выгрузка документов из ЗУП в БП (1С 8.2-8.3) Промо

Перенос данных из 1C8 в 1C8 Зарплата Зарплата v8 БП2.0 ЗУП2.5 Абонемент ($m)

Обработка для выгрузки документов из конфигурации "Зарплата и управление персоналом" 8.2 в конфигурацию "Бухгалтерия предприятия" 8.2. Использует правила обмена. В обработке создан удобный интерфейс для гибкого формирования списка документов кадрового учета и начисления ЗП.

1 стартмани

18.12.2012    17701    138    d.zhukov    20    

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

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

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

1 стартмани

01.06.2018    32964    88    m-rv    58    

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

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

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

1 стартмани

22.05.2018    35274    11    SITR-utyos    13    

Правила конвертации документов ЗУП 2.5 - ЗУП 3.1

Обмен через XML Зарплата Перенос данных из 1C8 в 1C8 Зарплата v8 v8::СПР ЗУП2.5 ЗУП3.x Россия БУ Абонемент ($m)

Правила конвертации документов ЗУП 2.5 - ЗУП 3.1. Позволяют вести параллельную работу в базах ЗУП редакций 2,5 и 3.1.

10 стартмани

06.03.2018    43213    141    kostya_whiskas    24    

Универсальная выгрузка/загрузка данных для отличающихся конфигураций (JSON, Такси+ОФ) Промо

Перенос данных из 1C8 в 1C8 Универсальные обработки Распределенная БД (УРИБ, УРБД) v8 1cv8.cf Абонемент ($m)

Простой перенос через JSON данных между двумя базами 1С (документов, справочников, ПВХ, ПВР, счетов). Аналогична произвольной выгрузке в типовой "Выгрузка/загрузка XML", но может использоваться для отличающихся конфигураций. Подходит для любых пар баз с любым интерфейсом (управляемый + обычный). Без настроек. Не требует идентичности конфигураций и платформ. При переносе типы данных сопоставляются по наименованиям метаданных, объекты и ссылки по UID.

1 стартмани

22.10.2014    215035    4292    ekaruk    184    

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

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

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

1 стартмани

08.02.2018    30983    20    mvxyz    17    

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

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

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

1 стартмани

06.12.2017    29487    56    kwazi    6    

Telegram-боты

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

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

1 стартмани

01.09.2017    37239    140    PLAstic    59    

Выгрузка данных из УТ 10.3 в БП 3.0 (своими руками) Промо

Перенос данных из 1C8 в 1C8 v8 УТ10 БП3.0 Россия Абонемент ($m)

Старая добрая, позабытая многими выгрузка из УТ 10.3 в БП 1.6. Ее еще можно оживить, и она послужит на благо всем желающим, всем уставшим от автоматических обменов.

2 стартмани

30.10.2014    44873    329    TESL    41    

Перенос справочников и документов из УТ 10.3 в БП 3.0

Перенос данных из 1C8 в 1C8 v8 УТ10 БП3.0 Россия БУ НУ УУ Абонемент ($m)

Синхронизация справочников и документов из Управление торговлей 10.3 в Бухгалтерию предприятия 3.0. Обработка не затрагивает штатный механизм. Подключение и перенос документов происходит посредством OLE. Без ввода начальных остатков.

10 стартмани

25.07.2017    25320    17    2casp    6    

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

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

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

1 стартмани

30.05.2017    148085    13    signum2009    48    

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

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

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

1 стартмани

13.03.2017    34702    119    romasna    49    

Интерфейс сопоставления объектов для обмена (для типового регистра СоответствиеОбъектовДляОбмена) Промо

Инструментарий разработчика Универсальные обработки Перенос данных из 1C8 в 1C8 v8 КА1 БП2.0 ЗУП2.5 УТ10 УПП1 Абонемент ($m)

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

4 стартмани

11.11.2015    42890    108    catsam    8    

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

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

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

1 стартмани

03.10.2016    39203    96    json    25    

Соответствия объектов обмена

Распределенная БД (УРИБ, УРБД) Перенос данных из 1C8 в 1C8 v8 КА1 Россия Абонемент ($m)

Обработка позволяет проверять, исправлять ошибки, добавлять и удалять соответствия объектов в обменах данными между конфигурациями на основе «Комплексной автоматизации 1.1» или похожими конфигурациям. Подходит для обменов с использованием регистра сведений «СоответствиеОбъектовДляОбмена».

1 стартмани

26.08.2016    24399    9    xxxelaaa    1    

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

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

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

1 стартмани

14.08.2016    51042    36    Demanoidos    60    

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

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

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

2 стартмани

05.06.2016    62003    11    wowik    32    

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

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

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

1 стартмани

18.05.2016    67677    199    rozer    66    

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

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

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

1 стартмани

26.04.2016    67171    19    arakelyan    22    

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

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

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

1 стартмани

22.03.2016    87820    165    igo1    54    

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

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

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

1 стартмани

03.03.2016    20298    1    Alexander.Shvets    5    

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

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

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

1 стартмани

17.02.2016    54155    54    yuraos    18    

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

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

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

1 стартмани

17.02.2016    61549    201    balanton    23    

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

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

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

1 стартмани

16.02.2016    25365    8    Tatitutu    5    

Выгрузка/загрузка данных в формате JSON v 1.0.8

Распределенная БД (УРИБ, УРБД) Перенос данных из 1C8 в 1C8 v8 1cv8.cf Абонемент ($m)

Обработка предназначена для обмена данными между схожими конфигурациями в формате JSON. Этот формат обладает рядом существенных преимуществ по сравнению с xml и прочими популярными форматами. В отличие от существующих аналогов, обработка не использует никаких дополнительных библиотек. (де)Сериализация всех объектов происходит средствами встроенного языка и методов ЗаписатьJSON() и ПрочитатьJSON(). Работает на платформе версии не ниже 8.3.6.

3 стартмани

27.01.2016    47611    357    kser87    44    

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

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

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

1 стартмани

29.12.2015    42459    20    milkers    4    

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

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

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

1 стартмани

28.12.2015    30608    72    vasvl123    9    

Передача больших пакетов через веб-сервисы

Практика программирования Администрирование данных 1С Внешние источники данных v8 Абонемент ($m)

Реализация механизма передачи больших пакетов через веб-сервисы. С его помощью передать файл размером в несколько гигабайт не составит проблем.

1 стартмани

06.12.2015    60853    51    YPermitin    19    

Пример связи 1С и мессенджера Telegram. Получение данных из 1С запросом из Telegram

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

В результате чтения публикации Вы получите готовую внешнюю обработку, позволяющую получать из 1С данные, запрашиваемые через Telegram. В данной статье рассмотрим следующее: Использование HTTPСоединение; Чтение JSON для версии 1С 8.3.6 и выше, а также аналог JSON для версии 1С ниже 8.3.6; Подключение обработчика ожидания; Некоторые основные возможности API Telegram; Как создать бота для Telegram; Программное создание колонок дерева на управляемой форме;

1 стартмани

19.11.2015    102936    484    Luchik    210    

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

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

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

1 стартмани

01.10.2015    55763    35    ildarovich    41    

Полезные приемы при работе с Excel из 1С (Версия 3.1)

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

Программисту 1С часто приходится работать с таблицами Excel из 1С. Я постарался собрать небольшой FAQ и набор функций для работы с файлами Excel. Надеюсь, кому-то будет полезна данная статья.

1 стартмани

22.09.2015    224373    477    Zerocl    76    

Javascript и 1С. Кросс-платформенное взаимодействие

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

Что делать, если необходим богатый интерфейс, а управляемые формы нам его не могут обеспечить? Использовать HTML и JavaScript. В статье рассмотрено взаимодействие кода 1С и JavaScript, работающее на любой платформе: толстый, тонкий и веб-клиент, под Windows и Linux.

1 стартмани

14.09.2015    74123    210    VitaliyCeban    59