Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Помогите пожалуйста поправить запрос          
berkut_0 Подменю пользователя
сообщение 10.10.17, 17:21
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 16
Из: Украина, Запорожье
Спасибо сказали: 0 раз
Рейтинг: 0

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


Комментированные строки - это те, которые мне нужно заставить работать. Если сделать их не комментированными - то будет ругаться мол " Ожидается имя таблицы <<?>>ГДЕ ".
Я попробовал выполнить по отдельности - только для цен, и только для остатков - и оно работает.
Но из этого сразу же проблема ...
Без отбора (и без цен, и без остатков) я получаю 105 единиц номенклатуры, при отсеве по остаткам я получаю всё те же 105; а вот при отсеве по ценам - мне сыпет 199. Откуда ? Всего в подопытной группе 105 позиций. Это особенно критично, если придётся таки пилить два запроса.

Что подскажете ?

salton Подменю пользователя
сообщение 11.10.17, 7:44
Сообщение #2

Говорящий
***
Группа: Пользователи
Сообщений: 92
Из: Полтава
Спасибо сказали: 24 раз
Рейтинг: 0

Вот, пожалуйста - ничего не ругается:

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




Сорри, спутал немного таблицы

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


и если хотите - можете ВНУТРЕННЕЕ поменять на ЛЕВОЕ

Спасибо сказали: berkut_0,

Bernet Подменю пользователя
сообщение 11.10.17, 9:01
Сообщение #3

Ветеран
Иконка группы
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 317 раз
Рейтинг: 0

berkut_0 @ Вчера, 18:21 * ,
Вы делаете "левое соединение" цен с остатками, а не справочника номенклатуры с остатками. Вангую, что в вашем регистре "Цены" наверняка есть такие поля как "Тип цен" или "Валюта", соответственно скорее всего есть несколько цен на 1 товар либо с разной валютой либо типом цен. А связь с остатками идет чисто по номенклатуре. Отсюда соответственно и дубли строк и неправильный остаток. Также осмелюсь прованговать, что запрос который привел в качестве примера Salton тоже выдаст вам дубли, только уже по цене, если там есть ещё измерения кроме номенклатуры.


Signature
Дописываю конфигурации на платформе 8.х.
- Управление торговым предприятием для Украины
- Управление производственным предприятием для Украины
- Управление небольшой фирмой для Украины
- Бухгалтерия для Украины;
- Общепит для Украины
- Ресторан (Рарус)
- Розница

salton Подменю пользователя
сообщение 11.10.17, 9:18
Сообщение #4

Говорящий
***
Группа: Пользователи
Сообщений: 92
Из: Полтава
Спасибо сказали: 24 раз
Рейтинг: 0

Цитата(Bernet @ 11.10.17, 10:01) *
Salton тоже выдаст вам дубли, только уже по цене, если там есть ещё измерения кроме номенклатуры.

хм... не учел... измерения есть - это типы цен. но у меня тип один, потому при проверке дублей не было...

Flexy Подменю пользователя
сообщение 11.10.17, 10:06
Сообщение #5

Танцор с Бубном
Иконка группы
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 230 раз
Рейтинг: 0

"ВЫБРАТЬ
|    Номенклатура.Ссылка КАК Товар
|ПОМЕСТИТЬ втТовары
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|    Номенклатура.Ссылка В ИЕРАРХИИ(&Категория)
|    И Номенклатура.ЭтоГруппа = ЛОЖЬ
|    И Номенклатура.ПометкаУдаления = ЛОЖЬ
|    И НЕ Номенклатура.ВидНоменклатуры В (&ВидыНоменклатуры)
|
|ИНДЕКСИРОВАТЬ ПО
|    Товар
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    втТовары.Товар,
|    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток,
|    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена
|ИЗ
|    втТовары КАК втТовары
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
|                ,
|                Номенклатура В
|                        (ВЫБРАТЬ
|                            втТовары.Товар
|                        ИЗ
|                            втТовары)
|                    И Склад = &СкладОстатков) КАК ТоварыНаСкладахОстатки
|        ПО втТовары.Товар = ТоварыНаСкладахОстатки.Номенклатура
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
|                ,
|                Номенклатура В
|                        (ВЫБРАТЬ
|                            втТовары.Товар
|                        ИЗ
|                            втТовары)
|                    И ТипЦен = &ТипЦенНоменклатуры) КАК ЦеныНоменклатурыСрезПоследних
|        ПО втТовары.Товар = ЦеныНоменклатурыСрезПоследних.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
|    втТовары.Товар.Наименование"


Сообщение отредактировал Flexy - 11.10.17, 10:25

Спасибо сказали: berkut_0,

berkut_0 Подменю пользователя
сообщение 12.10.17, 16:22
Сообщение #6

Общительный
**
Группа: Пользователи
Сообщений: 16
Из: Украина, Запорожье
Спасибо сказали: 0 раз
Рейтинг: 0

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


Все мои сложности в словах: мне нужно получить артикул, цену, количество, наименование, и (гвоздь сегодняшней программы) курс той валюты, которая указана в срезе цены заданной номенклатуры. У меня это вроде как получилось.
Сам в шоке.

Так как цену я получаю в валюте - мне и нужен курс, на который я потом буду множить получаемую цену.
Проблема в том, что НЕ выгружаются те позиции, у которых не указаны цены/остатки. Они нужны для того, что бы потом туда поставить нули (так надо, для сайта =) ).
Помогите вылечить плиз =)

pablo Подменю пользователя
сообщение 12.10.17, 16:33
Сообщение #7

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

[Зачеркнуто]Поясните
Цитата
Проблема в том, что НЕ выгружаются те позиции, у которых не указаны цены/остатки.

Судя по запросу, строки должны формироваться, просто некоторые поля будут содержать NULL [/Зачеркнуто]
У вас проблема в налагаемых условиях
И Таблица_Цены.ТипЦен В(&ТипыЦен)



нужно
И (Таблица_Цены.ТипЦен В(&ТипыЦен) или Таблица_Цены.ТипЦен ЕСТЬ NULL)




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


Сообщение отредактировал pablo - 12.10.17, 16:35


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Спасибо сказали: berkut_0,

berkut_0 Подменю пользователя
сообщение 12.10.17, 16:45
Сообщение #8

Общительный
**
Группа: Пользователи
Сообщений: 16
Из: Украина, Запорожье
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(pablo @ 12.10.17, 17:33) *
Хотя правильнее будет так

Без отсева по типам цен я получу все цены каждой позиции, а у позиции есть цена закупки, и цена продажи. Это не есть хорошо.
А так - спасибо.

UPD: извините, увидел передаваемый параметр тип цен, в другом месте =)

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 20:20
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!