Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите найти ошибку в отчете  (Прочитано 5952 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Мирка
Интересующийся

ru
Offline Offline

« : 05-05-2011 06:28 » 

Доброго времени суток всем:)
Пожалуйста, подскажите, голова квадратная уже!
Проблема в следующем: делаю отчет (через УниверсальныйОтчет) по вирт. таблицам оборотов регистров ВыпускПродукции и Материалы ВПроизводстве
(УПП 8.1)
Задача: Есть продукция (Гранулят) к нему привязана Спецификация в которой указан материал для этой продукции(Дробленка) Мне нужно выбрать оборот за период Продукции из рег.ВыпускПродукции гранулята и за этот же период выбрать оборот дробленки из рег. МатериалыВПроизводстве (по связи "ВыпускПродукцииОбороты.Спецификация.ИсходныеКомплектующие.Номенклатура = МатериалыВПроизводствеОбороты.Затрата")
Затем из первого вычитаю второе и получаю разницу (кол-во дробленки, кот.  нужно списать)

Все бы замечательно, НО! бывает что для производства РАЗНОГО гранулята идет ОДНА И ТА ЖЕ дробленка
т.е:  гранулят(прозрачный)(5000кг)-- из-- драбленка(прозрачная)(1000кг)
        гранулят(белый)(3000кг)          -- из-- Дробленка(прозрачная)(1000кг)
в этом случае, при вычислении разницы мне нужно чтобы   кол-во дробленки по одинаковым строчкам не суммировалось

И чтобы окончательно вас запутать:) выкладываю текст запроса
Код:
ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
               | ВыпускПродукцииОбороты.Подразделение,
               | ВыпускПродукцииОбороты.НоменклатурнаяГруппа,
               | ВыпускПродукцииОбороты.Продукция,
               | ВыпускПродукцииОбороты.Спецификация,
               | ВыпускПродукцииОбороты.КоличествоОборот КАК КоличествоВыпуск,
               | МатериалыВПроизводствеОбороты.Затрата КАК Затрата,
               | МАКСИМУМ(МатериалыВПроизводствеОбороты.КоличествоОборот) КАК КоличествоСписание,
               | ВыпускПродукцииОбороты.КоличествоОборот -МАКСИМУМ(МатериалыВПроизводствеОбороты.КоличествоОборот) * -1 КАК НадоСписать
               |{ВЫБРАТЬ
               | Подразделение.*,
               | НоменклатурнаяГруппа.*,
               | Продукция.*,
               | Спецификация.*,
               | КоличествоВыпуск,
               | Затрата.*,
               | КоличествоСписание,
               | НадоСписать}
               |ИЗ
               | РегистрНакопления.ВыпускПродукции.Обороты(&ДатаНач, &ДатаКон, Период, ) КАК ВыпускПродукцииОбороты
               | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.МатериалыВПроизводстве.Обороты(&ДатаНач, &ДатаКон, Период, ) КАК МатериалыВПроизводствеОбороты
               | ПО ВыпускПродукцииОбороты.Спецификация.ИсходныеКомплектующие.Номенклатура = МатериалыВПроизводствеОбороты.Затрата
               |{ГДЕ
               | ВыпускПродукцииОбороты.Подразделение.*,
               | ВыпускПродукцииОбороты.НоменклатурнаяГруппа.*}
               |
               |СГРУППИРОВАТЬ ПО
               | ВыпускПродукцииОбороты.Подразделение,
               | ВыпускПродукцииОбороты.НоменклатурнаяГруппа,
               | ВыпускПродукцииОбороты.Продукция,
               | ВыпускПродукцииОбороты.Спецификация,
               | МатериалыВПроизводствеОбороты.Затрата,
               | ВыпускПродукцииОбороты.КоличествоОборот
               |{УПОРЯДОЧИТЬ ПО
               | Затрата.*}
               |ИТОГИ
               | СУММА(КоличествоВыпуск),
               | МАКСИМУМ(КоличествоСписание),
               | СУММА(НадоСписать)
               |ПО
               | ОБЩИЕ,
               | Затрата
               |{ИТОГИ ПО
               | Затрата.*}
               |АВТОУПОРЯДОЧИВАНИЕ";
« Последнее редактирование: 05-05-2011 09:19 от Мирка » Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 06-05-2011 14:14 » 

Давай отвлечемся от программирования и опрделим конечную задачу.
Если я правильно понял - то это: "[определить] кол-во дробленки, кот.  нужно списать"
Вообще-то в правильно нестроенном УПП это все и так работает. Так что вопрос скорее верной настройки УПП.
Записан
Мирка
Интересующийся

ru
Offline Offline

« Ответ #2 : 10-05-2011 05:24 » 

у нас полностью переписанная УПП, поэтому я не знаю как это в стандартой работает.
Задача определена правильно. Просто тут все сложно, настройки тут не помогут, ведь теоретически я от гранулята отнимаю дробленку, чтобы получить дробленку (хотя все с 1 класса знают что яблоки от апельсинов отнять нельзя)
И только я знаю что гранулят =дробленка, вот и получается  дробленка-дробленка=дробленка

Не надо забивать голову лишним, просто подскажите как сделать так чтоб строки не суммировались, вопрос то ведь конкретный:)
Может это в принципе сделать нельзя... или можно, но другим способом
Записан
Anhel
Постоялец

ru
Offline Offline

« Ответ #3 : 10-05-2011 05:49 » 

А как у вас происходит отражение выпуска, как списываются материалы?
Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 10-05-2011 05:50 » 

Не надо забивать голову лишним...
Я как раз это и делаю, т.к. вникать в детали запроса желания нет Улыбаюсь

Потому дам общие рекомендации (надеюсь они помогут и в дальнейшем):
Чтобы найти подобные ошибки нужно сначала убрать все агрегатные функции и группировки из запроса и вывести детальную таблицу (т.е. все строки, которые сюда попадают). Дальше добавляя дополнительные поля из исходных таблиц (вплоть до использования ВЫБРАТЬ *) ищем почему же дублируются строки.
В 95% случаев это неверное использование [ЛЕВОЕ] СОЕДИНЕНИЕ - либо недостаточно условий в самом соединении (ПО ...), либо нужно одну из таблиц предварительно подготовить вложенным запросом чтобы убрать дубли строк.

Кроме того настораживает использование МАКСИМУМ для этой задачи в запросе

А что касается
у нас полностью переписанная УПП, поэтому я не знаю как это в стандартой работает.
то отмечу следующее: конфигурация УПП - это флагман продуктов от 1С и написана очень толково. Потому чтобы не тратить зря время - лучше пойти на курсы по внедрению УПП и разобраться как это сделано в стандартной, после чего попытаться применить это у себя. В противном случае вы (ваша компания) будет изобретать велосипеды (дорабатывая УПП) и пытаться на них догнать паровоз (УПП).
Записан
Мирка
Интересующийся

ru
Offline Offline

« Ответ #5 : 11-05-2011 07:56 » 

Kivals , спасибо за ответ:) Я нисколечко не сомневаниюсь в толковости УПП, НО! некоторые руководители считают, что они лучше знают как надо, и я к сожалению, никак не могу повлиять на процессы протекающие в их мозгах..
Им просто НАДО ТАК, а не иначе.

Теперь по существу:
я выводила строки без группировок, я и я даже пониманию почему они дублируются, только не могу это обойти.
МАКСИМУМ я использую как раз для того чтобы НЕ суммировать(в моем случае не важно, использовать МАКСИМУМ, или МИНИМУМ т.к. значения равны и мне надо взять ОДНО ИЗ них, а не складывать) и это работает, когда я получаю количество Списания. Но проблема в том что при вычислении значения НадоСписать, машина не видит МАКСИМУМ, а вычитае КАЖДОЕ (из этих одинаковых) значение
попробую "на пальцах" объяснить:
без группировок имею таблицу

                Выпуск                                                  Списание                                               Надо списать       
1 Гранулят(Прозрачный)    1000кг              Дробленка(Прозрачная)  200кг                   1000-200=800
2 Гранулят(Белый)               2000кг             Дробленка(Прозрачная)  200кг                    800-200=600
итог:(по Гранулят(Прозр)    1000                                                          400                                      600     

так делает машина, это понятно и логично НО мне надо вот так

Выпуск                                                               Списание                                               Надо списать       
1 Гранулят(Прозрачный)    1000кг              Дробленка(Прозрачная)  200кг                   1000-200=800
2 Гранулят(Белый)               2000кг             Дробленка(Прозрачная)  200кг                    1000-200=800
итог:(по Гранулят(Прозр)    1000                                                          200                                        800     

Используя МАКСИМУМ мне удается получить правильное значение Списание (200) а НадоСписать все равно получается 600




Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 11-05-2011 12:30 » 

Путаюсь я в твоих мыслях, т.к. ты каждый раз пишешь разные названия, да и с ошибками. Давай абстрагируемся.
Есть материал. Есть Продукт 1 и Продукт 2.

Имеем:
Произвели Продукт 1 в количество 1000 кг - затратили Материала 300 кг
Произвели Продукт 2 в количестве 2500 кг - затратили Материала 400 кг

Какое количество списания нужно получить на выходе?
300? (т.е. только то, что затратили на производство Продукта 1)
или 700? (т.е. суммарно затрачено на Продукт 1 + Продукт 2)
или свой вариант?
Записан
Мирка
Интересующийся

ru
Offline Offline

« Ответ #7 : 12-05-2011 07:08 » 

что тут путаться то? и навания у меня одинаковые: Гранулят и дробленка...
Если по твоей схеме то вот так:

Произвели Продукт 1 в количество 1000 кг - затратили Материала1  300 кг
Произвели Продукт 2 в количестве 2500 кг - затратили Материала1    0 кг

Сложность в том что на выработку РАЗНЫХ продуктов идет ОДИНАКОВЫЙ материал. и если в первой строке его реально затратили, то во второй строке машина просто дублировала значение из первой строки.

В итоге у меня должно получиться  Продукт1(выпуск) 1000кг    Материал1(списано)  300кг     Материал(НадоСписать) 700
                                                          Продукт2 (выпуск) 2500кг    Материал1(списано)     0кг     Материал(НадоСписать) 700

Просто списание не всегда привязано к выпуску, обычно материал списывается со склада в производство в начале дня/смены, а потом цех целый день/смену выпускает продукцию, оформляя  каждый выпуск документом. А в конце дня втает вопрос: сколько же надо списать? или мы выпустили больше чем списали?(такое тож случается, когда в цеху висит остаток материала с прошлой смены)
 

Записан
Kivals
Модератор

us
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 12-05-2011 12:31 » 

Сложность в том что на выработку РАЗНЫХ продуктов идет ОДИНАКОВЫЙ материал. и если в первой строке его реально затратили, то во второй строке машина просто дублировала значение из первой строки.
Нестыковочка. Если идет одинаковый материал - тогда почему "просто дублировала"? какое условие упущено?

Добавлено через 4 минуты и 26 секунд:
offtopic:
...обычно материал списывается со склада в производство в начале дня/смены, а потом цех целый день/смену выпускает продукцию...
При нормальной настройке УПП не имеет никакого значения порядок списания в производство в пределах месяца!

« Последнее редактирование: 12-05-2011 12:36 от Kivals » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines