8.х Отчёт с отбором! Проблема!

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

  1. TopicStarter Overlay
    r18romik
    Offline

    r18romik Опытный в 1С

    Регистрация:
    19 фев 2008
    Сообщения:
    129
    Симпатии:
    0
    Баллы:
    26
    Подсажите пожалуйста! Заранее огромное спасибо!
    У меня существует Отчёт по номенклатуре в выводом определённых полей!
    Мне нужно установить отбор! То есть в форме существует выбор отдельном номеклатуры при выборе которой в отчёте выходит информация только по выбранному! + Вариант выбора,то есть в Спике,В иерархии или Равно и тд!
    Как это мне сдеалть?
    PS. По всей номеклатуре у меня отчёт выводит!!! Если не трудно привести пример! Платформа 8.0
  2. AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    Вытащи отчет во внешнюю обработку и выложи сюда - посмотрим.
  3. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Romik,
    Собственно, в каждом типовом отчете это есть.
  4. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    [warn=Romik]Форум выбираем правильно для темы[/warn]
  5. TopicStarter Overlay
    r18romik
    Offline

    r18romik Опытный в 1С

    Регистрация:
    19 фев 2008
    Сообщения:
    129
    Симпатии:
    0
    Баллы:
    26
    Он и так идёт как внешняя обработина!
    Дак понимаю ,что есть в типовой но совсем не понятно что там и откуда берётся!
    Выкладываю свой отчёт!
    В ней на форме созданы поля для отбора..их нужно задействовать подскажите кто знает!!!

    Вложения:

  6. TopicStarter Overlay
    r18romik
    Offline

    r18romik Опытный в 1С

    Регистрация:
    19 фев 2008
    Сообщения:
    129
    Симпатии:
    0
    Баллы:
    26
    Одна тишина!!! Что ни кто не знает как это сдлать?
  7. AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    А что в этом отчете должно выводиться?
    Я честно не понял.
  8. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Для начала лучше для выборки использовать запрос. Для реквизита Номенклатура установить тип СправочникСсылка.Номенклатура, и по нему задать параметр запроса.
    Не совсем понял предназначение первого поля.
  9. TopicStarter Overlay
    r18romik
    Offline

    r18romik Опытный в 1С

    Регистрация:
    19 фев 2008
    Сообщения:
    129
    Симпатии:
    0
    Баллы:
    26
    Ага сделал запросик!!!

    Хм...в нём на данный момент отображается обыкновенная выборка справочника Номенклатура,
    где я вывел на вывод поля которые мне нужны и всё!
    Но проблема в том что он выводит всю номеклатуру справочника..
    А мне нужно сделать чтобы при выборе конкретной позиции номенклатру в отчёте выводилась только она!!
    Вроде понятно объяснил:)
  10. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Ну и в итоге получил, то что хотел?
  11. TopicStarter Overlay
    r18romik
    Offline

    r18romik Опытный в 1С

    Регистрация:
    19 фев 2008
    Сообщения:
    129
    Симпатии:
    0
    Баллы:
    26
    Нет не получил!
    Запрос то я написал,но не получилось почему-то!
    Вставил эот запрос в ВыполнитьНажатие
    Может не туда вставил....
    И ещё не знаю как сделать условия для этого запроса,чтобы он выполнялся не всегда а только тогда,
    когда выбирают номенклатуру в поле!
  12. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Код процедуры выложи.
  13. TopicStarter Overlay
    r18romik
    Offline

    r18romik Опытный в 1С

    Регистрация:
    19 фев 2008
    Сообщения:
    129
    Симпатии:
    0
    Баллы:
    26
    Вот код! По идее нужно чтобы он действовал так,если в форме не выбираешь номеклатуру он выводит по все,если выбираешь то в макет он выводит только выбранную номеклатуру!
    Поле с выбором имеет тиа значения СправочникСсылка.Номеклатура


    Процедура КнопкаВыполнитьНажатие(Кнопка)

    ТаблицаЗначений = Новый ТаблицаЗначений;
    ТаблицаЗначений.Колонки.Добавить("Shtrih");
    ТаблицаЗначений.Колонки.Добавить("Vladelec");

    ВыборкаЗаписей = РегистрыСведений.Штрихкоды.Выбрать();
    Пока ВыборкаЗаписей.Следующий() Цикл

    Стр=ТаблицаЗначений.Добавить();
    Стр.Shtrih = ВыборкаЗаписей.Штрихкод;
    Стр.Vladelec = ВыборкаЗаписей.Владелец;

    КонецЦикла;
    //ТаблицаЗначений.ВыбратьСтроку();

    ТаблДок = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("Макет");
    Выборка = Справочники.Номенклатура.Выбрать();
    ОбластьШапки = Макет.ПолучитьОбласть("Шапка");
    ОбластьДаты = Макет.ПолучитьОбласть("Область1");
    ТаблДок.Вывести(ОбластьШапки);

    Выборка = Справочники.Номенклатура.ВыбратьИерархически();
    Пока Выборка.Следующий() Цикл
    Наименование = Выборка.Наименование;

    //Обращение к данным справочника.

    КонецЦикла;

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | Номенклатура.Наименование,
    | Номенклатура.СтавкаНДС,
    | Номенклатура.СтранаПроисхождения,
    | Номенклатура.НомерГТД,
    | Номенклатура.БазоваяЕдиницаИзмерения
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    | Номенклатура.Ссылка = &Ссылка";

    Запрос.УстановитьПараметр("Ссылка",Номенклатура);

    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();

    Пока Выборка.Следующий() Цикл
    ОбработкаПрерыванияПользователя();
    Наименование = Выборка.Наименование;


    Пока Выборка.Следующий() Цикл
    ОбработкаПрерыванияПользователя();
    Док = Выборка.Ссылка;

    ОбластьДаты.Параметры.Наименование = Док.Наименование;
    ОбластьДаты.Параметры.СтавкаНДС = Док.СтавкаНДС;
    ОбластьДаты.Параметры.СтранаПроисхождения = Док.СтранаПроисхождения;
    ОбластьДаты.Параметры.НомерГТД = Док.НомерГТД;
    ОбластьДаты.Параметры.БазоваяЕдиницаИзмерения = Док.БазоваяЕдиницаИзмерения;

    Для каждого стр из ТаблицаЗначений Цикл // в цикле мы перебираем все строки ТЗ
    Если стр.Vladelec = Док Тогда // найдя наш элемент
    ОбластьДаты.Параметры.Штрихкод = Стр.Shtrih; // мы выводим его в ТабДок.

    Прервать;
    КонецЕсли;

    КонецЦикла;
    КонецЦикла;
    ТаблДок.Вывести(ОбластьДаты);
    КонецЦикла;
    ТаблДок.Показать("Отчет");

    КонецПроцедуры
  14. LxS
    Offline

    LxS Разработчик

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

    У тебя там слишком много мусора. :unsure:

    Код:
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    
    
    
    Это можно записать короче(см. мой код выше)

    Вложения:

  15. TopicStarter Overlay
    r18romik
    Offline

    r18romik Опытный в 1С

    Регистрация:
    19 фев 2008
    Сообщения:
    129
    Симпатии:
    0
    Баллы:
    26


    Спасибо чувак:) Хм...отлично ты..Спасибо огромое:)
    А ещё вопросик насчёт вот этого:

    Для каждого стр из ТаблицаЗначений Цикл // в цикле мы перебираем все строки ТЗ
    Если стр.Vladelec = Док Тогда // найдя наш элемент
    ОбластьДаты.Параметры.Штрихкод = Стр.Shtrih; // мы выводим его в ТабДок.

    Это Штрих код Из Таблицы значения достаётся по владельцу( в данном случаем владелец это наименование товара)
    Куда это теперь запихать? Ведь это тоже важно как при отборе там и при выводе все номенклатуры?
    Подскажи пожалуста!!!
  16. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Произведи замену строк:

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

    Далее. В макет добавь колонку Штрих-код с параметром ШтрихКод (таким же как и псевдоним в запросе, иначе значение параметра не будет заполняться).

    У меня нет регистра сведений такого, поэтому руками дописал. Если что, думаю, сам догонишь, как исправить запрос, ИМХО это не сложно.

    И, "чувак", старайся не отвечать, вставляя полный блок предыдущего сообщения. Тебя модеры порвут. Если че-то цитируешь, то небольшой кусок, лучше сошлись на номер поста.
  17. TopicStarter Overlay
    r18romik
    Offline

    r18romik Опытный в 1С

    Регистрация:
    19 фев 2008
    Сообщения:
    129
    Симпатии:
    0
    Баллы:
    26
    AlexFF Благодарю всё красиво работает:)
    Разреши ещё тебя помучаю не много....Подскажи пожалуйста как теперь сделать так чтобы можно было выбирать Группу номенклатуры(Наприме Папку Марс или Нестле и тд) И при выборе папки выводился весь ассортимент папки!

    В форме поле выбора я сделал( ПолеВидаСравненияНоменклатура)!
  18. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    добавь условие на родителя аналогично тому, как я добавил на конкретную номенклатуру.
  19. TopicStarter Overlay
    r18romik
    Offline

    r18romik Опытный в 1С

    Регистрация:
    19 фев 2008
    Сообщения:
    129
    Симпатии:
    0
    Баллы:
    26
    Вот так? Запрос.УстановитьПараметр("СравненияНоменклатура",ПолеВыбораНоменклатуры);

    Чё-то я туплю! А как вообще в поле выбора(ПолеВыбораНоменклатуры) прописать,чтобы в ней был выбор этих самых значени (ВСпискеИерархии,Рано и тд)
  20. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    :unsure:

    Вставляй код в теги кода - неудобно читать!

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

    На форме элемент управления поле ввода, подлоченный на этот реквизит. При выборе открывается справочник Номенклатура. Выделяешь группу и клацаешь кнопку Выбрать на командной панели а мне клацаешь СПАСИБО..чувак..

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