в. 7.7Бухгалтерия. Нужно выводить РН только по одному типу деталей
22.12.2009
09:55
#22
"Имя у вас класное ;)
Что бы хелпить - надо иметь данные. Выложите запрос, который работает, но не правильно и запрос, который должен работать правильно, но выдает ошибку."
Что бы хелпить - надо иметь данные. Выложите запрос, который работает, но не правильно и запрос, который должен работать правильно, но выдает ошибку."
22.12.2009
12:18
#23
Ну да, философский вопрос... 
Истина она не всегда истина, а только в половине случаев
Истина она не всегда истина, а только в половине случаев
22.12.2009
13:53
#24
"Вот запрос
сам запрос:
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с Дата3 по Дата4;
|Товар = Документ.РасходнаяНакладная.Товар;
|КолВо = Документ.РасходнаяНакладная.Количество;
|ЦенаПоз = Документ.РасходнаяНакладная.Цена;
|ЦенаБезСкидки = Документ.РасходнаяНакладная.ЦенаБезСкидки;
|Производитель = Документ.ПриходнаяНакладная.Товар.Производитель.Наименование;
|Дата = Документ.РасходнаяНакладная.ДатаДок;
|Менеджер = Документ.РасходнаяНакладная.Продавец;
|Производитель = Документ.РасходнаяНакладная.Товар.Производитель.Наименование;
|ТекущийДокумент = Документ.РасходнаяНакладная.ТекущийДокумент;
|Группировка Товар Упорядочить по Товар.Код, Товар.Наименование;
|Группировка Дата;
|Группировка ТекущийДокумент;
|Группировка СтрокаДокумента;
|Группировка Менеджер;
|Группировка КолВо;
|Группировка ЦенаПоз;
|Группировка ЦенаБезСкидки;
|Условие (Менеджер в ВыбМенеджер);
|"//}}ЗАПРОС
;
Вот запрос который отвечает за фильтрацию ненужных позиций:
|Производитель = Документ.ПриходнаяНакладная.Товар.Производитель.Наименование;
а вот условие перед:
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
>Имя2К = "2K";
>Если Флаг2 = 1 Тогда
>лПроиз = СоздатьОбъект ("Справочник.Производители");
>Если лПроиз.НайтиПоНаименованию (Имя2К,0,0) = 1 Тогда
> ТекстЗапроса = ТекстЗапроса + "Условие(Наименование = лПроиз);"
>КонецЕсли;
>КонецЕсли;
Обработка проходит... но почемуто, когда флажек установлен "не выводить "2К" таблица пустая, а если не установлен выводит все как обычно..."
сам запрос:
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с Дата3 по Дата4;
|Товар = Документ.РасходнаяНакладная.Товар;
|КолВо = Документ.РасходнаяНакладная.Количество;
|ЦенаПоз = Документ.РасходнаяНакладная.Цена;
|ЦенаБезСкидки = Документ.РасходнаяНакладная.ЦенаБезСкидки;
|Производитель = Документ.ПриходнаяНакладная.Товар.Производитель.Наименование;
|Дата = Документ.РасходнаяНакладная.ДатаДок;
|Менеджер = Документ.РасходнаяНакладная.Продавец;
|Производитель = Документ.РасходнаяНакладная.Товар.Производитель.Наименование;
|ТекущийДокумент = Документ.РасходнаяНакладная.ТекущийДокумент;
|Группировка Товар Упорядочить по Товар.Код, Товар.Наименование;
|Группировка Дата;
|Группировка ТекущийДокумент;
|Группировка СтрокаДокумента;
|Группировка Менеджер;
|Группировка КолВо;
|Группировка ЦенаПоз;
|Группировка ЦенаБезСкидки;
|Условие (Менеджер в ВыбМенеджер);
|"//}}ЗАПРОС
;
Вот запрос который отвечает за фильтрацию ненужных позиций:
|Производитель = Документ.ПриходнаяНакладная.Товар.Производитель.Наименование;
а вот условие перед:
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
>Имя2К = "2K";
>Если Флаг2 = 1 Тогда
>лПроиз = СоздатьОбъект ("Справочник.Производители");
>Если лПроиз.НайтиПоНаименованию (Имя2К,0,0) = 1 Тогда
> ТекстЗапроса = ТекстЗапроса + "Условие(Наименование = лПроиз);"
>КонецЕсли;
>КонецЕсли;
Обработка проходит... но почемуто, когда флажек установлен "не выводить "2К" таблица пустая, а если не установлен выводит все как обычно..."
22.12.2009
14:45
#25
"> Вот запрос который отвечает за фильтрацию ненужных позиций:
>
> |Производитель = Документ.ПриходнаяНакладная.Товар.Производитель.Наименование;
Вообще-то такая запись говорит: выбираем Документ.ПриходнаяНакладная.Товар.Производитель.Наименование и говорим, что называется оно Производитель, и это не Фильтрация ненужных позиций. В результате вы дважды определяете одну и тужу переменную (колонку) Производитель.
Запрос должен выглядеть так:
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с Дата3 по Дата4;
|Товар = Документ.РасходнаяНакладная.Товар;
|КолВо = Документ.РасходнаяНакладная.Количество;
|ЦенаПоз = Документ.РасходнаяНакладная.Цена;
|ЦенаБезСкидки = Документ.РасходнаяНакладная.ЦенаБезСкидки;
|Производитель = Документ.ПриходнаяНакладная.Товар.Производитель.Наименование;
|Дата = Документ.РасходнаяНакладная.ДатаДок;
|Менеджер = Документ.РасходнаяНакладная.Продавец;
|ТекущийДокумент = Документ.РасходнаяНакладная.ТекущийДокумент;
|Группировка Товар Упорядочить по Товар.Код, Товар.Наименование;
|Группировка Дата;
|Группировка ТекущийДокумент;
|Группировка СтрокаДокумента;
|Группировка Менеджер;
|Группировка КолВо;
|Группировка ЦенаПоз;
|Группировка ЦенаБезСкидки;
|Условие (Менеджер в ВыбМенеджер);
|Условие (Производитель = Имя2К);
|"//}}ЗАПРОС
;
где Имя2К = "2К"+<Пробелы до длины наименования>
Или же так:
Имя2К = "2K";
Если Флаг2 = 1 Тогда
лПроиз = СоздатьОбъект ("Справочник.Производители");
Если лПроиз.НайтиПоНаименованию (Имя2К,0,0) = 1 Тогда
ТекстЗапроса = ТекстЗапроса + "Условие(Производитель = лПроиз);"
КонецЕсли;
КонецЕсли;
А в запросе эту строку:
|Производитель = Документ.ПриходнаяНакладная.Товар.Производитель.Наименование;
заменить на
|Производитель = Документ.ПриходнаяНакладная.Товар.Производитель;
p.s. Писал на вскидку и не проверял. Так что возможны мелкие ошибки :)"
>
> |Производитель = Документ.ПриходнаяНакладная.Товар.Производитель.Наименование;
Вообще-то такая запись говорит: выбираем Документ.ПриходнаяНакладная.Товар.Производитель.Наименование и говорим, что называется оно Производитель, и это не Фильтрация ненужных позиций. В результате вы дважды определяете одну и тужу переменную (колонку) Производитель.
Запрос должен выглядеть так:
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с Дата3 по Дата4;
|Товар = Документ.РасходнаяНакладная.Товар;
|КолВо = Документ.РасходнаяНакладная.Количество;
|ЦенаПоз = Документ.РасходнаяНакладная.Цена;
|ЦенаБезСкидки = Документ.РасходнаяНакладная.ЦенаБезСкидки;
|Производитель = Документ.ПриходнаяНакладная.Товар.Производитель.Наименование;
|Дата = Документ.РасходнаяНакладная.ДатаДок;
|Менеджер = Документ.РасходнаяНакладная.Продавец;
|ТекущийДокумент = Документ.РасходнаяНакладная.ТекущийДокумент;
|Группировка Товар Упорядочить по Товар.Код, Товар.Наименование;
|Группировка Дата;
|Группировка ТекущийДокумент;
|Группировка СтрокаДокумента;
|Группировка Менеджер;
|Группировка КолВо;
|Группировка ЦенаПоз;
|Группировка ЦенаБезСкидки;
|Условие (Менеджер в ВыбМенеджер);
|Условие (Производитель = Имя2К);
|"//}}ЗАПРОС
;
где Имя2К = "2К"+<Пробелы до длины наименования>
Или же так:
Имя2К = "2K";
Если Флаг2 = 1 Тогда
лПроиз = СоздатьОбъект ("Справочник.Производители");
Если лПроиз.НайтиПоНаименованию (Имя2К,0,0) = 1 Тогда
ТекстЗапроса = ТекстЗапроса + "Условие(Производитель = лПроиз);"
КонецЕсли;
КонецЕсли;
А в запросе эту строку:
|Производитель = Документ.ПриходнаяНакладная.Товар.Производитель.Наименование;
заменить на
|Производитель = Документ.ПриходнаяНакладная.Товар.Производитель;
p.s. Писал на вскидку и не проверял. Так что возможны мелкие ошибки :)"
22.12.2009
15:16
#26
блин... нифига.. либо вообще не выводит позиций никаких,
либо все подряд... то есть 2К вообще не сносится ((
либо все подряд... то есть 2К вообще не сносится ((
22.12.2009
15:34
#27
"Вы бы хоть писали, какой вариан пробовали. Или в обоих вариантах одно и тоже? А то у вас прям Kernel panic. Давайте остановимся, для начала на варианте:
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с Дата3 по Дата4;
|Товар = Документ.РасходнаяНакладная.Товар;
|КолВо = Документ.РасходнаяНакладная.Количество;
|ЦенаПоз = Документ.РасходнаяНакладная.Цена;
|ЦенаБезСкидки = Документ.РасходнаяНакладная.ЦенаБезСкидки;
|Производитель = Документ.ПриходнаяНакладная.Товар.Производитель;
|Дата = Документ.РасходнаяНакладная.ДатаДок;
|Менеджер = Документ.РасходнаяНакладная.Продавец;
|ТекущийДокумент = Документ.РасходнаяНакладная.ТекущийДокумент;
|Группировка Товар Упорядочить по Товар.Код, Товар.Наименование;
|Группировка Дата;
|Группировка ТекущийДокумент;
|Группировка СтрокаДокумента;
|Группировка Менеджер;
|Группировка КолВо;
|Группировка ЦенаПоз;
|Группировка ЦенаБезСкидки;
|Условие (Менеджер в ВыбМенеджер);
|"//}}ЗАПРОС
;
Имя2К = "2K";
лПроиз = СоздатьОбъект ("Справочник.Производители");
Если лПроиз.НайтиПоНаименованию (Имя2К,0,0) = 1 Тогда
Если Флаг2 = 1 Тогда
ТекстЗапроса = ТекстЗапроса + "Условие(Производитель = лПроиз);"
КонецЕсли;
КонецЕсли;
1. Что у вас получается в этом случае?
2. Еще отладчиком посмотрите - в условие хоть заходит?
3. Еще попробуйте заменить
ТекстЗапроса = ТекстЗапроса + "Условие(Производитель = лПроиз);"
на
ТекстЗапроса = ТекстЗапроса + "Условие(Производитель = лПроиз.ТекущийЭлемент());"
4. Если пункты 1, 2 выполняются, а 3-й никак не влияет, в цикле выборки результатов запроса отладчиком посмотрите, что выбирается в Производитель и сравните с тем, что в лПроиз."
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с Дата3 по Дата4;
|Товар = Документ.РасходнаяНакладная.Товар;
|КолВо = Документ.РасходнаяНакладная.Количество;
|ЦенаПоз = Документ.РасходнаяНакладная.Цена;
|ЦенаБезСкидки = Документ.РасходнаяНакладная.ЦенаБезСкидки;
|Производитель = Документ.ПриходнаяНакладная.Товар.Производитель;
|Дата = Документ.РасходнаяНакладная.ДатаДок;
|Менеджер = Документ.РасходнаяНакладная.Продавец;
|ТекущийДокумент = Документ.РасходнаяНакладная.ТекущийДокумент;
|Группировка Товар Упорядочить по Товар.Код, Товар.Наименование;
|Группировка Дата;
|Группировка ТекущийДокумент;
|Группировка СтрокаДокумента;
|Группировка Менеджер;
|Группировка КолВо;
|Группировка ЦенаПоз;
|Группировка ЦенаБезСкидки;
|Условие (Менеджер в ВыбМенеджер);
|"//}}ЗАПРОС
;
Имя2К = "2K";
лПроиз = СоздатьОбъект ("Справочник.Производители");
Если лПроиз.НайтиПоНаименованию (Имя2К,0,0) = 1 Тогда
Если Флаг2 = 1 Тогда
ТекстЗапроса = ТекстЗапроса + "Условие(Производитель = лПроиз);"
КонецЕсли;
КонецЕсли;
1. Что у вас получается в этом случае?
2. Еще отладчиком посмотрите - в условие хоть заходит?
3. Еще попробуйте заменить
ТекстЗапроса = ТекстЗапроса + "Условие(Производитель = лПроиз);"
на
ТекстЗапроса = ТекстЗапроса + "Условие(Производитель = лПроиз.ТекущийЭлемент());"
4. Если пункты 1, 2 выполняются, а 3-й никак не влияет, в цикле выборки результатов запроса отладчиком посмотрите, что выбирается в Производитель и сравните с тем, что в лПроиз."
22.12.2009
15:45
#28
"я опечатку допустил одну
не |Производитель = Документ.ПриходнаяНакладная.Товар.Производитель;
а |Производитель = Документ.РасходнаяНакладная.Товар.Производитель;
это раз.
От того есть ли ТекущийЭлемент() или нет результат не меняется, это два
А вот с отладчиком я не работал ((("
не |Производитель = Документ.ПриходнаяНакладная.Товар.Производитель;
а |Производитель = Документ.РасходнаяНакладная.Товар.Производитель;
это раз.
От того есть ли ТекущийЭлемент() или нет результат не меняется, это два
А вот с отладчиком я не работал ((("
22.12.2009
16:04
#29
> А вот с отладчиком я не работал (((
В конфигураторе ставите курсор на строку и нажимаете внизу "листок с красным треугольником" (Открыть модуль в отладчике). Вам откроется отладчик и сразу поставит курсор на ту самую строку. Кнопка F9 ставит/снимает точку остановки.
Запускаете на выполнение отчет (или что это) (в общем программу) она остановиться на точке прерывания. Дальше кнопками F8 или F10 идете по шагам, а через shift-F9 смотрите значения переменных.
В конфигураторе ставите курсор на строку и нажимаете внизу "листок с красным треугольником" (Открыть модуль в отладчике). Вам откроется отладчик и сразу поставит курсор на ту самую строку. Кнопка F9 ставит/снимает точку остановки.
Запускаете на выполнение отчет (или что это) (в общем программу) она остановиться на точке прерывания. Дальше кнопками F8 или F10 идете по шагам, а через shift-F9 смотрите значения переменных.
Читают тему
(гостей: 1)