Имя: Пароль:
1C
1С v8
Перебрать в запросе ТЧ незаписанного документа
,
0 vitaliklibra
 
19.05.15
11:54
Добрый день!

Добавляю в ТЧ строки, и хочу в событии "ПриИзменении()" какого-то поля пересчитать значение какого-то реквизита на форме. Выполняю это запросом:

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

Но здесь, пока документ не записан, в ТЧ "СписокНоменклатуры" еще НЕ содержится моих добавленных строк! А мне они нужны при каждом новом добавлении. Подскажите, как сделать правильно?
1 ДенисЧ
 
19.05.15
11:55
Выгрузить в ТЗ, тз передать в запрос
2 Рэйв
 
19.05.15
11:56
Запрос вообщето к базе данных, а тебя там еще нет. Можно конечно сначала выгрузить в тз и запихать - только вот зачем?

На кой тебе выбирать то, что и так под руками?

Выгрузи в тз + НайтиСтроки по условию
3 Рэйв
 
19.05.15
11:58
ну..или просто перебрать:-)
4 Рэйв
 
19.05.15
11:58
потому что условия в тз не  удет если еще колонку не сделать и не заполнить:-)
5 vitaliklibra
 
19.05.15
12:03
(1) - т.е. я пишу:

СпНом = СписокНоменклатуры.Выгрузить();

А  как теперь дальше обратиться к этой выгрузке в запросе, что её перебрать с наложением условий?
6 Остап Сулейманович
 
19.05.15
12:05
В ЗУПе "модно" такие вещи делать в транзакции.
НачатьТранзакцию()
Провести() //даже не записать, а провести.
В проведении рассчитать все, что нужно
ОтменитьТранзакцию()
7 Остап Сулейманович
 
19.05.15
12:07
+ (6) Ну... там для расчетов по незаписанным данным нужно получать соединения с тьмой таблиц из других регистров. Видимо потому так.
8 Рэйв
 
19.05.15
12:11
(5)Тебе будет проще перебором пройтись и не мучаться, чем тебе два часа будут объяснять как засунуть тз в запрос  и что там потом с ней делать......
9 vitaliklibra
 
19.05.15
12:12
(6) Неужели без проведения/отмены проведения этого не сделать?
10 samozvanec
 
19.05.15
12:14
(9) см (7)
11 samozvanec
 
19.05.15
12:15
+(10) Обратиться к процедуре в модуле одного объекта из другого (обычн. формы) я все понял, у меня новый любимый автор. пора добавить возможность подписки на темы мистян
12 Timon1405
 
19.05.15
12:19
13 vitaliklibra
 
19.05.15
12:19
(11) Ничё се) А ты, видимо, ведешь статистику, кто и что на форуме пишет? :D Вопщет, вопросы есть у того, кто пытается что-то сделать, а не тупо сидит на форумах, чтоб троллить менее опытных коллег. Если это твой способ развлечения, то я рад за тебя!)
14 vitaliklibra
 
19.05.15
12:40
Делаю по примеру (12). Описано доступно. Получается для моего случая:

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    СписокНоменклатуры.Номенклатура КАК Номенклатура
        |ПОМЕСТИТЬ ВремСписокНоменклатуры
        |ИЗ
        |    &СписокНоменклатуры КАК СписокНоменклатуры
        |ГДЕ
        |    СписокНоменклатуры.Номенклатура.ПризнакУслуги = ЛОЖЬ
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВремСписокНоменклатуры.Номенклатура КАК Номенклатура
        |ИЗ
        |    ВремСписокНоменклатуры КАК ВремСписокНоменклатуры";
        
    Запрос.УстановитьПараметр("СписокНоменклатуры", СписокНоменклатуры);        
    
    Выборка = Запрос.Выполнить().Выбрать();


Пишет:

{Документ.ДокументЗаказ.Форма.ФормаДокумента.Форма(212)}: Ошибка при вызове метода контекста (Выполнить)
    Выборка = Запрос.Выполнить().Выбрать();
по причине:
{(7, 2)}: Поле не найдено "СписокНоменклатуры.Номенклатура.ПризнакУслуги"
<<?>>СписокНоменклатуры.Номенклатура.ПризнакУслуги = ЛОЖЬ


Не пойму, чего так? Ведь реквизит "ПризнакУслуги" в номенклатуре есть! Что делаю не так?
15 vitaliklibra
 
19.05.15
12:46
Вопрос решил, когда условие переставил к основному запросу:

        "ВЫБРАТЬ
        |    СписокНоменклатуры.Номенклатура КАК Номенклатура
        |ПОМЕСТИТЬ ВремСписокНоменклатуры
        |ИЗ
        |    &СписокНоменклатуры КАК СписокНоменклатуры
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВремСписокНоменклатуры.Номенклатура КАК Номенклатура
        |ИЗ
        |    ВремСписокНоменклатуры КАК ВремСписокНоменклатуры
        |ГДЕ
        |    ВремСписокНоменклатуры.Номенклатура.ПризнакУслуги = ЛОЖЬ";

Но все же, почему не отработало условие во вложенном запросе?
16 Любопытная
 
19.05.15
12:48
Потому что первый запрос просто запихивает ТЗ во временную таблицу. Он ничего про твою номенклатуру еще знать не знает. Вот когда во временную таблицу сложит, тогда разберется
17 Ёпрст
 
19.05.15
12:49
(15) типизируй поле через выразить в тексте запроса и лепи своё условие
18 vitaliklibra
 
19.05.15
12:51
Всё принято!) Ребят, спасибо за помощь!!!
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан