|
А как вы возращаете результат запроса, например из функции. | ☑ | ||
---|---|---|---|---|
0
toran1
01.04.16
✎
08:23
|
Доброго.
Поделитесь, кому не жалко, своим примером как вы возвращаете результат запроса из функции. Ну например выделили часть кода с запросом в некую функцию или в процедуру. Что возвращаете в основную ветку кода? |
|||
1
Strogg
01.04.16
✎
08:25
|
Непонятен вопрос.
1) ТекстЗапроса (если динамически формируется) 2) фрагмент текста запроса 3) Выборка 4) ТЗ. Выбирай на вкус. |
|||
2
Asmody
01.04.16
✎
08:26
|
Чаще всего Выполнить()
|
|||
3
Мэс33
01.04.16
✎
08:28
|
(1) спрашивает не "что возвращаете", а "как".
|
|||
4
Strogg
01.04.16
✎
08:31
|
(3) хмхм, "Что возвращаете в основную ветку кода?" тогда яннп)))
|
|||
5
Ёпрст
01.04.16
✎
08:34
|
(0)
return false; |
|||
6
Рэйв
01.04.16
✎
08:35
|
(0)Возвращай результат выполнения, а там уж сам решишь что с ним делать - в тз выгружать или обходить выборкой.
|
|||
7
Fedor-1971
01.04.16
✎
08:41
|
(3) так "как" только один вариант Возврат ХХХХ;
(0) то зачем создал функцию, например, откорректированный текст запроса, результат выполнения запроса, структуру (с некой интерпретацией тог, что выбрал мне запрос, например нужные реквизиты контрагента для печатной формы накладной) |
|||
8
Мэс33
01.04.16
✎
08:45
|
(4) ну..."Поделитесь ... как вы возвращаете результат запроса из функции. "
|
|||
9
Strogg
01.04.16
✎
08:53
|
(8) эмммм, если вопрос "Как", то только с помощью Возврат ХХХ. Других способов я не знаю :)
|
|||
10
Мэс33
01.04.16
✎
08:59
|
(0)
Автор хочет понять, как выделять (когда это нужно делать) кусок кода в функцию, и что лучше возвращать (то ли голую ТЗ, то ли уже обработанную ТЗ, то ли результат запроса и т.д.). Сперва-наперво, выделять в функцию нужно тогда, когда ты этой функцией пользуешься больше чем два раза, чтобы хотя бы уменьшить копипасту. А там потом смотришь. Если частая операция - это сгенерить текст запроса по определенным параметрам, то пишешь функцию, которая умеет генерить текст запроса и возвращает его. Если функция должна что-то рассчитать, то сам понимаешь, что вернешь. |
|||
11
Мэс33
01.04.16
✎
08:59
|
(0) + (10)
Почитай "Совершенный код" Макконнелла. |
|||
12
Mort
01.04.16
✎
09:01
|
"Сперва-наперво, выделять в функцию нужно тогда, когда ты этой функцией пользуешься больше чем два раза"
Вы наверное какой-то другой совершенный код читали. |
|||
13
Mort
01.04.16
✎
09:05
|
А возрвращать стоит результат запроса. А организация выборки и обход лучше читается в одной функции имхо.
|
|||
14
Mort
01.04.16
✎
09:06
|
Текст запроса тоже стоит в отдельную функцию, если не 3 строки, конечно.
|
|||
15
Тролль главный
01.04.16
✎
09:07
|
//этот запрос ВСЕГДА содержит ОДНУ строку, такое бывает
Возврат Запрос.Выполнить().Выгрузить()[0].Сумма; |
|||
16
Мэс33
01.04.16
✎
09:08
|
(12) обычно бывает, пишешь код, и вдруг возникает необходимость часть кода повторить. Не уверен, что прогер начинает сразу же заниматься рефакторингом, он сделает однозначно копипасту.
А вот если уже в третий раз вызываешь один и тот же кусок кода - надо задуматься. Читал все правильно, но это всего лишь авторитетное мнение, а есть личный опыт. |
|||
17
Smile 8D
01.04.16
✎
09:46
|
(16) Зависит от конкретной ситуации, но по возможности стараюсь сразу вместо копипасты выделять в отдельную сущность, т.к. понимаю, что при копипасте резко вырастает вероятность ошибки, когда в одном куске кода исправят, а в другом нет. И искать косяк в такой ситуации зачастую неудобно.
|
|||
18
Маратыч
01.04.16
✎
09:48
|
(16) Угу, я тут уже год неспешно за предыдущим кодЫром копипасту подчищаю. Почти все доработки рефакторинга требуют из-за костылей и лютой копипасты.
|
|||
19
toran1
01.04.16
✎
09:51
|
(2) И какой тип данных тогда перебегает при таком варианте?
|
|||
20
Маратыч
01.04.16
✎
09:52
|
(19) РезультатЗапроса.
|
|||
21
Мэс33
01.04.16
✎
11:32
|
(18) у тебя, видимо, есть на это время).
Я работал в жестоком цейтноте. Приходилось не думать о красивом коде. |
|||
22
Мэс33
01.04.16
✎
11:32
|
(21) это было три года назад.
|
|||
23
Мэс33
01.04.16
✎
11:33
|
(17) конечно - все зависит от ситуации. Всегда надо искать некий компромисс между внутренним перфекционизмом и желаниями заказчика.
|
|||
24
Маратыч
01.04.16
✎
11:35
|
(21) Да, в свободное время допиливаю, благо авралы у нас крайне редки, все делается основательно и не спеша, с удвоенными сроками :)
|
|||
25
Мэс33
01.04.16
✎
11:40
|
(24) тогда о чем разговор )
если есть время - делаешь красиво под чаек с печеньками. |
|||
26
rs_trade
01.04.16
✎
11:40
|
Функция НапримерПолучитьНоменклатуруПоАртикулу(Артикул)
Результат = Справочник.Номенклатура.ПустаяСсылка(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ |Номенклатура.Ссылка | ИЗ |Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Артикул = &Артикул"; Запрос.УстановитьПараметр("Артикул", Артикул); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() тогда Результат = Выборка.Ссылка; КонецЕсли; Возврат Результат; КонецФункции |
|||
27
Мэс33
01.04.16
✎
11:41
|
(24) я правда уже 10 месяцев 1С не открывал. Там наверное - ОЧЕНЬ МНОГО НОВОГО УЖЕ ВЫШЛО?
|
|||
28
Тролль главный
01.04.16
✎
11:48
|
(26) слишком много кода у тебя, смотри:
Функция НапримерПолучитьНоменклатуруПоАртикулу(Артикул) ТекстЗапроса = "ВЫБРАТЬ | ЕСТЬNULL(МАКСИМУМ(Номенклатура.Ссылка),ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) КАК Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Артикул = &Артикул"; Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Артикул", Артикул); Возврат Запрос.Выполнить().Выгрузить()[0].Ссылка; КонецФункции |
|||
29
rs_trade
01.04.16
✎
11:50
|
(28) не люблю в одну строку много пихать.
|
|||
30
Маратыч
01.04.16
✎
11:50
|
(29) Эт разве много.
|
|||
31
Тролль главный
01.04.16
✎
11:51
|
(29) я просто троллю понемногу
|
|||
32
Мэс33
01.04.16
✎
11:55
|
(26) косяк - а если по артикулу запрос вернет больше одной строки.
Что будете тогда делать? ))) |
|||
33
Карупян
01.04.16
✎
11:56
|
(32) там максимум
|
|||
34
rs_trade
01.04.16
✎
11:57
|
(32) началось мля. это пример оформления кода функции, а не рабочая функция.
|
|||
35
Мэс33
01.04.16
✎
11:57
|
(33) ну и? если в справочнике два товара с одинаковым артикулом?
|
|||
36
Мэс33
01.04.16
✎
11:58
|
(34) не матерись, dude
|
|||
37
Мэс33
01.04.16
✎
11:58
|
(34) давай рабочую функцию)
|
|||
38
Маратыч
01.04.16
✎
11:59
|
(35) Проблемы негров шерифа не сношают :)
По-хорошему, там не МАКСИМУМ надо, а проверку количества в выборке и злобный мат пользуну, когда количество >1 |
|||
39
mikecool
01.04.16
✎
12:00
|
(9) через параметры же
|
|||
40
Мэс33
01.04.16
✎
12:04
|
(38) куда ты проверку вставишь?
- прямо в самой функции проверишь и матернешься? - или функция вернет результат запроса (неважно, ТЗ это будет или сам результат запроса), а потом уже в основном коде проверишь, что блин - повторяются артикулы? |
|||
41
rs_trade
01.04.16
✎
12:13
|
(37) вот рабочая функция
Функция НапримерПолучитьНоменклатуруПоАртикулу(Артикул) Результат = Справочники.Номенклатура.ПустаяСсылка(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура |"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.Ссылка.Артикул = Артикул Тогда Результат = Артикул; КонецЕсли; КонецЦикла; Возврат Результат; КонецФункции |
|||
42
Маратыч
01.04.16
✎
12:15
|
(40) Канеш, не в самой функции. Я все-таки стараюсь соблюдать клиент-серверную архитектуру, нечего клиентскому коду делать в потенциально серверной функции.
|
|||
43
Мэс33
01.04.16
✎
12:21
|
(41) это профессиональный юмор такой?
|
|||
44
Маратыч
01.04.16
✎
12:23
|
(41) Бгеге, это прекрасно %)
|
|||
45
Dotoshin
01.04.16
✎
12:47
|
(41) Уверен, что рабочая?
|
|||
46
Мыш
01.04.16
✎
13:00
|
(41) Неправильная функция. В выборке надо было в табличный документ писать ссылку и артикул, а потом уже делать по нему поиск. Эх, маладежь!
|
|||
47
rs_trade
01.04.16
✎
13:00
|
(45) Есть конечно одна маленькая ошибка. Поторопился.
В цикле Результат = Выборка.Ссылка должно быть. А все остальное хорошо. |
|||
48
Мэс33
01.04.16
✎
13:02
|
(46) я так и делаю. Загоняю в ТЗ, потом ее перебираю)))
|
|||
49
rs_trade
01.04.16
✎
13:03
|
(48) Еще важно поля не в запросе выбирать, а через ссылку к ним обращаться.
|
|||
50
Мыш
01.04.16
✎
13:03
|
(48) Вы сообразительны, но невнимательны. Именно в "табличный документ" надо.
|
|||
51
Мэс33
01.04.16
✎
13:04
|
(50) мм, да, пятница же ))).
Ну у вас вариант получше. |
|||
52
Dotoshin
01.04.16
✎
13:09
|
(47) Еще одна ошибка есть.
|
|||
53
Маратыч
01.04.16
✎
13:13
|
(52) Ну логическая уже упоминалась, что если есть номенклатура с одинаковым артикулом, это не будет учтено и результатом будет последняя найденная ссылка. А еще какие?
|
|||
54
Dotoshin
01.04.16
✎
13:17
|
(53) Извиняюсь, первую строку не увидел...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |