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

Расшифровка нескольким параметрам

Автор Пустовалов Артем, 14 окт 2015, 12:04

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

Пустовалов Артем

Здравствуйте, специалисты 1с. У меня платформа 8,2. УПП 1,3. Делаю внешний отчет по товарам на складах. Отчет формируется правильно,Вот тект
Процедура Отчет(ТабДок, КонецПериода, НачалоПериода, Склад, ТипЦен) Экспорт
   //{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ(Отчет)
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   
   Макет = ВнешнийОтчетОбъект.ПолучитьМакет("Отчет");
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |   ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
   |   ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
   |   СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток,
   |   СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) КАК КоличествоПриход,
   |   СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) КАК КоличествоРасход,
   |   СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток,
   |   ЦеныНоменклатурыСрезПоследних.Цена,
   |   ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток * ЦеныНоменклатурыСрезПоследних.Цена КАК Сумма
   |ИЗ
   |   РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
   |         &НачалоПериода,
   |         &КонецПериода,
   |         ,
   |         ,
   |         Склад = &Склад
   |            ИЛИ &Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)) КАК ТоварыНаСкладахОстаткиИОбороты
   |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонецПериода, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
   |      ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
   |
   |СГРУППИРОВАТЬ ПО
   |   ТоварыНаСкладахОстаткиИОбороты.Склад,
   |   ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
   |   ЦеныНоменклатурыСрезПоследних.Цена,
   |   ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток * ЦеныНоменклатурыСрезПоследних.Цена
   |
   |УПОРЯДОЧИТЬ ПО
   |   Склад
   |ИТОГИ ПО
   |   ОБЩИЕ,
   |   Склад
   |АВТОУПОРЯДОЧИВАНИЕ";
   
   Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
   Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
   Запрос.УстановитьПараметр("Склад", Склад);
   Запрос.УстановитьПараметр("ТипЦен", ТипЦен);
   
   РезультатЗапроса = Запрос.Выполнить();
   
   ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
   ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
   ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
   ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
   ОбластьОбщийИтог = Макет.ПолучитьОбласть("ОбщиеИтоги");
   ОбластьСклад = Макет.ПолучитьОбласть("Склад");
   ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
   
   ТабДок.Очистить();
   ТабДок.Вывести(ОбластьЗаголовок);
   ТабДок.Вывести(ОбластьШапкаТаблицы);
   ТабДок.НачатьАвтогруппировкуСтрок();
   
   ВыборкаОбщийИтог = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   
   ВыборкаОбщийИтог.Следующий();      // Общий итог
   ОбластьОбщийИтог.Параметры.Заполнить(ВыборкаОбщийИтог);
   ТабДок.Вывести(ОбластьОбщийИтог, ВыборкаОбщийИтог.Уровень());
   
   ВыборкаСклад = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   
   Пока ВыборкаСклад.Следующий() Цикл
      ОбластьСклад.Параметры.Заполнить(ВыборкаСклад);
      ТабДок.Вывести(ОбластьСклад, ВыборкаСклад.Уровень());
      
      ВыборкаДетальныеЗаписи = ВыборкаСклад.Выбрать();
      
      Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
         ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
         ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
      КонецЦикла;
   КонецЦикла;
   
   ТабДок.ЗакончитьАвтогруппировкуСтрок();
   ТабДок.Вывести(ОбластьПодвалТаблицы);
   ТабДок.Вывести(ОбластьПодвал);
   
   //}}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ
КонецПроцедуры

Загвоздка в том что не могу задать расшифровку для ячеек. Нужно задать для первых 2 колонок стандартную обработку, т.е для колонки склад что бы открывалась форма элемента справочника «Склады». Для номенклатуры «Номенклатура». А для всех других выводился отчет по текущей номенклатуре. Помогите кто может  реализовать. Вот то что уже есть.

Процедура ПолеТабличногоДокументаОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)

      Если ТипЗнч(Расшифровка) = Тип("СправочникСсылка.Номенклатура")Тогда
   ИначеЕсли ТипЗнч(Расшифровка) = Тип("СправочникСсылка.Склады")Тогда
      Иначе
      
      СтандартнаяОбработка = Ложь;
      ТабДок = Новый ТабличныйДокумент;
      Макет = ВнешнийОтчетОбъект.ПолучитьМакет("Расшифровка");
      ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
      ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
      ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
      ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
      
      Запрос = Новый Запрос;
      Запрос.Текст =
      "ВЫБРАТЬ
      |   ТоварыНаСкладахОбороты.Регистратор,
      |   ТоварыНаСкладахОбороты.КоличествоРасход,
      |   ТоварыНаСкладахОбороты.КоличествоПриход,
      |   ТоварыНаСкладахОбороты.Номенклатура
      |ИЗ
      |   РегистрНакопления.ТоварыНаСкладах.Обороты(&НачалоПериода, &КонецПериода, Регистратор, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОбороты"
      
      ;
      
      Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
      Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
      Запрос.УстановитьПараметр("Номенклатура",Расшифровка);
      
      РезультатЗапроса = Запрос.Выполнить();
      
      ТабДок.Очистить();
      ТабДок.Вывести(ОбластьЗаголовок);
      ТабДок.Вывести(ОбластьШапка);
      
      ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
      Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
         
         ОбластьДетальныхЗаписей.Параметры.Документ = ВыборкаДетальныеЗаписи.Регистратор ;
         ОбластьДетальныхЗаписей.Параметры.Расход = ВыборкаДетальныеЗаписи.КоличествоРасход ;
         ОбластьДетальныхЗаписей.Параметры.Приход = ВыборкаДетальныеЗаписи.КоличествоПриход ;
         
         ТабДок.Вывести(ОбластьДетальныхЗаписей);
         
      КонецЦикла;
      
      ТабДок.Вывести(ОбластьПодвал);
      ТабДок.Показать();
      ТабДок.ТолькоПросмотр = Истина;
   КонецЕсли
   
КонецПроцедуры


дфтын

3 минуты в отладчике посмотрите чего у вас за тип значения, сразу станет понятно

Пустовалов Артем

Цитата: дфтын от 14 окт 2015, 18:11
3 минуты в отладчике посмотрите чего у вас за тип значения, сразу станет понятно

Дело в том что расшифровка имеет тип который указан в свойствах "Параметры расшифровки". А при указании его в коде, ни как не могу поставить параметр Номенклатуры в

  Запрос.УстановитьПараметр("Номенклатура",Расшифровка);
Срабатывает условие   
Если ТипЗнч(Расшифровка) = Тип("СправочникСсылка.Номенклатура")Тогда

Помогите если не сложно разобраться

дфтын

ну виртуально сложно. давайте тим, щаз гляну

Пустовалов Артем

Цитата: дфтын от 14 окт 2015, 18:45
ну виртуально сложно. давайте тим, щаз гляну
Дело в том что у меня сейчас нет доступа к этому ПК. Это типовая база и данные есть во всех типовых базах,и внешний отчет, текст выложен сверху) помогите пожалуйста) либо могу скинуть файл мин через 30)

дфтын


Теги:

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

Рейтинг@Mail.ru

Поиск