|
v7: Функция КонОст(...) КОГДА(......); Что за "когда"? | ☑ | ||
---|---|---|---|---|
0
live in sky dreams
01.09.17
✎
08:21
|
В некоторых вопросах разработчиков встречается это самое "КОГДА" используемое в функциях.. Мне подумалось, что функция срабатывает, если выполняется условие после "КОГДА". Проверил на сборе остатков из регистра.
... ... Количество = Регистр.ОстаткиТМЦ.Количество; Склад = Регистр.ОстаткиТМЦ.Склад; ... ... Функция Остаток1 = КонОст(Количество) КОГДА (Склад В СписокСкладов1); Функция Остаток2 = КонОст(Количество) КОГДА (Склад В СписокСкладов2); ... Группировка Номенклатура; Он мне просто вываливает остаток по всем имеющимся складам и в "Остаток1" и в "Остаток2". Я же думал, что остаток по складам из "списка1" будет в Остаток1 а остаток по складам из "списка2" будет в "Остаток2". Ну логично было так предположить.. В СП по функции молчок. Перерыл интернету - там про "Когда" мало кто пишет, а если пишет - то просто в части вопроса этого самого "когда" не касающегося. Что это за звэр? Как его готовить? Где можно почитать? |
|||
1
mishaPH
модератор
01.09.17
✎
08:25
|
(0) а что не так? КОгда используется в запросе, когда надо получить цифру с условием котороне нельзя применять к другим переменным или функциям.
например в одном запросе надо получить цифры по разным складам тогда Условие() применяется ко всем. Функция Остаток1 = КонОст(Количество) КОГДА (Склад В СписокСкладов1); Функция Остаток2 = КонОст(Количество) КОГДА (Склад В СписокСкладов2); 1 запрос но данные по суммам из разных условий. чтобы не городить разные запросы или склады выводитьв группировки а потом отсеивать не нужное |
|||
2
aka AMIGO
01.09.17
✎
08:28
|
"Когда" - увидишь, когда запустишь конструктор запроса, на вкладке "Функция"
У меня есть только одно применение |Функция КолвоМонт = Расход(Колво) когда(((ТекДок.ПоСчету.Вид()=""Счет"") ИЛИ (ТекДок.ПоСчету.Вид()=""КомерческоеПредолжение"")) И (ТекДок.ПоСчету.Монт=1)); |
|||
3
aka AMIGO
01.09.17
✎
08:32
|
+2 функция КолвоМонт отбирает из документов по условию значения реквизита Монт=1
Всё остальное она не затрагивает, это-не-условие |
|||
4
Злопчинский
01.09.17
✎
08:37
|
Или я туплю
Или в ответах нет по существу вопроса ТС |
|||
5
aka AMIGO
01.09.17
✎
08:37
|
Копипаст из СП:
Функция <?> = (); Function <?> = (); Синтаксис: Функция <ИмяФункции> = <ТипФункции>(<Параметр>|<УточненныйПараметр>) [Когда(<Условие>)]; Англоязычный синоним: Function <ИмяФункции> = <ТипФункции>(<Параметр>|<УточненныйПараметр>) [When(<Условие>)]; Назначение: Вычислить функцию и включить ее результат в запрос. Параметры: <ИмяФункции> - имя, присваиваемое функции; <ТипФункции> - ключевое слово одной из встроенных функций языка; <Параметр> - имя внутренней переменной, параметр вызова функции; <УточненныйПараметр> - конкретизация внутренней переменной, параметр вызова функции. <Условие> - условие вычисления функции (необязательно). |
|||
6
aka AMIGO
01.09.17
✎
08:38
|
(4) ты не тупишь. Ответа нет
|
|||
7
aka AMIGO
01.09.17
✎
08:41
|
кстати, в ЖКК стр 812 про функцию и "когда" кой-что есть, но составители, видимо, не посчитали важным это слово, только и написали несколько строк
|
|||
8
live in sky dreams
01.09.17
✎
08:49
|
(1) Спасибо за ответ, но из него я не понял механику.. :(
(2) Построитель запроса в клюшках сути КОГДА не раскрывает, более того, считаю, что построитель больше с толку сбивает, чем помогает. (5) Читал СП, знаю, что функция "документированная" и не тайная.. Но не понял как пользоваться. В контексте моего вопроса как использовать КОГДА правильно? Есть 2 списка значений с разными наборами складов в них. Как мне получить остатки по ГруппаСкладов1 и ГруппаСкладов2 используя КОГДА? Вообще это реально или в обходе группировок основного запроса уже отдельными "запросиками" собирать остатки просаживая "FPS"? |
|||
9
aka AMIGO
01.09.17
✎
08:49
|
Если лень лезть в ЖКК, или под рукой его нет:
https://i.paste.pics/d9e7778d29f0b88112050b2f2492d8aa.png |
|||
10
aka AMIGO
01.09.17
✎
08:52
|
Как мне получить остатки по ГруппаСкладов1 и ГруппаСкладов2 используя КОГДА?
:( увы, не знаю.. По-идее, твой код должен работать |
|||
11
live in sky dreams
01.09.17
✎
08:56
|
(9) Я читал в электронном виде и оттуда был уверен что мой код должен работать, но увы, в 2 колонках показатели остатков идентичный, хотя склады в списках значений разные
|
|||
12
пипец
01.09.17
✎
08:59
|
(11) и чо ? ты весь запрос покажи и проверь универсальным отчетом по регистру - ты уверен что они у тебя разные ?
|
|||
13
пипец
01.09.17
✎
09:00
|
навеяло
- доктор я весь больной, ткну пальцем в ногу больно, ткну в голову, больно ... |
|||
14
Ёпрст
01.09.17
✎
09:01
|
И ниже, видать еще в коде
Условие(Склад в Выбсклад); :))))))))))))))))))))))))))))) |
|||
15
live in sky dreams
01.09.17
✎
09:13
|
(12) кто разные? Остатки по складам? Конечно уверен.
(13) странный ты )) (14) Угу, естественно, а еще ниже ТекстЗапроса = ""; А еще ниже: //Я вас любил. Любовь, еще, быть может.. )))))))) |
|||
16
Масянька
01.09.17
✎
09:16
|
(15) Совсем внизу напиши:
Но пусть она Вас больше не тревожит. И отпустит. |
|||
17
live in sky dreams
01.09.17
✎
09:17
|
(16)Не.. Нет объявлено таких переменных ))
|
|||
18
linoblack
01.09.17
✎
09:17
|
имхо, когда относится только к переменной в функции, т.е.
Функция Остаток1 = КонОст(Количество) КОГДА (Количество что то там); |
|||
19
live in sky dreams
01.09.17
✎
09:19
|
(18) Это противоречит выражению в (2), которое автор, по всей видимости, использует в продакшне и оно работает. Ну мне так показалось..
|
|||
20
Масянька
01.09.17
✎
09:23
|
(19) Из типовой:
|Функция АвансУсловный= Приход(ПокупателиСуммаРуб) Когда ((ВидДолга = Перечисление.ВидыДолга.Аванс) ИЛИ (ВидДолга = Перечисление.ВидыДолга.АвансВал)); |Функция ОстатокЗаказаПок = КонОст(КолЗаказаПок); |Функция ПолученоПок = Расход(КолЗаказаПок) Когда ((ТекДок.Вид() <> ""ЗаказПоставщику"") |
|||
21
linoblack
01.09.17
✎
09:23
|
(19) оно не работает скорее всего. а так, как я написал - работает 100%
я так обороты разделяю двумя функциями на, например, продажи и возвраты. без "когда" будет общее количество, т.к. возврат это тоже как бы продажа но с отрицательным количеством. |
|||
22
linoblack
01.09.17
✎
09:25
|
|Функция РасходКвоСумма = Сумма(РасходКво) когда(РасходКво>0);
|Функция РасходКвоСуммаВозврат = Сумма(РасходКво) когда(РасходКво<0); |
|||
23
live in sky dreams
01.09.17
✎
09:27
|
Формирование текста запроса:
Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = " |Период С ДатаОтчета По ДатаОтчета; | |Номенклатура = Справочник.Цены.Владелец, Регистр.ОстаткиТМЦ.Номенклатура, Регистр.РезервыТМЦ.Номенклатура; |ТипЦены = Справочник.Цены.ТипЦен; |Цена = Справочник.Цены.Цена; |ЕдиницаИзмерения = Справочник.Цены.Единица; |Валюта = Справочник.Цены.Валюта; |Склад = Регистр.ОстаткиТМЦ.Склад, Регистр.РезервыТМЦ.Склад; |Остаток = Регистр.ОстаткиТМЦ.Количество; |Резерв = Регистр.РезервыТМЦ.Количество; | |Функция ЦенаЗакупки = Сумма(Цена);"; РазмерСпискаГрупп = ГруппыСкладов.РазмерСписка(); СчетчикЦикла = 0; Для СчетчикЦикла = 1 По РазмерСпискаГрупп Цикл ТекстЗапроса = ТекстЗапроса + " |Функция Гр_Остаток_"+ГруппыСкладов.ПолучитьЗначение(СчетчикЦикла)+" = КонОст(Остаток) Когда (Склад В ВернутьСписокСкладовГруппы("+ГруппыСкладов.ПолучитьЗначение(СчетчикЦикла)+")); |Функция Гр_Резерв_"+ГруппыСкладов.ПолучитьЗначение(СчетчикЦикла)+" = КонОст(Резерв) Когда (Склад В ВернутьСписокСкладовГруппы("+ГруппыСкладов.ПолучитьЗначение(СчетчикЦикла)+"));" КонецЦикла; ТекстЗапроса = ТекстЗапроса + " | |Группировка Номенклатура Упорядочить По Номенклатура.Наименование; | |Условие (ТипЦены = ТипЗакупочнойЦены); |Условие (Номенклатура.НеВключатьВпрайс = 0); |"; "ГруппыСкладов" - список значений, тип значения: текст. Содержит список наименований групп складов. Так же используется как условие отбора из таблицы значений ("ГрцппаСклада", "Склад"). Каждой группе соответствует 1 или более складов. функция ВернутьСписокСкладовГруппы(ИмяГруппыСклада) как раз и возвращает список значений со складами, соответствующими указанной группе. Отладчиком проверял - да, возвращает верно, в зависимости от указанной группы. Должно же С#КА работать!!!! :( |
|||
24
live in sky dreams
01.09.17
✎
09:28
|
("ГрцппаСклада", "Склад") = ("ГруппаСклада", "Склад")
В коде нет этой ошибки, просто сюда руками писал |
|||
25
Масянька
01.09.17
✎
09:39
|
(23) ВернутьСписокСкладовГруппы - что возвращает: строку или ссылку?
|
|||
26
aka AMIGO
01.09.17
✎
09:44
|
(20) Отличие есть у типовой и у ТС, такое:
в типовой функции подсчитывают 3 разные суммы: расход, приход, КонОст в коде тс - дважды: КонОст ИМХО - видимо, в этом засада.. |
|||
27
live in sky dreams
01.09.17
✎
09:50
|
(25) СписокЗначений();
(26) хм... попробую убрать расчет резерва, посмотрим |
|||
28
aka AMIGO
01.09.17
✎
09:52
|
Внешняя функция для подсчета остатков по двум группам складов, вставленная в Запрос - может решить задачу.
Запрос тупо подсчитывает конОст общий.. |
|||
29
FIXXXL
01.09.17
✎
09:54
|
семерошный язык запросов писал видимо чувак, который или не слышал про скуль или скуль ему чем-то насолил
надо же такую хрень навертеть... |
|||
30
aka AMIGO
01.09.17
✎
09:55
|
Ну, что делать.. приходится пользоваться тем, что есть, раз больше 7-ка не поддерживается
|
|||
31
aka AMIGO
01.09.17
✎
10:02
|
(0) посмотри тут пример применения внешней функции, её имя - ВернутьСумму(...)
v7: Проблемы с "внешней" функцией в запросе |
|||
32
aka AMIGO
01.09.17
✎
10:04
|
+31 а здесь вообще круть неимоверная:
запрос, условие, функция в фукнции 1с 7.7 |
|||
33
Ёпрст
01.09.17
✎
10:06
|
(27) Не надо ничего убирать.
Выведи сюда ТекстЗапроса. |
|||
34
Ёпрст
01.09.17
✎
10:19
|
Хотя не надо. У тя вся проблема в функции ВернутьСписокСкладовГруппы. в Тексте запроса всегда один и тот же список значений будет.
|
|||
35
Ёпрст
01.09.17
✎
10:20
|
отсюда, результат запроса для этих функций - одинаковый.
|
|||
36
Ёпрст
01.09.17
✎
10:22
|
>>>Содержит список наименований групп складов.
Это тоже пять! Список должен, как минимум, содержать список Элементов справочника, а не наименований. |
|||
37
Ёпрст
01.09.17
✎
10:23
|
ну и сз должны быть видимы извне, т.е явно объявлены , как внешние переменные модуля.
|
|||
38
Масянька
01.09.17
✎
10:37
|
(36) Я бы сказала, что это пять с плюсом :)
(23) С#КА - это про тебя запрос думает :) |
|||
39
aka AMIGO
01.09.17
✎
10:39
|
(36) (38) Может-же человек оговориться?
ЗЫ. два с минусом! Вот! :) |
|||
40
Масянька
01.09.17
✎
10:40
|
(39) Не мелочись - кол :)
|
|||
41
aka AMIGO
01.09.17
✎
10:40
|
+39 но не проверить СЗ при первом запуске - это промах..
|
|||
42
Злопчинский
01.09.17
✎
10:52
|
Нет - я не плачу!
И - не рыдаю! Я всем доступно объясняю... |
|||
43
Масянька
01.09.17
✎
11:04
|
(42) Поэт в России больше, чем поэт (С)
Поэт в России - одинэсник :)))) |
|||
44
Builder
01.09.17
✎
11:30
|
Не поленился, накидал запрос.
"//{{ЗАПРОС(Сформировать) |Склад = Регистр.ОстаткиТоваров.Склад; |Товар = Регистр.ОстаткиТоваров.Товар; |Количество = Регистр.ОстаткиТоваров.Количество; |Функция КоличествоКонОст = КонОст(Количество) когда(Склад в ВыбСклад1); |Функция КоличествоКонОст1 = КонОст(Количество) когда(Склад в ВыбСклад2); |Группировка Товар без групп; |Условие(Товар В ВыбТовар); |"//}}ЗАПРОС Все работает, выдает разные остатки. Так что у ТС явно что то не то с запросом и с логикой построения групп складов. |
|||
45
Злопчинский
01.09.17
✎
12:08
|
(44) так что ли?
https://qna.center/storage/photos/myau/345154.jpg |
|||
46
Builder
01.09.17
✎
12:09
|
(45) У ТС?
|
|||
47
Злопчинский
01.09.17
✎
12:16
|
(46) не факт. иногда ткань пространства-времени переклинивает и любого может выбросить в параллельную реальность с немного другими законами.. а у себя, здесь, мы отражаемся именно в таком качестве... ;-)
|
|||
48
Builder
01.09.17
✎
12:20
|
(47) Заметно....
|
|||
49
Масянька
01.09.17
✎
12:20
|
(47) Бегемотик! Миленький! Выдыхай! (С)
|
|||
50
Злопчинский
01.09.17
✎
12:48
|
(48) Первый признак сумашсетвия - что сумашедший не видит своего сумашествия... так что ты это.. внимательнее ... к себе.. ;-)
|
|||
51
Масянька
01.09.17
✎
12:50
|
(50) Это - если смотреть с одной стороны.
А если смотреть в параллельной реальности - кто из вас псих? А вполне вероятно, что и оба нормальны. Просто параллельные реальности не пересекаются. |
|||
52
toypaul
гуру
01.09.17
✎
13:34
|
"ГруппыСкладов" - список значений, тип значения: текст. Содержит список наименований групп складов.
схрена ли тогда Склад, который элемент справочника должен быть в списке строк? это вопрос раз и два - коли такой охренительный запрос на 7ке пишешь - не удивляйся если что-то работать не будет. |
|||
53
live in sky dreams
01.09.17
✎
15:37
|
Спасибо всем :)
И тем, кто реально старался помочь и вангам :) Особенно улыбнули вангования про строки вместо элементов, хотя вроде текст запроса и логику работы функций расписал, хотя, это ж читать нужно..... Пятница, да ну нах еще читать что-то ))) А кроме шуток - админ по надобности ребутнул серв и циферки заиграли достоверностью. В запросе ошибок не было(кто не увидел в (23) был текст запроса с описанием что там откуда куда). Вот я и думаю, а могли быть глюки из-за утечки памяти или чего-то в этом роде? P.S.: Аптайм серва виндового (терминал, базы локально файловые) 16 дней. |
|||
54
Злопчинский
01.09.17
✎
15:47
|
(53) хм.. на файловых с таким вроде не сталкивался
|
|||
55
Ёпрст
01.09.17
✎
15:48
|
(53) брехня
|
|||
56
Ёпрст
01.09.17
✎
15:49
|
сервант тут не причем, максимум, нужно было жуколов закрыть к едрени фени и табло в нём
|
|||
57
live in sky dreams
01.09.17
✎
17:17
|
(56) а жуколов то каким боком?
|
|||
58
пипец
01.09.17
✎
17:38
|
+ ну как вариант запускался не тот отчет, который правился в конфигураторе , то есть его более ранняя версия, чудес не бывает (с)
ЗЫ а то в продолжение темы анекдотов про выбор жены ))) - сколько дважды два ? * а сколько нужно (с) |
|||
59
Злопчинский
01.09.17
✎
18:13
|
(57) жуколов через вычисленяи в табло может поменять ...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |