Имя: Пароль:
1C
 
Отбор списания с определенного ряда, ячейки и стелажа
0 myr4ik07
 
24.02.15
23:05
Привет. Прилагаю скриншот с результатом запроса
https://www.dropbox.com/s/80202cxiedwiftt/Записати.PNG?dl=0
мне автоматически в движения регистра накопления нужно занести только тот рядок у которого наименший критерий, это если условие "сразу", а если "доставка" то занести в движения регистра с наибольшим.

Выполняю

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


и в результате повторного перепроведения одного и того же документа в движение регистра получаю разные данные.
1 EugeniaK
 
24.02.15
23:10
(0) У тебя после проведения меняются остатки в регистре, что влияет на запрос. Удаляй старые движения перед запросом.
2 Крошка Ру
 
24.02.15
23:10
Почему у тебя код после слова "Выполняю" никак не соотносится с логикой, описанной до слова "Выполняю"?
И почему бы тебе не получать каждый раз разные данные? Ведь каждый раз у тебя туда попадают разные данные.
3 myr4ik07
 
24.02.15
23:15
(2) приведи будь добр правильный вариант
4 myr4ik07
 
24.02.15
23:15
(1) Движения.ОстаткиТоваров.Очистить();
где не пихаю, все ровно попадает после перепроведения не нужные движения
5 EugeniaK
 
24.02.15
23:19
(4) Ты своей командой очищаешь набор локально.
Данные в физической базе не меняются.
Движения.ОстаткиТоваров.Записать()
6 myr4ik07
 
24.02.15
23:23
(5) ну, впрочем

    Движения.ОстаткиТоваров.Очистить();
    Движения.ОстаткиТоваров.Записать();

результат есть но все же теперь в запросе беда какая то, в движения попадает все из остаткова
7 Крошка Ру
 
24.02.15
23:26
(6) Потому что у тебя запрос берёт всё из остатков. Ключевое слово - "всё".
8 myr4ik07
 
24.02.15
23:28
(7) ок, имеешь ввиду отбор сделать типа
        |ГДЕ
        |    ПродажаТоваровТовары.Товар = &Товар
но как в этотм параметр передать Товар? У меня это Реквизит с табличной части
9 Крошка Ру
 
24.02.15
23:28
(8) Нет, я тебе тонко намекаю на момент времени
10 Крошка Ру
 
24.02.15
23:29
Чорд. Уже не тонко получилось.
11 myr4ik07
 
24.02.15
23:31
(9)     "ВЫБРАТЬ
        |    ОстаткиТоваровОстатки.Ячейка КАК Ячейка,
        |    ОстаткиТоваровОстатки.Стелаж КАК Стелаж,
        |    ОстаткиТоваровОстатки.Ряд КАК Ряд,
        |    ОстаткиТоваровОстатки.Ряд + ОстаткиТоваровОстатки.Стелаж КАК Критерий,
        |    ПродажаТоваровТовары.Товар,
        |    ПродажаТоваровТовары.Количество КАК Количество
        |ИЗ
        |    Документ.ПродажаТоваров.Товары КАК ПродажаТоваровТовары
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки
        |        ПО ПродажаТоваровТовары.Товар = ОстаткиТоваровОстатки.Товар
        |ГДЕ
        |    ПродажаТоваровТовары.Ссылка.МоментВремени = &МоментВремени
        |
        |УПОРЯДОЧИТЬ ПО
        |    Критерий";
        
        Запрос.УстановитьПараметр("МоментВремени", МоментВремени());

та все то же, две записи попадает
12 myr4ik07
 
24.02.15
23:32
две записи и есть в остатках две записи и попадает )
13 Крошка Ру
 
24.02.15
23:36
(12) Признайся честно, это ты случайно такое условие поставил? Мне просто интересно...
14 Крошка Ру
 
24.02.15
23:37
Ну посмотри на запрос и задай себе вопрос: какие записи попадут в выборку при таком условии?
15 EugeniaK
 
24.02.15
23:38
(11) 1. Не хватает фильтра на текущий документ.
2. Читай теорию о параметрах таблицы остатков. Нужны остатки на момент документа.
16 Крошка Ру
 
24.02.15
23:41
(15) Чем условие в (11) - не фильтр на документ?
По-моему, это лучший фильтр - всегда будет выдавать содержимое табчасти документа.
17 GROOVY
 
24.02.15
23:44
(15) Да там много чего не хватает. Чувак не в курсе вообще что за задачу он решает. У меня на форуме создал тему в "экзамен по УТ", при том, что это задача на спеца по платформе и готовых решений там уже штук 15 с готовыми модулями.

(16) Непроиндексированное поле.
18 EugeniaK
 
24.02.15
23:46
(16) :) :) Вообще логично. Работать будет.
(17) Разберется.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.