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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    

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


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

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