Имя: Пароль:
1C
1С v8
возврат параметра в функции
,
0 manti
 
21.03.12
16:52
Как правильно вызвать функцию и нужный параметр, содержащийся в ней? Код
Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
  Товар = ДанныеСтроки.Номенклатура;
  ВЫборка = ПоказатьОстаток(Товар);
  Остаток = Выборка.КоличествоОстаток;//так ничего не возвращает
  ОформлениеСтроки.Ячейки.Остаток.УстановитьТекст(Остаток);
КонецПроцедуры

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

 Запрос.УстановитьПараметр("Счет", ПланыСчетов.Основной.Товары);
 Запрос.УстановитьПараметр("Субконто", Товар);
 Остатки = Запрос.Выполнить().Выбрать();
 //Остатки.Следующий();
 Возврат Остатки;
 //Остатки.КоличествоОстаток
КонецФункции //ПоказатьОстаток()
1 Лефмихалыч
 
21.03.12
16:53
Следующий()
2 Kashemir
 
21.03.12
16:53
Пока Остатки.Следующий() Цикл
3 Maxus43
 
21.03.12
16:54
Если Остатки.Следующий() Тогда
Возврат Остатки.КоличествоОстаток
Иначе
 Возврат 0;
КонецЕсли;
4 palpetrovich
 
21.03.12
16:54
Остатки = Запрос.Выполнить().Выбрать();  - зачем здесь Выбрать?
5 Ненавижу 1С
 
гуру
21.03.12
16:54
потому что нет Выборка.Следующий()
а вообще запрос фееричен
6 Ненавижу 1С
 
гуру
21.03.12
16:55
интересно ЧТО ЭТО?
7 salvator
 
21.03.12
16:56
Остатки без даты? Ммм...
8 Grrrr
 
21.03.12
16:56
Зачем вообще функция?
9 Kashemir
 
21.03.12
16:56
Прикольная конструкция - удобно рандомные числа генерить :)
СРЕДНЕЕ(ОсновнойОстатки.СуммаОстаток / ОсновнойОстатки.КоличествоОстаток), 0)
10 Ненавижу 1С
 
гуру
21.03.12
16:56
(7) биздатые остатки
11 Ненавижу 1С
 
гуру
21.03.12
16:57
(9) в данном случае особо не нагенеришь
12 Maxus43
 
21.03.12
16:57
(7) норм, текущие остатки) точней на 3000-какойто год, непомню тончо)
13 Kashemir
 
21.03.12
16:57
(11) Да я шучу. Смысл в том что смысла в этой конструкции зеро.
14 manti
 
21.03.12
17:17
(13)
впринцыпе да но почему то при том что прописна функция ЕСТЬNULL - все равно ругается на деление на 0. Код
ЕСТЬNULL(СРЕДНЕЕ(ЕСТЬNULL(ОсновнойОстатки.СуммаОстаток, 1) / ЕСТЬNULL(ОсновнойОстатки.КоличествоОстаток, 1)), 1) КАК среднее

почему он так ругается?
15 Ненавижу 1С
 
гуру
21.03.12
17:18
(14) потому что
1. от 0 это не панацея
2. NULL там вообще кстати невозможен
16 Maxus43
 
21.03.12
17:18
(14) ЕСТЬNULL это не Есть Ноль)
17 Maxus43
 
21.03.12
17:20
Выбор Когда НЕ ОсновнойОстатки.КоличествоОстаток = 0 ТОгда
ОсновнойОстатки.СуммаОстаток / ОсновнойОстатки.КоличествоОстаток
Иначе
ОсновнойОстатки.СуммаОстаток
Конец
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший