Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 23:33

Условие в запросе

Автор mashencev_anton, 25 фев 2015, 20:53

0 Пользователей и 1 гость просматривают эту тему.

mashencev_anton

Подскажите пожалуйста как правильно написать условие в запросе. Конфа УТ 10.3 уф.
Мне нужно получить ячейку"место хранения" при условии что она основная или если же таковой нет то тогда просто одну другую,по определенному складу, т.е. в размещении номенклатуры указано несколько ячеек на одном и том же складе

LexaK

если помогло нажмите: Спасибо!

mashencev_anton

Цитата: LexaK от 26 фев 2015, 10:13
а где сам запрос?
еще пока делается.. теперь другой вопрос если можно? как запросом получить одну любую ячейку, по определенному складу?? их может быть несколько...

LexaK

"выбрать первые 1 ..."

а вообще, если вы серьезно хотите заниматься программированием в 1С, сначала надо освоить все базовые механизмы, программирования, запросов, СКД и т.д.

только потом уже браться за решение прикладных задач.
если помогло нажмите: Спасибо!

mashencev_anton

ВЫБРАТЬ ПЕРВЫЕ 1
РазмещениеНоменклатурыПоСкладскимЯчейкам.Ячейка КАК МестоХранения
ПОМЕСТИТЬ яч
ИЗ
РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам КАК РазмещениеНоменклатурыПоСкладскимЯчейкам
ГДЕ
РазмещениеНоменклатурыПоСкладскимЯчейкам.ОсновнаяЯчейка = ЛОЖЬ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Артикул КАК Артикул,
ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры,
ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачОстатокУчет,
ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоУчет,
ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход КАК КоличествоПриходУчет,
ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход КАК КоличествоРасходУчет,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ЕдиницаИзмеренияМест КАК ЕдиницаИзмеренияМест,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Коэффициент,
ЗНАЧЕНИЕ(Справочник.Качество.Новый) КАК Качество,
0 КАК Количество,
ВЫБОР
КОГДА РазмещениеНоменклатурыПоСкладскимЯчейкам.Склад = &Склад
И РазмещениеНоменклатурыПоСкладскимЯчейкам.ОсновнаяЯчейка = ИСТИНА
ТОГДА РазмещениеНоменклатурыПоСкладскимЯчейкам.Ячейка
ИНАЧЕ яч.МестоХранения
КОНЕЦ КАК МестоХранения
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , , , Склад = &Склад {(Номенклатура).* КАК Номенклатура}) КАК ТоварыНаСкладахОстаткиИОбороты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам КАК РазмещениеНоменклатурыПоСкладскимЯчейкам
ЛЕВОЕ СОЕДИНЕНИЕ яч КАК яч
ПО РазмещениеНоменклатурыПоСкладскимЯчейкам.Ячейка = яч.МестоХранения
ПО (РазмещениеНоменклатурыПоСкладскимЯчейкам.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура)
И (РазмещениеНоменклатурыПоСкладскимЯчейкам.Склад = ТоварыНаСкладахОстаткиИОбороты.Склад)

СГРУППИРОВАТЬ ПО
ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Артикул,
ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры,
ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток,
ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток,
ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход,
ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ЕдиницаИзмеренияМест,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент,
РазмещениеНоменклатурыПоСкладскимЯчейкам.Ячейка,
ВЫБОР
КОГДА РазмещениеНоменклатурыПоСкладскимЯчейкам.Склад = &Склад
И РазмещениеНоменклатурыПоСкладскимЯчейкам.ОсновнаяЯчейка = ИСТИНА
ТОГДА РазмещениеНоменклатурыПоСкладскимЯчейкам.Ячейка
ИНАЧЕ яч.МестоХранения
КОНЕЦ


Получаю только у одного место хранения,у которого назначена основная ячейка...а остальные не получаю


vitasw

ВТ выбирает 1(одно) любое место хранения
РН левое соединение РС - нормальная связь, а вот РС левое соединение ВТ - связяь ненормальная в ВТ всего одна запись и шанс что ячейка принадлежит сладу отбора - мизерная. в запросе для ВТ яч установите отбор по складу.
Добавлено: 26 фев 2015, 13:39


Поправка. Сделай условие связи РС с ВТ как: "Истина=Истина"

mashencev_anton

Цитата: vitasw от 26 фев 2015, 13:27
ВТ выбирает 1(одно) любое место хранения
РН левое соединение РС - нормальная связь, а вот РС левое соединение ВТ - связяь ненормальная в ВТ всего одна запись и шанс что ячейка принадлежит сладу отбора - мизерная. в запросе для ВТ яч установите отбор по складу.

ВЫБРАТЬ
ВЫБОР
КОГДА РазмещениеНоменклатурыПоСкладскимЯчейкам.Склад = &Склад
И РазмещениеНоменклатурыПоСкладскимЯчейкам.ОсновнаяЯчейка = ЛОЖЬ
ТОГДА РазмещениеНоменклатурыПоСкладскимЯчейкам.Ячейка
ИНАЧЕ РазмещениеНоменклатурыПоСкладскимЯчейкам.Ячейка
КОНЕЦ КАК МестоХранения,
РазмещениеНоменклатурыПоСкладскимЯчейкам.Склад,
РазмещениеНоменклатурыПоСкладскимЯчейкам.Номенклатура
ПОМЕСТИТЬ яч
ИЗ
РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам КАК РазмещениеНоменклатурыПоСкладскимЯчейкам
ГДЕ
РазмещениеНоменклатурыПоСкладскимЯчейкам.Склад = &Склад

СГРУППИРОВАТЬ ПО
РазмещениеНоменклатурыПоСкладскимЯчейкам.Номенклатура,
РазмещениеНоменклатурыПоСкладскимЯчейкам.Склад,
ВЫБОР
КОГДА РазмещениеНоменклатурыПоСкладскимЯчейкам.Склад = &Склад
И РазмещениеНоменклатурыПоСкладскимЯчейкам.ОсновнаяЯчейка = ЛОЖЬ
ТОГДА РазмещениеНоменклатурыПоСкладскимЯчейкам.Ячейка
ИНАЧЕ РазмещениеНоменклатурыПоСкладскимЯчейкам.Ячейка
КОНЕЦ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Артикул КАК Артикул,
ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры,
ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачОстатокУчет,
ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоУчет,
ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход КАК КоличествоПриходУчет,
ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход КАК КоличествоРасходУчет,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ЕдиницаИзмеренияМест КАК ЕдиницаИзмеренияМест,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Коэффициент,
ЗНАЧЕНИЕ(Справочник.Качество.Новый) КАК Качество,
0 КАК Количество,
ВЫБОР
КОГДА РазмещениеНоменклатурыПоСкладскимЯчейкам.Склад = &Склад
И РазмещениеНоменклатурыПоСкладскимЯчейкам.ОсновнаяЯчейка = ИСТИНА
ТОГДА РазмещениеНоменклатурыПоСкладскимЯчейкам.Ячейка
ИНАЧЕ яч.МестоХранения
КОНЕЦ КАК МестоХранения
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , , , Склад = &Склад {(Номенклатура).* КАК Номенклатура}) КАК ТоварыНаСкладахОстаткиИОбороты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам КАК РазмещениеНоменклатурыПоСкладскимЯчейкам
ВНУТРЕННЕЕ СОЕДИНЕНИЕ яч КАК яч
ПО РазмещениеНоменклатурыПоСкладскимЯчейкам.Склад = яч.Склад
И РазмещениеНоменклатурыПоСкладскимЯчейкам.Номенклатура = яч.Номенклатура
И РазмещениеНоменклатурыПоСкладскимЯчейкам.Ячейка = яч.МестоХранения
ПО (РазмещениеНоменклатурыПоСкладскимЯчейкам.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура)
И (РазмещениеНоменклатурыПоСкладскимЯчейкам.Склад = ТоварыНаСкладахОстаткиИОбороты.Склад)

СГРУППИРОВАТЬ ПО
ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Артикул,
ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры,
ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток,
ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток,
ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход,
ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ЕдиницаИзмеренияМест,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент,
РазмещениеНоменклатурыПоСкладскимЯчейкам.Ячейка,
ВЫБОР
КОГДА РазмещениеНоменклатурыПоСкладскимЯчейкам.Склад = &Склад
И РазмещениеНоменклатурыПоСкладскимЯчейкам.ОсновнаяЯчейка = ИСТИНА
ТОГДА РазмещениеНоменклатурыПоСкладскимЯчейкам.Ячейка
ИНАЧЕ яч.МестоХранения
КОНЕЦ


Сделал так. Работает, но не совсем правильно. Теперь в добавок Дублируются номенклатура у которой несколько ячеек на одном складе

vitasw

Верните все взад и прочитайте мою попровку

LexaK

зачем так программу писать?

...
ВЫБОР
        КОГДА РазмещениеНоменклатурыПоСкладскимЯчейкам.Склад = &Склад
                И РазмещениеНоменклатурыПоСкладскимЯчейкам.ОсновнаяЯчейка = ИСТИНА
            ТОГДА РазмещениеНоменклатурыПоСкладскимЯчейкам.Ячейка
        ИНАЧЕ яч.МестоХранения
    КОНЕЦ КАК МестоХранения
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , , , Склад = &Склад {(Номенклатура).* КАК Номенклатура}) КАК ТоварыНаСкладахОстаткиИОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам КАК РазмещениеНоменклатурыПоСкладскимЯчейкам
            ЛЕВОЕ СОЕДИНЕНИЕ яч КАК яч
            ПО РазмещениеНоменклатурыПоСкладскимЯчейкам.Ячейка = яч.МестоХранения
        ПО (РазмещениеНоменклатурыПоСкладскимЯчейкам.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура)
            И (РазмещениеНоменклатурыПоСкладскимЯчейкам.Склад = ТоварыНаСкладахОстаткиИОбороты.Склад)
...


правильнее и проще (для вашего случая),


...
ЕстьNull(РазмещениеНоменклатурыПоСкладскимЯчейкам.Ячейка,яч.МестоХранения)КАК МестоХранения
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , , , Склад = &Склад {(Номенклатура).* КАК Номенклатура}) КАК ТоварыНаСкладахОстаткиИОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам КАК РазмещениеНоменклатурыПоСкладскимЯчейкам
    ПО (РазмещениеНоменклатурыПоСкладскимЯчейкам.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура)
    И (РазмещениеНоменклатурыПоСкладскимЯчейкам.Склад = ТоварыНаСкладахОстаткиИОбороты.Склад)
    И РазмещениеНоменклатурыПоСкладскимЯчейкам.ОсновнаяЯчейка = ИСТИНА
ЛЕВОЕ СОЕДИНЕНИЕ яч КАК яч
    ПО Истина
...


изучайте СКЛ (язык запросов), понимайте что и как вы хотите от него получить, тогда будет результат (и даже правильный) :befhbt:
если помогло нажмите: Спасибо!

mashencev_anton

Цитата: vitasw от 26 фев 2015, 13:27Сделай условие связи РС с ВТ как: "Истина=Истина"
прости не понял


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск