Имя: Пароль:
1C
1С v8
КАК запросить остатки склада с хитрым параметром количество
0 aptomilov
 
19.09.13
15:30
Ребят привет, есть такая вот проблему не могу сообразить.
У меня есть некий регистр сведений в котором лежат сведения не снижаемых остатках на том или ином складе.
Хочется сделать не два запроса : сначала за остатками потом за не снижаемыми и сравнивать из в таблицах, а поизящнее как то внутри запроса прям поставить условия по номенклатуре и количеству неснижаемого остатка
что бы запрос выдал в результате только те записи которые совпадают с регистром неснижамых остатков по полю номенклатура и меньше поля количество.
1 aptomilov
 
19.09.13
15:31
Что было с чем играть приведу два запроса

Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    НеснижаемыеОстаткиНоменклатуры.Номенклатура,
        |    НеснижаемыеОстаткиНоменклатуры.Количество
        |ИЗ
        |    РегистрСведений.НеснижаемыеОстаткиНоменклатуры КАК НеснижаемыеОстаткиНоменклатуры
        |ГДЕ
        |    НеснижаемыеОстаткиНоменклатуры.Контролировать = &КонтрольВключен
        |   И НеснижаемыеОстаткиНоменклатуры.Уведомлять = &УведомлениеВключено
        |    И НеснижаемыеОстаткиНоменклатуры.Количество>0
        |    И НеснижаемыеОстаткиНоменклатуры.Склад = &Склад";

    Запрос.УстановитьПараметр("КонтрольВключен", Истина);
    Запрос.УстановитьПараметр("УведомлениеВключено", Истина);
    Запрос.УстановитьПараметр("Склад", Склад);

    ТабНеСнижаемыхОстатков = Запрос.Выполнить().Выгрузить();

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

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

    Результат = Запрос.Выполнить();
2 shadowfiend10
 
19.09.13
15:32
GANR в соседней ветке только привел пример, что на собеседовании с таким вопросом у него провалились
3 ИС-2
 
naïve
19.09.13
15:32
оба завпроса во временные таблицы (что не пихать все в условия) и связь между таблицами по номенклатуре и сравнению полей
4 catena
 
19.09.13
15:33
Ну и свяжи два запроса по номенклатуре.
5 aptomilov
 
19.09.13
15:40
Как то так получилось

Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ТоварыНаСкладахОстатки.Номенклатура,
        |    ТоварыНаСкладахОстатки.КоличествоОстаток
        |ИЗ
        |    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НеснижаемыеОстаткиНоменклатуры КАК НеснижаемыеОстаткиНоменклатуры
        |        ПО НеснижаемыеОстаткиНоменклатуры.Количество > ТоварыНаСкладахОстатки.КоличествоОстаток
        |            И НеснижаемыеОстаткиНоменклатуры.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
        |ГДЕ
        |    НеснижаемыеОстаткиНоменклатуры.Уведомлять = &Уведомлять
        |    И НеснижаемыеОстаткиНоменклатуры.Контролировать = &Контролировать
        |    И НеснижаемыеОстаткиНоменклатуры.Количество > &0
        |    И НеснижаемыеОстаткиНоменклатуры.Склад = &Склад";
    Запрос.УстановитьПараметр("Контролировать", Контролировать);
    Запрос.УстановитьПараметр("Склад", Склад);
    Запрос.УстановитьПараметр("Уведомлять", Уведомлять);

    Результат = Запрос.Выполнить();
6 France
 
19.09.13
15:41
ВЫБРАТЬ
    Товары.Ссылка,
    ПлановыеОстаткиТоваровСрезПоследних.Количество,
    ТоварыОрганизацийОстатки.Качество
ИЗ
    Справочник.Номенклатура КАК Товары
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Остатки КАК ТоварыОрганизацийОстатки
        ПО Товары.Ссылка = ТоварыОрганизацийОстатки.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПлановыеОстаткиТоваров.СрезПоследних КАК ПлановыеОстаткиТоваровСрезПоследних
        ПО Товары.Ссылка = ПлановыеОстаткиТоваровСрезПоследних
7 aptomilov
 
19.09.13
16:29
(6) спасибо это самое то )
8 aptomilov
 
19.09.13
16:30
Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    НеснижаемыеОстаткиНоменклатуры.Номенклатура,
    |    ТоварыНаСкладахОстатки.КоличествоОстаток Как КоличествоНаСкладе,
    |    НеснижаемыеОстаткиНоменклатуры.Количество Как НеобходимыйОстаток
    |ИЗ
    |    РегистрСведений.НеснижаемыеОстаткиНоменклатуры КАК НеснижаемыеОстаткиНоменклатуры
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад В (&Склад)) КАК ТоварыНаСкладахОстатки
    |        ПО (НеснижаемыеОстаткиНоменклатуры.Количество > ТоварыНаСкладахОстатки.КоличествоОстаток)
    |        И (НеснижаемыеОстаткиНоменклатуры.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура)
    |ГДЕ
    |    НеснижаемыеОстаткиНоменклатуры.Уведомлять = &Уведомлять
    |    И НеснижаемыеОстаткиНоменклатуры.Контролировать = &Контролировать
    |    И НеснижаемыеОстаткиНоменклатуры.Количество > 0";
    
    
    Запрос.УстановитьПараметр("Контролировать", Истина);
    Запрос.УстановитьПараметр("Склад", Склад);
    Запрос.УстановитьПараметр("Уведомлять", Истина);
    
    Результат = Запрос.Выполнить().Выгрузить();
9 France
 
19.09.13
18:50
(8) для булевых достаточно указать "
|ГДЕ
    |    НеснижаемыеОстаткиНоменклатуры.Уведомлять
    |    И НеснижаемыеОстаткиНоменклатуры.Контролировать
    |    И НеснижаемыеОстаткиНоменклатуры.Количество > 0";
и тогда будет полное вуаля..
вызывает сомнение необходимость "   |    И НеснижаемыеОстаткиНоменклатуры.Количество > 0"
10 aptomilov
 
20.09.13
07:42
ну фиг знает вдруг лицо ответственное забудет указать количество
11 Dmitry1c
 
20.09.13
07:51
Кажется, кто-то сдает спеца по УТ или БП...
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.