|   |   | 
| 
 | v7: 1С 7.7 запрос "выбор когда..." | ☑ | ||
|---|---|---|---|---|
| 0
    
        Mary01 25.08.15✎ 08:40 | 
        Добрый день!
 Подскажите, есть ли в запросах 7.7 аналог функции Выбор..когда? У контрагента есть реквизит "ЮрФизЛицо", тип "справочник", в этом реквизите выбирается либо юр.лицо, либо физ. лицо, либо сотрудник (все это отдельные справочники). Мне в отчет нужно вывести запросом группировку: "юр.лица" или "физ. лица" в зависимости о вида контрагента, и в "физ. лица" должны попасть физлица и сотрудники. Нужно сделать в запросе что-то вроде ВидКонтрагента = Выбор Когда Контрагент.ЮрФизЛицо.Вид() = "Физлица" Или Контрагент.ЮрФизЛицо.Вид() = "Сотрудники" тогда ""Физ. лица"" Иначе "Юр. лица"; Конец; А потом еще сделать группировку по ВидКонтрагента. | |||
| 1
    
        JeyRico 25.08.15✎ 08:47 | 
        Наверно только прямые запросы спасут.     | |||
| 2
    
        Джинн 25.08.15✎ 08:49 | 
        Есть Когда в функциях.     | |||
| 3
    
        Остап Сулейманович 25.08.15✎ 08:51 | 
        (2) Ей в группировках нужно.     | |||
| 4
    
        Остап Сулейманович 25.08.15✎ 08:55 | 
        + (3) В запрос нужно выбрать признак ЮрФизЛицо и потом уже по нему группировать Контрагентов.     | |||
| 5
    
        bigdenis22 25.08.15✎ 08:58 | 
        запрос по докам или по регитстру ?
 в принципе в обоих случаях переменная ВидКонтрагента = Контрагент.ЮрФизЛицо; группировка ВидКонтрагента; | |||
| 6
    
        bigdenis22 25.08.15✎ 09:00 | 
        или ещё нужны отборы по конкретным значениям или спискам значений этого ВидКонтрагента ?     | |||
| 7
    
        Mary01 25.08.15✎ 09:01 | 
        (2) пробую Функция ВидКонтрагента = ""Физ. лица"" Когда ((Контрагент.ЮрФизЛицо.Вид() = "Физлица") Или (Контрагент.ЮрФизЛицо.Вид() = "Сотрудники"))  
 но на этом выдается ошибка: Ожидается имя переменной или ее составляющая перед '"Физ. лица"' | |||
| 8
    
        Mary01 25.08.15✎ 09:02 | 
        (5) по регистру     | |||
| 9
    
        bigdenis22 25.08.15✎ 09:03 | 
        (5) сори, разумеется в переменной док или регистр надо указать
 ВидКонтрагента = (объект).Контрагент.ЮрФизЛицо; | |||
| 10
    
        Mary01 25.08.15✎ 09:03 | 
        (5) да, но среди видов контрагентов есть не только физ и юр лица, но ещеи  сотрудники, а по сотрудникам мне отдельную группировку не надо, их надо включать в физлица     | |||
| 11
    
        Mary01 25.08.15✎ 09:03 | 
        (5) да, но среди видов контрагентов есть не только физ и юр лица, но еще и  сотрудники, а по сотрудникам мне отдельную группировку не надо, их надо включать в физлица     | |||
| 12
    
        bigdenis22 25.08.15✎ 09:04 | 
        задачу конкретизировать можно?
 и параметры имеющегося регистра | |||
| 13
    
        bigdenis22 25.08.15✎ 09:05 | 
        физлица и сотрудники - это ОДИН справочник?     | |||
| 14
    
        Mary01 25.08.15✎ 09:16 | 
        (13) нет     | |||
| 15
    
        DCKiller 25.08.15✎ 09:26 | 
        Попробуй так
 В запросе добавь функции "... Функция СчФизЛицо = Счётчик() когда (Контрагент.ЮрФизЛицо.Вид() = "Физлица") Или (Контрагент.ЮрФизЛицо.Вид() = "Сотрудники"); Функция СчЮрЛицо = Счётчик() когда Контрагент.ЮрФизЛицо.Вид() = "Юрлица"; Группировка Контрагент; <другие группировки> "; Запрос.Выполнить(ТекстЗапроса); //выгружаем результат запроса в ТЗ Запрос.Выгрузить(ТЗ, , 0); ТЗ.Свернуть("Контрагент", "СчФизЛицо, СчЮрЛицо"); ТЗ.Сортировать("СчФизЛицо-, Контрагент+"); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл // выводим физ. и юр. лица Запрос.Получить(ТЗ.Контрагент); Пока Запрос.Группировка(2) = 1 Цикл // выводим другие группировки запроса КонецЦикла; КонецЦикла; Как-то так, короче... | |||
| 16
    
        bigdenis22 25.08.15✎ 09:39 | 
        итоги по юрам и по физам нужны?
 если нет - то: Контр = (объект).Контрагент; ВидКонтр = (объект).Контрагент.ЮрФизЛицо.Вид(); Сумма = (объект).БазоваяСумма; Функция Долг = КонОст(Сумма); Группировка Контр; Запрос.Выполнить.(ТекЗап); Запрос.Выгрузить(ТЗ); ТЗ.Сортировать("ВидКонтр"); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если ТЗ.ВидКоннтр="ЮрЛица" Тогда Таб.ВывестиСекцию("строкаЗеленая"); Иначе Таб.ВывестиСекцию("строкаСиняя"); КонецЕсли; КонецЦикла; | |||
| 17
    
        Mary01 25.08.15✎ 11:45 | 
        а еще когда пишу в запросе:
 |ВидКонтрагента = Регистр.Продажи.Покупатель.ЮрфизЛицо.Вид(); то такая ошибка возникает: Неверно заданный путь 'Вид' почему так? | |||
| 18
    
        aka AMIGO 25.08.15✎ 11:52 | 
        (17) иногда бывает проблема: "много точек"
 у тебя их 4 штуки | |||
| 19
    
        ДенисЧ 25.08.15✎ 11:57 | 
        (17) "Регистр.Продажи.Покупатель.ЮрфизЛицо.Вид(); "
 Это кто тебе такое в запросе в клюшках разрешил писать? | |||
| 20
    
        Mary01 25.08.15✎ 12:02 | 
        (19) вначале написала так
 |Контрагент = Регистр.Продажи.Покупатель; |ВидКонтрагента = Контрагент.ЮрфизЛицо.Вид(); но не прокатило: ругалось на вторую строку, т.к. не понимает кто такой контрагент | |||
| 21
    
        Остап Сулейманович 25.08.15✎ 12:04 | 
        (20) Каша.
 Контрагент = Регистр.Продажи.Покупатель; ВидКонтрагента = Регистр.Продажи.Покупатель.ЮрфизЛицо; ЗЫ. начните запрос конструктором. Когда наступит просветление - пишите ручками. | |||
| 22
    
        aka AMIGO 25.08.15✎ 12:05 | 
        В Описании языка стр 811-816 как раз про "Когда" при применении Функций в запросе.
 |Функция ПрихКолТов = Приход(Количество) Когда (Док.ФлагТовара=1); | |||
| 23
    
        Масянька 25.08.15✎ 12:07 | 
        (21) Поддерживаю. В конструкторе довольно просто, зато потом более понятно. 
 (18) А разве Вид() можно в запросе? | |||
| 24
    
        Остап Сулейманович 25.08.15✎ 12:07 | 
        (22) Ей не нужен расчет в функциях. Ей нужна группировка по виду контрагента.     | |||
| 25
    
        Остап Сулейманович 25.08.15✎ 12:10 | 
        (23) Можно. Только сам вид нужно указывать в двойных кавычках.
 Типа такого : Функция СчФизЛицо = Счётчик() когда (Контрагент.ЮрФизЛицо.Вид() = ""Физлица"") Или (Контрагент.ЮрФизЛицо.Вид() = ""Сотрудники""); Текст запроса - это все же строка. И правило для кавычек никто не отменял. | |||
| 26
    
        aka AMIGO 25.08.15✎ 12:13 | 
        (24) - вопрос-то у неё в топике..     | |||
| 27
    
        Масянька 25.08.15✎ 12:13 | 
        (25) Это уже в функциях, а в выборке? 
 ВидКонтрагента = ... | |||
| 28
    
        palpetrovich 25.08.15✎ 12:20 | 
        имхо вынести во внешнюю функцию будет попроще
 Функция ПроверкаВида(Контрагент) Если (Контрагент.ЮрФизЛицо.Вид() = "Физлица") или (Контрагент.ЮрФизЛицо.Вид() = "Сотрудники") Тогда Возврат 1; КонецЕсли; Возврат 0; КонецФункции // в запросе |Контрагент = Регистр.Продажи.Покупатель; |Условие(ПроверкаВида(Контрагент)=1) | |||
| 29
    
        Масянька 25.08.15✎ 12:28 | 
        А можно узнать задание (что, зачем и почему)?     | |||
| 30
    
        Mary01 25.08.15✎ 12:33 | 
        (23) когда я писала Вид() в условии, то работало корректно - отбиралось по нужному виду. а вот в Функции почему-то не работает.     | |||
| 31
    
        Mary01 25.08.15✎ 12:33 | 
        (25) в двойных кавычках тоже делала, но все равно не работает     | |||
| 32
    
        aka AMIGO 25.08.15✎ 12:34 | 
        (30) в (28) правильное решение     | |||
| 33
    
        Mary01 25.08.15✎ 12:37 | 
        (29) есть отчет по регистру, там группировки: организация, номенклатура, контрагент. В разрезе этих группировок выводятся данные регистра (кол-во, сумма). Задание - добавить еще одну группировку по виду контрагента.
 То есть, должны выводиться итоги по организациям, внутри них по номенклатуре, потом по видам контрагентов, и уже потом внутри видов - по контрагентам. то есть, например, в подгруппе "физлица" - итоги по контрагентам-физлицам и по сотрудникам, и в подгруппе "юрлица" - по контрагентам-юрлицам. | |||
| 34
    
        Mary01 25.08.15✎ 12:40 | 
        (28) принцип поняла, но в задаче не стоит условие отобрать по видам. нужны все виды, но в разбивке физ/юр. попробую сделать функцию, которая будет возвращать вид контрагента.     | |||
| 35
    
        palpetrovich 25.08.15✎ 12:41 | 
        (33) вот с этого и надо было начинать :)     | |||
| 36
    
        Масянька 25.08.15✎ 12:45 | 
        (35) Так, блин, спрашивать надо, а не умничать :)))))     | |||
| 37
    
        Ёпрст гуру 25.08.15✎ 12:46 | 
        (33) В чорном запросе группировку не слепишь. Либо пиши прямой запрос, либо добавляй реквизит в регистр и обнови все записи в нём.     | |||
| 38
    
        bigdenis22 25.08.15✎ 12:58 | 
        мдя... я тоже промахнулся, вот здесь v.7.7: Как получить вид справочника в запросе? пишут, что внешнюю функцию можно вызвать только в условие запроса...
 наверно, остается только один выход - крутить ТЗ... | |||
| 39
    
        Масянька 25.08.15✎ 12:59 | 
        Ёще вариант - индексированная таблица.     | |||
| 40
    
        Mary01 25.08.15✎ 13:40 | 
        (21) В запросе нельзя сделать Вид().
 А просто ЮрФизЛицо не нужно, нужен именно вид | |||
| 41
    
        Mary01 25.08.15✎ 14:01 | 
        (38) то есть запрос выгразить в ТЗ, а дальше? делать отдельные ТЗ по каждой группировке что ли?     | |||
| 42
    
        Mary01 25.08.15✎ 14:02 | 
        (39) а есть какой-то мануал по этим таблицам? с примером?     | |||
