Имя: Пароль:
1C
1С v8
Как правильно описать условия при работе с результатом запроса
,
0 Anna_77
 
25.12.17
15:56
Есть запрос на получение данных из регистра накопления, который показывает заполненность Ящиков - товарами. При добавлении нового товара в документ Приход, Необходимо указать следующее условие: если в результате запроса у нас уже есть ящики с таким назначением товара, тогда новый товар помещаем в этот ящик, если нет - тогда выбираем пустой.
Запрос.Текст = "Выбрать Назначение,Ящик,Вналичии из РегистраНакопления.ТоварыВЯщиках сгруппировать по ТоварыВЯщиках.НазначениеТовара,ТоварыВЯщиках.Ящик"
Получаю результат и пишу условие:
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Если НовСтрока.НазначениеТовара = Результат.НазначениеТовара тогда
НовСтрока.Ящик = Результат.Ящик а дальше затрудняюсь написать. Подскажите пожалуйста! как именно выразить что если в результате запроса нет ящиков с таким назначениемТовара, тогда товару присваивается любой пустой ящик.
1 vde69
 
25.12.17
16:05
для начала исправь

Выбрать Назначение,Ящик,Максимум(Вналичии) из РегистраНакопления.ТоварыВЯщиках сгруппировать по ТоварыВЯщиках.НазначениеТовара,ТоварыВЯщиках.Ящик
2 vde69
 
25.12.17
16:08
второе - у тебя запрос в цикле... это уже плохо, и если хочешь совета покажи больше кода...
3 vde69
 
25.12.17
16:11
ну и в третьих - если твоя задача реальная (а не тест) то с такими вопросами - быть беде...

начни с описания русскими словами (в коментах) чего ты должна делать, а после между ними вставляй код, например


// выберу текущие ящики которые в которых уже есть товары
// буду искать мой товар
// если не найду - надо...
4 D_E_S_131
 
25.12.17
16:17
Ну и структуру этого регистра не лишним будет написать.
5 breezee
 
25.12.17
17:23
(0) >77
В 8 констурутор запроса завезли, удобнее в конструкторе делать
6 Anna_77
 
25.12.17
22:10
Если что не так, извините, наверно все учились методом "проб и ошибок", поэтому не судите строго.

Попыталась описать более подробно:

// создаю новый документ РазмещениеТоваров на основании данных из документа ПрихОрдер:

РазмещениеТоваров = Документы.ОтборРазмещениеТоваров.СоздатьДокумент();
РазмещениеТоваров.Дата= ПрихОрдер.Дата;
//беру реквизиты из док. Прихордер

// далее запрос, который заполняет табличную часть, выбирает последнюю добавленную строку:

Запрос.Текст = "Выбрать Первые 1
| ПриходныйОрдерНаТоварыТовары.Назначение,
| ПриходныйОрдерНаТоварыТовары.Номенклатура,
| ПриходныйОрдерНаТоварыТовары.Количество,
| УпаковкиЕдиницыИзмерения.Наименование,
| СкладскиеЯчейки.Ссылка
| из Документ.ПриходныйОрдерНаТовары.Товары как  
| ПриходныйОрдерНаТовары
| левое соединение Справочник.УпаковкиЕдиницыИзмерения как
| УпаковкиЕдиницыИзмерения
| Левое соединение Справочник.НаборыУпаковок как
| НаборыУпаковок
| по УпаковкиЕдиницыИзмерения.Владелец =
| НаборыУпаковок.Ссылка
| по ПриходныйОрдерНаТовары.Номенклатура.НаборУпаковок =  
| УпаковкиЕдиницыИзмерения.Владелец,
| Справочник.СкладскиеЯчейки как СкладскиеЯчейки
| где
| ПриходныйОрдерНаТоварыТовары.Ссылка = &Ссылка
| упорядочить по
| ПриходныйОрдерНаТоварыТовары.НомерСтроки УБЫВ"

//вывожу результат запроса:

Запрос.УстановитьПараметр("Ссылка", ПрихОрдер.Ссылка);
Результат = Запрос.Выполнить();
ВыбратьСтроки = Результат.Выбрать();

Пока ВыбратьСтроки.Следующий() Цикл
НовСтрока = РазмещениеТоваров.ТоварыРазмещение.Добавить();
НовСтрока.НОменклатура = ВыбратьСтроки.Номенклатура;
НовСтрока.Назначение = ВыбратьСтроки.Назначение;
НовСтрока.Количество = ВыбратьСтроки.Количество;
Новстрока.Ячейка = ВыбратьСтроки.Ссылка;

// в результате получается, что при добавлении новой строки  в документ - товару присваивается с начала всегда одна и та же ячейка.
//трудность возникает далее:
// необходимо проверить есть ли в базе ячейка с таким назначением, если есть тогда наш товар помещаем в эту ячейку, если нет тогда в ближайшую пустую. Каким образом это
дальше осуществить?
7 Anna_77
 
25.12.17
22:18
//Я так понимаю, нужно запросом определить из //регистраНакопления ТоварыВЯчейках какие ячейки заполнены, //какое у них назначение и какие пустые. И далее пишем //условие:
Если НовСтрока.Назначение = Результат.Назначение тогда
НовСтрока.Ячейка = Результат.Ячейка иначе // а дальше затрудняюсь написать.
8 Злопчинский
 
25.12.17
22:27
(6) в ближайшую пустую - в ближайшую к чему?!
9 Anna_77
 
25.12.17
22:31
просто: в пустую
нумерация ячеек: 1-1-1; 1-1-2; и т.д.
10 Злопчинский
 
25.12.17
22:52
(9) а какое отношение нумерация ячеек имеет к её пустоте?
11 hhhh
 
26.12.17
00:20
(10) ну включай экстрасенсорику. Ближайший, наверно, к нулю. То есть 1-1-1 ближе чем 1-1-2.