Автор Тема: Задача 1.12  (Прочитано 55543 раз)

0 Пользователей и 1 Гость просматривают эту тему.

napan

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Alexey
Задача 1.12
« : Август 03, 2010, 01:11:15 pm »
Вот решил. Может кто запрос по проще написать?
Вложения:
1.12.dt

savotii

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Савин Юрий Владимирович
Задача 1.12
« Ответ #1 : Август 09, 2010, 12:22:12 pm »
Привет )
 Есть просьба , не мог бы ты расписать запрос, а то я вошел в тупик при решении этой задачи, касательно запроса, не мог бы ты его расписать?
 С ув. Юра


tenikov

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Денис Теников
Задача 1.12
« Ответ #2 : Август 16, 2010, 05:23:09 pm »
Мой вариант.
Вложения:
tenikov_1.12.dt

napan

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Alexey
Задача 1.12
« Ответ #3 : Август 23, 2010, 11:47:27 pm »
Исправил немного запрос ...

Quote (savotii)
Есть просьба , не мог бы ты расписать запрос, а то я вошел в тупик при решении этой задачи, касательно запроса, не мог бы ты его расписать?

Расписываю по временным таблицам:
 1. Получаю номенклатуру и количество по документу (группирую)
 2. Получаю все остатки по всем складам (по нашим номенклатурам)
 3. Достаю всю зарезервированную номенклатуру с приоритетами менеджеров
 4. Получаю Свободный остаток по всем складам (весь остаток минус зарезервированный товар который нельзя тратить, т.е. где Менеджер <> нашему менеджеру И Приоритет >= Приоритету нашего менджера
 5. Соединяю таблицы: наш документ, остатки по нашему складу, свободный остаток(который можно тратить) и резерв нашего менеджера, чтобы списать с резерва.

Вроде так!


Вложения:
8192592.dt

SergTH000

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Сергей
Задача 1.12
« Ответ #4 : Август 25, 2010, 11:48:00 pm »
napan,

Все таки без 4 пакетов вроде не обойтись:
 1. Получаю номенклатуру и количество по документу (группирую)
 2. Получаем резервы "старших" менеджеров (т.е. в параметрах РС задаем что
 Приоритет >= &Приоритет И Менеджер <> &Менеджер) и ЛевымСоединением с регистром Резервов.
 3.Получаем резервы младших менеджеров (или свои) которые будем снимать
 3. Соединяем все: наш ДокТЧ, ОстаткиВСЕ, ОстаткиПоСкладам, РезервыМенеджеров, РезервыДляСнятия

Добавлено (25.08.2010, 22:43)
 ---------------------------------------------
 

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

СГРУППИРОВАТЬ ПО
 РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
 ;

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

СГРУППИРОВАТЬ ПО
 РезервТовараОстатки.Номенклатура
 ;

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

СГРУППИРОВАТЬ ПО
 РезервТовараОстатки.Менеджер,
 РезервТовараОстатки.Номенклатура
 ;

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

« Последнее редактирование: Август 26, 2010, 10:31:40 am от Сергей »

SergTH000

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Сергей
Задача 1.12
« Ответ #5 : Август 26, 2010, 03:14:52 pm »
Вот собственно база с решением.
 Очень большая просьба, посмотрите запрос в Расходной, никак не могу понять почему он может пустой результат возвращать(если товара вообще нет на складе и его не резервировали), вроде беру ТЧ Расходной, а все остальное левыми соединениями, т.е. из расходной что то должно попасть
 Добавил к отчетам напана свой макет - отчеты один в один (без лишних записей в заголовке)
Вложения:
1417680.dt

User_OKA

  • Новичок
  • *
  • Сообщений: 2
  • ФИО: Валерий
Задача 1.12
« Ответ #6 : Август 30, 2010, 02:28:18 pm »
посмотрел запрос
 попытался продать холодильник
 из расходной все попадает
 для свободного остатка
    |   СвободныйОстаток.СвободноеКоличество,

надо бы
    |   ЕСТЬNULL(СвободныйОстаток.СвободноеКоличество, 0),


User67

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Юрий
Задача 1.12
« Ответ #7 : Август 31, 2010, 10:38:22 pm »
Добрый день! Разбираю задачу, взял выгрузку Прикрепления: 8192592.dt(211Kb), помогла разобраться в ряде моментов, но по моему там есть ошибка - при получении свободного остатка, если по товару ни кто не резервировал, то он не попадает в итоговый запрос. У меня получилось вот так: (временную таблицу взял как вложенную чтобы ее условия не относились к данному пакету) и в последнем запросе для получения резерва текущего менеджера я взял не регистр накопления а временную таблицу
 
Quote
ВЫБРАТЬ
    МАКСИМУМ(РасходнаяНакладнаяСписокНоменклатуры.НомерСтроки) КАК НомерСтроки,
    РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
    СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК КолДок
 ПОМЕСТИТЬ ВТДокТЧ
 ИЗ
    Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
 ГДЕ
    РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка

СГРУППИРОВАТЬ ПО
    РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
 ;

////////////////////////////////////////////////////////////////////////////////
 ВЫБРАТЬ
    ОстаткиНоменклатурыОстатки.Номенклатура,
    ОстаткиНоменклатурыОстатки.КоличествоОстаток
 ПОМЕСТИТЬ ВТОбщиеОстатки
 ИЗ
    РегистрНакопления.ОстаткиНоменклатуры.Остатки(
          &МоментВремени,
          Номенклатура В
             (ВЫБРАТЬ
                Т.Номенклатура
             ИЗ
                ВТДокТЧ КАК Т)) КАК ОстаткиНоменклатурыОстатки
 ;

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

////////////////////////////////////////////////////////////////////////////////
 ВЫБРАТЬ
    ВТОбщиеОстатки.Номенклатура,
    ВТОбщиеОстатки.КоличествоОстаток - ЕСТЬNULL(Резервы.КоличествоРезерв, 0) КАК КолСвободныйОстаток
 ПОМЕСТИТЬ ВТСвободОстаток
 ИЗ
    ВТОбщиеОстатки КАК ВТОбщиеОстатки
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
          ВТРезерв.Номенклатура КАК Номенклатура,
          СУММА(ВТРезерв.КоличествоРезерв) КАК КоличествоРезерв
       ИЗ
          ВТРезерв КАК ВТРезерв
       ГДЕ
          ВТРезерв.Приоритет >= &Приоритет
          И ВТРезерв.Менеджер <> &Менеджер
       
       СГРУППИРОВАТЬ ПО
          ВТРезерв.Номенклатура) КАК Резервы
       ПО ВТОбщиеОстатки.Номенклатура = Резервы.Номенклатура
 ;