| 43
    
        DCKiller 25.08.15✎ 14:03 | 
        (41) тебе же в (15) (16) все уже написали     | |||
| 44
    
        Mary01 25.08.15✎ 14:05 | 
        (43) мне нужны итоги по физлицам и по юр.лицам.     | |||
| 45
    
        DCKiller 25.08.15✎ 14:10 | 
        (44) Ну и в чем проблема? Берешь из (15) строчку, там где ТЗ.Свернуть(), и добавляешь туда во 2-й параметр свои колонки, по которым у тебя вычисляются суммы.     | |||
| 46
    
        Mary01 25.08.15✎ 14:12 | 
        (45) ок поняла, попробую     | |||
| 47
    
        Mary01 25.08.15✎ 14:19 | 
        (45) и тут же возникает вопрос ))
 дело в том, что вид контрагента - это у меня не первая группировка должна быть, а вторая. Первая - это организации, потом идет номенклатура, и уже потом должны быть виды контрагентов. | |||
| 48
    
        Ёпрст гуру 25.08.15✎ 15:10 | 
        (47) Покажи текст запроса     | |||
| 49
    
        Mary01 25.08.15✎ 15:23 | 
        (48) пытаюсь сюда его скопировать, но какими-то кракозябрами пишет...     | |||
| 50
    
        Mary01 26.08.15✎ 09:46 | 
        (48) Вот он:
 ТекстЗапроса = " |Период с НачДата По КонДата; |Фирма = Регистр.Продажи.Фирма; |Контрагент = Регистр.Продажи.Покупатель; |ВидКонтрагента = Регистр.Продажи.Покупатель.ЮрФизЛицо; |Номенклатура = Регистр.Продажи.Номенклатура; |Док = Регистр.Продажи.Док; |Кол1 = Регистр.Продажи.Количество; |Сум1 = Регистр.Продажи.ПродСтоимость; |Функция Кол = Сумма(Кол1); |Функция Сум = Сумма(Сум1); |Функция СчЮрЛицо = Счётчик() Когда (Контрагент.ЮрФизЛицо.Вид() = ""Юрлица""); |Функция СчФизЛицо = Счётчик() Когда ((Контрагент.ЮрФизЛицо.Вид() = ""Физлица"") Или (Контрагент.ЮрФизЛицо.Вид() = ""Сотрудники"")); |Группировка Фирма Без Групп; |Группировка Номенклатура Без Групп; |Группировка Контрагент Без Групп; | |||
| 51
    
        DCKiller 26.08.15✎ 10:13 | 
        (50) 
 Пока Запрос.Группировка(1) = 1 Цикл // выводим фирмы Пока Запрос.Группировка(2) = 1 Цикл // выводим товары ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл // выводим физиков и юриков Если Запрос.Получить(Запрос.Фирма, Запрос.Номенклатура, ТЗ.Контрагент) = 1 Тогда Если (Тз.НомерСтроки = 1) ИЛИ ((ТЗ.НомерСтроки > 1) И (ТЗ.СчФизЛицо <> ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки-1, "СчФизЛицо"))) Тогда // выводим группировку по виду контрагентов КонецЕсли; // выводим группировку по контрагентам КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; | |||
| 52
    
        Остап Сулейманович 26.08.15✎ 10:19 | 
        (50) Где группировка по ВидКонтрагента?
 Описание группировок должно быть примерно таким: |Группировка Фирма Без Групп; |//Вот ОНО |Группировка ВидКонтрагента; |//Конец вот ОНО |Группировка Номенклатура Без Групп; |Группировка Контрагент Без Групп; | |||
| 53
    
        Остап Сулейманович 26.08.15✎ 10:22 | 
        + (52) Обход будет примерно таким:
 Пока Запрос.Группировка("Фирма") = 1 Цикл //Рисуем раздел фирма Пока Запрос.Группировка("ВидКонтрагента") = 1 Цикл //Рисуем раздел ВидКонтрагента Пока Запрос.Группировка("Номенклатура") = 1 Цикл //Вложенные группировки КонецЦикла; КонецЦикла; КонецЦикла; | |||
| 54
    
        DCKiller 26.08.15✎ 10:22 | 
        (52) Как она в запросе вид контрагента получит?     | |||
| 55
    
        Остап Сулейманович 26.08.15✎ 10:23 | 
        (54) В запросе ОНО уже есть :
 |ВидКонтрагента = Регистр.Продажи.Покупатель.ЮрФизЛицо; | |||
| 56
    
        DCKiller 26.08.15✎ 10:24 | 
        (55) Этот реквизит содержит значение справочника юридические или физ. лица, но не их вид.     | |||
| 57
    
        Остап Сулейманович 26.08.15✎ 10:27 | 
        (56) Что есть "значение справочника юридические или физ. лица"? Ссылка на элемент справочника соответсвующего вида? Так она вот : "Контрагент         = Регистр.Продажи.Покупатель".
 А в реквизите "ЮрФизЛицо" именно вид. | |||
| 58
    
        DCKiller 26.08.15✎ 10:28 | 
        Покупатель - это контрагент (вид "Справочник.Контрагенты"), ЮрФизЛицо  у покупателя - это значение справочника "ЮрЛица" или "ФизЛица" в зависимости от того, что там выбрано.     | |||
| 59
    
        Остап Сулейманович 26.08.15✎ 10:35 | 
        (58) Классика жанра : в реквизите ЮрФизЛицо хранится значение перечисления, которое и обозначает вид контрагента. И группировка по этому реквизиту и даст то, что нужно ТС.     | |||
| 60
    
        DCKiller 26.08.15✎ 10:37 | 
        (59) Может быть. Не помню, забыл уже, как оно там в семерке. а перед глазами нет.
 Ну, если так, тогда вообще все просто. Но что-то мне подсказывает, что нет... | |||
| 61
    
        Mary01 26.08.15✎ 10:38 | 
        (52) нет ее. потому что вот эта строка:
 |ВидКонтрагента = Регистр.Продажи.Покупатель.ЮрФизЛицо - это не вид контрагента, а ссылка на справочник контрагенты. чтобы получить вид, надо так: |ВидКонтрагента = Регистр.Продажи.Покупатель.ЮрФизЛицо.Вид() - но в запросе Вид() не работает. | |||
| 62
    
        Mary01 26.08.15✎ 10:39 | 
        (56) да, именно так     | |||
| 63
    
        Масянька 26.08.15✎ 10:39 | 
        (59) В ТиС : справочник Контрагенты - ЮрФизЛицо = справочник.     | |||
| 64
    
        DCKiller 26.08.15✎ 10:40 | 
        (62) Тады - (51)     | |||
| 65
    
        Остап Сулейманович 26.08.15✎ 10:40 | 
        (61) А ну-ка скрин из конфигуратора со свойствами реквизита - в студию.     | |||
| 66
    
        Mary01 26.08.15✎ 10:41 | 
        (57) Нет. Допустим, у нас есть контрагент Иванов А.А., у него в реквизите ЮрФизЛицо содержится ссылка на элемент справочника ФизЛица с таким же наименованием - Иванов А.А..
 Или, например, есть контрагент ООО Сфера, у этого контрагента в реквизите ЮрФизЛицо - ссылка на элемент справочника ЮрЛица с наименованием ООО Сфера. | |||
| 67
    
        Провинциальный 1сник 26.08.15✎ 10:42 | 
        Черный запрос черной ночью придет за тобой, одинесник. Не связывайся с ними. Прямые запросы - это православно.     | |||
| 68
    
        Остап Сулейманович 26.08.15✎ 10:54 | 
        (66) Тогда выполнить запрос без сортировки. Выгрузить в таблицу значений. Добавить туда колонку "видКонтрагента". Заполнить ее. посортировать по ней. И тогда уже выводить в отчет.     | |||
| 69
    
        Остап Сулейманович 26.08.15✎ 10:54 | 
        +(68) В запросе вид справочника не получить.     | |||
| 70
    
        Mary01 26.08.15✎ 12:32 | 
        (67)  )))     | |||
| 71
    
        Mary01 26.08.15✎ 12:32 | 
        (67) в цитаты ))     | |||
| 72
    
        Mary01 26.08.15✎ 12:40 | 
        (65) сюда скрин не вставляется. В свойствах реквизита ЮрФизЛицо указан тип "справочник" - т.е. конкретный справочник не указан     | |||
| 73
    
        Ёпрст гуру 26.08.15✎ 12:45 | 
        В Чорном запросе можно только сделать упорядочивание по виду, группировку не сделаешь. Т.е при обходе группировки по клиентосу, будут к примеру, в начале "клиентосы", потом "сотруднички и физ лица", так тебе покатит ?     | |||
| 74
    
        Ёпрст гуру 26.08.15✎ 12:46 | 
        ну и признак можно получить в переменной, что это. Но группировку не слепишь.     | |||
| 75
    
        Mary01 26.08.15✎ 13:28 | 
        (73) да, пусть они будут вначале, а те в конце - без разницы, но группировка должна быть, и она должна быть сверху. т.е. - написано: юр.лица , тут же сумма общая по ним, а уже ниже список этих самых юр.лиц. а ниже: физ.лица - и общая сумма по ним, а уже ниже сами физлица.     | |||
| 76
    
        Duke1C 27.08.15✎ 10:14 | 
        (75) "т.е. - написано: юр.лица , тут же сумма общая по ним" - ну дык сумму можно при выводе контров посчитать, а потом, как вид контрагента изменится, поставить в нужную ячейку таблицы - дешево и сердито. Если итоговых сумм несколько используй массив.     | |||
| 77
    
        Ёпрст гуру 27.08.15✎ 10:44 | 
        Функция Вася(Клиентос)
 Если Клиентос.ЮрФизЛицо.Вид() = "Юрлица" Тогда Возврат 0; КонецЕсли; Возврат 1; КонецФункции ТекстЗапроса = " |Период с НачДата По КонДата; |Фирма = Регистр.Продажи.Фирма; |Контрагент = Регистр.Продажи.Покупатель; |ВидКонтрагента = Регистр.Продажи.Покупатель.ЮрФизЛицо; |Номенклатура = Регистр.Продажи.Номенклатура; |Док = Регистр.Продажи.Док; |Кол1 = Регистр.Продажи.Количество; |Сум1 = Регистр.Продажи.ПродСтоимость; |Функция Кол = Сумма(Кол1); |Функция Сум = Сумма(Сум1); |Функция Вася = Максимум(Вася(Контрагент)); |Группировка Фирма Без Групп; |Группировка Номенклатура Без Групп; |Группировка Контрагент Без Групп Упорядочить По Вася; | |||
| 78
    
        Mary01 28.08.15✎ 10:58 | 
        (76) можно, но как я пойму что за ячейка?     | |||
| 79
    
        Ёпрст гуру 28.08.15✎ 11:01 | 
        (78)  Просто запоминай адрес области при выводе секции.
 Потом, через текст подставишь итоговые значения | |||
| 80
    
        Mary01 28.08.15✎ 11:36 | 
        (79) а как определить имя текущей (или только что выведенной) области     | |||
| 81
    
        Ёпрст гуру 28.08.15✎ 11:45 | 
        (80) запоминай Таб.ВысотаТаблицы() в переменной..     | |||
| 82
    
        Ёпрст гуру 28.08.15✎ 11:46 | 
        потом через Таб.Область(СохраненнаяВысота,НужныйСтолбец,СохраненнаяВысота,НужныйСтолбец).Текст = "<Итоговые показатели>";
 присвоишь значения | |||
| 83
    
        Масянька 28.08.15✎ 11:47 | 
        (81) Уже бы не мучал человека :( Дал бы примерчик с индексированной таблицей. ИМХО, то, что нужно.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |