Имя: Пароль:
1C
1С v8
СКЛ запрос
0 SurFace
 
04.07.12
12:21
Добрый день друзья!
У меня к вам вот такой вопрос, хотелось бы в Запрос вставить формулу, которую я задаю в режиме 1СПредприятии, ну или из параметра.
например, эту формулу я задаю в реквизите справочника, как текст

ВЫБОР
   КОГДА ОшибкиПоКатегориям.Ошибок = 1 ТОГДА 100
   КОГДА ОшибкиПоКатегориям.Ошибок = 2 ТОГДА 200
   КОГДА ОшибкиПоКатегориям.Ошибок >= 3 ТОГДА 400
   ИНАЧЕ 0
КОНЕЦ    

В запросе он подставляется как я предполагаю тоже как текст, возможно ли ЭТО преобразовать в формулу, чтобы СКЛ подсчитала результат.???
1 Ненавижу 1С
 
гуру
04.07.12
12:23
возможно, текст запроса это строка
2 SurFace
 
04.07.12
12:30
всмысле? текст формулы это да строка, а мне бы хотелось ее конвертировать в формулу.
3 hhhh
 
04.07.12
12:32
может так?

ВЫБОР
  КОГДА ОшибкиПоКатегориям.Ошибок = 1 ТОГДА ""100""
  КОГДА ОшибкиПоКатегориям.Ошибок = 2 ТОГДА ""200""
  КОГДА ОшибкиПоКатегориям.Ошибок >= 3 ТОГДА ""400""

   ИНАЧЕ ""0""
КОНЕЦ
4 Ненавижу 1С
 
гуру
04.07.12
12:33
(2) формула это что? нет такого типа данных в 1С ))
5 izekia
 
04.07.12
12:34
(0) нет, если только не будешь генерировать текст запроса сам, либо обрабатыватьрезультат
6 izekia
 
04.07.12
12:34
(4) читай (0) внимательнее
7 SurFace
 
04.07.12
12:38
(5) генерация текста запроса не сложна, только там формула меняется в зависимости от элемента, поэтому так не сделать. Остается обработка результата вне запроса...
8 SurFace
 
04.07.12
12:39
(7) т.е. есть куча элементов справочника, в них форулы, все должно пересчитаться и потом сложиться - хотел все в одном запросе сделать...
9 Pro-tone
 
модератор
04.07.12
12:42
(8) сформулируй ТЗ с самого начала как положено, а не как кусок из него как в (0), тогда быстрее тебе помогут.
ибо телепатия на мисте еще не достигла того уровня, которая бывает в "Битве экстрасенсов" на ТНТ =)
10 palpetrovich
 
04.07.12
12:42
может я не понял, но не это?
|    %ТекстоваяФормулаВРеквизите%
Запрос.Текст = стрЗаменить(Запрос.Текст,"%ТекстоваяФормулаВРеквизите%",ЗначениеРеквизитаНаФорме");
11 Ненавижу 1С
 
гуру
04.07.12
12:55
(6) хватит читать, надо заниматься работой со строками
12 Ненавижу 1С
 
гуру
04.07.12
12:55
делаем выборку запросом по формулам, генерируем код запроса с формулами, выполняем запрос
13 SurFace
 
04.07.12
13:06
ок. Тогда сформулирую вопрос на простом примере.
В каждой конфигурации есть справочник "Номенклатура" Допустим в него вставляем реквизит формула, в разных элементах этого справочка вписываем формулы например умножения остатка по складу на 2, в другом элементе на 3, в третьем на 10...
Задание: получить итоговое виртуальное количество остатка по складу.
Виртуальный остаток по каждой номенклатуре рассчитывается по формуле.
14 Ненавижу 1С
 
гуру
04.07.12
13:42
(13)
1. запрос ВЫБРАТЬ РАЗЛИЧНЫЕ Формула ИЗ Справочник.Номенклатура
2. обходим выборку  - генерируем запрос типа
ВЫБРАТЬ
Спр.Ссылка,
ВЫБОР КОГДА
 Спр.Формула=&Формула1 ТОГДА <ВСТАВЛЯЕМ ФОРМУЛУ>
...
КОНЕЦ КАК Результат
Из Справочник.Номенклатура КАК Спр
3. выполняем этот запрос
15 SurFace
 
04.07.12
14:01
(14) в этом случае толку от Формулы нет, т.к. она прописывается в конфигураторе, а я бы хотел, чтобы ее можно было изменять из режима 1СПредприятия.
16 Rovan
 
гуру
04.07.12
14:03
(15) см (10)
17 SurFace
 
04.07.12
14:06
(16) формулы разные, а тот случай подойдет когда одна формула на весь запрос, а тут в каждом элементе своя формула.
18 izekia
 
04.07.12
18:44
(11) что?
19 MishaD
 
04.07.12
19:01
(17) А формулу нельзя передать через параметр ? Почти как в (14)

ВЫБРАТЬ
Спр.Ссылка, &Формула
20 Ненавижу 1С
 
гуру
04.07.12
19:02
(15) в конфигураторе, но она передается как неизвестное))
21 ilya_i
 
04.07.12
21:20
Подумать в сторону универсализации формул, так чтобы их использовать в запросе. Ввести несколько реквизитов и составить формулу, чтобы результатом можно управлять через эти реквизиты. Может этого и хватит.
22 izekia
 
04.07.12
21:22
(21) и все станет настолько универсальным, что при отладке еще не раз вспомнят этого смышленого адинэсника
23 ilya_i
 
04.07.12
21:37
Ничего плохого не вижу. (22) Считаю за комплимент :)