////////////////////////////////////////////////////////////////////////////////
 ВЫБРАТЬ
    ВТДокТЧ.НомерСтроки,
    ВТДокТЧ.Номенклатура,
    ВТДокТЧ.КолДок,
    ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КолСклад,
    ЕСТЬNULL(ВТСвободОстаток.КолСвободныйОстаток, 0) КАК КолСвободОстаток,
    ЕСТЬNULL(ВТРезерв.КоличествоРезерв, 0) КАК КолРезервМенеджера,
    ОстаткиНоменклатурыОстатки.СуммаОстаток КАК СумСклад
 ИЗ
    ВТДокТЧ КАК ВТДокТЧ
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
             &МоментВремени,
             Склад = &Склад
                И Номенклатура В
                   (ВЫБРАТЬ
                      Т.Номенклатура
                   ИЗ
                      ВТДокТч КАК Т)) КАК ОстаткиНоменклатурыОстатки
       ПО ВТДокТЧ.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ ВТСвободОстаток КАК ВТСвободОстаток
       ПО ВТДокТЧ.Номенклатура = ВТСвободОстаток.Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ ВТРезерв КАК ВТРезерв
       ПО ВТДокТЧ.Номенклатура = ВТРезерв.Номенклатура
 ГДЕ
    ВТРезерв.Менеджер = &Менеджер


baksha_bni

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Nikita
Задача 1.12
« Ответ #8 : Сентябрь 13, 2010, 07:28:56 am »
мой вариант, вроде все работает, но запрос получился слишком большой...
Вложения:
1_12_Baksha_bni.dt

ut2k5

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Максим
Задача 1.12
« Ответ #9 : Сентябрь 13, 2010, 03:58:56 pm »
napan, а зачем на каждую блокировку делать новую, разве низя вот так:
 
Code

 Блокировка = Новый БлокировкаДанных;
 ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
 ...
 // потом без создания новой блокировки, еще раз
 ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Резервы");
 ...
 // и метод "заблокировать" вызываем один раз
 Блокировка.Заблокировать();
 

SergTH000

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Сергей
Задача 1.12
« Ответ #10 : Сентябрь 18, 2010, 12:05:46 am »
макет нужно делать, посмотри мою базу там все как в задании

Zhora_Vlg

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Георгий
Задача 1.12
« Ответ #11 : Октябрь 09, 2010, 02:48:17 pm »
SergTH000, мне кажется чужие резервы списывать не нужно
Вложения:
Zhora_Vlg-1.12.dt

SergTH000

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Сергей
Задача 1.12
« Ответ #12 : Октябрь 09, 2010, 08:32:26 pm »
Zhora_Vlg, Может я тебя не понял, но по-моему в задании сказано, что менеджер списывает резервы в зависимости от его приоритета, те он может списать резервы менеджеров у которых приоритет меньше его

Zhora_Vlg

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Георгий
Задача 1.12
« Ответ #13 : Октябрь 09, 2010, 11:57:11 pm »
SergTH000, в задаче сказано что менеджер с большим приоритетом может ПРОДАТЬ товар, резерв при этом списывать не нужно

ut2k5

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Максим
Задача 1.12
« Ответ #14 : Октябрь 25, 2010, 10:35:16 pm »
Zhora_Vlg, менеджер должен списывать только свой резерв, но никак не чужой:
 очень прошу проверьте мою базу, на отчеты не смотрите, торопился делать, поэтому забил на них, сделал только один, просто уже домой хочу...

Добавлено (25.10.2010, 22:35)
---------------------------------------------
мляяя, только что понял, что менеджер должен списывать резервы с приоритетом меншим или нет?! с другой стороны он же вроде только свои резервы должен списывать, причем четко указано что резерв ставится вне зависимости от наличия товара на складе..., короче уже поздо, башка не хочет варить....


Вложения:
Quest_1_12.dt
« Последнее редактирование: Октябрь 25, 2010, 10:32:15 pm от Максим »