|
выбрать остатки товара на складе | ☑ | ||
---|---|---|---|---|
0
MrZLO
01.03.10
✎
13:35
|
Функция ОстаткиТовараНаСкладе(Номенклатура)
Запрос = новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки |ГДЕ | ТоварыНаСкладахОстатки.Номенклатура = &номенклатура"; Запрос.УстановитьПараметр("номенклатура",Номенклатура); Результат = Запрос.Выполнить().Выгрузить(); Если Результат.Количество() > 0 Тогда Сообщить("остаток есть"); Сообщить(Результат.Получить(0)); Возврат Результат.Получить(0); КонецЕсли; КонецФункции чёта недогнал последнюю часть, чу что-то не то пишу... вопрос: есть ли в 1с8 что-то вроде? Запрос.Выполнить().ВзятьОдноЗначение(); :) |
|||
1
Ненавижу 1С
гуру
01.03.10
✎
13:37
|
почему не то?
|
|||
2
Defender aka LINN
01.03.10
✎
13:40
|
(0) За такой запрос - пожизненный эцих без гвоздей!
|
|||
3
Maxus43
01.03.10
✎
13:41
|
(0) остаток имеет смысл на опред дату брать. вот и будет тебе одно значение в результате запроса этого
|
|||
4
zmb
01.03.10
✎
13:42
|
(0) мб указать в отборе склад?
|
|||
5
MrZLO
01.03.10
✎
13:43
|
(3) а по умолчанию он на текущую не берут чтоли?
(4) я его для простоты пока убрал, там он есть в оригинале |
|||
6
Ненавижу 1С
гуру
01.03.10
✎
13:43
|
(0) Фильтр на номенклатуру в параметр запроса вставь
|
|||
7
zmb
01.03.10
✎
13:48
|
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Номенклатура, ТоварыНаСкладахОстатки.КоличествоОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки( &Дата, Номенклатура = &Номенклатура И Склад = &Склад) КАК ТоварыНаСкладахОстатки |
|||
8
MrZLO
01.03.10
✎
13:50
|
у меня пока так
Функция ОстаткиТовараНаСкладе(Номенклатура, СкладНазвание) Перем ОстатокНаСкладе; Склад = Справочники.Склады.НайтиПоНаименованию(СкладНазвание).Ссылка; Запрос = новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки |ГДЕ | ТоварыНаСкладахОстатки.Склад = &склад | И ТоварыНаСкладахОстатки.Номенклатура = &номенклатура"; Запрос.УстановитьПараметр("склад",Склад); Запрос.УстановитьПараметр("номенклатура",Номенклатура); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ОстатокНаСкладе = Выборка.Остаток; КонецЦикла; Если Выборка.Количество() > 0 Тогда Возврат ОстатокНаСкладе; КонецЕсли; КонецФункции |
|||
9
Sekho
01.03.10
✎
13:51
|
Фильтр = Новый Структура;
Фильтр.Вставить("Номенклатура",ВыбНоменклатура); ТабОстатков = РегистрыНакопления.ТоварыНаСкладах.Остатки(Дата,Фильтр, "Номенклатура", "Количество"); |
|||
10
MrZLO
01.03.10
✎
13:51
|
(6) а для чего он? мне же только одно значение надо с остатком?
|
|||
11
zmb
01.03.10
✎
13:51
|
(8) Запрос сделай как в (7)
|
|||
12
Defender aka LINN
01.03.10
✎
13:51
|
(8) Цикл-лишний. И в (2) я, похоже, погорячился. Надо пожизненный эцих с гвоздями давать.
|
|||
13
Maxus43
01.03.10
✎
13:51
|
(8) Сойдёт, только запрос переделай, как в (7). Иначе (2)
|
|||
14
Ненавижу 1С
гуру
01.03.10
✎
13:53
|
(10) почитай про параметры виртуальных таблиц
|
|||
15
Sekho
01.03.10
✎
13:53
|
(9) получишь одну строку таблицы значений. Без запроса
|
|||
16
Киборг
01.03.10
✎
13:54
|
Если Выборка.Следующий() Тогда
Возврат Выборка.Остаток; Иначе Возврат 0; КонецЕсли; |
|||
17
MrZLO
01.03.10
✎
14:00
|
(7) я так понял условие где можно сразу писать в ИЗ... типа продвинутый синтаксис
|
|||
18
Ненавижу 1С
гуру
01.03.10
✎
14:01
|
(17) дело не в синтаксисе, по другому строится SQL-запрос
|
|||
19
MrZLO
01.03.10
✎
14:03
|
(18) я через конструктор запросов делал, да и обычно из библии
select что надо from откуда where условие |
|||
20
Ненавижу 1С
гуру
01.03.10
✎
14:04
|
(19) так вот это ОТКУДА не просто таблица, а ВИРТУАЛЬНАЯ
а по сути подзапрос |
|||
21
zmb
01.03.10
✎
14:06
|
(17) В твоем запросе ты выбираешь остатки по всей номенклатуре по всем складам, затем из этой кучи выбираешь по одной номенклатуре и одному складу, а в (7) ты изначально получаешь остатки по номенклатуре и складу.
|
|||
22
MrZLO
01.03.10
✎
14:11
|
(20), (21) прояснилось :)
в итоге: Функция ОстаткиТовараНаСкладе(Номенклатура, СкладНазвание) Склад = Справочники.Склады.НайтиПоНаименованию(СкладНазвание).Ссылка; Запрос = новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.Номенклатура, | ТоварыНаСкладахОстатки.КоличествоОстаток | ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки( | &Дата, | Номенклатура = &Номенклатура | И Склад = &Склад) КАК ТоварыНаСкладахОстатки"; Запрос.УстановитьПараметр("дата",Дата); Запрос.УстановитьПараметр("склад",Склад); Запрос.УстановитьПараметр("номенклатура",Номенклатура); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Возврат Выборка.Остаток; Иначе Возврат 0; КонецЕсли; КонецФункции матерится по страшному... {Документ.СчетНаОплатуПокупателю.Форма.ФормаДокумента(74)}: Поле объекта не обнаружено (Остаток) Возврат Выборка.Остаток; видимо это лучше оставить Если Выборка.Количество() > 0 Тогда |
|||
23
MrZLO
01.03.10
✎
14:12
|
блин ступил как остаток забыл
|
|||
24
Ненавижу 1С
гуру
01.03.10
✎
14:14
|
наверное надо КоличествоОстаток
|
|||
25
MrZLO
01.03.10
✎
14:14
|
получилось! спасибо всем, пойду читать про запросы...
|
|||
26
Рэйв
01.03.10
✎
14:15
|
(25)Странные люди....сначала делают, а потом читать идут:)
|
|||
27
Ненавижу 1С
гуру
01.03.10
✎
14:19
|
(26) это Россия! Наша Раша!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |