7.7 запрос к регистру

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем evairian, 5 ноя 2009.

  1. TopicStarter Overlay
    evairian
    Offline

    evairian

    Регистрация:
    5 ноя 2009
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте))))Я новичок. Мне нужно вывести Продажную стоимость и сумму по ней.Выводится одна цена на все,а не каждому своя(((Вот код,который есть


    Код:
    Процедура  ВыводНом(ТМЦ,ТЗ,ТекЦена,Таб,ЦенаПрод,запр,ПродСтоимостьСумма)
    Для сч = 1 по ТЗ.КоличествоСтрок() Цикл
    ТЗ.ПолучитьСтрокуПоНомеру(сч); 
    Если ТЗ.Родитель = ТМЦ Тогда
    Иначе
    Продолжить; 
    КонецЕсли;
    
    Если тз.ТМЦ.ЭтоГруппа() = 1 Тогда           
    Если тз.ТМЦ.МинЦена <>0 Тогда
    ТекЦена = тз.ТМЦ.МинЦена; 
    КонецЕсли;
    
    ЦенаПрод = регистр.продажи.ПродСтоимость;	  
    ПродСтоимостьСумма = ЦенаПрод*запр.КоличествоСумма;  
    Таб.ВывестиСекцию("Группа" + тз.Уровень);
    ВыводНом(тз.ТМЦ,ТЗ,ТекЦена,Таб,ЦенаПрод,запр,ПродСтоимостьСумма);
    Иначе            
    Таб.ВывестиСекцию("Строка" + тз.Уровень);
    КонецЕсли;
    КонецЦикла;
    
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/конецпроцедуры')">КонецПроцедуры	</span>
    
    Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать1)
    |Номенклатура = Справочник.Номенклатура.ТекущийЭлемент;
    |Наименование = Справочник.Номенклатура.Наименование;
    |МинЦена = Справочник.Номенклатура.МинЦена; 
    |Группировка Номенклатура упорядочить по Номенклатура.Наименование;
    |"//}}ЗАПРОС
    ; 
    
    Если ПустоеЗначение(ВыбТМЦ) = 0 Тогда
    ТекстЗапроса = ТекстЗапроса + "Условие(Номенклатура в ВыбТМЦ);";
    
    КонецЕсли;
    
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    Запр = СоздатьОбъект("Запрос"); 
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать2)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ПродСтоимость = Регистр.Продажи.ПродСтоимость;
    |Номенклатура = Регистр.Продажи.Номенклатура;
    |КолВо = Регистр.Продажи.Количество;
    |Функция КоличествоСумма = Сумма(КолВо);
    |Функция ПродСтоимостьСумма = Сумма(ПродСтоимость); 
    |Группировка Номенклатура Без Групп;
    |"//}}ЗАПРОС 
    ;  
    Если глПроверкаДаты(ВыбНачПериода,ВыбКонПериода)=0 Тогда      
    Возврат;
    КонецЕсли;
    Если Запр.Выполнить(ТекстЗапроса) = 0 Тогда  
    Предупреждение("Запрос по регистру не выполнился!"); 
    
    Возврат;
    КонецЕсли;
    
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("НаименованиеГруппа");	
    Таб.ВывестиСекцию("Заголовок");  
    
    
    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Уровень",                           "Число");
    ТЗ.НоваяКолонка("Родитель",        "Справочник.Номенклатура");
    ТЗ.НоваяКолонка("ТМЦ",            "Справочник.Номенклатура");
    
    //Запр.Выгрузить(ТЗ,2,0);	  
    
    ТЗ.Свернуть("Номенклатура","КоличествоСумма,ПродСтоимостьСумма"); 
    
    
    
    Пока (Запрос.Группировка(("Номенклатура")) = 1) Цикл
    
    ТМЦ = Запрос.Номенклатура; 
    ТЗ.НоваяСтрока();
    ТЗ.Уровень = ТМЦ.Уровень();
    ТЗ.Родитель = ТМЦ.Родитель;  
    ТЗ.ТМЦ = ТМЦ;
    
    КонецЦикла; 
    
    ТЗ.НоваяКолонка("Цена",  "число",15,3); 	
    Для сч=1 По ТЗ.КоличествоСтрок() Цикл 
    ТЗ.ПолучитьСтрокуПоНомеру(сч); 
    Если запр.КоличествоСумма = 0 Тогда
    ТЗ.Цена=0; 
    Иначе                                
    ТЗ.Цена=запр.ПродСтоимостьСумма/запр.КоличествоСумма;	
    КонецЕсли; 	
    КонецЦикла;
    
    
    
    
    Пока (Запр.Группировка(("Номенклатура")) = 1) Цикл 
    //ЦенаПрод = запр.ПродСтоимость;  
    стр= "";
    Если ТЗ.НайтиЗначение(Запр.Номенклатура,стр,"ТМЦ")=1 Тогда
    ТЗ.ПолучитьСтрокуПоНомеру(стр);
    ЦенаПрод=ТЗ.Цена;
    КонецЕсли;
    ПродСтоимостьСумма = ЦенаПрод*запр.КоличествоСумма;    
    КонецЦикла;	
    
    
    
    Для сч = 1 по ТЗ.КоличествоСтрок() цикл
    ТЗ.ПолучитьСтрокуПоНомеру(сч);
    Если ТЗ.Уровень = 1 Тогда   
    ТекЦена = тз.ТМЦ.МинЦена;
    
    Если тз.ТМЦ.ЭтоГруппа() = 1 Тогда
    
    Таб.ВывестиСекцию("Группа" + тз.Уровень);
    Иначе  
    Таб.ВывестиСекцию("Строка" + тз.Уровень);
    КонецЕсли;
    ВыводНом(ТЗ.ТМЦ,ТЗ,ТЗ.ТМЦ.МинЦена,Таб,ЦенаПрод,запр,ПродСтоимостьСумма);    
    КонецЕсли;	                                                           
    КонецЦикла;
    Таб.ТолькоПросмотр(1);
    Таб.Показать("НаименованиеГруппа", "");
    КонецПроцедуры
    
    [warn="Внимание!!!"]Пользуемся тегами[/warn]
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    добавьте группировку по цене
  3. TopicStarter Overlay
    evairian
    Offline

    evairian

    Регистрация:
    5 ноя 2009
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    У меня получилось вывести цену,но теперь не получается вывести сумму по каждому уровню(((
  4. TopicStarter Overlay
    evairian
    Offline

    evairian

    Регистрация:
    5 ноя 2009
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    В самом отчете 5 уровней

    Вложения:

  5. TopicStarter Overlay
    evairian
    Offline

    evairian

    Регистрация:
    5 ноя 2009
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Код:
    
    Процедура  ВыводНом(ТМЦ,ТЗ,ТекЦена,Таб,ТЗ2)
    Для сч = 1 по ТЗ.КоличествоСтрок() Цикл
    ТЗ.ПолучитьСтрокуПоНомеру(сч); 
    Если ТЗ.Родитель = ТМЦ Тогда
    Иначе
    Продолжить; 
    КонецЕсли;
    
    
    Если тз.ТМЦ.ЭтоГруппа() = 1 Тогда           
    Если тз.ТМЦ.МинЦена <>0 Тогда
    ТекЦена = тз.ТМЦ.МинЦена; 
    КонецЕсли;
    
    ЦенаПрод = ТЗ.Цена; 
    //ЦенаСумма = ТЗ2.Сумма;
    Таб.ВывестиСекцию("Группа" + тз.Уровень);
    ВыводНом(тз.ТМЦ,ТЗ,ТекЦена,Таб,ТЗ2);
    Иначе          
    ЦенаПрод = ТЗ.Цена;
    //ЦенаСумма = ТЗ2.Сумма;
    Таб.ВывестиСекцию("Строка" + тз.Уровень); 
    
    КонецЕсли;
    КонецЦикла;
    
    КонецПроцедуры    
    
    Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать1)
    |Номенклатура = Справочник.Номенклатура.ТекущийЭлемент;
    |Наименование = Справочник.Номенклатура.Наименование;
    |МинЦена = Справочник.Номенклатура.МинЦена; 
    |Группировка Номенклатура упорядочить по Номенклатура.Наименование;
    |"//}}ЗАПРОС; 
    
    Если ПустоеЗначение(ВыбТМЦ) = 0 Тогда
    ТекстЗапроса = ТекстЗапроса + "Условие(Номенклатура в ВыбТМЦ);";
    
    КонецЕсли;
    
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    Запр = СоздатьОбъект("Запрос"); 
    ТекстЗапроса2 = 
    "//{{ЗАПРОС(Сформировать2)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ПродСт = Регистр.Продажи.ПродСтоимость;
    |Номенклатура = Регистр.Продажи.Номенклатура;
    |КолВо = Регистр.Продажи.Количество;
    |Функция КоличествоСумма = Сумма(КолВо);
    |Функция ПродСтоимостьСумма = Сумма(ПродСт); 
    |Группировка Номенклатура Без Групп; 
    |"//}}ЗАПРОС 
    ;  
    Если глПроверкаДаты(ВыбНачПериода,ВыбКонПериода)=0 Тогда      
    Возврат;
    КонецЕсли;
    Если Запр.Выполнить(ТекстЗапроса2) = 0 Тогда  
    Предупреждение("Запрос по регистру не выполнился!"); 
    
    Возврат;
    КонецЕсли;
    
    
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("НаименованиеГруппа");    
    Таб.ВывестиСекцию("Заголовок");  
    
    
    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Уровень",                           "Число");
    ТЗ.НоваяКолонка("Родитель",        "Справочник.Номенклатура");
    ТЗ.НоваяКолонка("ТМЦ",             "Справочник.Номенклатура");
    
    
    ТЗ.Свернуть("Номенклатура","КоличествоСумма,ПродСтоимостьСумма"); 
    
    
    
    
    Пока (Запрос.Группировка(("Номенклатура")) = 1) Цикл
    
    ТМЦ = Запрос.Номенклатура; 
    ТЗ.НоваяСтрока();
    ТЗ.Уровень = ТМЦ.Уровень();
    ТЗ.Родитель = ТМЦ.Родитель;  
    ТЗ.ТМЦ = ТМЦ;
    
    КонецЦикла; 
    
    ТЗ.НоваяКолонка("Цена",  "число",15,3);
    //Создаем цикл для цены
    Пока (Запр.Группировка(("Номенклатура")) = 1) Цикл  
    
    ЦенаПрод = запр.ПродСтоимостьСумма/запр.КоличествоСумма; 
    стр= "";     
    // Необходимо вывести в нужную колонку 
    Если ТЗ.НайтиЗначение(Запр.Номенклатура,стр,"ТМЦ") = 1 Тогда
    ТЗ.ПолучитьСтрокуПоНомеру(стр);
    ТЗ.Цена = ЦенаПрод;
    КонецЕсли;
    
    КонецЦикла;    
    
    //ТЗ2 = СоздатьОбъект("ТаблицаЗначений");
    //ТЗ2.НоваяКолонка("Сумма",             "число",15,3); 
    //ТЗ2.НоваяКолонка("Количество" ,            "Число"); 
    //ТЗ2.НоваяКолонка("ТМЦ",  "Справочник.Номенклатура");
    //ТЗ2.Свернуть("Номенклатура","Количество,Сумма");  
    //
    //
    //Пока (Запр.Группировка(("Номенклатура")) = 1) Цикл 
    //    
    //    Количество = запр.КоличествоСумма;
    //    СуммаЦен =ЦенаПрод; 
    //    ЦенаСумма = СуммаЦен/Количество;
    //
    //  Если ТЗ2.НайтиЗначение(Запр.Номенклатура,стр,"ТМЦ") = 1 Тогда
    //       ТЗ2.ПолучитьСтрокуПоНомеру(стр);
    //       ТЗ2.Сумма = ЦенаСумма;
    //  КонецЕсли;
    //КонецЦикла;            
    //         Для счт = 1 по ТЗ2.КоличествоСтрок() цикл 
    //               ТЗ2.ПолучитьСтрокуПоНомеру(счт);
    //               
    //                 КонецЦикла;             
    //       
    
    
    Для сч = 1 по ТЗ.КоличествоСтрок() цикл
    ТЗ.ПолучитьСтрокуПоНомеру(сч);
    Если ТЗ.Уровень = 1 Тогда   
    ТекЦена = тз.ТМЦ.МинЦена;
    ЦенаПрод = ТЗ.Цена;  
    КонецЕсли;  
    Если тз.ТМЦ.ЭтоГруппа() = 1 Тогда
    Таб.ВывестиСекцию("Группа" + тз.Уровень);
    Иначе  
    Таб.ВывестиСекцию("Строка" + тз.Уровень);
    КонецЕсли;
    ВыводНом(ТЗ.ТМЦ,ТЗ,ТЗ.ТМЦ.МинЦена,Таб,ТЗ2);    
    КонецЦикла;
    Таб.ТолькоПросмотр(1);
    Таб.Показать("НаименованиеГруппа", "");
    КонецПроцедуры
    
    
    
    [Warn=Внимание!]
    Не забываем пользоваться тегами
    [/Warn]
  6. TopicStarter Overlay
    evairian
    Offline

    evairian

    Регистрация:
    5 ноя 2009
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1

    Вложения:

  7. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Уважаемый(ая) evairian. Если вы и в дальнейшем будите игнорировать просьбу пользоваться тегами - получите бан.
    Давайте будем взаимовежливыми. Ваш код без тегов тяжело читать участникам форума.

    Что касается вопоса... В запросе к регистру:

    Код:
    |Функция КоличествоСумма = Приход(КолВо);   
    |Функция ПродСтоимостьСумма = Приход(ПродСт); 
    
    
    

Поделиться этой страницей