Ускорение перепроведения документов

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

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

УПП оптимизация перепроведение

Описание незначительной доработки типовой конфигурации, которая привела к ускорению перепроведения документов на 40%.
Дорабатывалась УПП 1.3, но это должно без каких-либо изменений работать и в других конфигурациях с подобным подходом к проведению документов (КА, УТ 10)

Необходимость в такой доработке возникла после того, как такая регулярная операция, как перепроведение месяца, перестала укладываться в ночь. Начальник IT сказал, что полгода назад всё было ОК, а значит, надо откатить все изменения, сделанные предыдущим программистом (я тогда только-только устроился на эту работу) за последние полгода, благо бэкап есть.
Идея интересная, чтобы не сказать больше, но я решил пойти другим путём: запустил замер производительности, перепровёл день и посмотрел, кто вылез в топ. Одним из рекордсменов оказалась процедура ОбщегоНазначения.УдалитьЗаписанныеДвиженияДокумента, которая вызывалась перед проведением каждого документа. Процедура записывает пустые наборы записей в каждый регистр, в котором проводимый документ является регистратором, что не есть хорошо, потому что обычно в большинстве этих регистров данный документ и так не делал движений.

Список регистров для очистки процедура получала от функции ПроведениеДокументов.МассивРегистровНужноОчистить, поэтому оставалось сделать так, чтобы эта процедура возвращала только те регистры, в которых есть движения.

Для этого в конфигурацию я добавил:

  • регистр сведений ГМ_НепустыеДвижения (по старой традиции этой конфигурации, истоков которой никто не помнит, все нетиповые объекты должны содержать префикс "ГМ_") с измерениями Документ (ведущее, основной отбор) типа ДокументСсылка и НомерРегистра (основной отбор) типа Число(3,0,Неотрицательное).
  • параметр сеанса ГМ_РегистрыПоНомеру типа ФиксированныйМассив
  • параметр сеанса ГМ_НомераРегистровПоИмени типа ФиксированноеСоответствие
  • справочник ГМ_НомераРегистров с кодом типа Число длиной 3 (должно совпадать с длиной измерения НомерРегистра)

Затем подправил процедуру ПроведениеДокументов.МассивРегистровНужноОчистить:


Функция МассивРегистровНужноОчистить(ДокументОбъект) Экспорт
	
	МассивРегистров = Новый Массив();
	//Коровин 09.09.2014
	лствИмена=ПараметрыСеанса.ГМ_РегистрыПоНомеру;
	лНабор=РегистрыСведений.ГМ_НепустыеДвижения.СоздатьНаборЗаписей();
	лНабор.Отбор.Документ.Установить(ДокументОбъект.Ссылка);
	лНабор.Прочитать();
	Для каждого ТекЗапись Из лНабор Цикл
		МассивРегистров.Добавить("РегистрНакопления."+лствИмена[ТекЗапись.НомерРегистра-1]);
	КонецЦикла;
	лфлНетИнформацииОДвижениях=МассивРегистров.Количество()=0;//Мы, вероятно, в том периоде, где регистр ГМ_НепустыеДвижения пуст
	//Коровин 09.09.2014 - конец
	
	Для Каждого Движение ИЗ ДокументОбъект.Метаданные().Движения Цикл
		//Коровин 09.09.2014
		//МассивРегистров.Добавить(Движение.ПолноеИмя());
		Если лфлНетИнформацииОДвижениях ИЛИ Найти(Движение.ПолноеИмя(),"РегистрНакопления.")=0 Тогда
			МассивРегистров.Добавить(Движение.ПолноеИмя());
		КонецЕсли;
		//Коровин 09.09.2014 - конец
	КонецЦикла; 
	
	Возврат МассивРегистров;
	
КонецФункции

И добавил в привилегированный модуль процедуру, которую потом вызвал в начале процедуры ПередНачаломРаботыСистемы модуля обычного приложения:

Процедура ПодготовитьНомераРегистров() Экспорт
	лмИменаРегистров=Новый Массив;
	лствНомераПоИмени=Новый Соответствие;
	лЗапрос=Новый Запрос("ВЫБРАТЬ Код, Наименование ИЗ Справочник.ГМ_НомераРегистров УПОРЯДОЧИТЬ ПО Код");
	лВыборка=лЗапрос.Выполнить().Выбрать();
	лТекКод=0;
	Пока лВыборка.Следующий() Цикл
		лТекКод=лТекКод+1;
		Пока лВыборка.Код>лТекКод Цикл //На случай, которого не должно быть - когда коды идут не подряд
			лмИменаРегистров.Добавить();
			лТекКод=лТекКод+1;
		КонецЦикла;
		лмИменаРегистров.Добавить(лВыборка.Наименование);
		лствНомераПоИмени.Вставить(лВыборка.Наименование,лТекКод);
	КонецЦикла;
	Для каждого ТекРегистр Из Метаданные.РегистрыНакопления Цикл
		Если лствНомераПоИмени[ТекРегистр.Имя]=Неопределено Тогда //Новый регистр
			лЭлемент=Справочники.ГМ_НомераРегистров.СоздатьЭлемент();
			лЭлемент.Наименование=ТекРегистр.Имя;
			Если лЭлемент.Наименование<>ТекРегистр.Имя Тогда
				ВызватьИсключение "Наименование регистра "+ТекРегистр.Имя+" слишком длинное ("+СтрДлина(ТекРегистр.Имя)+" символов) и не влезает в справочник ГМ_НомераРегистров";
			КонецЕсли;
			лЭлемент.Записать();
			
			лмИменаРегистров.Добавить(ТекРегистр.Имя);
			лствНомераПоИмени.Вставить(ТекРегистр.Имя,лЭлемент.Код);
		КонецЕсли;
	КонецЦикла;
	ПараметрыСеанса.ГМ_РегистрыПоНомеру=Новый ФиксированныйМассив(лмИменаРегистров);
	ПараметрыСеанса.ГМ_НомераРегистровПоИмени=Новый ФиксированноеСоответствие(лствНомераПоИмени);
КонецПроцедуры

 И, наконец, добавил подписку на событие ПриЗаписи всех регистров накопления:

Процедура ПриЗаписиРегистраНакопления(Источник,Отказ,Замещение) Экспорт
	Если НЕ Отказ Тогда
		лНабор=РегистрыСведений.ГМ_НепустыеДвижения.СоздатьНаборЗаписей();
		лНабор.Отбор.Документ.Установить(Источник.Отбор.Регистратор.Значение);
		лНабор.Отбор.НомерРегистра.Установить(ПараметрыСеанса.ГМ_НомераРегистровПоИмени[Источник.Метаданные().Имя]);
		Если Источник.Количество() Тогда
			лЗапись=лНабор.Добавить();
			лЗапись.Документ=лНабор.Отбор.Документ.Значение;
			лЗапись.НомерРегистра=лНабор.Отбор.НомерРегистра.Значение;
			лНабор.Записать();
		ИначеЕсли Замещение Тогда
			//Как минимум РасчетСебестоимостиВыпуска в регистр НезавершенноеПроизводство пишет движения порциями,
			//так что без учёта флага Замещение есть риск сбросить признак, если последний дописанный набор был пустым
			лНабор.Записать();
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры


В общем, работает всё так: при запуске 1С процедура ПодготовитьНомераРегистров заполняет параметры сеанса именами и номерами регистров накопления, создавая при необходимости нужные элементы в справочнике ГМ_НомераРегистров. При каждой записи непустого набора в какой-либо регистр накопления подписка на событие ПриЗаписи добавляет для этого регистра и регистратора набора запись в регистр ГМ_НепустыеДвижения. При записи пустого набора с установленным флагом Замещение такая запись, наоборот, удаляется.

При очистке движений документа изменённая процедура ПроведениеДокументов.МассивРегистровНужноОчистить читает из регистра ГМ_НепустыеДвижения все записи по этому документу и возвращает массив регистров, для которых записи есть. Если нет ни одной записи, то работает старый алгоритм - на тот случай, если перепроводимый документ был проведён до того, как в конфигурацию были внесены эти изменения. Это также означает, что из регистра ГМ_НепустыеДвижения можно смело вычищать записи по документам из закрытых периодов, которые трогать не предполагается, так как в случае необходимости перепроведение этих документов пройдёт нормально без всяких дополнительных действий.

Upd

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

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

2. Очистить регистр ГМ_НепустыеДвижения. Способ на случай, когда не воспользовались первым. Справочник ГМ_НомераРегистров тоже можно очистить (я бы очистил), но необязательно.

3. Доработать алгоритм так, чтобы в справочнике ГМ_НомераРегистров также хранилось имя таблицы базы данных соответствующего регистра. При переименовании регистра имя таблицы не поменяется и это можно будет использовать в процедуре ПодготовитьНомераРегистров.

Я эту проблему решать не стал, потому что не помню, чтобы хоть раз менял имя регистра (разве что с ИмяРегистра на УдалитьИмяРегистра, но к этому моменту в регистре, как правило, всё равно не было записей), но эта проблема на самом деле не единственная, есть и более вероятная и неприятная: некоторые обновления релиза включают в себя какую-нибудь обработку записей регистров. При этом могут быть перезаписаны наборы записей в том периоде, для которого в регистре ГМ_НепустыеДвижения нет записей и тогда при перепроведении тех документов этого периода, которые делали движения по перезаписанному регистру, движения по всем остальным регистрам задвоятся. Неприятность этой второй проблемы в том, что вы не узнаете о ней по матюкам программы, как непременно узнаете о первой. Зато если вы про неё в курсе, решить её можно способом №2 из решений первой проблемы.

В качестве профилактической меры можно после каждого обновления релиза запускать обработку, которая бы удаляла записи из регистра ГМ_НепустыеДвижения до определённой даты. Такую обработку по-любому стоит иметь для того, чтобы удалять заведомо старые записи, ибо маленькие регистры быстрее работают.

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. cargobird 291 31.03.15 07:28 Сейчас в теме
Интересная идея, попробую...
2. tormozit 6017 31.03.15 07:47 Сейчас в теме
Рекомендую автору предупредить читателей о том, что в его реализации не предусмотрено переименование регистров. Последствия такого шага будут плачевными.
charushkin; Diversus; +2 Ответить
3. cargobird 291 31.03.15 08:23 Сейчас в теме
(2) tormozit, на своей практике переименование регистров не встречал ни разу (у вас, видимо, опыта побольше). Копипастом по конфигурации размножаются самые причудливые названия, и чтобы принципиально потребовалось переименование - такого не было...
5. tormozit 6017 31.03.15 09:24 Сейчас в теме
(3) cargobird, конечно, у меня опыта побольше =) Думаете мало добавляют свои регистры и потом меняют им наименование, когда поймут, что промахнулись с именем? Тем более в 8.3.6 сейчас переименование стало заметно менее затратным из-за нового помощника.
4. Балабас 164 31.03.15 09:00 Сейчас в теме
где статистика на сколько увеличилась производительность в результате описанных изменений?
8. vasyak319 139 31.03.15 10:42 Сейчас в теме
(4) Балабас, (7) deadman66, в первой же фразе анонса. Понятно, что это не ровно 40.00000%, но точные цифры тут не имеют смысла - даже на одном и том же сервере, выделенном специально для тестирования и замера (а иначе как вообще было оценить прирост) время заметно плавает от перепроведения к перепроведению, а приводить его одно и то же состояние перед каждым тестом (делаем образ диска - перезагружаем - тестируем - восстанавливаем образ диска - перезагружаем - тестируем...) мне нафиг не упёрлось. А даже если бы упёрлось, это не помогло бы статье, так как это были бы цифры для моей базы и моего тестового сервера.
На рабочем сервере теперь возможно за ночь перепровести два месяца вместо одного - по мне так вполне достаточная характеристика доработки.
6. AlX0id 31.03.15 10:14 Сейчас в теме
Чота закрадываются сомнения насчет того, что подобный подход не ведет к постоянным блокировкам на регистре ГМ_НепустыеДвижения.. Каждый документ при записи каждого регистра в него лезет писать свои сочинения.. Или я чот недопонял?
9. vasyak319 139 31.03.15 10:51 Сейчас в теме
(6) AlX0id, (7) deadman66, были такие опасения и думал, что придётся накладывать управляемые блокировки (тут-то всё будет хорошо на 100%, ибо диапазоны разных документов не пересекаются), но то ли 1С сама их хорошо накладывает, то ли одно из двух (не было времени выяснять, отчего же всё хорошо), но проблем не возникло.
11. AlX0id 31.03.15 12:08 Сейчас в теме
(9)
Внимательно посмотрел структуру регистра - понял, что недопонял )
Думал, что в регистре привязка идет к типу документа, а не к конкретной ссылке. Тогда да - диапазоны не пересекаются, 1С и так наложит блокировку по измерениям, если для регистра применяется управляемый режим.
7. deadman66 31.03.15 10:24 Сейчас в теме
Статистика замеров где? И, да, с блокировками не возникает проблем?
10. Fox-trot 118 31.03.15 12:08 Сейчас в теме
так речь про файловый вариант?
15. vasyak319 139 31.03.15 14:34 Сейчас в теме
(10) Fox-trot, нет, но мне интересно, из чего вы сделали такой вывод.
17. Fox-trot 118 31.03.15 16:05 Сейчас в теме
(15) всю жись с 1с работал тока с трехзвенкой и когда-то сделал вывод, что количество информации = размер базы не влияет на скорость выполнения проги. такие дела
19. vasyak319 139 31.03.15 16:18 Сейчас в теме
(17) Fox-trot, ну, во-первых, конечно, влияет (другое дело, что вы могли этого не заметить), а во-вторых, всё равно непонятно - в статье про количество данных ни слова.
12. CrazyCD 31.03.15 13:46 Сейчас в теме
После проведения года попробую вкрячить на КОРП подобное.
А так ловите плюсик авансом =)))
13. Йожкин Кот 1081 31.03.15 13:55 Сейчас в теме
Еще можно сделать проведение док-та на сервере, чтобы не гонять наборы записей, результаты запросов к шапке и ТЧ туда-сюда. Тоже очень хорошо скажется на производительности.
14. vasyak319 139 31.03.15 14:33 Сейчас в теме
(13) Йожкин Кот, а я долгое время думал, ОбработкаПроведения всегда на сервере выполняется. Пока как-то утром не пришел и не увидел, что проведение (Операции - Проведение документов...) встало и ждёт, что я в окне предупреждения ОК нажму. Так я узнал две вещи: что один из тех парней, что дорабатывали эту конфигу, идиот (в ОбработкуПроведения Предупреждение воткнул!) и что перепроведение выполняется на клиенте, потому что иначе тот документ вылетел бы с ошибкой компиляции модуля.
Какое-то время попереписывался с Хотлайном на тему "Когда такое стало возможно", но получился, как это часто бывает, разговор с глухим.
25. Йожкин Кот 1081 01.04.15 12:32 Сейчас в теме
(14) Проведение, которое инициировано из формы или формы списка док-та для толстого клиента всегда выполняется на клиенте. Для тонкого клиента - всегда на сервере, в не зависимости от точки вызова.
26. tormozit 6017 01.04.15 12:40 Сейчас в теме
(25) Йожкин Кот, не совсем верно. Проведение стандартными командами вызывается
- для управляемой формы всегда на сервере
- для обычной формы всегда на клиенте
31. vasyak319 139 01.04.15 17:28 Сейчас в теме
(25) Йожкин Кот, теперь-то я в курсе, но ещё в 8.1 всё проводилось на сервере и такой мрачный прикол с Предупреждением в ОбработкеПроведения даже не компилировался. Там даже Сообщить сначала не компилировалось, это потом сделали очередь сообщений, которую сервер отдаёт клиенту вместе с возвратом управления.
16. Evg-Lylyk 3086 31.03.15 15:52 Сейчас в теме
Не понял зачем так
Я переписал функцию МассивРегистровНужноОчистить

Функция МассивРегистровНужноОчистить(ДокументОбъект) Экспорт

МассивРегистров = Новый Массив();
Запрос = Новый Запрос;

ДвиженияДокумента = ДокументОбъект.Метаданные().Движения;
Для Каждого Движение ИЗ ДвиженияДокумента Цикл

ИмяРегистра = Движение.ПолноеИмя();

Если ЗначениеЗаполнено(Запрос.Текст) Тогда
Запрос.Текст = Запрос.Текст + " ОБЪЕДИНИТЬ ВСЕ ";
КонецЕсли;
Запрос.Текст = Запрос.Текст + "ВЫБРАТЬ ПЕРВЫЕ 1""" + ИмяРегистра + """ ИЗ " + ИмяРегистра + " ГДЕ " + ИмяРегистра + ".Регистратор = &Регистратор";
КонецЦикла;

Запрос.УстановитьПараметр("Регистратор", ДокументОбъект.Ссылка);
Результат = Запрос.Выполнить();

Возврат Результат.Выгрузить().ВыгрузитьКолонку("Поле1");

КонецФункции

вроде все теперь очищает только те регистры в которых были записи...
проверял на документе ПлатежкаИсх (5 раз проводил) ускорилось очень значительно
теперь проверяю и думаю на что это может повлиять эта доработка
Mkonst; kauksi; vasyak319; AlkB; +4 Ответить
18. vasyak319 139 31.03.15 16:16 Сейчас в теме
(16) Evg-Lylyk, у меня запрос к одной маленькой таблице (вся эта заморочка с нумерацией регистров как раз для того, чтобы она была настолько маленькой, насколько возможно), а у вас к множеству очень больших. Это тоже должно ускорить перепроведение (что вы и ощутили), так как все СУБД оптимизируют на чтение, а не на запись, но тут вопрос, чего вам нужно больше - написать покороче и постабильнее (у вашего способа нет проблем моего) или выжать из возможности максимум.
Хотя я допускаю, что ответ вопрос "какой метод быстрее" не такой однозначный и зависит от обстоятельств (мозги сервера, размер базы, характер заполненности регистров и т.п.).

Думаю, будет здорово, если вы оформите свой камент в виде статьи.
20. Evg-Lylyk 3086 31.03.15 16:29 Сейчас в теме
(18) Понятно. Думаю вашей статьи достаточно.
21. ZOMI 430 31.03.15 23:44 Сейчас в теме
Ниже привожу листинг процедуры( УПП 1.3.51, которая так возбудила возмутила автора

// Процедура очистки записанных движений документа
//
// Параметры:
//	ДокументОбъект 				- документ, движения которого удаляются
//	Отказ 						- булево, признак отказа
//	ВыборочноОчищатьРегистры 	- булево, признак выборочной очистки наборов записей 
//								Если Истина - часть наборов записей не будут очищены, будут очищены только коллекции движений
//	РежимПроведенияДокумента 	- режим проведения (оперативный / неоперативный), 
//								нужен для составления списка регистров, которые не надо очищать
Процедура УдалитьЗаписанныеДвиженияДокумента(ДокументОбъект, Отказ, ВыборочноОчищатьРегистры, РежимПроведенияДокумента)
	
	// Получим перечень регистров, движения по которым нужно очистить
	МассивРегистров = ПроведениеДокументов.МассивРегистровНужноОчистить(ДокументОбъект);
	
	Если МассивРегистров.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	// Если очищать регистры надо выборочно, то подготовим список таких регистров, 
	//	которые можно не очищать при перепроведении
	Если ВыборочноОчищатьРегистры Тогда
		РегистрыДляОптимизацииПерезаписиДвижений = ПолучитьРегистрыДляОптимизацииПерезаписиДвижений(РежимПроведенияДокумента);
	КонецЕсли;
	
	// Переменные логики отложенного проведения
	ДокументИспользуетсяВОтложенномПроведении = Ложь;
	ВыполняетсяДопроведение                   = Ложь;
	ПроведениеПоВсемВидамУчета                = Ложь;
	
	СтруктураПараметровПроведения = ОтложенноеПроведениеДокументов.ПолучитьПараметрыПроведенияДокумента(ДокументОбъект);
	ДокументИспользуетсяВОтложенномПроведении = СтруктураПараметровПроведения.ДокументИспользуетсяВОтложенномПроведении;
	
	Если ДокументИспользуетсяВОтложенномПроведении Тогда
		ВыполняетсяДопроведение = СтруктураПараметровПроведения.ВыполняетсяДопроведение;
		ПроведениеПоВсемВидамУчета = СтруктураПараметровПроведения.ПроведениеПоВсемВидамУчета;
		РегистрыОтложенногоПроведения = ОтложенноеПроведениеДокументов.ПолучитьРегистрыОтложенногоПроведения();
	КонецЕсли;
	
	//Обойдем список регистров, по которым существуют движения, и выполним очистку необходимых регистров
	Для Каждого ПолноеИмяРегистра ИЗ МассивРегистров Цикл
		
		// Имя регистра передается как значение, 
		// полученное с помощью функции ПолноеИмя() метаданных регистра
		ПозицияТочки = Найти(ПолноеИмяРегистра, ".");
		ТипРегистра = Лев(ПолноеИмяРегистра, ПозицияТочки - 1);
		ИмяРегистра = СокрП(Сред(ПолноеИмяРегистра, ПозицияТочки + 1));
		
		// Используется для оптимизации перезаписи движений платформой
		//	Если значение Ложь, набор записей не будет очищен
		// По умолчанию все движения надо удалять
		УдалятьДвижения = Истина;
		
		Если ВыборочноОчищатьРегистры И РегистрыДляОптимизацииПерезаписиДвижений.Найти(ИмяРегистра) <> Неопределено Тогда
			УдалятьДвижения = Ложь;
		КонецЕсли;
		
		Если ДокументИспользуетсяВОтложенномПроведении Тогда
			Если ВыполняетсяДопроведение Тогда
				//	Если выполняется допроведение, то удаляются только движения по регистрам, 
				//	которые формируются при отложенном проведении
				Если РегистрыОтложенногоПроведения.Найти(СокрЛП(ПолноеИмяРегистра)) = Неопределено Тогда
					Продолжить;
				КонецЕсли;
			Иначе
				// Документ проводится в режиме отложенного проведения
				
				// Если для документа выключен режим проведения "по всем видам учета", 
				// то всегда удаляются движения по регистрам, которые формируются при допроведении
				//	(независимо от того, входят ли они в список РегистрыДляОптимизацииПерезаписиДвижений)
				Если НЕ УдалятьДвижения
					И НЕ ПроведениеПоВсемВидамУчета 
					И РегистрыОтложенногоПроведения.Найти(СокрЛП(ПолноеИмяРегистра)) <> Неопределено Тогда
					
					УдалятьДвижения = Истина;
				КонецЕсли;
			КонецЕсли; 
		КонецЕсли; 
		
		Если УдалятьДвижения Тогда
			// Удаление движений происходит без контроля доступа - передаем пустую таблицу движений
			ПолныеПрава.ЗаписатьНаборЗаписейНаСервере(ИмяРегистра, ДокументОбъект.Ссылка,, ТипРегистра);
		Иначе
			//Установим признак модифицированности набора записей, чтобы записались все коллекции движений, по которым
			//были записи на момент проведения
			ДокументОбъект.Движения[ИмяРегистра].Очистить();
		КонецЕсли;
	КонецЦикла;	
	
КонецПроцедуры
Показать


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


anchovy; Fox-trot; +2 Ответить
22. vasyak319 139 01.04.15 09:45 Сейчас в теме
(21) ZOMI, напрашивается встречный вопросик: Вы смотрели, что на самом деле делает эта процедура при взведённом параметре ВыборочноОчищатьРегистры и в каких вообще случаях он взведён, или вы просто увидели, что есть такой параметр и решили, что вот он - золотой ключик?
23. AlX0id 01.04.15 09:49 Сейчас в теме
(21) ZOMI,
а это выборочное очищение где-то отдельно включается или само по себе работает?
24. vasyak319 139 01.04.15 10:23 Сейчас в теме
(23) AlX0id, советую посмотреть, как и откуда вызывается процедура, вызывающая эту процедуру и, до кучи, список регистров, на который влияет упомянутый флажок, хотя последнее, в общем, необязательно.
28. AlX0id 01.04.15 15:21 Сейчас в теме
(24)
Ну вот сильно не хочется по коду лазить, если честно ) Тем более, когда не знаешь, как он должен работать. Я просто интересуюсь, может быть где-то есть описание этого использования механизма на уровне пользователя/программиста/администратора - мало ли удастся облегчить людям жизнь, не утруждая свою ))
30. vasyak319 139 01.04.15 16:49 Сейчас в теме
(28) AlX0id, там немного, потому и предложил взглянуть. Если вкратце, то этот параметр, конечно, никакими настройками не управляется. Где можно (а можно в большинстве реально используемых документов, в частности - ПТиУ и РТиУ) он уже взведён. Влияние оказывает не на все, а где-то на десяток второстепенных регистров.
В общем, что имел в виду ZOMI своей цитатой процедуры (спасибо, что не модуль целиком), а также ссылкой на загадочные "механизмы типовой", по-моему даже он сейчас не в курсе.
27. capitan 1745 01.04.15 13:54 Сейчас в теме
Программисты 1С они такие ... программисты.
А те, кто не прогуливал в институте Основы программирования, знают, что каждую задачу можно (и нужно) описать формально, потом блок-схема, потом код.
Оставив за бортом код мы увидим следующее:
1. Автор подозревает, возможно небезосновательно, что документы в УПП являются регистраторами для регистров, в которых проводки не делают. Тут камень в огород 1С ибо в каждой книге по программированию написано - не добавляйте лишних регистров/регистраторов.
И тут вот хорошо бы увидеть отчет, который пройдет по конфигурации, посчитает и выведет в виде - Документ - Количество регистров где он является регистратором - Количество регистров, где реально есть проводки.
Если автор состряпает такой отчет и выложит его сюда, да еще для любой конфигурации - звезду ему во всю грудь.
Тогда можно уже аргументированно теребить 1С и/или править документ убирая регистры, где он в регистраторах не нужен.
2. Что сделал автор (надеюсь инфостарт не читают его юзеры и начальник) - он ускорил перепроведение документов, замедлив, в зависимости от количества строк табличной части документа конечно, проведение документа. Не говоря уже о взаимных блокировках регистра сведений при проведении, до которых автору конечно дела нет - он то ночью один работает. За что конечно юзеры, говорят простое человеческое спасибо.
По хорошему нужно делать регламентное задание, заполняющее регистр сведений и всю кухню с перепроведением завязывать на принак - массовое перепроведение ли это вообще. А так - оставлять возможно стандартный механизм от 1С.
3. В итоге статья получается о том, как один, даже не выпивший фанты программист, может тормознуть десяток другой пользователей.
Designer1C; Fox-trot; 7o2uYXg; +3 Ответить
29. vasyak319 139 01.04.15 16:42 Сейчас в теме
(27) capitan, бред. Расписал бы подробнее, да вот опровергать буйные фантазии мне ещё лет 10 назад скучно стало.
32. capitan 1745 01.04.15 18:39 Сейчас в теме
(29) а ты посмотри на сколько дольше стал проводиться один документ. И поймешь чему за 10 лет научился.
33. user1310927 20.05.20 13:12 Сейчас в теме
(32) Подскажите почему блокируется Регистр бухгалтерии после очистки движения и параллельная работа не возможна до конца проведения документа
34. user1310927 20.05.20 13:22 Сейчас в теме
..............
Если УдалятьДвижения Тогда
// Удаление движений происходит без контроля доступа - передаем пустую таблицу движений
ПолныеПрава.ЗаписатьНаборЗаписейНаСервере(ИмяРегистра, ДокументОбъект.Ссылка,, ТипРегистра);
Иначе
.............
после 15 итерции где идет очиска Бух регистра (всего 54), не возможно провести любой документ где задействованы корреспонденция счетов в этом документе до конца проведения документа
Оставьте свое сообщение

См. также

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

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

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

27.01.2016    76690    Serginio    108    

Произвольные колонтитулы и повтор шапки таблицы в табличном документе (функция)

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

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

07.10.2020    908    ellavs    1    

Анализ проблем производительности по динамике мониторинга RAS 1C

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

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

07.10.2020    2575    ivanov660    12    

Ускорение медленной работы строк в 1С на примере 1С:Документооборот КОРП

Производительность и оптимизация (HighLoad) v8 ДО Бесплатно (free)

Если у вас в 1С:Документооборот КОРП 2.1.11.5 (часть более старых и новых конфигураций): 1) Долго отправляется почта в формате HTML; 2) Медленно открывается документы внутренние / входящие / исходящие; 3) Тормозит область просмотра или открытие задач. Тогда вам сюда.

02.10.2020    3245    Nykyanen    16    

Универсальные функции с примерами использования Промо

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

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

26.02.2016    41306    unichkin    46    

Описание почти всех событий технологического журнала

Технологический журнал v8 Бесплатно (free)

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

19.08.2020    6551    YPermitin    29    

SQL для 1С: пишем правильно, красиво, сложно

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

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

14.08.2020    9403    dmurk    30    

Самый простой парсинг и обработка веб-страниц в 1С

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

Рассмотрим самый простой парсинг веб-страниц средствами платформы 1С и еще некоторые полезные приемы работы с веб-страницами.

07.08.2020    4741    YPermitin    18    

Минимализмы 3 Промо

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

Очередная серия "минимализмов" [http://infostart.ru/public/306536/, https://infostart.ru/public/460935/]. Также, как и в предыдущих статьях, здесь приведена подборка коротких оригинальных авторских решений некоторых задач. Ранее эти решения были разбросаны по моим комментариям к чужим публикациям.

19.02.2018    46753    ildarovich    45    

Пользовательское поле СКД одной процедурой

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

Быстрое создание пользовательского поля "выражение" одной процедурой

05.08.2020    1583    Yashazz    0    

Нестандартные блокировки при работе с OLAP-нагрузкой

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

Если выполнение отчета мешает работе других пользователей и провоцирует блокировки, даже с учетом «грязного чтения» – ситуация кажется парадоксальной. О том, как расследовать такие проблемы, на конференции Infostart Event 2019 Inception рассказали ведущий программист торгового дома «Петрович» Станислав Щербаков и специалист по производительности компании «СофтПоинт» Александр Денисов.

20.07.2020    1926    Филин    7    

Полезные встроенные функции для работы с печатными формами и не только на УТ 11.4 и БП 3.0 (сравнение)

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

В данном обзоре приведу примеры встроенных используемых функций для работы с печатными формами на примерах конфигураций Управление торговлей 11.4 и Бухгалтерия 3.0.

10.07.2020    2980    quazare    5    

Исследование технологического журнала 1С при помощи регулярных выражений в блокноте Промо

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

Все из тех, кто пробовали сдать на сертификат "Эксперт по технологическим вопросам 1С", сталкивались с методикой ЦКТП - разбор файлов технологического журнала при помощи консоли bash. Я, в свою очередь,внёс изменения в данную методику. Мне хотелось достичь более понятного вида и сфокусироваться на Perl, в качестве предпочтительного средства обработки файлов ТЖ. Вот что из этого вышло:

30.10.2017    29775    MrWonder    42    

Вывод дерева в табличный документ СКД

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

Вывод содержимого элемента формы "ДанныеФормыДерево" в табличный документ средствами СКД.

09.07.2020    2627    Yashazz    6    

Автоматическая классификация ошибок технологического журнала

Технологический журнал v8 1cv8.cf Бесплатно (free)

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

25.06.2020    2738    ivanov660    12    

[SQL Server] Использование trace flag 9592 для сжатия траффика в кластере AlwaysOn

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

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

18.05.2020    2095    Aleksey.Bochkov    3    

Выполнение произвольного кода в фоновых заданиях Промо

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

Если надо быстро провести 100`000 документов...

13.01.2016    24676    unichkin    13    

Эти занимательные временные таблицы

Производительность и оптимизация (HighLoad) Администрирование СУБД v8 Бесплатно (free)

Кое-что интересное о временных таблицах и работе платформы 1С с ними.

06.04.2020    11748    YPermitin    0    

Оптимизация запросов 1С посредством индексации временных таблиц. Миф? Тестируем, смотрим, считаем

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

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

03.04.2020    4397    feva    15    

Как я собрал для себя высокопроизводительный и бесплатный облачный бекенд для 1С на PosgreSQL + PostgREST

Производительность и оптимизация (HighLoad) WEB Интеграция Мобильная разработка Администрирование веб-серверов v8 Бесплатно (free)

В этой статье я расскажу о проблемах бека для мобильных приложений или другого фронта, который требует производительности, быстрой реакции и отказоустойчивости, и как я решил это благодаря opensource проекту PostgREST и СУБД Postgre SQL 12. Проведу простой тест производительности для сравнения 1С с данным решением. Это может быть полезно всем, кто разрабатывает мобильные приложения либо фронтсайд-приложения для 1С на чем угодно - на мобильной платформе или на нативном языке или на Simple UI. И также обзор новых функций SimpleUI для связи с этим бекендом.

31.03.2020    13009    informa1555    31    

Долго открывается конфигуратор Промо

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

В ОС Windows Server 2012 бывает полезно выключать службу Dynamic Fair Share Scheduling (DFSS позволяет балансировать и распределять ресурсы между пользователями), чтобы повысить производительность 1С:Предприятие 8 в ряде случаев.

22.04.2015    41062    Gilev.Vyacheslav    1    

Многострочный контекст событий

Производительность и оптимизация (HighLoad) Технологический журнал v8 Бесплатно (free)

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

31.03.2020    3160    vasilev2015    9    

Анализ взаимоблокировок

Производительность и оптимизация (HighLoad) Технологический журнал v8 Бесплатно (free)

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

20.03.2020    4947    vasilev2015    24    

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

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

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

18.03.2020    7214    kaliuzhnyi    43    

Как можно "положить" SQL сервер с помощью обычной консоли запросов 1С Промо

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

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

22.01.2014    67416    yuraos    112    

Оптимизатор запросов. Вторая часть

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

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

23.01.2020    6455    darkdan77    59    

Улучшаем производительность 1С. Рекомендации

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

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

23.01.2020    7911    Kaval88    26    

Распределение оплаты по товарам Промо

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

Учебная задача. Оплата приходит по заказу. Требуется запросом распределить её по товарам. Практическая задача была сложнее. Упростил специально для иллюстрации. Сначала собираем в одну таблицу заказы и товары. Затем ОБЪЕДИНТЬ ВСЕ с оплатами. Потом намазываем оплату на товар.

04.08.2014    19172    Трактор    5    

Сходство Джаро - Винклера. Нечеткое сравнение строк

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

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

25.12.2019    7077    brooho    17    

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

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

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

19.12.2019    11634    ivanov660    16    

Полезности | Дерево значений | Обычные формы |

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

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

04.12.2019    5675    Mellow    7    

Ускоряем списание партий УПП 1.2 / 1.3 / УТ 10.3 Промо

Производительность и оптимизация (HighLoad) v8 УТ10 УПП1 Бесплатно (free)

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

21.06.2013    54520    Антон Ширяев    117    

Использование XML-схемы из макета внешней обработки

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

Простой способ использования XML-схем из макета внешней обработки.

28.10.2019    10946    Olesia_Matusevich    10    

Быстрое создание наполненных коллекций

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

Разберем самые частые способы создания коллекции, значения которой известны заранее. И сравним скорость их выполнения.

28.10.2019    7214    SeiOkami    66    

Преобразование XML в таблицу значений или иной объект 1С методом XSL преобразования

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

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

24.10.2019    11448    kraspila    30    

Сравнение скорости работы 1C+MSSQL и файлового варианта Промо

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

На форумах постоянно задается один и тот же вопрос: почему 1C+MSSQL медленнее обрабатывает запросы чем файловая? Затем обычно идет «флуд» на несколько десятков страниц. Есть два популярных «течения» в таких форумах — одни говорят что для клиент-серверного варианта это нормально, файловый вариант всегда должен работать быстрее, другие говорят что 1С плохо работает с субд. В результате «баталий и выяснения отношений» на форумах люди расходятся при своих мнения.

19.02.2013    54792    Gilev.Vyacheslav    46    

Обертка функций Excel на русском. Ускорение процесса разработки.

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

Устали переключаться с русского на английский и обратно при работе с таблицами Excel из 1С? Сборка наиболее необходимых функций и методов работы с Excel, обернутых в функции 1С на русском языке.

24.10.2019    7274    DmitryKotov    6    

Весёлые картинки о работе Performance Monitor на Windows Server 2016 Std по мотивам расследования потери производительности на базе 1С

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

Данная публикация посвящена одной особенности Performance Monitor на Windows Server 2016 Std. Как понимать графики Performance Monitor на Windows Server 2016 Std при расследовании проблем в работе 1С.

22.10.2019    7681    EugeneSemyonov    11    

Обслуживание баз данных. Не так просто, как кажется

Производительность и оптимизация (HighLoad) Администрирование СУБД v8 1cv8.cf Бесплатно (free)

Считаете, что обслуживание индексов и статистик дело простое? Что ж, это не всегда так.

14.10.2019    17863    YPermitin    28    

Параллельные вычисления в 1С 8 Промо

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

Решение позволяет ускорять выполнение запросов в 1С 8 в отчетах путем их параллельного выполнения в разных потоках.

11.02.2013    30096    gallam99    19    

Полезняшки по СКД и построителям. Просто код

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

Полезные процедуры и функции для работы с построителями и СКД. Просто исходник.

10.10.2019    10063    Yashazz    45    

Мониторинг высоконагруженной системы

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

Высоконагруженной системе (более 8000 клиентских сессий) мониторинг необходим. Про опыт использования инструментов для мониторинга – самописной системы информирования, написанной на C#, и конфигурации «Центр контроля качества» в связке с системой отображения данных Grafana, на конференции Infostart Event 2018 Education рассказал Олег Репников.

13.09.2019    9075    Repich    5    

Использование Zabbix для сбора информации о серверных вызовах и управляемых блокировках с сервера 1С Предприятия, работающего на платформе GNU/Linux

Администрирование данных 1С Zabbix v8 Бесплатно (free)

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

10.09.2019    18763    Sloth    24    

Ubuntu vs CentOS vs Win2k8 vs Debian: производительность PostgreSQL Промо

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

Хотя интернет уже переполнен статьями о "правильной" настройке связки PostgreSQL и 1C 8.2, для подводных камней всегда остается место. При сравнении производительности СУБД PostgreSQL на разных ОС, показатели различаются в разы. Самую большую обиду принесла любимая Ubuntu (человечность). После долгих дней и ночей проведенных за консолью этой ОС, она разочаровала окончательно. Тормоза PostgreSQL в Ubuntu Server. Что с ними делать? Сколько раз можно наступать на грабли?

03.11.2012    42281    madmpro    32    

Хранение файлов - как уменьшить размер базы данных

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

Хранение файлов в базе 1С можно оптимизировать для уменьшения размера хранимых данных.

09.09.2019    8571    2tvad    17    

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

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

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

17.08.2019    31881    ids79    16    

Неочевидные проблемы производительности: важность системного подхода при анализе

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

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

19.07.2019    8987    Филин    12    

Сканируем без сканера или MXL to JPG Промо

Внешние источники данных Универсальные функции Печатные формы документов v8 1cv8.cf Бесплатно (free)

Хотите конвертировать документы в формат изображения менее чем за минуту, не имея сканера? Тогда эта статья для вас.

24.05.2012    34147    shakmaev    47    

Ловля блокировок на связке "Microsoft SQL server - 1С"

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

Материал относится к базам данных на связке «1С - MS SQL Server». Один из способов отлова блокировок в бд 1С . Переход к управляемым блокировкам через режим "Автоматический и управляемый".

16.07.2019    10082    fhqhelp    0    

Анти-оптимизация: как мы ускорили запрос в 4 раза, сделав его неоптимальным

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

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

02.07.2019    11415    igordynets    119    

Ускорение чтения правил обмена в УПП 1.3 в 20 раз!

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

Способ оптимизации чтения правил обмена конвертации данных. Может понадобиться при большом размере правил и высокой периодичности обмена.

27.06.2019    9867    YPermitin    17    

Хотите снизить нагрузку на процессор сервера в 2 раза?

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

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

27.06.2019    9764    Дмитрий74Чел    6