Имя: Пароль:
1C
1C 7.7
v7: Выбор номенклатуры запросом (2 одинаковые)
0 Масянька
 
30.11.12
10:05
Доброе утро!

Запросом выбирается номенклатура из док-ов Реализация.

   "//{{ЗАПРОС
   |Период с ДатаНачала по ДатаОкончания;
   |ДокПродажи = Регистр.ПартииНаличие.ТекущийДокумент;
   |КО = Регистр.ПартииНаличие.КодОперации;
   |Номенклатура = Регистр.ПартииНаличие.Номенклатура;
   |ПродСт = Регистр.ПартииНаличие.ПродСтоимость;
   |Себест = Регистр.ПартииНаличие.СуммаУпр;
   |КолВо    = Регистр.ПартииНаличие.Количество;
   |ДокПартия = Регистр.ПартииНаличие.Партия.ПриходныйДокумент;
   |Группировка ДокПродажи;
   |Группировка Номенклатура Упорядочить По Номенклатура.Код без групп;
   |Группировка ДокПартия;
   |Функция ВсегоПродСт = Сумма(ПродСт);
   |Функция ВсегоСебест = Сумма(Себест);
   |Функция Разница = Сумма(ПродСт - Себест);
   |Условие((КО = КодОперацииРеализация) ИЛИ (КО = КодОперацииРозница));
   |Условие(Номенклатура.ВидНоменклатуры <> ВидНоменклатурыУслуги);";

Такой косяк: в док-те 2 строки с одинаковой номенклатурой, но разным количество и ценой. Выводим только последнюю (кол-во и цена). Чувствую, что где-то в запросе косякнула.

Заранее спасибо.
1 dk
 
30.11.12
10:07
Добавь группировку по строкедокумента
2 Ёпрст
 
30.11.12
10:07
как бэ записи в регистре никакого отношения к строкам документа не имеют, если че..
3 Ёпрст
 
30.11.12
10:08
А с партиями - так и подавно.
4 Касандер72
 
30.11.12
10:24
(0) по ходу у тебя отнюдь не одинаковая номенклатура, а две аналогичные записи в справочнике номенклатуры - тады бухеров ногами за баян, пометку на удаление и ручками доки правим - это быстрее чем разовую "исправлялку" писать - хотя вещь и полезная
5 Масянька
 
30.11.12
10:29
Свертки выборки - нет.
   Таб = СоздатьОбъект("Таблица");
   
   Таб.ИсходнаяТаблица("Таблица");

   Таб.ВывестиСекцию("Заголовок");
   
   Таб.ВывестиСекцию("Шапка");

   мНомерСтроки = 6;
   
   НачПовт = Таб.ВысотаСекции("Заголовок");
   КонПовт = Таб.ВысотаСекции("Заголовок") + Таб.ВысотаСекции("Шапка");
   Таб.ПовторятьПриПечатиСтроки(НачПовт + 1, КонПовт);

   Если ВыводитьВсе = 1 Тогда
       Пока Запрос.Группировка("ДокПродажи") = 1 Цикл
           ПечДокумент        = глНазваниеДокументаВЖурнале(Запрос.ДокПродажи);
           ПечНомерДок        = глУдалениеВедущихНулей(Запрос.ДокПродажи.НомерДок);
           ПечДатаДок        = Запрос.ДокПродажи.ДатаДок;
           ПечКонтрагент    = Запрос.ДокПродажи.Контрагент;
           ВыручкаПоДокументу            = Запрос.ВсегоПродСт;
           СебестоимостьПоДокументу    = Запрос.ВсегоСебест;
           УбытокПоДокументу            = ВыручкаПоДокументу - СебестоимостьПоДокументу;
           ПроцентПоДокументу            = (ВыручкаПоДокументу * 100 / СебестоимостьПоДокументу) - 100;
           
           Таб.ВывестиСекцию("Документ");

           мНомерСтроки = мНомерСтроки + 1;
           
           Пока Запрос.Группировка("Номенклатура") = 1 Цикл
               Пока Запрос.Группировка("ДокПартия") = 1 Цикл
                   ПечТовар        = Запрос.Номенклатура.Наименование;
                   ПечКод            = Сред(Запрос.Номенклатура.Код, 5);
                   Выручка            = Запрос.ПродСт;
                   Себестоимость    = Запрос.Себест;
                   Убыток            = Запрос.Разница;
                   Количество        = Запрос.КолВо;
                   Процент            = (Выручка * 100 / Себестоимость) - 100;

                   ПечДокПартия        = глНазваниеДокументаВЖурнале(Запрос.ДокПартия);
                   ПечНомерДокПартия    = глУдалениеВедущихНулей(Запрос.ДокПартия.НомерДок);
                   ПечДатаДокПартия    = Запрос.ДокПартия.ДатаДок;
                   ПечКонтрагентПартия    = Запрос.ДокПартия.Контрагент;

                   Таб.ВывестиСекцию("Номенклатура");
                   
                   Если (Убыток <= 0) Тогда
                       мОбласть    = "R" + Строка(мНомерСтроки) + "C6:R" + Строка(мНомерСтроки) + "C6";
                       мКрасим    = Таб.Область(мОбласть);
                       мКрасим.Полужирный(1);
                       мКрасим.ЦветТекста(255,0,0);
                   КонецЕсли;
                   
                   мНомерСтроки = мНомерСтроки + 1;
                   
               КонецЦикла;    
           КонецЦикла;
       КонецЦикла;
       
   Иначе
       Пока Запрос.Группировка("ДокПродажи") = 1 Цикл
           Выводим = 0;
           
           ПечДокумент        = глНазваниеДокументаВЖурнале(Запрос.ДокПродажи);
           ПечНомерДок        = глУдалениеВедущихНулей(Запрос.ДокПродажи.НомерДок);
           ПечДатаДок        = Запрос.ДокПродажи.ДатаДок;
           ПечКонтрагент    = Запрос.ДокПродажи.Контрагент;
           ВыручкаПоДокументу            = Запрос.ВсегоПродСт;
           СебестоимостьПоДокументу    = Запрос.ВсегоСебест;
           УбытокПоДокументу            = ВыручкаПоДокументу - СебестоимостьПоДокументу;
           
           
           Пока Запрос.Группировка("Номенклатура") = 1 Цикл
               Пока Запрос.Группировка("ДокПартия") = 1 Цикл
                   ПечТовар        = Запрос.Номенклатура.Наименование;
                   ПечКод            = Сред(Запрос.Номенклатура.Код, 5);
                   Выручка            = Запрос.ПродСт;
                   Себестоимость    = Запрос.Себест;
                   Убыток            = Запрос.Разница;
                   
                   ПечДокПартия        = глНазваниеДокументаВЖурнале(Запрос.ДокПартия);
                   ПечНомерДокПартия    = глУдалениеВедущихНулей(Запрос.ДокПартия.НомерДок);
                   ПечДатаДокПартия    = Запрос.ДокПартия.ДатаДок;
                   ПечКонтрагентПартия    = Запрос.ДокПартия.Контрагент;

                   Если (Запрос.Разница <= 0) Тогда
                       Выводим = Выводим + 1;
                       
                       Если (Выводим = 1) Тогда
                           Таб.ВывестиСекцию("Документ");
                           мНомерСтроки = мНомерСтроки + 1;
                       КонецЕсли;

                       Таб.ВывестиСекцию("Номенклатура");
                       
                       мОбласть    = "R" + Строка(мНомерСтроки) + "C6:R" + Строка(мНомерСтроки) + "C6";
                       мКрасим    = Таб.Область(мОбласть);
                       мКрасим.Полужирный(1);
                       мКрасим.ЦветТекста(255,0,0);
                       
                       мНомерСтроки = мНомерСтроки + 1;
                   КонецЕсли;
                   
               КонецЦикла;
           КонецЦикла;
           
       КонецЦикла;
       
   КонецЕсли;

   ВсегоВыручка        = Запрос.ВсегоПродСт;
   ВсегоСебестоимость    = Запрос.ВсегоСебест;
   ВсегоУбыток        = ВсегоВыручка - ВсегоСебестоимость;
   ВсегоПроцент        = (ВсегоВыручка * 100 / ВсегоСебестоимость) - 100;


(4) Нет - код одинаковый.
6 Масянька
 
30.11.12
10:30
(1) Получилось - спасибо!
7 Ёпрст
 
30.11.12
10:55
(6) врешь ведь.
Какая еще строка документа при обращении к записям регистров ?
8 Касандер72
 
30.11.12
11:00
(7) стопудово врет - ибо пятницо)))
9 Масянька
 
30.11.12
11:13
Мужики! Да вы чё! Говорю же, работает. Я чувствовала, что в запросе дело.
10 Ёпрст
 
30.11.12
11:14
(9) ну покажи текст запроса что ли
11 Масянька
 
30.11.12
11:19
ТекстЗапроса =
   "//{{ЗАПРОС
   |Период с ДатаНачала по ДатаОкончания;
   |ДокПродажи = Регистр.ПартииНаличие.ТекущийДокумент;
   |КО = Регистр.ПартииНаличие.КодОперации;
   |Номенклатура = Регистр.ПартииНаличие.Номенклатура;
   |ПродСт = Регистр.ПартииНаличие.ПродСтоимость;
   |Себест = Регистр.ПартииНаличие.СуммаУпр;
   |КолВо    = Регистр.ПартииНаличие.Количество;
   |ДокПартия = Регистр.ПартииНаличие.Партия.ПриходныйДокумент;
   |Группировка ДокПродажи;
   |Группировка Номенклатура Упорядочить По Номенклатура.Код без групп;
   |Группировка СтрокаДокумента;
   |Группировка ДокПартия;
   |Функция ВсегоПродСт = Сумма(ПродСт);
   |Функция ВсегоСебест = Сумма(Себест);
   |Функция Разница = Сумма(ПродСт - Себест);
   |Условие((КО = КодОперацииРеализация) ИЛИ (КО = КодОперацииРозница));
   |Условие(Номенклатура.ВидНоменклатуры <> ВидНоменклатурыУслуги);";
12 1Сергей
 
30.11.12
11:28
(10) в регистрах есть привязка к номеру строки, если о ней позаботится заранее
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс