Вопрос 5.1 Обработчик проведения документа содержит следующий код:
Запрос.Текст =
"ВЫБРАТЬ Товары.Номенклатура КАК Номенклатура,
| Товары.КоличествоНаСписание КАК Количество,
| Остатки.КоличествоОстаток КАК Остаток
|ИЗ (ВЫБРАТЬ Товары.Номенклатура КАК Номенклатура,
| СУММА(Товары.Количество) КАК Количество
| ИЗ Документ.Реализация.Товары КАК Товары
| ГДЕ Товары.Ссылка = &ДокументСсылка
| СГРУППИРОВАТЬ ПО| Товары.Номенклатура) КАК Товары
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАКОстатки
| ПО Остатки.Номенклатура = Товары.Номенклатура|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыНаСкладах.Остатки";
Запрос.УстановитьПараметр("ДокументСсылка", ТекущийДокумент);Запрос.УстановитьПараметр("Склад",СпрСклады.НайтиПоНаименованию("Основной"));
ВыборкаОстатков = Запрос.Выполнить() .Выбрать();
Пока (ВыборкаОстатков.Следующий()) Цикл
// Контроль остатков
Если (ВыборкаОстатков.Остаток - ВыборкаОстатков.Количество <= 0)
ТогдаСообщить ("На складе нехватате товара!");Отказ = Истина;
КонецЕсли;
КонецЦикла;// Увеличим счетчик проведенных документов на 1
"ВЫБРАТЬ Товары.Номенклатура КАК Номенклатура,
| Товары.КоличествоНаСписание КАК Количество,
| Остатки.КоличествоОстаток КАК Остаток
|ИЗ (ВЫБРАТЬ Товары.Номенклатура КАК Номенклатура,
| СУММА(Товары.Количество) КАК Количество
| ИЗ Документ.Реализация.Товары КАК Товары
| ГДЕ Товары.Ссылка = &ДокументСсылка
| СГРУППИРОВАТЬ ПО| Товары.Номенклатура) КАК Товары
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАКОстатки
| ПО Остатки.Номенклатура = Товары.Номенклатура|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыНаСкладах.Остатки";
Запрос.УстановитьПараметр("ДокументСсылка", ТекущийДокумент);Запрос.УстановитьПараметр("Склад",СпрСклады.НайтиПоНаименованию("Основной"));
ВыборкаОстатков = Запрос.Выполнить() .Выбрать();
Пока (ВыборкаОстатков.Следующий()) Цикл
// Контроль остатков
Если (ВыборкаОстатков.Остаток - ВыборкаОстатков.Количество <= 0)
ТогдаСообщить ("На складе нехватате товара!");Отказ = Истина;
КонецЕсли;
КонецЦикла;// Увеличим счетчик проведенных документов на 1
Константы.СчетчикДокументов.Установить(Константы.СчетчикДокументов.Получить)
Укажите на неоптимальные решения и предложите более оптимальный вариант.
Ответ:
1) Изменение константы в обработке проведения -грубая ошибка.
Если нужно в системе учитывать количество проведенных документов, то для этого следует использовать к примеру регистр сведений.
2) Соединение с виртуальной. таблицей. Следует заменить на соединение с врем. таб.
3) В запросе лучше сразу задать условие на количество, чтобы в цикле не делать проверку.
Вопрос 5.2. В коде конфигурации описан сложный запрос текст которого состоит из нескольких сотен строк. Запрос содержит множество подзапросов большой вложенности и соединений с подзапросами. При выполнении MSSQL выбирает план содержащий операции "table scan" и "nested loops". Все необходимые индексы для запроса определены. Обновление статистики не дает результатов. Предложите варианты решения этой проблемы.
Ответ:
1) Избавится от соединений с подзапросами, заменив подзапросы на временные таблицы. Это должно решить проблему "nested loops".
2) Если все необходимые индексы для запроса определены, а оптимизатор выбирает план со сканированием необходимо задать условия так, чтобы индекс мог быть использован.
3) Вообще "table scan" - используется в основном с ВТ и не являются узким местом, поэтому возможно имелось в виду "index scan" или "clusrered index scan".
Вопрос 5.3. Что такое транзакция. Что такое блокировка данных. Как блокировка данных связана с транзакцией.
Транзакция - это последовательность действий которые выполняются либо полностью либо не выполняются совсем.
Транзакция обладает свойствами
- Атомарность
- Изолированность
- Надежность
- Согласованность
Блокировка это информация о том что некоторый ресурс заблокирован.
Блокировка возможна только в транзакции, вне ее блокировка не возможна.
Во время транзакции блокировки накапливаются, так как в основном блокировки длятся до конца транзакции, за исключением транзакций с уровнем изоляции read committed.
Комментариев нет:
Отправить комментарий