понедельник, 26 октября 2015 г.

1С: Эксперт. Решение билета №6


Вопрос 6.1. Документ РеализацияТоваров осуществляет движения по регистру ОстаткиНаСкладах, а именно списывает реализованное количество товаров со склада. В обработчике проведения документа выполняется проверка превышения лимитов - минимального допустимого остатка товара на складе и максимально допустимого размера отгрузки со склада. Запрос выглядит следующим образом:

Ответ:
Запрос.Текст = "ВЫБРАТЬ
|     Товары.Номенклатура КАК Номенклатура,
|     Товары.КоличествоНаСписание КАК Количество,
|     Остатки.КоличествоОстаток КАК Остаток
|ИЗ
|     (ВЫБРАТЬ
|          Товары.Номенклатура КАК Номенклатура,
|          СУММА(Товары.Количество) КАК Количество
|     ИЗ  Документ.Реализация.Товары КАК Товары
|     ГДЕ Товары.Ссылка = &ДокументСсылка
|     СГРУППИРОВАТЬ ПО
|          Товары.Номенклатура) КАК Товары
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК Остатки
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЛимитыОстатков КАК ЛимитыОстатков
|     ПО ЛимитыОстатков.Номенклатура=Остатки.Номенклатура И ЛимитыОстатков.Склад = &Склад
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЛимитыОтгрузкиСоСкладов КАК ЛимитыОтгрузки
|     ПО ЛимитыОтгрузки.Номенклатура = Остатки.Номенклатура И ЛимитыОтгрузки.Склад = &Склад
|ПО Остатки.Номенклатура = Товары.Номенклатура
| ДЛЯ ИЗМЕНЕНИЯ";


1) После ДЛЯ ИЗМЕНЕНИЯ не указаны таблицы.  В случае если после предложения ДЛЯ ИЗМЕНЕНИЯ отсутствуют имена таблиц, блокироваться будут данные из всех таблиц, задействованных в запросе. Что приведет к избыточным блокировкам.
Следует блокировать для изменения только таблицу остатков товара.
2) Проверку лимитов нужно делать в самом запросе.

3) Подзапрос следует заменить на ВТ.

Вопрос 6.2. Имеется реально работающая многопользовательская система.  Необходимо решить следующие задачи:
1) Определить пользователей, которые в данный момент выполняют длительные запросы к базе данных.
2) Определить пользователей, которые заблокировали других пользователей.
Ответ:
На оба вопроса можно ответить с помощью консоли кластера.
В колонке "захвачено СУБД" отображается время выполнения запроса.
В колонке "заблокировано упр." отображается номер сеанса которым заблокирован текущий сеанс. Номер сеанса можно увидеть и
через монитор активности.

Вопрос 6.3. В метаданных конфигурации описан  регистр накопления (остатков) ОстаткиНаСкладах, имеющий измерения "Склад" и "Товар". Информационная база работает в режиме клиент-сервер с использованием СУБД PostgreSQL. 
Будут ли перечисленные пары операций выполнятся параллельно из разных сессий? Все операции выполняются при проведении документа.

Параллельность      Операция 1 Операция 2

Запись набора записей со следующими условиями: 
Склад= «Основной»
Товар =«Телефон»

Запись набора записей со следующими условиями
Склад= «Основной»
Товар =«Телевизор»

Чтение с опцией "ДЛЯ ИЗМЕНЕНИЯ" регистра остатков по условию: 
Склад= «Основной»
Товар =«Телефон»

Чтение без опции "ДЛЯ ИЗМЕНЕНИЯ" регистра остатков по условию
Склад= «Основной»
Товар =«Телефон»

Чтение без опции "ДЛЯ ИЗМЕНЕНИЯ" регистра остатков по условию
Склад= «Основной»
Товар =«Телефон»
Запись набора записей со следующими условиями
Склад= «Основной»
Товар =«Телефон»

Ответ:
Так как используется запрос с опцией "ДЛЯ ИЗМЕНЕНИЯ", то логично сделать вывод о том, что используется автоматический режим управления блокировками. Стоит помнить о том, что в автоматическом режиме  для версионных СУБД (коим и является PostgreSQL) минимальным уровнем гранулярности является таблица, поэтому с параллельностью тут дела будут хуже. Важно  помнить о том, что в СУБД версионниках  S и U блокировки не совместимы.
Поэтому решение будет следующим:

Параллельность      Операция 1 Операция 2
              +
Запись набора записей со следующими условиями: 
Склад= «Основной»
Товар =«Телефон»

Запись набора записей со следующими условиями
Склад= «Основной»
Товар =«Телевизор»
              -
Чтение с опцией "ДЛЯ ИЗМЕНЕНИЯ" регистра остатков по условию: 
Склад= «Основной»
Товар =«Телефон»

Чтение без опции "ДЛЯ ИЗМЕНЕНИЯ" регистра остатков по условию
Склад= «Основной»
Товар =«Телефон»
              -Чтение без опции "ДЛЯ ИЗМЕНЕНИЯ" регистра остатков по условию
Склад= «Основной»
Товар =«Телефон»
Запись набора записей со следующими условиями
Склад= «Основной»
Товар =«Телефон»

Комментариев нет:

Отправить комментарий