в. 7.7Бухгалтерия. Нужно выводить РН только по одному типу деталей

Новая тема
Показывать по 10 20 40 сообщений
Хеелп ребят)
"Имя у вас класное ;)
Что бы хелпить - надо иметь данные. Выложите запрос, который работает, но не правильно и запрос, который должен работать правильно, но выдает ошибку."
Ну да, философский вопрос... :)
Истина она не всегда истина, а только в половине случаев
"Вот запрос
сам запрос:
Запрос = СоздатьОбъект("Запрос");    
ТекстЗапроса =                        
"//{{ЗАПРОС(Сформировать)
|Период с Дата3 по Дата4;
|Товар = Документ.РасходнаяНакладная.Товар;
|КолВо = Документ.РасходнаяНакладная.Количество;
|ЦенаПоз = Документ.РасходнаяНакладная.Цена;
|ЦенаБезСкидки = Документ.РасходнаяНакладная.ЦенаБезСкидки;
|Производитель = Документ.ПриходнаяНакладная.Товар.Производитель.Наименование;
|Дата = Документ.РасходнаяНакладная.ДатаДок;
|Менеджер = Документ.РасходнаяНакладная.Продавец;
       |Производитель = Документ.РасходнаяНакладная.Товар.Производитель.Наименование;
       |ТекущийДокумент = Документ.РасходнаяНакладная.ТекущийДокумент;
|Группировка Товар Упорядочить по Товар.Код, Товар.Наименование;
|Группировка Дата;
|Группировка ТекущийДокумент;
|Группировка СтрокаДокумента;
|Группировка Менеджер;
|Группировка КолВо;
|Группировка ЦенаПоз;
|Группировка ЦенаБезСкидки;
|Условие (Менеджер в ВыбМенеджер);
|"//}}ЗАПРОС
;                                        

Вот запрос который отвечает за фильтрацию ненужных позиций:

|Производитель = Документ.ПриходнаяНакладная.Товар.Производитель.Наименование;

а вот условие перед:
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;                                            
КонецЕсли;


>Имя2К = "2K";
>Если Флаг2 = 1 Тогда
>лПроиз = СоздатьОбъект ("Справочник.Производители");
>Если лПроиз.НайтиПоНаименованию (Имя2К,0,0) = 1 Тогда
>   ТекстЗапроса = ТекстЗапроса + "Условие(Наименование = лПроиз);"
>КонецЕсли;
>КонецЕсли;

Обработка проходит... но почемуто, когда флажек установлен "не выводить "2К" таблица пустая, а если не установлен выводит все как обычно..."
"> Вот запрос который отвечает за фильтрацию ненужных позиций:
>  
> |Производитель = Документ.ПриходнаяНакладная.Товар.Производитель.Наименование;
Вообще-то такая запись говорит: выбираем Документ.ПриходнаяНакладная.Товар.Производитель.Наименование и говорим, что называется оно Производитель, и это не Фильтрация ненужных позиций. В результате вы дважды определяете одну и тужу переменную (колонку) Производитель.
Запрос должен выглядеть так:
ТекстЗапроса =                        
"//{{ЗАПРОС(Сформировать)
|Период с Дата3 по Дата4;
|Товар = Документ.РасходнаяНакладная.Товар;
|КолВо = Документ.РасходнаяНакладная.Количество;
|ЦенаПоз = Документ.РасходнаяНакладная.Цена;
|ЦенаБезСкидки = Документ.РасходнаяНакладная.ЦенаБезСкидки;
|Производитель = Документ.ПриходнаяНакладная.Товар.Производитель.Наименование;
|Дата = Документ.РасходнаяНакладная.ДатаДок;
|Менеджер = Документ.РасходнаяНакладная.Продавец;
|ТекущийДокумент = Документ.РасходнаяНакладная.ТекущийДокумент;
|Группировка Товар Упорядочить по Товар.Код, Товар.Наименование;
|Группировка Дата;
|Группировка ТекущийДокумент;
|Группировка СтрокаДокумента;
|Группировка Менеджер;
|Группировка КолВо;
|Группировка ЦенаПоз;
|Группировка ЦенаБезСкидки;
|Условие (Менеджер в ВыбМенеджер);
|Условие (Производитель = Имя2К);
|"//}}ЗАПРОС
;

где Имя2К = "2К"+<Пробелы до длины наименования>
Или же так:

Имя2К = "2K";
Если Флаг2 = 1 Тогда
лПроиз = СоздатьОбъект ("Справочник.Производители");
Если лПроиз.НайтиПоНаименованию (Имя2К,0,0) = 1 Тогда
  ТекстЗапроса = ТекстЗапроса + "Условие(Производитель = лПроиз);"
КонецЕсли;
КонецЕсли;

А в запросе эту строку:
|Производитель = Документ.ПриходнаяНакладная.Товар.Производитель.Наименование;
заменить на
|Производитель = Документ.ПриходнаяНакладная.Товар.Производитель;

p.s. Писал на вскидку и не проверял. Так что возможны мелкие ошибки :)"
блин... нифига.. либо вообще не выводит позиций никаких,
либо все подряд... то есть 2К вообще не сносится ((
"Вы бы хоть писали, какой вариан пробовали. Или в обоих вариантах одно и тоже? А то у вас прям Kernel panic. Давайте остановимся, для начала на варианте:
ТекстЗапроса =                        
"//{{ЗАПРОС(Сформировать)
|Период с Дата3 по Дата4;
|Товар = Документ.РасходнаяНакладная.Товар;
|КолВо = Документ.РасходнаяНакладная.Количество;
|ЦенаПоз = Документ.РасходнаяНакладная.Цена;
|ЦенаБезСкидки = Документ.РасходнаяНакладная.ЦенаБезСкидки;
|Производитель = Документ.ПриходнаяНакладная.Товар.Производитель;
|Дата = Документ.РасходнаяНакладная.ДатаДок;
|Менеджер = Документ.РасходнаяНакладная.Продавец;
|ТекущийДокумент = Документ.РасходнаяНакладная.ТекущийДокумент;
|Группировка Товар Упорядочить по Товар.Код, Товар.Наименование;
|Группировка Дата;
|Группировка ТекущийДокумент;
|Группировка СтрокаДокумента;
|Группировка Менеджер;
|Группировка КолВо;
|Группировка ЦенаПоз;
|Группировка ЦенаБезСкидки;
|Условие (Менеджер в ВыбМенеджер);
|"//}}ЗАПРОС
;

Имя2К = "2K";
лПроиз = СоздатьОбъект ("Справочник.Производители");
Если лПроиз.НайтиПоНаименованию (Имя2К,0,0) = 1 Тогда
Если Флаг2 = 1 Тогда
 ТекстЗапроса = ТекстЗапроса + "Условие(Производитель = лПроиз);"
КонецЕсли;
КонецЕсли;

1. Что у вас получается в этом случае?
2. Еще отладчиком посмотрите - в условие хоть заходит?
3. Еще попробуйте заменить  
ТекстЗапроса = ТекстЗапроса + "Условие(Производитель = лПроиз);"
на
 ТекстЗапроса = ТекстЗапроса + "Условие(Производитель = лПроиз.ТекущийЭлемент());"

4. Если пункты 1, 2 выполняются, а 3-й никак не влияет, в цикле выборки результатов запроса отладчиком посмотрите, что выбирается в Производитель и сравните с тем, что в лПроиз."
"я опечатку допустил одну
не |Производитель = Документ.ПриходнаяНакладная.Товар.Производитель;
а |Производитель = Документ.РасходнаяНакладная.Товар.Производитель;
это раз.

 
От того есть ли ТекущийЭлемент() или нет результат не меняется, это два

А вот с отладчиком я не работал ((("
> А вот с отладчиком я не работал (((

В конфигураторе ставите курсор на строку и нажимаете внизу "листок с красным треугольником" (Открыть модуль в отладчике). Вам откроется отладчик и сразу поставит курсор на ту самую строку. Кнопка F9 ставит/снимает точку остановки.
Запускаете на выполнение отчет (или что это) (в общем программу) она остановиться на точке прерывания. Дальше кнопками F8 или F10 идете по шагам, а через shift-F9 смотрите значения переменных.
хм где Если Флаг2 = 1 Тогда  и Если лПроиз.НайтиПоНаименованию (Имя2К,0,0) = 1 Тогда  пишет что  Если = Ошибка в выражении
Читают тему
(гостей: 1)

Быстрый переход