Автор Тема: Задача 1.4 стр.10  (Прочитано 76874 раз)

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

Алексей Л

  • Новичок
  • *
  • Сообщений: 1
Re: Задача 1.4 стр.10
« Ответ #240 : Июнь 26, 2018, 01:16:43 pm »
Решил эту задачу при помощи выставления приоритетов.

Т.е., сначала у нас списание идет по партии, указанной в ТЧ Расходной (приоритет 1). А дальше - для всех партий устанавливается приоритет 2. В запросе сначала устанавливаем порядок на приоритет, а потом порядок на партии по моменту времени. Т.о., сначала будет обработка по партии из ТЧ, а потом по установленному методу списания

Текст запроса:

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

KolBbl4

  • Новичок
  • *
  • Сообщений: 2
Re: Задача 1.4 стр.10
« Ответ #241 : Октябрь 31, 2018, 07:27:33 am »
Решил эту задачу при помощи выставления приоритетов.

Т.е., сначала у нас списание идет по партии, указанной в ТЧ Расходной (приоритет 1). А дальше - для всех партий устанавливается приоритет 2. В запросе сначала устанавливаем порядок на приоритет, а потом порядок на партии по моменту времени. Т.о., сначала будет обработка по партии из ТЧ, а потом по установленному методу списания

Текст запроса:

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

У меня такое не работает((


KolBbl4

  • Новичок
  • *
  • Сообщений: 2
Re: Задача 1.4 стр.10
« Ответ #242 : Октябрь 31, 2018, 09:44:46 am »
Большая часть решений не работает, если выбрано две одинаковых номенклатуры для разных партий

eiffil

  • Пользователь
  • **
  • Сообщений: 87
Re: Задача 1.4 стр.10
« Ответ #243 : Октябрь 31, 2018, 05:57:05 pm »
Большая часть решений не работает, если выбрано две одинаковых номенклатуры для разных партий


на экзамене такой задачи не будет (чтобы партия в ТЧ и с приоритетами). Несмотря на то, что она похожа на все остальные, в реализации она гораздо сложнее. На мой взгляд, запросами ее решать крайне трудоемко, нужно выгружать в ТЗ и там это всё обрабатывать. Но с точки зрения экзамена выгрузка в ТЗ крайне нежелательна.

Лучше пропустите эту задачу

DarkKristall

  • Новичок
  • *
  • Сообщений: 2
Re: Задача 1.4 стр.10
« Ответ #244 : Август 09, 2020, 07:22:05 pm »
Приветствую, данную задачу можно решать следующим образом добавить дополнительную группировку, как для партионного учета по партии, а в этом цикле проверять остатки регистра по партии и номенклатуре
Отбор = Новый Структура;
            Отбор.Вставить("Номенклатура", ВыборкаПартия.Номенклатура);
            Отбор.Вставить("Партия", ВыборкаПартия.Партия);   
            НайденыеСтроки = СписокНоменклатуры.НайтиСтроки(Отбор);
            КоличествоПоПартии = РегистрыНакопления.ОстаткиНоменклатуры.Остатки(МоментВремени(),Отбор, "Номенклатура, Партия", "Количество, Сумма");
и если у нас колиечество нет то списать по партии. Ничего сложного

Ильнур1975

  • Пользователь
  • **
  • Сообщений: 37
Re: Задача 1.4 стр.10
« Ответ #245 : Август 10, 2020, 07:54:52 am »
и получите снижение оценки - запрос в цикле.
В этой задаче нужно написать запрос из 9-10 секций.

DarkKristall

  • Новичок
  • *
  • Сообщений: 2
Re: Задача 1.4 стр.10
« Ответ #246 : Август 11, 2020, 04:59:01 pm »
в данном случае на интересует только количество и партия, сумму списания можно получить из запроса

Ильнур1975

  • Пользователь
  • **
  • Сообщений: 37
Re: Задача 1.4 стр.10
« Ответ #247 : Август 12, 2020, 08:49:22 am »
ваш способ гарантирует исключение дублирование количества остатка партий? 

LORDTrAne

  • Новичок
  • *
  • Сообщений: 1
Re: Задача 1.4 стр.10
« Ответ #248 : Сентябрь 04, 2020, 01:01:38 pm »
Задача оказалось не из легких. Сделал так: формирую движения по приоритетным партиям, при этом в вычисляемых полях считаю, сколько можно списать по выбранной партии, чтобы в минус не уйти, а еще считаю, сколько осталось списать, на тот случай, если по выбранной партии не хватило товара. Записываю движения, и дальше как обычно делается при партионном списании, только вместо "Количество", которое указано в ТЧ, я выбираю "ОсталосьСписать", то есть сколько еще нужно списать.
« Последнее редактирование: Сентябрь 04, 2020, 01:03:20 pm от LORDTrAne »

Евгений_нвкз

  • Пользователь
  • **
  • Сообщений: 18
Re: Задача 1.4 стр.10
« Ответ #249 : Сентябрь 07, 2020, 12:26:44 pm »
Всем привет. Мое решение на обозрение)