Вход | Регистрация
 

Помогите написать запрос пжл. Чтоб получить номенклатуру

Помогите написать запрос пжл. Чтоб получить номенклатуру
Я
   Айрат_116
 
17.07.19 - 16:07
Помогите пжл как написать запрос чтоб получить так
Если  документе реализация в табл части "Товары" Стоит номенклатура "Металлолом" Тогда
Тогда брать значение - 1
Если нет тогда значение -2
 
 
   piter3
 
1 - 17.07.19 - 16:08
выбор когда метал тогда -1 иначе -2 конец
   Айрат_116
 
2 - 17.07.19 - 16:08
Металлалом = Справочники.Номенклатура.НайтиПоКоду("00009724");
            Запрос = Новый Запрос;
            Запрос.Текст = 
            
            "ВЫБРАТЬ
            |    РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура
            |ИЗ
            |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
            |ГДЕ
            |    РеализацияТоваровУслугТовары.Номенклатура = &Номенклатура";
            Запрос.УстановитьПараметр("Номенклатура",Металлалом);
            Металл = Ложь;
            РезультатЗапроса = Запрос.Выполнить();
            Выборка = РезультатЗапроса.Выбрать();
            Пока Выборка.Следующий() Цикл
                Если Выборка.Номенклатура.ПринадлежитЭлементу(Металлалом) Тогда
                    Металл = Истина;
                Иначе 
                    Продолжить;
                КонецЕсли;
            КонецЦикла;
            Если Металл = Истина Тогда

Помогите пжл как написать
   Айрат_116
 
3 - 17.07.19 - 16:09
Без запроса было так 

 Металлалом = Справочники.Номенклатура.НайтиПоКоду("00009724");
        Металл = Ложь;
        СФ = МассивОбъектов[0];
        Если ТипЗнч(СФ) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
            Для Каждого стрТЗ Из СФ.Товары Цикл
                Если стрТЗ.Номенклатура.ПринадлежитЭлементу(Металлалом) Тогда
                    Металл = Истина;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
        Если Металл Тогда
   VS-1976
 
4 - 17.07.19 - 16:11
(1) Конец тебе с -1 и -2 :)
   VS-1976
 
5 - 17.07.19 - 16:12
(3) Тебе нужно узнать есть ли номенклатура металл в реализации?
   piter3
 
6 - 17.07.19 - 16:13
(4) А чего))
   Айрат_116
 
7 - 17.07.19 - 16:13
(5) Да.
   Айрат_116
 
8 - 17.07.19 - 16:14
Если металл есть я ставлю одно значение для печати 
Если нет то другое
   VS-1976
 
9 - 17.07.19 - 16:17
(7) Выдаёт те реализации, где есть металл в табличной части.
Подавать массив реализаций в СписокДокументов и Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00009724");

ВЫБРАТЬ РАЗЛИЧНЫЕ
    РеализацияТоваровУслугТовары.Ссылка КАК Документ
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
    РеализацияТоваровУслугТовары.Ссылка В ( &СписокДокументов )
    И РеализацияТоваровУслугТовары.Номенклатура = &Номенклатура
   Айрат_116
 
10 - 17.07.19 - 16:20
(9) Можно вопрос. почему Различные нужно?
   VS-1976
 
11 - 17.07.19 - 16:20
Если нужно знать есть или нет для списка без его урезания, то:

ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Ссылка КАК Документ,
    МАКСИМУМ( ВЫБОР КОГДА РеализацияТоваровУслугТовары.Номенклатура = &Номенклатура
       ТОГДА Истина
       ИНАЧЕ Ложь
    КОНЕЦ ) КАК ЕстьЛиМеталлалом
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
    РеализацияТоваровУслугТовары.Ссылка В ( &СписокДокументов )

СГРУППИРОВАТЬ ПО
    РеализацияТоваровУслугТовары.Ссылка
   VS-1976
 
12 - 17.07.19 - 16:21
(10) У тебя в таблице к примеру 10 номенклатур, тебе же не нужно 10 одних и тех же документов в выдаче, а только 1
   Айрат_116
 
13 - 17.07.19 - 16:30
(12) Что то я вообще туплю( Но могу понять в итоге. Какие документы должны быть указаны в Параметре &СписокДокументов?
   VS-1976
 
14 - 17.07.19 - 16:33
(13) Хоть 1 реализация или несколько в массиве...

СФ = МассивОбъектов[0];
Если ТипЗнч(СФ) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда

Из кода видно что в списке может быть несколько документов
   IOANNscrp
 
15 - 17.07.19 - 16:33
(13) Запрос.УстановитьПараметр("СписокДокументов",МассивОбъектов);
   novichok79
 
16 - 17.07.19 - 16:34
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
|    Т.Номенклатура КАК Номенклатура
|ИЗ
|    Документ.РеализацияТоваровУслуг.Товары КАК Т
|ГДЕ
|    Т.Номенклатура = &Номенклатура";

Запрос.УстановитьПараметр("Номенклатура", Митол);
МитолЖивЁПТА = Не Запрос.Выполнить().Пустой();

МитолЖивЁПТА = Выборка.Следующий();
   novichok79
 
17 - 17.07.19 - 16:34
последнюю строчку по ошибке вставил
   VS-1976
 
18 - 17.07.19 - 16:36
(17) У тебя весь запрос овно, копипаст это зло :), если реализаций 1000?
   Айрат_116
 
19 - 17.07.19 - 16:40
(18) Я щас в другой функции пишу где нет МассивОбьектов
   Айрат_116
 
20 - 17.07.19 - 16:41
Щас вот  Функция ПечатьТОРГ12(СведенияТОРГ12, ОбъектыПечати, ПараметрыПечати) Экспорт
   Айрат_116
 
21 - 17.07.19 - 16:42
Когда поставил Запрос.УстановитьПараметр("СписокДокументов",МассивОбъектов); ошибка переменная не определена
   IOANNscrp
 
22 - 17.07.19 - 16:46
(21) конечно не определена),
ОбъектыПечати
ПараметрыПечати
где-то в этих параметрах должен находится либо массив переданных документов(ссылка) или ссылка
   VS-1976
 
23 - 17.07.19 - 16:47
(20) Гуманитарная помощь начинающему детектед:
Если для 1 реализации в ПечатьТОРГ12 ( естественно когда документ записан, а он явно записан перед ПечатьТОРГ12 ) тогда так:

оЗапрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1
|    Истина
|ИЗ
|    Документ.РеализацияТоваровУслуг.Товары
|ГДЕ
|    Ссылка = &Документ
|    И Номенклатура = &Номенклатура" );

оЗапрос.УстановитьПараметр( "Документ", Ссылка );
оЗапрос.УстановитьПараметр( "Номенклатура", Справочники.Номенклатура.НайтиПоКоду("00009724") );    // Металлалом


Если Не оЗапрос.Выполнить().Пустой() Тогда

  // Действия когда металлалом присутствует


КонецЕсли;
   novichok79
 
24 - 17.07.19 - 16:48
(18) я думаю ТС догадается воткнуть фильтр по ссылке. если реализаций > 1000, то интерфейс станет менее отзывчивым.
   VS-1976
 
25 - 17.07.19 - 16:52
(24) Да там вообще когда 1000 и есть по любому в одной из реализаций металлалом, то ответ запроса будет всегда положительным. Так что соптимизировав можно тупо твой запрос вообще не делать :)
   Айрат_116
 
26 - 17.07.19 - 16:54
(23) Первый шаг такой?) "ВЫБРАТЬ ПЕРВЫЕ 1
            |    ИСТИНА КАК Поле1
            |ИЗ
            |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
            |ГДЕ
            |    РеализацияТоваровУслугТовары.Ссылка = &Документ
            |    И РеализацияТоваровУслугТовары.Номенклатура = &Номенклатура";
            Запрос.УстановитьПараметр("Документ",Документы.РеализацияТоваровУслуг);
            Запрос.УстановитьПараметр("Номенклатура",Справочники.Номенклатура.НайтиПоКоду("00009724"));
   novichok79
 
27 - 17.07.19 - 16:55
(25) а чего его оптимизировать, запрос-то простейший.
   VS-1976
 
28 - 17.07.19 - 16:56
(27) Я про то что он всегда будет выдавать Истина в твоём коде
   VS-1976
 
29 - 17.07.19 - 16:57
(26) Запрос.УстановитьПараметр("Документ",Документы.РеализацияТоваровУслуг);

вместо Документы.РеализацияТоваровУслуг нужна ссылка на объект РеализацияТоваровУслуг
   Айрат_116
 
30 - 17.07.19 - 16:59
Второй шаг Запрос.УстановитьПараметр("Документ", "Ссылку поставлю");
            Запрос.УстановитьПараметр("Номенклатура",Справочники.Номенклатура.НайтиПоКоду("00009724"));
            Если Не Запрос.Выполнить().Пустой() Тогда
             ПараметрыСтроки.Вставить("СтавкаНДС", "НДС исчисляется налоговым агентом");
             КонецЕсли;
 
 Рекламное место пустует
   Айрат_116
 
31 - 17.07.19 - 17:08
Вот так сделал Запрос = Новый Запрос;
            Запрос.Текст = 
            
            "ВЫБРАТЬ ПЕРВЫЕ 1
            |    ИСТИНА КАК Поле1
            |ИЗ
            |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
            |ГДЕ
            |    РеализацияТоваровУслугТовары.Ссылка = &Документ
            |    И РеализацияТоваровУслугТовары.Номенклатура = &Номенклатура";
            Запрос.УстановитьПараметр("Документ", e1cib/list/Документ.РеализацияТоваровУслуг);
            Запрос.УстановитьПараметр("Номенклатура",Справочники.Номенклатура.НайтиПоКоду("00009724"));
            Если Не Запрос.Выполнить().Пустой() Тогда
             ПараметрыСтроки.Вставить("СтавкаНДС", "НДС исчисляется налоговым агентом");
             КонецЕсли;
   IOANNscrp
 
32 - 17.07.19 - 17:09
(31) держи в курсе)
   Айрат_116
 
33 - 17.07.19 - 17:10
(32) Хорошо=)
   Айрат_116
 
34 - 17.07.19 - 17:13
(32) Не получается найти ссылку на документ реализация
   Айрат_116
 
35 - 17.07.19 - 17:14
Сервис-ПолучитьСсылку так попробывал
   VS-1976
 
36 - 17.07.19 - 17:15
(34) Ты делаешь ведь в функции ПечатьТОРГ12? Для УТ 10, так? Если да то ссылака на документ и есть Ссылка, функция в модуле объекта лежат.
   IOANNscrp
 
37 - 17.07.19 - 17:16
(34) точку остановы в начале Функция ПечатьТОРГ12
затем посмотреть, где из переданных параметров в функцию находится ссылка.
Возможно ОбъектыПечати.ссылка или ПараметрыПечати.ссылка, а может это массив
   Айрат_116
 
38 - 17.07.19 - 17:21
(37) Хорошо, щас посмотрю
   Айрат_116
 
39 - 17.07.19 - 17:22
(36) В модуле обьекта документа самого?
   VS-1976
 
40 - 17.07.19 - 17:23
(39) Ну да. Сообщи что у тебя за конфигурация и где ты этот код хочешь приделать, в какой процедуре?
   Айрат_116
 
41 - 17.07.19 - 17:24
(40) Бухгалтерия предприятия, редакция 3.0 (3.0.69.35) (http://v8.1c.ru/buhv8/)
Copyright (С) ООО "1C-Софт", 2009 - 2019. Все права защищены
(http://www.1c.ru)
   Айрат_116
 
42 - 17.07.19 - 17:25
1С:Предприятие 8.3 (8.3.13.1644)
   VS-1976
 
43 - 17.07.19 - 17:25
(41) Тогда у тебя УФ и куда ты прикручиваешь код, в какую процедуру / функцию?
   Айрат_116
 
44 - 17.07.19 - 17:26
(40) ОбщийМодуль ПечатьТорговыхДокументов
   Айрат_116
 
45 - 17.07.19 - 17:26
(43) Функция ПечатьТОРГ12(СведенияТОРГ12, ОбъектыПечати, ПараметрыПечати) Экспорт
   IOANNscrp
 
46 - 17.07.19 - 17:27
(45) смотрите содержимое параметорв ОбъектыПечати, ПараметрыПечати
   Айрат_116
 
47 - 17.07.19 - 17:32
(46) Смотрю. что то найти не могу
   VS-1976
 
48 - 17.07.19 - 17:33
(45) СведенияТОРГ12[0].Документ

Так как может быть групповая печать, то тут в таблице СведенияТОРГ12 может быть несколько документов...
   Айрат_116
 
49 - 17.07.19 - 17:35
(48) Это в параметр запроса передавать?  

СведенияТОРГ12[0].Документ
   VS-1976
 
50 - 17.07.19 - 17:40
(49) Запрос.УстановитьПараметр("Документ", СведенияТОРГ12[0].Документ );

Это будет корректно работать только если печать 1 документа, потом "подрастёшь" в скиле подправишь...
   IOANNscrp
 
51 - 17.07.19 - 17:40
(48) тэлипат
   Айрат_116
 
52 - 17.07.19 - 17:42
(50) Он в условие не заходит 
Если Не Запрос.Выполнить().Пустой() Тогда
             ПараметрыСтроки.Вставить("СтавкаНДС", "НДС исчисляется налоговым агентом");
             КонецЕсли;
   VS-1976
 
53 - 17.07.19 - 17:44
(52) (31) Как же не заходит, ты же правишь эту процедуру в общем модуле
Функция ПечатьТОРГ12(СведенияТОРГ12, ОбъектыПечати, ПараметрыПечати) Экспорт
Так?
   Айрат_116
 
54 - 17.07.19 - 17:45
Да
   Айрат_116
 
55 - 17.07.19 - 17:45
СведенияТОРГ12[0].Документ   документ нашел реализ
   Айрат_116
 
56 - 17.07.19 - 17:45
Может там надо указать табл часть?
   Айрат_116
 
57 - 17.07.19 - 17:46
Где и лежит номенклатура
   VS-1976
 
58 - 17.07.19 - 17:46
(54) Ну всё тогда заходит, там лежит ссылка на документ. Дебажить умеешь? Поставь точку остановки и проверь что в лежит в СведенияТОРГ12
   Айрат_116
 
59 - 17.07.19 - 17:48
(58) Там ляжит тот самый документ Реализация - где есть метал
   Айрат_116
 
60 - 17.07.19 - 17:50
(58) По условию же должно быть если метал тогда "НДС исчисляется налоговым агентом"
Если не метал тогда что то другое
   Айрат_116
 
61 - 17.07.19 - 17:52
   IOANNscrp
 
62 - 17.07.19 - 17:53
(60) если это группа, а не элемент, тогда 
|    И РеализацияТоваровУслугТовары.Номенклатура В ИЕРАРХИИ (&Номенклатура)"
   VS-1976
 
63 - 17.07.19 - 17:53
(59) Там лежит ссылка на печатаемый документ. А остальное проверять есть ли там металл или нет это твоё дело уже...

Может там же найти

СведенияТОРГ12[0].ТаблицаДокумента

Это табличная часть реализации и там уже поискать кодом без запроса если ли в ней металл...
   IOANNscrp
 
64 - 17.07.19 - 17:54
(63) да там группа передается параметром
   VS-1976
 
65 - 17.07.19 - 17:54
(61) Ну да, что-то похожее на правду
   VS-1976
 
66 - 17.07.19 - 17:56
(64) Группа передаётся в таблице СведенияТОРГ12, а не в СведенияТОРГ12[0] это конкретные данные на реализацию
 
 Рекламное место пустует
   IOANNscrp
 
67 - 17.07.19 - 17:57
(66) в запросе параметр передается группа при условии номенклатура = группа(металлолом)
   VS-1976
 
68 - 17.07.19 - 17:58
(67) Я уже понял не посмотрел. Если это группа тогда да как в (62)
   Айрат_116
 
69 - 17.07.19 - 17:59
Щас попробую  И РеализацияТоваровУслугТовары.Номенклатура В ИЕРАРХИИ (&Номенклатура)" вот так
   Айрат_116
 
70 - 17.07.19 - 18:00
СведенияТОРГ12[0].Документ оставлять?
   Айрат_116
 
71 - 17.07.19 - 18:00
Или заменить на  СведенияТОРГ12[0].ТаблицаДокумента
   VS-1976
 
72 - 17.07.19 - 18:00
(70) Конечно. (69) Да
   VS-1976
 
73 - 17.07.19 - 18:01
(71) Нет
   Айрат_116
 
74 - 17.07.19 - 18:01
(72) Понял. Щас попробую
   Айрат_116
 
75 - 17.07.19 - 18:09
(73) (67) Спасибо вам большое получилось=)
   Айрат_116
 
76 - 17.07.19 - 18:17
Только у меня теперь в печ форме "счет фактуры" слетела почему такой отбор 
 Там уже есть параметр МассивОбьектов
    
    Металлалом = Справочники.Номенклатура.НайтиПоКоду("00009724");
    Металл = Ложь;
    СФ = МассивОбъектов[0];
    Если ТипЗнч(СФ) = Тип("ДокументСсылка.СчетФактураВыданный") Тогда
        Если СФ.ДокументыОснования.Количество() > 0 Тогда
            ДокОсн = СФ.ДокументыОснования[0].ДокументОснование;
            Для Каждого стрТЗ Из ДокОсн.Товары Цикл
                Если стрТЗ.Номенклатура.ПринадлежитЭлементу(Металлалом) Тогда
                    Металл = Истина;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    КонецЕсли;

    

Но где проверяется условие 
до этой процедуры она доходит значением ЛОЖЬ


Процедура ДозаполнитьСтрокуСчетаФактуры1137(ОбластьМакета, ВидСчетаФактуры,Металл=Ложь)

    Если Металл Тогда
        ОбластьМакета.Параметры.СтавкаНДС = "НДС исчисляется налоговым агентом";        
    ИначеЕсли Не Металл И ОбластьМакета.Параметры.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС Тогда
        ОбластьМакета.Параметры.СтавкаНДС = "без НДС";
        ОбластьМакета.Параметры.СуммаНДС  = "без НДС";
    КонецЕсли;


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.