Форум Чистова. Подготовка к экзаменам 1С

Аттестация "1С:Специалист" => Аттестация "1С:Специалист по платформе 1С:Предприятие 8.3 и 8.2" => Тема начата: Tolyas от Октябрь 08, 2010, 02:01:33 pm

Название: Задача 1.24
Отправлено: Tolyas от Октябрь 08, 2010, 02:01:33 pm
Критикуем! smile
Вложения:
1.24.dt
Название: Задача 1.24
Отправлено: AS от Октябрь 10, 2010, 09:31:16 pm
Tolyas, похоже, что в твоем варианте не обрабатывается ситуация когда для одной номенклатуры может быть указано несколько складов в табличной части расходной накладной.
 Допустим
 Ном1 10 шт. Склад1 20 шт.
 Ном1 10 шт. Склад2 5 шт.
 В этом случае списание должно произойти следующим образом:
 Ном1 Склад1 - 15 шт.
 Ном1 Склад2 - 5 шт.

Эта задача очень похожа на 1.4. которая решена в задачнике, только там вместо складов - партии.

Название: Задача 1.24
Отправлено: AS от Октябрь 10, 2010, 10:41:42 pm
Советую посмотреть задачу 1.4 и ее решение от 1С-ников (в задачнике). Похоже запрос должен быть почти такой же как и в 1.4. Там есть один подводный камень, который в здешних решениях не обрабатывается.
Название: Задача 1.24
Отправлено: Tolyas от Октябрь 26, 2010, 10:31:46 am
Quote (AS)
Tolyas, похоже, что в твоем варианте не обрабатывается ситуация когда для одной номенклатуры может быть указано несколько складов в табличной части расходной накладной.

 Читай внимательнее условие. В табличной части указывается только один склад - с него перового идет списание. Далее по приоритетам. У меня так и реализовано.
Название: Задача 1.24
Отправлено: AS от Ноябрь 13, 2010, 08:37:45 pm
Еще раз прочитал условие, написано, "В первую очередь товар списывается со склада, указанного для данного товара в табличной части документа" - это вовсе не означает, что для конкретной номенклатуры можно указать только один склад. В условии явно не сказано, что указывается только один склад.
Название: Задача 1.24
Отправлено: Dima1C от Ноябрь 24, 2010, 11:19:42 am
Quote (AS)
Еще раз прочитал условие, написано, "В первую очередь товар списывается со склада, указанного для данного товара в табличной части документа" - это вовсе не означает, что для конкретной номенклатуры можно указать только один склад. В условии явно не сказано, что указывается только один склад.

 я так не думаю, если расширить цитату из задачника, дословно следующее "Списание себестоимости должно быть организованно по складам в зависимости от текущего их приоритета и выбранного в документе склада" - здесь явный намек что склад в табличной части один, иначе бы написали и "выбранных в документе складов"., ну и так далее по тексту видно, что склад у номенклатуры один(лень цитировать все:) ).
Название: Задача 1.24
Отправлено: ut2k5 от Ноябрь 24, 2010, 11:54:22 am
AS, на каждую строчку табличной части один склад, не надо придумывать и усложнять задачу..., она и без того за час не напишется на экзамене...
Название: Задача 1.24
Отправлено: Юлия от Май 31, 2011, 10:46:34 am
Решение. Блокировки и проблему копеек в решении не прописывала преднамеренно.
Вложения:
7896650.dt
Название: Задача 1.24
Отправлено: kitaets от Июль 03, 2011, 10:59:19 am
Вариант с вложенным оператором ВЫБОР.
Вложения:
1_24_1Cv8.dt
Название: Задача 1.24
Отправлено: DoctorRoza от Июль 27, 2011, 11:29:27 pm
мое решение .. хорошая задача .. подобие 1.4
Вложения:
DoctorRoza_1_24.dt
Название: Задача 1.24
Отправлено: DoctorRoza от Июль 29, 2011, 06:09:10 pm
Выложу измененный вариант, решил применить ВыполнитьПакет() для решения .. для разнообразия! smile
Вложения:
3934661.dt
Название: Задача 1.24
Отправлено: kow1976 от Сентябрь 16, 2011, 08:52:18 am
Такой вариант решения. Спасибо за комментарии и замечания.
 Немножечко модернизировал запросик из 1.4
Вложения:
kow1976.1.24.dt
Название: Задача 1.24
Отправлено: LEOON от Ноябрь 21, 2011, 05:07:34 pm
Исходил из того, что дубли недопустимы.
 Контроль дублей в модуле формы(сделан неоптимально "перебором", но запросом нужно тащиться на сервер). Может кто аккуратней сделает.

 Не захотел заморачиваться насчет допущения дублей. Сунулся в консоль и понял что там без приличного пакетного запроса не обойтись. Так что соглашусь с ut2k5 и Tolyas ' ом.
Вложения:
0970732.dt
Название: Задача 1.24
Отправлено: LEOON от Ноябрь 21, 2011, 10:43:14 pm
Посидел, посидел, не удержался и сделал с учетом дублей.
 Небольшой запрос сложной структуры. Особо не отлаживал. Единственное к чему можно придраться(что заметил) это возможность не сгруппированных движений.
Вложения:
1.24_2.dt
Название: Задача 1.24
Отправлено: ErrorPro от Декабрь 02, 2011, 04:08:14 pm
Всем привет.
 kow1976, код не смотрел, единственное для чего смотрел Вашу базу для вот этого
 http://s017.radikal.ru/i436/1112/f8/d9925088c97e.jpg , сижу сейчас ломаю голову как запрос построить
 DoctorRoza, смотрел первый вариант для того же что и у Кова, вот что Ваш вариант пишет
 http://s017.radikal.ru/i412/1112/b3/e2964ade700d.jpg

Добавлено (02.12.2011, 16:08)
---------------------------------------------
DoctorRoza, второй вариант так же ругается, причем он ругается даже если склады заполнены , может я что -то не так делаю?

 http://i021.radikal.ru/1112/d1/bd5460d3b135.jpg

Название: Задача 1.24
Отправлено: kow1976 от Декабрь 02, 2011, 04:41:04 pm
Спасибо. Действительно косяк.
Вложения:
kow1976_.1.24.dt
Название: Задача 1.24
Отправлено: alexey55 от Февраль 19, 2012, 04:21:09 pm
Мое решение, запрос как 1.4
 Согласен с ut2k5, за час ее сложно решить) ну это пока..
Название: Задача 1.24
Отправлено: alexey55 от Февраль 19, 2012, 04:21:35 pm
забыл прикрепить
Вложения:
alexey55-1.24.dt
Название: Задача 1.24
Отправлено: Lazutin от Февраль 20, 2012, 07:32:43 am
alexey55,
 Очень уж большой получился запрос в документе "Расходная накладная". Его можно сократить как минимум в двое. По-моему, достаточно сначала считать данные из ТЧ документа во временную таблицу, а потом присоединить таблицы с остатками, где будет общий остаток по всем складам и отдельно по каждому складу...
Название: Задача 1.24
Отправлено: alexey55 от Февраль 20, 2012, 09:22:39 am
Lazutin,
 согласен, запрос получился немаленький)
 вся сложность заключается в том, что в табчасти может быть одна и та же номенклатура с разными складами.. если бы не это, то было бы на много проще..
Название: Задача 1.24
Отправлено: Lazy от Ноябрь 07, 2012, 03:21:01 pm
Подскажите, плиз, делал сам, другие решения не смотрел. Как сделать проверку на количество остатка на складе не прибегая к запросу в цикле?
 Когда в табличной части одна номенклатура с разными складами.
Вложения:
Lazy_1_24-1-.dt
Название: Задача 1.24
Отправлено: Obamo от Январь 16, 2013, 05:10:55 pm
Решил без упрощения, что дублей по номенклатуре в табличной части быть не может.
 Запрос простой, методика списания немного сложней. Взял выборку по номенклатуре и складу из заказа и две таблицы значений с остатками, одна с общими по номенклатуре для проверки, вторая с разбивкой по складам.
 Методика делится на две части если в таб части заполнен склад то списываем с него и меняем значение в таблице значений, далее если не все списали, обходим таблицу методом для каждого из и списываем оставшеесе.
 Оказалось просто, я голову дня два ломал, все хотел в одну выборку засунуть, а это гораздо сложней, и большой запрос отлаживать сложно.
 Жду комментариев!  wink
Вложения:
Obamo_1.24.dt
Название: Задача 1.24
Отправлено: kyafnsum от Январь 29, 2013, 06:03:32 pm
Аналогично, без упрощения по отсутствию дублей номенклатуры с различными складами в ТЧ.
 Задача показалась не солжной. В запросе две сортировки - по складу в ТЧ и приоритету склада из регистра. Ну и 2 группировки - По номенклатуре (общие остатки), по складу в документе (так проще списывать, когда одна и та же номенклатура списывается с раных складов), ну и соответственно 3 цикла по группировкам (последний по детальным записям).
 ++++++++++++++++++++++++++
 Хотя, не учел проблему с блокировками - по каким складам ее устанавливать - не известно заранее, а если по всем - то это как-то топорно слишком. Нужно доработать запрос, в общем.

 Добавлено (29.01.2013, 18:03)
 ---------------------------------------------
 Obamo, особо не вникал в Ваше решение, но разве за Результат.Выгрузить() не снижают балл? Это ж на производительность влияет вроде как. И в отчете у Вас группировка по вирт.таблице, она вроде как там не нужна))
Вложения:
kyafnsum_1.24.dt
Название: Задача 1.24
Отправлено: Maxus от Апрель 23, 2013, 01:29:17 pm
Мой вариант решения.
Вложения:
1.24_mbs_2.dt
Название: Задача 1.24
Отправлено: Lkmaksimka от Июнь 09, 2013, 08:30:30 pm
Цитата (Maxus)
Мой вариант решения.Прикрепления: 1.24_mbs_2.dt(146Kb)
в Вашем решении  если реализовывать к примеру "Bosch KGS 3760 IE" 10 шт с Розничного склада и добавить вторую строку "Bosch KGS 3760 IE" 10 шт с Оптового склада , то в и постореть отчет"Движение товаров" то списывется всего 10 шт.
Название: Задача 1.24
Отправлено: Maxus от Июнь 10, 2013, 10:21:27 am
Lkmaksimka
 я решал без учета дублей, поэтому такая картинка в отчете.
Название: Задача 1.24
Отправлено: Lkmaksimka от Июнь 11, 2013, 12:12:27 pm
А Кто знает как праивльно , с учетом дублей или без ?
Название: Задача 1.24
Отправлено: TuMyP1985 от Июнь 21, 2013, 02:27:20 pm
Мой вариант
Вложения:
_1_24.dt
Название: Задача 1.24
Отправлено: bilateral от Июль 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
Название: Задача 1.24
Отправлено: artfa от Июль 05, 2013, 02:22:11 pm
Цитата (TuMyP1985)
Мой вариант
у вас ошибки, можно списать больше чем есть на складах, не настроен отчет.
 при решении использовал алгоритм подобный задаче 1.22 (мой вариант), вроде все ОК, протестил с различными вариантами, ошибок не обнаружил
Вложения:
6679111.dt
Название: Задача 1.24
Отправлено: TuMyP1985 от Июль 05, 2013, 04:48:08 pm
Цитата (artfa)
у вас ошибки, можно списать больше чем есть на складах
Спасибо, поправил.
 Моя база
Вложения:
KTT_1_24.dt
Название: Задача 1.24
Отправлено: TuMyP1985 от Июль 05, 2013, 04:50:05 pm
Цитата (artfa)
Прикрепления: 6679111.dt
При проведении РН возникла ошибка деления на 0, эту базу прикрепил.

 А так тоже протестил - все списывает правильно, по приоритетам.
Вложения:
6679111_1.dt
Название: Задача 1.24
Отправлено: artfa от Июль 05, 2013, 06:02:19 pm
Цитата (TuMyP1985)
При проведении РН возникла ошибка деления на 0, эту базу прикрепил.
спасибо за замечание, ошибки возникли из-за того что копипастил из задачи 1.22, исправил
Вложения:
2555057.dt
Название: Задача 1.24
Отправлено: artfa от Июль 30, 2013, 06:43:05 pm
ваша (моя) база с тестовыми данными теперь не ругается

 Добавлено (30.07.2013, 18:43)
 ---------------------------------------------
 подправил
Вложения:
vozvrTest.dt
Название: Задача 1.24
Отправлено: Alexander от Январь 07, 2014, 04:41:23 am
Мой вариант. То же самое что и 1.4. Добавлю маленький комментарий. Идея запроса - переформировать все остатки по складам таким образом чтобы сначала шли данные по складам, указанным в документе и в достаточном количестве (ВТ Совпадение), а затем остальные остатки (которые в данном случае отсортированы по приоритету складов). Все условия задачи выполнены, включая дубли строк.
 --------------
 В принципе, TuMyP1985 реализует ту же идею. С той лишь разницей, что я блокирую движения перед записью пустого движения в начале процедуры проведения так как у меня стоит галка разрешения разделения итогов в РН Остатки номенклатуры, что вроде как рекомендуется.
Вложения:
kul_1_24.dt
Название: Задача 1.24
Отправлено: Public_enemy от Февраль 21, 2014, 05:24:46 pm
Критика приветствуется.
Вложения:
Task_1.24.dt
Название: Задача 1.24
Отправлено: YFred от Май 14, 2014, 02:03:24 pm
Критикуйте
Вложения:
YFred_1.24.dt
Название: Задача 1.24
Отправлено: Demy от Май 14, 2014, 02:59:24 pm
YFred, посмотрел твое решение. В расходной у тебя неправильно списывается товар, думаю тут требуется решать как в примере прилагаемом к задачнику. Базу прилагаю.
Вложения:
YFred_1.24_E1.dt
Название: Задача 1.24
Отправлено: YFred от Май 15, 2014, 12:30:33 am
в чем конкретно ошибка? Помоему все списывается правильно
Название: Задача 1.24
Отправлено: Demy от Май 15, 2014, 11:01:21 pm
Цитата YFred ()
в чем конкретно ошибка? Помоему все списывается правильно
Почему-то приложенная мною база не открывается. sad Тогда опишу словесно.
 Остатки товаров на момент проведения документа:
 Big (капилярная) | Склад1 | 5
 Big (капилярная) | Склад2 | 5
 Big (капилярная) | Склад3 | 5

 Приоритеты остаються как у тебя (а то писать лень).
 Список номенклатуры расходной накладной:
 Big (капилярная) | Склад2 | 4
 Big (капилярная) |            | 11
 Движения выполненные документом:
 Big (капилярная) | Склад1 | 4
 Big (капилярная) | Склад2 | 5
 Big (капилярная) | Склад3 | 5

 Повторно прилагаю базу с этим примером.
Вложения:
YFred_1.24_E2.dt
Название: Задача 1.24
Отправлено: Demy от Май 15, 2014, 11:32:37 pm
Не хочу быть непоследовательным, но приложу свое решение этой задачи.
Вложения:
Demy_1_24.dt
Название: Задача 1.24
Отправлено: YFred от Май 16, 2014, 08:36:34 am
На самом деле немного не правильно списывалось, не учел один нюанс.
 Подправил немного, теперь все правильно.
Вложения:
6039353.dt
Название: Задача 1.24
Отправлено: YFred от Май 16, 2014, 08:46:06 am
Demy, посмотрел твое решение (в конфигураторе не смотрел). Посмотри пример в файле выгрузки, у тебя не правильно списывается товар.
Вложения:
1.24Demy.dt
Название: Задача 1.24
Отправлено: Demy от Май 16, 2014, 09:52:35 am
Цитата YFred ()
Demy, посмотрел твое решение (в конфигураторе не смотрел). Посмотри пример в файле выгрузки, у тебя не правильно списывается товар.
Недоглядел!!! Исправил, спасибо за замечание.
Вложения:
Demy_1_24_1.dt
Название: Задача 1.24
Отправлено: YFred от Май 16, 2014, 10:08:17 am
Разобрал твой запрос, это жесть. У меня намного проще. Ну не уверен, что правильнее с точки зрения экзаменаторов.
Название: Задача 1.24
Отправлено: Demy от Май 16, 2014, 10:32:02 am
YFred, посмотрел твое решение, все равно списывается неправильно. Тут вся соль в том чтобы разделить остатки, затребованные напрямую с расходника, с остатками, которые покрывают недостаток на складе. Посмотри выгрузку.

Добавлено (16.05.2014, 10:32)
---------------------------------------------

Цитата YFred ()
Разобрал твой запрос, это жесть.
Я когда в примере этот запрос разбирал тоже сначала ужаснулся, но на самом деле в нем нет ничего сложного.
Цитата YFred ()
Ну не уверен, что правильнее с точки зрения экзаменаторов.
Эта задача очень похожа на задачу 1.4, решение которой в качестве примера дается с задачником. На основании запроса написанного там я и сделал свой. Не будут же экзаменаторы критиковать свое же решение?!! smile
Вложения:
YFred_1.24_E3.dt
Название: Задача 1.24
Отправлено: YFred от Май 16, 2014, 12:18:32 pm
Demy
 я сдался smile . Переделаю как в задачнике, через ОГРОМНЫЙ запрос.
Название: Re: Задача 1.24
Отправлено: Odines от Февраль 06, 2015, 08:53:38 pm
Без подготовки на экзамене не решил бы
Название: Re: Задача 1.24
Отправлено: Сеня от Февраль 23, 2015, 11:49:23 am
Только начал готовиться. Написал запрос для расходной накладной, учитываю приоритеты складов, все работает - списывает с учетом приоритетов, но не знаю как учесть ситуацию, когда у нас в табличной части фигурирует одинаковый товар, но при этом указаны разные склады? У меня запрос обрабатывает только первую строку в ТЧ, списывает, а все что ниже игнорирует.
Запрос = Новый Запрос;
   Запрос.Текст =
    "ВЫБРАТЬ
    |   СписокНоменклатуры.Номенклатура КАК Номенклатура,
    |   СУММА(СписокНоменклатуры.Количество) КАК Количество,
    |   СписокНоменклатуры.Склад КАК Склад,
    |   СУММА(СписокНоменклатуры.Сумма) КАК Сумма
    |ПОМЕСТИТЬ ТЧСписание
    |ИЗ
    |   Документ.РасходнаяНакладная.СписокНоменклатуры КАК СписокНоменклатуры
    |ГДЕ
    |   СписокНоменклатуры.Ссылка = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    |   СписокНоменклатуры.Номенклатура,
    |   СписокНоменклатуры.Склад
    |
    |ИНДЕКСИРОВАТЬ ПО
    |   Номенклатура
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |   ТЧСписание.Номенклатура КАК Номенклатура,
    |   ТЧСписание.Количество КАК ДокументКоличество,
    |   ТЧСписание.Сумма КАК ДокументСумма,
    |   ОстаткиНоменклатурыОстатки.Склад,
    |   ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    |   ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СтоимостьОстаток, 0) КАК СтоимостьОстаток,
    |   ВЫБОР
    |      КОГДА ОстаткиНоменклатурыОстатки.Склад = ТЧСписание.Склад
    |         ТОГДА 0
    |      ИНАЧЕ 1
    |   КОНЕЦ КАК ПорядокСортировки
    |ИЗ
    |   ТЧСписание КАК ТЧСписание
    |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
    |            &МоментВремени,
    |            Номенклатура В
    |               (ВЫБРАТЬ
    |                  РасходнаяНакладная.Номенклатура
    |               ИЗ
    |                  ТЧСписание КАК РасходнаяНакладная)) КАК ОстаткиНоменклатурыОстатки
    |         ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПриоритетыСкладов.СрезПоследних(&МоментВремени) КАК ПриоритетыСкладовСрезПоследних
    |         ПО ОстаткиНоменклатурыОстатки.Склад = ПриоритетыСкладовСрезПоследних.Склад
    |      ПО ТЧСписание.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
    |
    |УПОРЯДОЧИТЬ ПО
    |   ПорядокСортировки,
    |   ПриоритетыСкладовСрезПоследних.Приоритет
    |ИТОГИ
    |   МАКСИМУМ(ДокументКоличество),
    |   СУММА(ДокументСумма),
    |   СУММА(КоличествоОстаток),
    |   СУММА(СтоимостьОстаток)
    |ПО
    |   Номенклатура";
   
   Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
   Запрос.УстановитьПараметр("Ссылка"       , Ссылка);

Название: Re: Задача 1.24
Отправлено: Odines от Февраль 23, 2015, 12:11:12 pm
Только начал готовиться. Написал запрос для расходной накладной, учитываю приоритеты складов, все работает - списывает с учетом приоритетов, но не знаю как учесть ситуацию, когда у нас в табличной части фигурирует одинаковый товар, но при этом указаны разные склады? У меня запрос обрабатывает только первую строку в ТЧ, списывает, а все что ниже игнорирует.

Посмотри мое решение, или в сборнике задач пример решения задачи по оперативному учету (в конце). Там для партий пример но он аналогичен и складам.
Название: Re: Задача 1.24
Отправлено: Сеня от Февраль 23, 2015, 01:15:34 pm
спасибо, уже увидел, смотрю)
Название: Re: Задача 1.24
Отправлено: Сеня от Февраль 23, 2015, 01:59:33 pm
Только начал готовиться. Написал запрос для расходной накладной, учитываю приоритеты складов, все работает - списывает с учетом приоритетов, но не знаю как учесть ситуацию, когда у нас в табличной части фигурирует одинаковый товар, но при этом указаны разные склады? У меня запрос обрабатывает только первую строку в ТЧ, списывает, а все что ниже игнорирует.

Посмотри мое решение, или в сборнике задач пример решения задачи по оперативному учету (в конце). Там для партий пример но он аналогичен и складам.
Посмотрел решение, не мог бы ты дать комментарий, почему именно так определяются количество и сумма? зачем два запроса в ВТ_ВсеОстатки?
Запрос1
Количество:

ВЫБОР
   КОГДА ВТ_ВсеОстатки.КолОст > ВТ_Товары.КолДок
      ТОГДА ВТ_Товары.КолДок
   ИНАЧЕ ВТ_ВсеОстатки.КолОст
КОНЕЦ

Сумма:

ВЫБОР
   КОГДА ВТ_ВсеОстатки.КолОст > ВТ_Товары.КолДок
      ТОГДА ВТ_Товары.КолДок / ВТ_ВсеОстатки.КолОст * ВТ_ВсеОстатки.СуммаОст
   ИНАЧЕ ВТ_ВсеОстатки.СуммаОст
КОНЕЦ

Запрос2
Количество:

ВЫБОР
   КОГДА ВТ_ВсеОстатки.КолОст > ВТ_Товары.КолДок
      ТОГДА ВТ_ВсеОстатки.КолОст - ВТ_Товары.КолДок
   ИНАЧЕ 0
КОНЕЦ

Сумма:

ВЫБОР
   КОГДА ВТ_ВсеОстатки.КолОст > ВТ_Товары.КолДок
      ТОГДА ВТ_ВсеОстатки.СуммаОст - ВТ_Товары.КолДок / ВТ_ВсеОстатки.КолОст * ВТ_ВсеОстатки.СуммаОст
   ИНАЧЕ 0
КОНЕЦ

Название: Re: Задача 1.24
Отправлено: Odines от Февраль 23, 2015, 02:21:25 pm
Только начал готовиться. Написал запрос для расходной накладной, учитываю приоритеты складов, все работает - списывает с учетом приоритетов, но не знаю как учесть ситуацию, когда у нас в табличной части фигурирует одинаковый товар, но при этом указаны разные склады? У меня запрос обрабатывает только первую строку в ТЧ, списывает, а все что ниже игнорирует.

Посмотри мое решение, или в сборнике задач пример решения задачи по оперативному учету (в конце). Там для партий пример но он аналогичен и складам.
Посмотрел решение, не мог бы ты дать комментарий, почему именно так определяются количество и сумма? зачем два запроса в ВТ_ВсеОстатки?

В первом запросе получается количество (и сумма) которое будет списано в первую очередь по данным из табличной части.
Во втором запросе получается количество (и сумма)  которое останется после списания товаров из первого запроса.
Название: Re: Задача 1.24
Отправлено: Albert от Апрель 22, 2015, 06:39:07 pm
Без подготовки на экзамене не решил бы
Посмотрел решение - вопросов нет,хорошее. Как по времени , долго?
Название: Re: Задача 1.24
Отправлено: SvitlaChek1c от Июль 31, 2015, 02:09:17 pm
Здравствуйте!
Делюсь версией решения.
//У справочника "Склад" есть реквизит "Приоритет", обратите внимание на его свойства (по моему приоритет не может быть отрицательным и начинаться с нуля).
Также, жду критику по модулю "Расходной накладной", а именно интересует запрос.
Название: Re: Задача 1.24
Отправлено: rusmosav от Август 19, 2015, 09:56:31 am
Прощу оценить.
Название: Re: Задача 1.24
Отправлено: alex_1980 от Июнь 09, 2016, 03:16:08 pm
Попытался написать свой запрос, получилось попроще, 4 выборки. Меньше вроде не видел
Название: Re: Задача 1.24
Отправлено: alfalume от Июль 19, 2016, 02:43:56 pm
покртикуйте пожалуйста
Название: Re: Задача 1.24
Отправлено: Wal от Сентябрь 26, 2016, 12:30:25 am
Если в расходной указать две строки с одинаковой номенклатурой и разными складами, то не правильно списывает.
Название: Re: Задача 1.24
Отправлено: jonik от Июль 20, 2017, 05:12:50 pm
Мда, задача и вправду непростая :-\ В принципе можно сделать 2-мя запросами по пустому складу и нет, но это двойное обращение к БД, а это не приветствуется. 9-ти этажный запрос конечно поражает, но без него никак. Единственное - делал по новой методике с сайта Чистова(задача 1.6), т.е. сначала записывал, поэтому код "вырос", но это правильно.

П.С. Как в отчет убрать имена колонок для ресурсов(чтобы было как в книжке)?
Название: Re: Задача 1.24
Отправлено: jonik от Январь 25, 2018, 01:04:48 pm
Мда, задача и вправду непростая :-\ В принципе можно сделать 2-мя запросами по пустому складу и нет, но это двойное обращение к БД, а это не приветствуется. 9-ти этажный запрос конечно поражает, но без него никак. Единственное - делал по новой методике с сайта Чистова(задача 1.6), т.е. сначала записывал, поэтому код "вырос", но это правильно.

П.С. Как в отчет убрать имена колонок для ресурсов(чтобы было как в книжке)?
Подкорректировал
Название: Re: Задача 1.24
Отправлено: НатальяЮГ от Март 20, 2018, 11:12:26 am
Миленькая задачка, два дня просидела, кучу вариантов испробовала. Это самый близкий к оптимальному решению, с моей точки зрения. Запрос получился в три этажа, сортировка приоритетов при помощи массивов.
 
П.С. Как в отчет убрать имена колонок для ресурсов(чтобы было как в книжке)?
Сделала вариант отчета с заголовками полей в Вашей базе, посмотрите; если вопросы останутся, пишите (все расписывать долго, на конкретные непонятки можно ответить быстрее
Название: Re: Задача 1.24
Отправлено: Lzrnk от Март 20, 2018, 12:33:42 pm
Миленькая задачка, два дня просидела, кучу вариантов испробовала. Это самый близкий к оптимальному решению, с моей точки зрения. Запрос получился в три этажа, сортировка приоритетов при помощи массивов.
 
Это вы перемудрили. Все задачи однотипные и довольно простые. Такое решение точно не пройдёт. Посмотрите как обычно это делают.
Не отлаживал, но провёл первую накладную. Движения можете посмотреть прямо в документе.
Название: Re: Задача 1.24
Отправлено: НатальяЮГ от Март 20, 2018, 04:33:46 pm
По условию задачи:

1.   В первую очередь товар списывается со склада, указанного для данного товара в табличной части документа,

2.   далее со склада с минимальным приоритетом, потом со следующего склада с большим приоритетом и т.д., пока не спишется все необходимое количество

3.   Если склад не указан, то происходит списание со складов, согласно их приоритету,

В Вашем варианте (рис. 1) я не вижу такого порядка списания п. 2, только по возрастанию. Упрощение?
Название: Re: Задача 1.24
Отправлено: Lzrnk от Март 20, 2018, 04:45:03 pm
По условию задачи:

1.   В первую очередь товар списывается со склада, указанного для данного товара в табличной части документа,

2.   далее со склада с минимальным приоритетом, потом со следующего склада с большим приоритетом и т.д., пока не спишется все необходимое количество

3.   Если склад не указан, то происходит списание со складов, согласно их приоритету,

В Вашем варианте (рис. 1) я не вижу такого порядка списания п. 2, только по возрастанию. Упрощение?
Именно так и списывается.
Название: Re: Задача 1.24
Отправлено: НатальяЮГ от Март 20, 2018, 05:57:03 pm
Возможно. я неправильно поняла условие задачи  :( .

Спасибо!
Название: Re: Задача 1.24
Отправлено: igarh от Июнь 17, 2018, 05:11:03 pm
Миленькая задачка, два дня просидела, кучу вариантов испробовала. Это самый близкий к оптимальному решению, с моей точки зрения. Запрос получился в три этажа, сортировка приоритетов при помощи массивов.
 
Это вы перемудрили. Все задачи однотипные и довольно простые. Такое решение точно не пройдёт. Посмотрите как обычно это делают.
Не отлаживал, но провёл первую накладную. Движения можете посмотреть прямо в документе.

в условии задачи явно оговорено, что в тч. склад может быть и не заполнен.
в приведенном Вами решении, при списании одной и той же номенклатры, при выбранном складе и не выбранном (т.е. две строки в тч с одной номенклатурой), отрабатывает некорректно. одну строку списывает и все.
Название: Re: Задача 1.24
Отправлено: igarh от Июнь 17, 2018, 05:27:24 pm
сделал так
Название: Re: Задача 1.24
Отправлено: НатальяЮГ от Июль 03, 2018, 02:15:10 pm
Миленькая задачка, два дня просидела, кучу вариантов испробовала. Это самый близкий к оптимальному решению, с моей точки зрения. Запрос получился в три этажа, сортировка приоритетов при помощи массивов.
 
Это вы перемудрили. Все задачи однотипные и довольно простые. Такое решение точно не пройдёт. Посмотрите как обычно это делают.
Не отлаживал, но провёл первую накладную. Движения можете посмотреть прямо в документе.

в условии задачи явно оговорено, что в тч. склад может быть и не заполнен.
в приведенном Вами решении, при списании одной и той же номенклатры, при выбранном складе и не выбранном (т.е. две строки в тч с одной номенклатурой), отрабатывает некорректно. одну строку списывает и все.


Согласна, не учла такой вариант.
Переделала с учетом того, что в тбл части могут быть строки  с одинаковой номенклатурой но разными или пустым складами.
Название: Re: Задача 1.24
Отправлено: НатальяЮГ от Июль 03, 2018, 02:35:48 pm
сделал так


Попробовала сделать в Вашей базе пару своих расходных накладных,
как то не хочет списывать с тех складов, которые  в строках указаны.  :(
Название: Re: Задача 1.24
Отправлено: igarh от Сентябрь 11, 2018, 09:31:24 pm
сделал так


Попробовала сделать в Вашей базе пару своих расходных накладных,
как то не хочет списывать с тех складов, которые  в строках указаны.  :(

спасибо что подсказали что не полностью отработало списание. подправил.