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

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

kow1976

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 1.24
« Ответ #15 : Декабрь 02, 2011, 04:41:04 pm »
Спасибо. Действительно косяк.
Вложения:
kow1976_.1.24.dt
« Последнее редактирование: Декабрь 02, 2011, 05:27:13 pm от Олег »

alexey55

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Алексей
Задача 1.24
« Ответ #16 : Февраль 19, 2012, 04:21:09 pm »
Мое решение, запрос как 1.4
 Согласен с ut2k5, за час ее сложно решить) ну это пока..


alexey55

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Алексей
Задача 1.24
« Ответ #17 : Февраль 19, 2012, 04:21:35 pm »
забыл прикрепить
Вложения:
alexey55-1.24.dt

Lazutin

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Лазутин Илья
Задача 1.24
« Ответ #18 : Февраль 20, 2012, 07:32:43 am »
alexey55,
 Очень уж большой получился запрос в документе "Расходная накладная". Его можно сократить как минимум в двое. По-моему, достаточно сначала считать данные из ТЧ документа во временную таблицу, а потом присоединить таблицы с остатками, где будет общий остаток по всем складам и отдельно по каждому складу...

alexey55

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Алексей
Задача 1.24
« Ответ #19 : Февраль 20, 2012, 09:22:39 am »
Lazutin,
 согласен, запрос получился немаленький)
 вся сложность заключается в том, что в табчасти может быть одна и та же номенклатура с разными складами.. если бы не это, то было бы на много проще..

Lazy

  • Новичок
  • *
  • Сообщений: 5
  • ФИО: Lazy
Задача 1.24
« Ответ #20 : Ноябрь 07, 2012, 03:21:01 pm »
Подскажите, плиз, делал сам, другие решения не смотрел. Как сделать проверку на количество остатка на складе не прибегая к запросу в цикле?
 Когда в табличной части одна номенклатура с разными складами.
Вложения:
Lazy_1_24-1-.dt

Obamo

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Валера
Задача 1.24
« Ответ #21 : Январь 16, 2013, 05:10:55 pm »
Решил без упрощения, что дублей по номенклатуре в табличной части быть не может.
 Запрос простой, методика списания немного сложней. Взял выборку по номенклатуре и складу из заказа и две таблицы значений с остатками, одна с общими по номенклатуре для проверки, вторая с разбивкой по складам.
 Методика делится на две части если в таб части заполнен склад то списываем с него и меняем значение в таблице значений, далее если не все списали, обходим таблицу методом для каждого из и списываем оставшеесе.
 Оказалось просто, я голову дня два ломал, все хотел в одну выборку засунуть, а это гораздо сложней, и большой запрос отлаживать сложно.
 Жду комментариев!  wink
Вложения:
Obamo_1.24.dt
« Последнее редактирование: Январь 16, 2013, 05:11:26 pm от Валера »

kyafnsum

  • Гость
Задача 1.24
« Ответ #22 : Январь 29, 2013, 06:03:32 pm »
Аналогично, без упрощения по отсутствию дублей номенклатуры с различными складами в ТЧ.
 Задача показалась не солжной. В запросе две сортировки - по складу в ТЧ и приоритету склада из регистра. Ну и 2 группировки - По номенклатуре (общие остатки), по складу в документе (так проще списывать, когда одна и та же номенклатура списывается с раных складов), ну и соответственно 3 цикла по группировкам (последний по детальным записям).
 ++++++++++++++++++++++++++
 Хотя, не учел проблему с блокировками - по каким складам ее устанавливать - не известно заранее, а если по всем - то это как-то топорно слишком. Нужно доработать запрос, в общем.

 Добавлено (29.01.2013, 18:03)
 ---------------------------------------------
 Obamo, особо не вникал в Ваше решение, но разве за Результат.Выгрузить() не снижают балл? Это ж на производительность влияет вроде как. И в отчете у Вас группировка по вирт.таблице, она вроде как там не нужна))
Вложения:
kyafnsum_1.24.dt
« Последнее редактирование: Январь 29, 2013, 06:12:41 pm от Роман »

Maxus

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Max
Задача 1.24
« Ответ #23 : Апрель 23, 2013, 01:29:17 pm »
Мой вариант решения.
Вложения:
1.24_mbs_2.dt

Lkmaksimka

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Максим
Задача 1.24
« Ответ #24 : Июнь 09, 2013, 08:30:30 pm »
Цитата (Maxus)
Мой вариант решения.Прикрепления: 1.24_mbs_2.dt(146Kb)
в Вашем решении  если реализовывать к примеру "Bosch KGS 3760 IE" 10 шт с Розничного склада и добавить вторую строку "Bosch KGS 3760 IE" 10 шт с Оптового склада , то в и постореть отчет"Движение товаров" то списывется всего 10 шт.

Maxus

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Max
Задача 1.24
« Ответ #25 : Июнь 10, 2013, 10:21:27 am »
Lkmaksimka
 я решал без учета дублей, поэтому такая картинка в отчете.

Lkmaksimka

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Максим
Задача 1.24
« Ответ #26 : Июнь 11, 2013, 12:12:27 pm »
А Кто знает как праивльно , с учетом дублей или без ?

TuMyP1985

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Тимур
Задача 1.24
« Ответ #27 : Июнь 21, 2013, 02:27:20 pm »
Мой вариант
Вложения:
_1_24.dt

bilateral

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Алексей
Задача 1.24
« Ответ #28 : Июль 04, 2013, 05:14:41 pm »

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

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

 ////////////////////////////////////////////////////////////////////////////////
 ВЫБРАТЬ
    ТабСписания.Номенклатура КАК Номенклатура,
    СУММА(ТабСписания.Количество) КАК Количество,
    СУММА(ТабСписания.Сумма) КАК Сумма
 ПОМЕСТИТЬ ТабСписанияБезПартий
 ИЗ
    ТабСписания КАК ТабСписания

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

 ИНДЕКСИРОВАТЬ ПО
    Номенклатура
 ;

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

 ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Склад
 ;

 ////////////////////////////////////////////////////////////////////////////////
 ВЫБРАТЬ
    ТабСписания.Номенклатура КАК Номенклатура,
    ТабСписания.Склад КАК Склад,
    ВЫБОР
       КОГДА ТабСписания.Количество >= ОстаткиПоСкладм.КоличествоОстаток
          ТОГДА ОстаткиПоСкладм.КоличествоОстаток
       ИНАЧЕ ТабСписания.Количество
    КОНЕЦ КАК Количество,
    ВЫБОР
       КОГДА ТабСписания.Количество >= ОстаткиПоСкладм.КоличествоОстаток
          ТОГДА ОстаткиПоСкладм.СуммаОстаток
       КОГДА ТабСписания.Количество <> 0
          ТОГДА ТабСписания.Количество / ОстаткиПоСкладм.КоличествоОстаток * ОстаткиПоСкладм.СуммаОстаток
       ИНАЧЕ 0
    КОНЕЦ КАК Сумма,
    1 КАК ПриоритетРаспределения
 ПОМЕСТИТЬ РаспределенныеПартии
 ИЗ
    ТабСписания КАК ТабСписания
       ЛЕВОЕ СОЕДИНЕНИЕ ОстаткиПоСкладм КАК ОстаткиПоСкладм
       ПО ТабСписания.Номенклатура = ОстаткиПоСкладм.Номенклатура
          И ТабСписания.Склад = ОстаткиПоСкладм.Склад
 ГДЕ
    ВЫБОР
          КОГДА ТабСписания.Количество >= ОстаткиПоСкладм.КоличествоОстаток
             ТОГДА ОстаткиПоСкладм.СуммаОстаток
          КОГДА ОстаткиПоСкладм.КоличествоОстаток <> 0
             ТОГДА ТабСписания.Количество / ОстаткиПоСкладм.КоличествоОстаток * ОстаткиПоСкладм.СуммаОстаток
          ИНАЧЕ 0
       КОНЕЦ > 0

 ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Склад
 ;

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

 СГРУППИРОВАТЬ ПО
    Таб.Склад,
    Таб.Номенклатура

 ИМЕЮЩИЕ
    СУММА(Таб.Количество) > 0

 ИНДЕКСИРОВАТЬ ПО
    Склад,
    Номенклатура
 ;

 ////////////////////////////////////////////////////////////////////////////////
 ВЫБРАТЬ
    РаспределенныеПартии.Номенклатура КАК Номенклатура,
    РаспределенныеПартии.Склад КАК Склад,
    РаспределенныеПартии.Количество,
    РаспределенныеПартии.Сумма,
    РаспределенныеПартии.ПриоритетРаспределения
 ПОМЕСТИТЬ ПартииВместе
 ИЗ
    РаспределенныеПартии КАК РаспределенныеПартии

 ОБЪЕДИНИТЬ ВСЕ

 ВЫБРАТЬ
    НеРаспределенныеПартии.Номенклатура,
    НеРаспределенныеПартии.Склад,
    НеРаспределенныеПартии.Количество,
    НеРаспределенныеПартии.Сумма,
    НеРаспределенныеПартии.ПриоритетРаспределения
 ИЗ
    НеРаспределенныеПартии КАК НеРаспределенныеПартии

 ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Склад
 ;

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

 УПОРЯДОЧИТЬ ПО
    ПартииВместе.ПриоритетРаспределения,
    ПартииВместе.Склад.Приоритет
 ИТОГИ
    МАКСИМУМ(КоличествоСписания),
    МАКСИМУМ(СуммаСписания),
    СУММА(КоличествоОстаток),
    СУММА(СуммаОстаток)
 ПО
    Номенклатура
  
   
 Один в один как 1.4 только там партии а тут склады. Задачи взаимозаменяемые. Самое сложное это этот запрос, остальное просто сидеть и печатать стандартные штуки smile

artfa

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Артур
Задача 1.24
« Ответ #29 : Июль 05, 2013, 02:22:11 pm »
Цитата (TuMyP1985)
Мой вариант
у вас ошибки, можно списать больше чем есть на складах, не настроен отчет.
 при решении использовал алгоритм подобный задаче 1.22 (мой вариант), вроде все ОК, протестил с различными вариантами, ошибок не обнаружил
Вложения:
6679111.dt