Имя: Пароль:
1C
1С v8
Запрос работает не так, как я ожидал
,
0 Treaq
 
03.07.18
21:50
Приветствую. Суть: изучаю азы 1С, в частности сейчас запросы. Создал недобазу со справочником "Номенклатура", документами "Расходная/ПриходнаяНакладная" и регистром накопления "МатериалыНаСкладе". Идея такова: приходная накладная при проведении кидает в регистр единицу номенклатуры ("Молоток", 1 штука). Когда проводится РасходнаяНакладная, то с помощью запроса проверяется остаток в регистре номенклатуры и проводится или же не проводится, если остатка нет. Запрос написан в модуле документа, вызов идёт из формы. Сама проблема: запрос ничего не возвращает и проблема в условии, но не могу понять почему. Если подставить в правую часть условия параметр и присвоить ему что-то из формы - всё работает, но такой вариант, по-моему, не хорош, ибо нужно передать огромное количество параметров с формы. В руководстве разработчика не нашёл(или плохо искал), а в инете подобного не нашёл. Понимаю, что ошибка то у меня. Хэлп :с

Процедура ПроверкаКоличества() Экспорт
    ЗапросНаОстатки = Новый Запрос();
    ЗапросНаОстатки.Текст = "ВЫБРАТЬ
               |НоменклатураНаСкладеОстатки.КоличествоОстаток,
               |РасходнаяНакладнаяСостав.Наименование.Ссылка
               |ИЗ
               |РегистрНакопления.НоменклатураНаСкладе.Остатки
                   КАК НоменклатураНаСкладеОстатки,
               |Документ.РасходнаяНакладная.Состав КАК
                    РасходнаяНакладнаяСостав
               |ГДЕ
               |НоменклатураНаСкладеОстатки.Номенклатура.Ссылка =
                   |РасходнаяНакладнаяСостав.Наименование.Ссылка";
     РезультатЗапроса = ЗапросНаОстатки.Выполнить();
     ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
     Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    //    
     КонецЦикла;
КонецПроцедуры
1 jsmith82
 
03.07.18
22:07
Бугага
2 jsmith82
 
03.07.18
22:15
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
|    РасходнаяНакладнаяСостав.Наименование КАК Номенклатура,
|    РасходнаяНакладнаяСостав.Количество КАК Количество
|ПОМЕСТИТЬ ВтСостав
|ИЗ
|    Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав
|ГДЕ
|    РасходнаяНакладнаяСостав.Ссылка = &Ссылка
| ;
|ВЫБРАТЬ
|    ВтСостав.Номенклатура КАК Номенклатура,
|    НоменклатураНаСкладеОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
|    ВтСостав КАК ВтСостав
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НоменклатураНаСкладе.Остатки КАК НоменклатураНаСкладеОстатки
|ПО ВтСостав.Номенклатура = НоменклатураНаСкладеОстатки.Номенклатура
|ГДЕ
|ЕСТЬNULL(НоменклатураНаСкладеОстатки.КоличествоОстаток, 0) - ВтСостав.Количество < 0";
3 jsmith82
 
03.07.18
22:16
в ВЫБРАТЬ тоже ЕСТЬNULL(НоменклатураНаСкладеОстатки.КоличествоОстаток, 0)
4 jsmith82
 
03.07.18
22:18
Вообще я не понял, что там у тебя происходит и откуда, но если предположить, что в момент запроса документ записан, то расклад будет такой
5 jsmith82
 
03.07.18
22:19
Про кошерные способы проведения и контроля, предположим, ты не в курсе.
6 Chameleon1980
 
04.07.18
05:08
проведение, а потом (затем) проверка (утверждение для (0), вопрос с иронией для (3) )
7 Chameleon1980
 
04.07.18
05:09
тьфу - для (3) читать как для (5)
8 VladZ
 
04.07.18
05:24
(0) Почитай букварь. Ты написал бред.
9 SleepyHead
 
гуру
04.07.18
06:26
В дополнение к (8), букварь тут

http://v8.1c.ru/metod/books/book.jsp?id=436
10 Treaq
 
04.07.18
09:43
(2) В условии, которое для ВТ, всё равно параметр. А без параматера никак? Я думал сделать, чтобы перед проведением, проверялся остаток всех позиций в табличной части документа
11 SleepyHead
 
гуру
04.07.18
09:53
(10) Когда запрос станет телепатом, ты станешь не нужен.
12 Treaq
 
04.07.18
10:04
(11) Так я же указываю ему, чтобы он взял данные из ТЧ и сравнил их с регистром
13 Мыш
 
04.07.18
10:06
(12) Ты источники данных перечислил через запятую. Это неправильно. Почитай про соединения в запросе.
14 catena
 
04.07.18
10:07
(12)Если ты думаешь, что в базе для каждого документа отдельная таблица для его ТЧ, ты жестоко ошибаешься. Это одна таблица для всех документов этого вида, в каждой строке которого есть привязка к документу, которому она принадлежит.
15 Остап Сулейманович
 
04.07.18
10:08
(0) Вот здесь : http://1c.chistov.pro/2010/06/1-82.html есть все.
16 catena
 
04.07.18
10:08
+(14)Поэтому, если ты пишешь "Выбрать * из Документ.Док.ТЧ" - он выберет все данные этой таблицы, т.е. все ТЧ всех документов ДОК.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший