Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
30 сен 2024, 14:33

Процедура ПОдобратьПартии

Автор Chuchi, 18 апр 2011, 11:30

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

Klyacksa

Так, давайте по порядку.
В начале с запросом.
1. Отбор по Организации. Сейчас получается так: отбираются все данные по ВСЕМ организациям (это хорошо, если их только две, а если когда-нибудь будет больше? Переделывать все? Лучше сразу это учесть. Отбор нужно делать сразу в таблице остатков, чтобы сразу не брать лишние ненужные данные, не тратить на них время.
То есть как-то так:
|ИЗ
               |    РегистрНакопления.ОстаткиМатериалов.Остатки(&ТекущаяДата, Организация=&Организация1 или Организация=&Организация2) КАК ОстаткиМатериаловОстатки


2. При группировке запроса, группировать нужно по Номенклатуре, а в суммируемые поля добавить ВСЕ числовые поля, сделать по ним сумму.
Так. Есть подозрение, что я ошиблась, убрав Организацию из полей. Верните его. Только по Организации не группируем!!!
Скорее всего даже, группировку лучше сделать на закладке Итоги, на закладке "Группировка" может не получится разделить остатки по организациям, и чтобы они в одну строчку были.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Chuchi

Упростила код до максимума чтобы проверить что выводит  :xfbnsdfb:
Запрос = Новый Запрос;

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


   Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
   Запрос.УстановитьПараметр("организация1", организация1);
   Запрос.УстановитьПараметр("организация2", организация2);
   Запрос.УстановитьПараметр("Номенклатура",ЭлементыФормы.Товары.Значение.ВыгрузитьКолонку("Номенклатура"));
   ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать();
    Пока  ВыборкаРезультатаЗапроса.Следующий()Цикл ;
Сообщить("Номенклатура " + ВыборкаРезультатаЗапроса.Номенклатура + " Количество на складе " + Организация1 + " " + ВыборкаРезультатаЗапроса.ОстаткиПервые + " на складе " + Организация2 + " " +ВыборкаРезультатаЗапроса.ОстаткиВторые + " " );
   КонецЦикла;


результат
Номенклатура  Количество на складе "Конфетпром" 1 902 на складе "Шоколадпром" 5 640
Номенклатура Шоколад "Аленка" Количество на складе "Конфетпром" 30 на складе "Шоколадпром" 20
Номенклатура Шоколад "Аленка" Количество на складе "Конфетпром" 0 на складе "Шоколадпром" 20
Номенклатура Шоколад "Аленка" Количество на складе "Конфетпром" 30 на складе "Шоколадпром" 0
Номенклатура Конфеты "Барбарис" Количество на складе "Конфетпром" 1 872 на складе "Шоколадпром" 5 620
Номенклатура Конфеты "Барбарис" Количество на складе "Конфетпром" 1 872 на складе "Шоколадпром" 0
Номенклатура Конфеты "Барбарис" Количество на складе "Конфетпром" 0 на складе "Шоколадпром" 5 620
Первая строка вообще не верно а потом вон как дублирует, я что то опять не доделала((

Chuchi

Группировку по номенклатуре сделала на вкладке итогов

Klyacksa

Спокойствие, щас все поправим.

ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока  ВыборкаРезультатаЗапроса.Следующий()Цикл ;
    Сообщить("Номенклатура " + ВыборкаРезультатаЗапроса.Номенклатура + " Количество на складе " + Организация1 + " " + ВыборкаРезультатаЗапроса.ОстаткиПервые + " на складе " + Организация2 + " " +ВыборкаРезультатаЗапроса.ОстаткиВторые + " " );
КонецЦикла;
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Klyacksa

Так, и еще - общий итог нужен? То есть первая строка. Она показывает, сколько единиц на каждом складе всего
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Chuchi

да сколько на каждом складе(т.е. на каждой организации)

Klyacksa

Тогда так:
ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); // это мы выбрали, сколько всего-всего
Если  ВыборкаРезультатаЗапроса.Следующий() тогда
     Сообщить("Общее количество товара на складе "+Организация1+" "+ВыборкаРезультатаЗапроса.ОстаткиПервые + " на складе " + Организация2 + " " +ВыборкаРезультатаЗапроса.ОстаткиВторые);
     ВыборкаПоТоварам=ВыборкаРезультатаЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); // это мы выбрали количество по каждому товару
     Пока ВыборкаПоТоварам.Следующий() Цикл ;
              Сообщить("Номенклатура " + ВыборкаПоТоварам.Номенклатура + " Количество на складе " + Организация1 + " " + ВыборкаПоТоварам.ОстаткиПервые + " на складе " + Организация2 + " " +ВыборкаПоТоварам.ОстаткиВторые + " " );
     КонецЦикла;
КонецЕсли;
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Chuchi

Все равно вот такой ответ
Общее количество товара на складе "Конфетпром"  на складе "Шоколадпром"
Номенклатура Шоколад "Аленка" Количество на складе "Конфетпром" 0 на складе "Шоколадпром" 20
Номенклатура Шоколад "Аленка" Количество на складе "Конфетпром" 30 на складе "Шоколадпром" 0

Klyacksa

Гм... Остановите отладчикос на строке
ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
И запостите таблицу от Запрос.Выполнить().Выгрузить()
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск