|
Когда правильно выносить функцию в общий модуль | ☑ | ||
---|---|---|---|---|
0
Scorp1985
06.08.13
✎
11:55
|
Добрый день!
Самописная конфигурация, очень простая. Во всех пяти документах используется получение данных из регистра накопления. В связи с этим написана функция Функция ПосчитатьБаланс(СуммаСписания, СуммаСписанияБыла, Контрагент) Фильтр = Новый Структура; Фильтр.Вставить("Контрагент", Контрагент); Баланс = РегистрыНакопления.БалансКонтрагентов.Остатки( , Фильтр, , "Баланс").Итог("Баланс") - СуммаСписания + СуммаСписанияБыла; Возврат(Баланс); КонецФункции Вопрос: целесообразно ли выносить её в общий модуль, какие параметры использовать (флажки какие, надо ли "Экспорт")? А также как обратиться к ней из модуля формы? Спасибо за помощь! |
|||
1
Maxus43
06.08.13
✎
11:57
|
Целесообразно вынести + сделать запросом.
Экспорт надо |
|||
2
Fish
06.08.13
✎
11:57
|
(1) +100.
|
|||
3
exwill
06.08.13
✎
11:58
|
+(1) +ПовторноеИспользование
|
|||
4
Scorp1985
06.08.13
✎
12:00
|
(1) А как к ней обратиться из модуля формы документа?
Нужно её сделать &НаСервереБезКонтекста ? |
|||
5
Maxus43
06.08.13
✎
12:01
|
ну и определится на сервере или клиенте делать
|
|||
6
Maxus43
06.08.13
✎
12:01
|
(4) да, без контекста, раз не нужны данные формы
|
|||
7
Sorm
06.08.13
✎
12:03
|
(1) +
|
|||
8
Maxus43
06.08.13
✎
12:03
|
хм, УФ - там может быть сложней
|
|||
9
dervishsy
06.08.13
✎
12:04
|
(0)Есть такой принцип в разработке ПО называется Don’t Repeat Yourself (DRY, рус. Не повторяйся).
wiki:Don%27t_repeat_yourself Говорят помогает. |
|||
10
1Сергей
06.08.13
✎
12:05
|
дурацкая какая-то функция... берёт остатки и прибавляет-отнимает переданные параметры.
Тебе не казалось, что функция должна решать более глобальную задачу? |
|||
11
Scorp1985
06.08.13
✎
12:07
|
(8) Да, УФ у меня
(10) Я совсем начинающий) Вообще, цель функции выдернуть данные из регистра. Вычитать и прибавлять решил уже на форме. Остались вопросы по галкам у общего модуля и способу обращения к функции из модуля документа. |
|||
12
Maxus43
06.08.13
✎
12:07
|
(10) нести мир и процветание в общество?)
|
|||
13
Maxus43
06.08.13
✎
12:08
|
(11) Будет запрос - значит модуль серверный, без контекста
|
|||
14
zak555
06.08.13
✎
12:08
|
что такое баланс контрагента ?
|
|||
15
Scorp1985
06.08.13
✎
12:09
|
(14) Это регистр накопления, у него есть измерение Контрагент и ресурс Баланс.
|
|||
16
Maxus43
06.08.13
✎
12:10
|
(14) самописный РН. типа взаиморасчетов с контрагентами видимо
|
|||
17
Scorp1985
06.08.13
✎
12:10
|
(13) С запросами у меня плоховато) Особенно к регистрам...
|
|||
18
Cube
06.08.13
✎
12:12
|
(17) Юзай конструктор запросов. Там почти всё мышкой....
|
|||
19
Maxus43
06.08.13
✎
12:12
|
(17) в любом случае на сервере, ибо Остатки - только тама
|
|||
20
Scorp1985
06.08.13
✎
12:14
|
Убрал из функции мусор,
&НаСервереБезКонтекста Функция ПолучитьБаланс(Контрагент) Экспорт Фильтр = Новый Структура; Фильтр.Вставить("Контрагент", Контрагент); Баланс = РегистрыНакопления.БалансКонтрагентов.Остатки( , Фильтр, , "Баланс").Итог("Баланс"); Возврат(Баланс); КонецФункции Кто-нибудь может помочь с заменой на запрос?) |
|||
21
1Сергей
06.08.13
✎
12:15
|
(20) оставь как есть. не нужен тут запрос
|
|||
22
Scorp1985
06.08.13
✎
12:16
|
(21) Осталось разобраться почему у меня
{Документ.СписаниеСРасчетногоСчета.Форма.ФормаДокумента.Форма(23,31)}: Процедура или функция с указанным именем не определена (ПолучитьБаланс) ЭтаФорма.БалансКонтрагента = <<?>>ПолучитьБаланс(Объект.Получатель) - Объект.СуммаСписания + ЭтаФорма.СуммаСписанияБыла; (Проверка: Тонкий клиент) |
|||
23
Maxus43
06.08.13
✎
12:17
|
ИмяОбщегоМодуля.ПолучитьБаланс
|
|||
24
1Сергей
06.08.13
✎
12:17
|
(22) Имя общего модуля забыл написать
|
|||
25
Scorp1985
06.08.13
✎
12:20
|
(23) (24) {Документ.СписаниеСРасчетногоСчета.Форма.ФормаДокумента.Форма(23,31)}: Переменная не определена (РаботаСРегистрами)
ЭтаФорма.БалансКонтрагента = <<?>>РаботаСРегистрами.ПолучитьБаланс(Объект.Получатель) - Объект.СуммаСписания + ЭтаФорма.СуммаСписанияБыла; (Проверка: Тонкий клиент) |
|||
26
Lama12
06.08.13
✎
12:21
|
(3) А я б не стал :)
Остатки штука такая, которую повторным использованием лучше не тянуть. |
|||
27
Cube
06.08.13
✎
12:21
|
(20) Как-то так:
&НаСервереБезКонтекста Функция ПолучитьБаланс(Контрагент) Экспорт Запрос = Новый Запрос("ВЫБРАТЬ | БалансКонтрагентов.БалансОстаток |ИЗ | РегистрНакопления.БалансКонтрагентов.Остатки(, Контрагент = &Контрагент) КАК БалансКонтрагентов"); Запрос.УстановитьПараметр("Контрагент", Контрагент); Выборка = Запрос.Выполнить().Выбрать(); Возврат (Выборка.Следующий(), Выборка.БалансОстаток, 0); КонецФункции |
|||
28
Scorp1985
06.08.13
✎
12:22
|
(25) Я так понимаю дело во флажках в свойствах модуля, может что мне нужно в моём случае?)
(27) И всё же, какие плюсы/минусы использования запроса? |
|||
29
Cube
06.08.13
✎
12:23
|
+(27) Очепятка:
Вместо Возврат (Выборка.Следующий(), Выборка.БалансОстаток, 0); Надо Возврат ?(Выборка.Следующий(), Выборка.БалансОстаток, 0); |
|||
30
Maxus43
06.08.13
✎
12:23
|
(25) галка Вызов Сервера стоит у модуля?
|
|||
31
Maxus43
06.08.13
✎
12:23
|
(28) запрос - по феншую, привыкай к хорошему сразу
|
|||
32
Cube
06.08.13
✎
12:24
|
(28) "И всё же, какие плюсы/минусы использования запроса?"
v8: Как поставить такое условие? пост 63. Можешь переделать код под свою задачу и сравнить. |
|||
33
Scorp1985
06.08.13
✎
12:31
|
(29) Это не опечатка, это моё невежество)) поэтому прошу объяснить почему так?)
|
|||
34
Cube
06.08.13
✎
12:33
|
(33) Что?
|
|||
35
Scorp1985
06.08.13
✎
12:33
|
(30) Спасибо, заработало =) пошёл читать факи по галкам)
|
|||
36
Scorp1985
06.08.13
✎
12:45
|
(34) Зачем там "?" ??
|
|||
37
Scorp1985
06.08.13
✎
12:48
|
Блин, вернул в общем обратно, без запроса. Нет в нём смысла тут.
теперь новая беда, уже при отладке...: {Документ.СписаниеСРасчетногоСчета.Форма.ФормаДокумента.Форма(21)}: Метод объекта не обнаружен (ПолучитьБаланс) ЭтаФорма.БалансКонтрагента = РаботаСРегистрами.ПолучитьБаланс(Объект.Получатель) - Объект.СуммаСписания + СуммаСписанияБыла; |
|||
38
Cube
06.08.13
✎
12:48
|
(36) Это условие:
МояПеременная = ?(Условие, Значение_Истина, Значение_Ложь); Равнозначно этому Если Условие Тогда МояПеременная = Значение_Истина; Иначе МояПеременная = Значение_Ложь; КонецЕсли; |
|||
39
Cube
06.08.13
✎
12:49
|
(37) "Нет в нём смысла тут"
С умным видом говорил? |
|||
40
Scorp1985
06.08.13
✎
12:50
|
(39) Нет, просто конфига настолько банальная, что мне так проще)) С очень глупым видом говорил)
|
|||
41
GROOVY
06.08.13
✎
12:51
|
В общем модуле директивы компиляции как бы не по феншую.
|
|||
42
Любопытная
06.08.13
✎
12:51
|
ТС - реинкарнация Товарища ЛивингСтар, или мне только кажется?
|
|||
43
Cube
06.08.13
✎
12:51
|
(40) "мне так проще"
А, ну сразу бы так и сказал: "Я лентяй, ничего не умею и учиться ничему не хочу"... :) |
|||
44
Scorp1985
06.08.13
✎
12:53
|
(43) Исправился, вернул запрос :D Я его просто не понимал. пока не объяснили про условие))
Осталось выпросить у кого-нибудь, почему {Документ.СписаниеСРасчетногоСчета.Форма.ФормаДокумента.Форма(21)}: Метод объекта не обнаружен (ПолучитьБаланс) ЭтаФорма.БалансКонтрагента = РаботаСРегистрами.ПолучитьБаланс(Объект.Получатель) - Объект.СуммаСписания + СуммаСписанияБыла; |
|||
45
Cube
06.08.13
✎
12:55
|
(44) Забыл написать слово ЭКСПОРТ у функции?
|
|||
46
GROOVY
06.08.13
✎
12:58
|
(44) Убери директивы компиляции в общем модуле.
|
|||
47
1Сергей
06.08.13
✎
12:59
|
(44) и что там с галками общего модуля?
|
|||
48
Scorp1985
06.08.13
✎
13:03
|
(45) Экспорт написал
(46) Поподробнее, пожалуйста. не владею терминологией) (47) Стоят только "Сервер", "Вызов сервера" |
|||
49
GROOVY
06.08.13
✎
13:04
|
&НаСервереБезКонтекста в общем модуле - это бред.
|
|||
50
GROOVY
06.08.13
✎
13:04
|
Директивы компиляции имеют смысл только в моделях упр форм и команд.
|
|||
51
Любопытная
06.08.13
✎
13:04
|
(48) директивы компиляции это те которые #НаКлиенте, #НаСервере и т.д.
Если только модуль выполняется только на сервере, значит в форме надо уйти на сервер, а потом уже вызывать процедуру этого модуля |
|||
52
Любопытная
06.08.13
✎
13:05
|
О, соврала)
|
|||
53
Scorp1985
06.08.13
✎
13:05
|
(51) приятно видеть))
(51) (50) спасибо) |
|||
54
Scorp1985
06.08.13
✎
13:08
|
Всё, добил, пошёл приводить в порядок модули форм =)
Всем огромное спасибо, по учебникам учиться скучно, а в режиме диалога приятно и познавательно! |
|||
55
GROOVY
06.08.13
✎
13:08
|
(51) Это инструкции препроцессору.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |