Имя: Пароль:
1C
1С v8
Номер накладной поступления
0 Chuchi
 
04.11.13
18:17
УТ 10.3
требуется по списку Товары для каждой номенклатуры найти номер накладной по которой этот товар поступал в последний раз
До массива вроде все удачно
но Ном.Количество() = 0 всегда равно 0..

Запрос    = Новый Запрос;
    Запрос.Текст =
               "ВЫБРАТЬ ПЕРВЫЕ 1
               |    ПоступлениеТоваровУслуг.Ссылка,
               |    ПоступлениеТоваровУслуг.Номер,
               |    ПоступлениеТоваровУслуг.Дата КАК Дата,
               |    ПоступлениеТоваровУслуг.Товары.(Номенклатура)   КАК Номен
               |ИЗ
               |    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
               |ГДЕ
               |    ПоступлениеТоваровУслуг.Товары.Номенклатура В(&Номенклатура)
               |
               |УПОРЯДОЧИТЬ ПО
               |    Дата УБЫВ";      
          
спНоменклатуры    = Товары.ВыгрузитьКолонку("Номенклатура");
    
    Запрос.УстановитьПараметр("Номенклатура", спНоменклатуры);
    
    Рез    = Запрос.Выполнить();
    Если Рез.Пустой() Тогда
        Возврат;    
    КонецЕсли;
    ТабКодов    = Рез.Выгрузить();
    Отбор    = Новый Структура;
    Для каждого Стр Из Товары Цикл
        Отбор.Очистить();
        Отбор.Вставить("Номен", Стр.Номенклатура);
        Ном    = ТабКодов.НайтиСтроки(Отбор);
        Если Ном.Количество() = 0 Тогда
            
            Стр.Накладная        = "";
        Иначе
                Стр.Накладная    = Ном[0].Номер;
        КонецЕсли;
    КонецЦикла;
1 Chuchi
 
05.11.13
13:53
Может быть мне надо построчно пробегая табличную часть запрос для каждой позиции формировать?
2 Славен
 
05.11.13
13:54
Партионный учет?
3 Славен
 
05.11.13
13:56
выбирай из регистра партий
4 palpetrovich
 
05.11.13
13:56
запрос в цикле - побьют :)
5 Славен
 
05.11.13
13:59
а в отладчике смотрела что есть в ТабКодов ?
6 Milok
 
05.11.13
14:22
Запрос странный, почему не бы использовать МАКСИМУМ?
7 Chuchi
 
05.11.13
14:28
в ТабКодов коллекцияКолонокТаблицыЗначений
там 4 колонки
Дата
Номер
Номен(номенклатура)
Ссылка
8 Chuchi
 
05.11.13
14:43
Странно даже в отбор попадает моя первоя строка номенклатуры
Ном    = ТабКодов.НайтиСтроки(Отбор); вот здесь и Ном
и ТабКодов.НайтиСтроки(Отбор) - значение и тип массив
9 Chuchi
 
05.11.13
14:43
но массив все равно 0 ((
10 Relader
 
05.11.13
14:51
Делай запрос к табличной части документа.
11 Chuchi
 
05.11.13
14:53
..основной запрос? тот который ПЕРВЫЕ 1 ??
12 User_Agronom
 
05.11.13
14:55
(3) Не услышали((
А зря. Скольких бы проблем избежали...
13 Relader
 
05.11.13
14:56
(11), ну да. Ты в отладчике посмотри, что у тебя в "ТабКодов" получается.
14 User_Agronom
 
05.11.13
14:56
(5) Жди постов 30, потом они услышат голос разума :)
15 Chuchi
 
05.11.13
15:00
(13) в ТабКодов коллекцияКолонокТаблицыЗначений
там 4 колонки
Дата
Номер
Номен(номенклатура)
Ссылка
16 Relader
 
05.11.13
15:07
(15)Не надо колонки смотреть, посмотри что получилось в выгруженной ТЗ.
Как разберешься с запросом, обязательно прислушайся к (3) и (12) - дело говорят.
17 User_Agronom
 
05.11.13
15:32
Не так? Можно из регистра ПартииТоваровНаСкладах замутить...

Запрос = новый Запрос;
спНоменклатуры    = ДокументРеализации.Товары.ВыгрузитьКолонку("Номенклатура");
Запрос.УстановитьПараметр("спНоменклатуры", спНоменклатуры);
Запрос.Текст = "ВЫБРАТЬ
                   |    МАКСИМУМ(Закупки.Регистратор.Дата) КАК ДатаОперации,
                   |    Закупки.Номенклатура
                   |ИЗ
                   |    РегистрНакопления.Закупки КАК Закупки
                   |ГДЕ
                   |    Закупки.Номенклатура В(&спНоменклатуры)
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    Закупки.Номенклатура";
    
Результат = Запрос.Выполнить().Выгрузить().ВыбратьСтроку();
18 User_Agronom
 
05.11.13
15:35
+ (17) Прошу пардону. Нужен номер.
19 Chuchi
 
05.11.13
17:19
(17) не подскажите а дальше как отбором?
20 User_Agronom
 
05.11.13
17:41
(19) А самой подумать? Мысли есть?
21 Chuchi
 
05.11.13
17:50
(20) Да простите! все сделала! Спасибо Вам!
22 User_Agronom
 
05.11.13
17:52
(21) Похвастайся как ;)
23 Chuchi
 
05.11.13
18:21
)))) Вашими советами руководствуясь)
Запрос = новый Запрос;
спНоменклатуры    =Товары.ВыгрузитьКолонку("Номенклатура");
Запрос.УстановитьПараметр("спНоменклатуры", спНоменклатуры);
Запрос.Текст = "ВЫБРАТЬ
               |    МАКСИМУМ(Закупки.Регистратор.Дата) КАК ДатаОперации,
               |    Закупки.Номенклатура КАК Номен,
               |    Закупки.ДокументЗакупки  КАК Док
               |ИЗ
               |    РегистрНакопления.Закупки КАК Закупки
               |ГДЕ
               |    Закупки.Номенклатура В(&спНоменклатуры)
               |
               |СГРУППИРОВАТЬ ПО
               |    Закупки.Номенклатура,
               |    Закупки.ДокументЗакупки";
    
//Результат = Запрос.Выполнить().Выгрузить();    
    Рез    = Запрос.Выполнить();
    Если Рез.Пустой() Тогда
        Возврат;    
    КонецЕсли;
    ТабКодов    = Рез.Выгрузить();
    Отбор    = Новый Структура;
    Для каждого Стр Из Товары Цикл
        Отбор.Очистить();
        Отбор.Вставить("Номен", Стр.Номенклатура);
        Ном    = ТабКодов.НайтиСтроки(Отбор);
        Если Ном.Количество() = 0 Тогда
            
            Стр.Накладная        = "";
        Иначе
                Стр.Накладная    = Ном[0].Док;
        КонецЕсли;
    КонецЦикла;
24 User_Agronom
 
05.11.13
18:32
(23) Возможно будет не всегда правильно работать.
Группировка не работает, так как в пределах одного документа дата одна и та же.
И, как минимум, сортировать по дате нужно.
Но, главное, Вы сами смогли исправить код с запросом ))