![]() |
![]() |
![]() |
|
Привет. Запрос не выбирает нулевые значения из регистра, прошу помочь | ☑ | ||
---|---|---|---|---|
0
Nehalem
11.02.11
✎
14:54
|
Движения.Записать();
Запрос.Текст="ВЫБРАТЬ | ЗапасыОстатки.Наименование, | ЗапасыОстатки.Склад, | ЗапасыОстатки.КоличествоВУпаковкеОстаток |ИЗ | РегистрНакопления.Запасы.Остатки( | , | Склад = &Склад | И Наименование В | (ВЫБРАТЬ | ДокТЧ.Наименование | ИЗ | ДокТЧ КАК ДокТЧ)) КАК ЗапасыОстатки |ГДЕ | ЗапасыОстатки.КоличествоВУпаковкеОстаток <= 0"; Запрос.УстановитьПараметр("Склад",Склад); Результат=Запрос.Выполнить(); Выборка=Результат.Выбрать(); Пока Выборка.Следующий()Цикл Если Выборка.КоличествоВУпаковке<0 Тогда ЕдИзмеренияУпаковки=РаботаСОбъектами.ПолучитьРеквиизтОбъекта(Выборка.Наименование, "ЕдИзмУпаковки"); Сообщение=Новый СообщениеПользователю; Сообщение.Текст="Не хватает товара: " +Выборка.Наименование+", на складе: "+Выборка.Склад+" в количестве: " +Строка((Выборка.КоличествоВУпаковкеОстаток)*-1)+" " +ЕдИзмеренияУпаковки+"."; Сообщение.Сообщить(); Отказ=Истина; Иначе Если Выборка.КоличествоВУпаковке=0 Тогда Движение.Количество=0; КонецЕсли; КонецЕсли; КонецЦикла; |
|||
1
chelentano
11.02.11
✎
14:56
|
(0) так то вообще ошибку должен выдать
|
|||
2
chelentano
11.02.11
✎
14:56
|
+(1) а нулевых вообще не будет в запросе, он только ненулевые выбирает
|
|||
3
Ткачев
11.02.11
✎
14:57
|
ЕстьNULL(ЗапасыОстатки.КоличествоВУпаковкеОстаток,0)
Нее ? |
|||
4
Nehalem
11.02.11
✎
14:59
|
(3) А почемк NULL ? Если в косоли запросов выбирает по условию = 0?
(2) так вед стоит <= 0 ... |
|||
5
Wobland
11.02.11
✎
15:00
|
в таблице остатков записей с нулевым остатком нет, не?
|
|||
6
Ткачев
11.02.11
✎
15:01
|
хз, я так 0 получаю
|
|||
7
hhhh
11.02.11
✎
15:01
|
(4) ну нету там этих записей в остатках. Не к чему применять это условие.
|
|||
8
Nehalem
11.02.11
✎
15:02
|
(5) в консоли запросов выбирает, на условие = 0, а здесь не могу понять что не так.
Сейчас пример попробую... |
|||
9
Ткачев
11.02.11
✎
15:04
|
(7)Может надо знать числом чего нет на складе.
|
|||
10
МойКодУныл
11.02.11
✎
15:05
|
(3) Если соединить со справочником Номенклатура, так покатит :), но это изврат. Тащить всю номенклатуру, чтобы посмотреть у какой остаток по регистру 0.
|
|||
11
Ткачев
11.02.11
✎
15:07
|
(10)Зачем то ведь надо "остаток <= 0"
|
|||
12
Nehalem
11.02.11
✎
15:09
|
(9)
ВЫБРАТЬ * ИЗ РегистрНакопления.Запасы.Остатки КАК ЗапасыОстатки ГДЕ ЗапасыОстатки.КоличествоВУпаковкеОстаток = 0 Выбирает Фотобарабан HP LJ Q2612A У которого занчение КоличествоВУпаковкеОстаток=0 |
|||
13
Ненавижу 1С
гуру
11.02.11
✎
15:11
|
(12) значит есть другие не пустые ресурсы
|
|||
14
Nehalem
11.02.11
✎
15:11
|
+(12) Значит в регистре запись есть такая...а если так:
ВЫБРАТЬ * ИЗ РегистрНакопления.Запасы.Остатки КАК ЗапасыОстатки ГДЕ ЗапасыОстатки.КоличествоВУпаковкеОстаток <= 0 То выбирает и плюс к фотобарабану отрицательное значение коробок антивируса касперского... Но это в консоли делаю, а в модуле не работает, что не так...вот вопрос то в чем. |
|||
15
Ткачев
11.02.11
✎
15:11
|
А если так ?
* ГДЕ ЗапасыОстатки.КоличествоВУпаковкеОстаток = 0 ИЛИ ЗапасыОстатки.КоличествоВУпаковкеОстаток < 0 |
|||
16
МишельЛагранж
11.02.11
✎
15:12
|
Да, дела, всегда наоборот, нулевые/пустые значения отбрасывают как не несущие никакой информации, а тут надо выбирать ))
(7) да дело не совсем в наличии самих записей, хотя если применить "запись = поле записи", то верно. В (3) правильно говорит - сам ноль в таком случае в поле не пишется (как цифра), а будет "ячейка не заполнена" (т.е. NULL в терминологии 1С). Соответственно, проверять на ЕстьNULL. |
|||
17
Nehalem
11.02.11
✎
15:13
|
(6) надо как Ткачев предлогает замутить. Попробую...
|
|||
18
hhhh
11.02.11
✎
15:14
|
(14) ну это разные запросы. Ты тот же запрос запусти.
|
|||
19
Nehalem
11.02.11
✎
15:16
|
(15) надо выбрать и те и те и потом по условию или сообщить пользователю или обнулить количество в регистре...
(16) хорошо пробую. |
|||
20
MNS_Ротерта
11.02.11
✎
15:26
|
(0) А попробовать из реальной ТЗ вытащить никак? Или из оборотов что будет несколько быстрее выбираете расход со знаком минус, приход со знаком плюс. далее группируете и отфильтровываете что захотите.
В вирт табл Остатки нет нулевых значений. И это правильно априоре так как они там нафик не нужны. Регистры накопления вообще должны рано или поздно частино схлопнуться. Именно это заложено в идеологию РН и это не позволяет им бессмысленно "распухать". |
|||
21
Nehalem
11.02.11
✎
15:29
|
(20) ну таких вещей не знал, а вот из реальной ТЗ вполне можно попробовать вытащить...
|
|||
22
anig99
11.02.11
✎
15:31
|
Детский сад.
1. Если в регистре накопления на дату по номенклатуре нет остатков НИ ПО ОДНОМУ РЕСУРСУ, то виртуальная таблица Остатки не вернет НИ ОДНОЙ ЗАПИСИ и никакие есть NULL не помогут. есть NULL работает только в случае объединения. 2. Для того, чтобы получить и нулевые остатки, нужно объединить таблицу остатков со справочником Номенклатура. Тогда можно и ЕСТЬNULL(КоличествоВУпаковкеОстаток,0)=0 писать. Т.к. именно при отсутствии остатков по ресурсам NULL и будет. |
|||
23
МойКодУныл
11.02.11
✎
15:33
|
(22) я в (10) на это намекал )
|
|||
24
Ненавижу 1С
гуру
11.02.11
✎
15:33
|
(22) осторожно а названиями: соединить, а не объединить
JOIN а не UNION |
|||
25
MNS_Ротерта
11.02.11
✎
15:34
|
(21) Для информации. Регистры накоплений это несколько виртуальных таблиц и одна реальная. В БД это все реальные таблицы. Т.е. в так называемой реальной таблице храняться все записи. А в виртуальных таблицах схлопнутые строки на определенную дату (месяц). Это и позволяет виртуальным таблицам работать быстрее (наложишь параметры вирт. табл будет еще быстрее). Если данных не достаточно в вирт таблицах то данные добираются из реальной таблице за недостающий период (текущий месяц).
|
|||
26
Nehalem
11.02.11
✎
15:40
|
(20) что то не работает однако, Не вытаскивает отрицательное занчение из реальной таблицы...
|
|||
27
acsent
11.02.11
✎
15:40
|
(25) ты не прав
|
|||
28
MNS_Ротерта
11.02.11
✎
15:43
|
(26) ну блин само самой само автоматом минусы и плюсы не поставяться. ориентируйтесь на ВидДвижения. Выбор когда виддвижениярасход то умнож на -1 иначе оставляй как есть.
(27) в чем же я не прав позвольте узнать? |
|||
29
Nehalem
11.02.11
✎
15:44
|
(22) Ага. У меня есть два ресура Количество и Количество в упаковке. Когда количество в упаковке по очередному списанию подошло к 0. хотел обнулить и количество. Способ видимо я не очень правильный выбрал, но теперь пол конфе лень переделывать. из (22) я понял что если хоть один ресурс имеет Положительное значение = запрос не выберет, так?
|
|||
30
Ненавижу 1С
гуру
11.02.11
✎
15:46
|
(28) хотя бы в том, что реальных таблиц две
если напишешь аналогичный запрос - без вирт. таблиц будет скорость таже, просто вирт таблицы это макросы, упрощающие кодинг |
|||
31
МойКодУныл
11.02.11
✎
15:47
|
(29) А чего ж ты сразу тогда не выбираешь по условию Кол-во > 0 и Кол-во в упаковке = 0? Сразу готовая таблица для обнуления получится.
|
|||
32
Ненавижу 1С
гуру
11.02.11
✎
15:51
|
(29) зачем ресурс "Количество в упаковке"?
|
|||
33
Ненавижу 1С
гуру
11.02.11
✎
15:52
|
(29) и кстати в (13) я был прав
|
|||
34
Nehalem
11.02.11
✎
15:53
|
(31) да нет немного не то получиться. Проведение Списывает количествоВУпаковке по спецификации. количество банок тонера, нужно просто обнулять и все когда КоличествоВУпаковке=0 станет.
|
|||
35
МойКодУныл
11.02.11
✎
15:56
|
(34) это при проведении документа делается или ты обработку пишешь, которая такие остатки закрыть должна?
|
|||
36
МойКодУныл
11.02.11
✎
15:56
|
(35) Туплю, видимо при проведении. Забыл первый пост.
|
|||
37
Nehalem
11.02.11
✎
15:57
|
(32) КоличествоВУпаковке это тонер в граммах на одну заправку, если его нет пользователю сообщаю что тонера на складе нет.
А еще есть количество- это уже банок с тонером. Короче так не очень совершенно, но как есть... Так вот когда тонера в граммах уже 0 на складе, количество в банках еще болтается. Хотел таким не хитрым способом обнулить и все и забыть. |
|||
38
Nehalem
11.02.11
✎
15:58
|
(35) при проведении. Обработка мне кажется лишнее немного.
|
|||
39
МойКодУныл
11.02.11
✎
16:02
|
Может перед записью в регистр при проведении получать остатки, и если ОстатокКоличествоВУпаковке = СписываемоеКоличествоВУпаковке, то полностью списывать количество в банках?
Прости за сумбур, у меня уже пятница) |
|||
40
Nehalem
11.02.11
✎
16:08
|
(39) да видимо нужно что-то такое делать, иначе ерунда выходит. Интересно как вообще с весовым товаром вопрос в типовых решается...ведь плата за банку идет, а списание по граммам...хм...
|
|||
41
НЕА123
11.02.11
✎
16:11
|
(0) не совсем понял, но может так
|ГДЕ | ЗапасыОстатки.КоличествоВУпаковкеОстаток < 0 ИЛИ (ЗапасыОстатки.КоличествоВУпаковкеОстаток = 0 И ЗапасыОстатки.Количество <> 0" |
|||
42
НЕА123
11.02.11
✎
16:12
|
(39)
вроде так и делается, обычно. |
|||
43
Nehalem
11.02.11
✎
16:19
|
(42) то есть путь примерно верный, что ж уже не так грустно. (41) - попробую сделать. Посмотрим.
|
|||
44
Nehalem
11.02.11
✎
16:21
|
(41)- нет не пойдет, пользователю то как сообщить о том что граммов нет достаточных...
|
|||
45
МойКодУныл
11.02.11
✎
16:25
|
(44) Получааешь остатки пол кол-ву банок и кол-ву граммов, потом в коде сравниваешь списываемое количество граммов и их остатки. Если остатка меньше - сообщаешь пользователю и не проводишь, ИначеЕсли остаток = списываемому количеству - списываешь еще и все количество банок, Иначе - просто проводишь.
|
|||
46
МойКодУныл
11.02.11
✎
16:26
|
(45) омг, сколько описок. Пора прекращать потсить)
|
|||
47
Nehalem
11.02.11
✎
16:28
|
(45) ок. спасибо что-то такое уже пробую. Спасибо всем за участие, удачных выходных...
|
|||
48
Midaw
11.02.11
✎
16:44
|
(27) интересно в чем же он не прав? любая виртуальная таблица это есть выборка с использованием итогов в регистрах. только я бы называл "виртуальная таблица" не совсем равно итоги. там ещё код к использованию итогов+таблицы движений.
(45) какое то извращение, может проще получить итоги на момент времени до документа? или я что то тут не понял, всё не читал ) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |