Мичман Харитонов @ Сегодня, 14:12
необходимо зарегистрироваться для просмотра ссылки
,
Таблицы данных увеличиваются, в итоге может появиться "избыточная блокировка" (обычно этот эффект появляется при параллельном проведении документов, во время него самым первым документом блокируется большой объем записей регистров на все время проведения документа).
В автоматическом режиме в транзакциях используется уровень изоляции SERIALIZABLE (запрещает чтение и запись).
В управляемом режиме в транзакциях используется уровень изоляции ReadCommitted (запрещает запись и проверяет нет ли в этот момент параллельных записей, после завершения запроса блокировки снимаются не дожидаясь завершения транзакции).
Обычно лечение начинают переводом конфигурацию из «Автоматического» режима управления блокировкой данных в «Управляемый» (лично не встречал стандартные Конфигурации от 1С в режиме "Автоматического" режима блокировок, все шли в "Управляемом"), и транзакции начнут выполняться на уровне изоляции типа ReadCommitted, вместо SERIALIZABLE или Repeatable Read.
Если далее вдаваться в детали. то нужно идти SQL Server Profiler....... что точно уже дебри, но почитать можете, полезная вещь.
fly @ Сегодня, 14:56
необходимо зарегистрироваться для просмотра ссылки
,
..... бла/бла/бла про SQL - в итоге все завершается процессами "поиска" и "оптимизации".
Смыла нет выгружать ТЗ потом индексировать, находить строку, и уже по строке определять если найдена = есть отсрочка, не найдена = нет отсрочки.
А потом брать и копировать таблицу без колонки Контрагент.
достаточно просто проверить свойство РезультатаЗапроса - Пустой() - возврат Булево, если пустой - отсрочки нет.
И сразу результат выгрузить в итоговую таблицу и т.д.
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = новый МенеджерВременныхТаблиц;
ТекстЗапроса = "ВЫБРАТЬ
| ОграниченияОтгрузок.Фирма,
| ОграниченияОтгрузок.Номенклатура КАК Номенклатура,
| МИНИМУМ(ОграниченияОтгрузок.ДнейОтсрочки) КАК ДнейОтсрочки,
| СУММА(ВЫБОР КОГДА ОграниченияОтгрузок.Контрагент = &Контрагент ТОГДА 0 ИНАЧЕ 1 КОНЕЦ) КАК ЕстьОтсрочка
|
|ИЗ
| РегистрСведений.ОграниченияОтгрузокКонтрагентам.СрезПоследних(
| &МоментВремени,
| Контрагент = &Контрагент
| ИЛИ Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)) КАК ОграниченияОтгрузок
| СГРУППИРОВАТЬ ПО
| ОграниченияОтгрузок.Фирма,
| ОграниченияОтгрузок.Номенклатура КАК Номенклатура";
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("МоментВремени", МоментВремени);
БуфферОграничений = Запрос.Выполнить();
Если БуфферОграничений.Итог("Фирма") > 0 Тогда
ЕстьОтсрочкиКонтрагенту = Истина;
КонецЕсли;
СуммыПросроченнойЗадолженностиКонтрагентаПоФирмам = Новый Соответствие;
МаксимальнаяОтсрочка = 0;
ПредоплатаПоДоговору = Истина;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыОтгруженные.Фирма КАК Фирма,
| ТоварыОтгруженные.ДокументПродажи,
| ТоварыОтгруженные.ДокументПродажи.Дата,
| ТоварыОтгруженные.Номенклатура КАК Номенклатура,
| ТоварыОтгруженные.СуммаОстаток КАК Сумма,
| ТоварыОтгруженные.Договор
|ИЗ
| РегистрНакопления.ТоварыОтгруженные.Остатки(&МоментВремени, Контрагент = &Контрагент) КАК ТоварыОтгруженные
|
|УПОРЯДОЧИТЬ ПО
| Фирма,
| ТоварыОтгруженные.ДокументПродажи.Дата";
Выборка = Запрос.Выполнить().Выбрать();