Имя: Пароль:
1C
1С v8
открытие формы с отбором в УФ
,
0 vasbur
 
29.05.15
10:42
не могу побороть следующий баг. И даже не могу найти место вознткновения:
Есть БП 3.0.40.24, платформа 8.3.6.1999
Я в ней програмно открываю форму выбора контрагента, при этом хочу отфильтровать в ней контрагентов по ИНН.
Для этого в параметры формы я передаю отбор "ЧистыйИНН = ххх"

при открытии формы фильтр не срабатывает, возникает ошибка:
Ошибка при выполнении запроса. Ошибка при выполнении запроса.
по причине:
{(1, 40)}: Неоднозначное поле "ИНН"
(СправочникКонтрагенты.ЭтоГруппа ИЛИ ((<<?>>ИНН = &П)))

Откуда она лезет - не пойму.
Есть у кого-нибудь предположения?
1 vasbur
 
29.05.15
10:43
ошибка возникла при переходе на 8.3.6, на 8.3.5 не воспроизводится
2 Demetres
 
29.05.15
10:50
В фильтр добавь ещё ЭтоГруппа = ЛОЖЬ;
3 Demetres
 
29.05.15
10:51
И ПометкаУдаления = ЛОЖЬ;
4 vasbur
 
29.05.15
10:58
(2) (3) не помогает
5 Demetres
 
29.05.15
11:01
(4) Тогда надо включить отладчик и посмотреть в чем беда
6 vasbur
 
29.05.15
11:03
(5) отладчик не перехватывает эту ошибку.
запрос видимо формируется не в коде, а где-то на форме УФ. А где - понять не могу
7 Fragster
 
гуру
29.05.15
11:04
у динамического списка тип запроса - произвольный?
8 Timon1405
 
29.05.15
11:04
(6) ПКМ по основному динамическому списку в форме подбора - там произвольный запрос, наверняка
9 vasbur
 
29.05.15
11:05
(7) судя по всему  - да. В свойствах списка стоит галка "Произвольный запрос"
10 Timon1405
 
29.05.15
11:09
Если включить режим просмотра "без иерархии" в форме подбора, воспроизводится ошибка?
11 vasbur
 
29.05.15
11:11
(10) пропадает
12 vasbur
 
29.05.15
11:11
(11) сейчас попробую принудительно этот режим выставлять
13 Demetres
 
29.05.15
11:13
Так попробуй:

////////////////////////////////////////////////////////////////////////
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    ПараметрыОтбора = Новый Структура();
    ПараметрыФормы = Новый Структура();
    
    ПараметрыОтбора.Вставить("Ссылка", ПриОткрытииНаСервере());
    ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора);
    
    ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора", ПараметрыФормы,
        ЭлементВладелецКудаНужноПоместитьРезультатВыбораКонтрагента, УникальныйИдентификатор);
    
КонецПроцедуры

&НаСервере
Функция ПриОткрытииНаСервере()
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Контрагенты.Ссылка
        |ИЗ
        |    Справочник.Контрагенты КАК Контрагенты
        |ГДЕ
        |    Контрагенты.ИНН = &ИНН
        |    И НЕ Контрагенты.ЭтоГруппа
        |    И НЕ Контрагенты.ПометкаУдаления";
    
    Запрос.УстановитьПараметр("ИНН", ИНН);
    
    РезультатЗапроса = Запрос.Выполнить();
    Если Не РезультатЗапроса.Пустой() Тогда
        Возврат РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка");    
    Иначе
        Возврат Новый Массив;
    КонецЕсли;    
    
КонецФункции
////////////////////////////////////////////////////////////////////////
14 Timon1405
 
29.05.15
11:13
Похожая тема на партнерке от 2010 года)
https://partners.v8.1c.ru/forum/message/778703#m_778703
Цитата "Это поле судя по всему используется платформой для построения иерархии."
а воз и ныне там) доступно и всерьез ©
15 vasbur
 
29.05.15
11:14
(13) форма - типовая из конфигурации, я ее менять не могу
16 Demetres
 
29.05.15
11:16
(15) А где стесняюсь спросить вы это долепливаете ""ЧистыйИНН = ххх" "
17 vasbur
 
29.05.15
11:17
(16) у меня есть внешняя обработка, из которой я открываю список контрагентов с отбором по ИНН
18 Demetres
 
29.05.15
11:18
(17) ну и что мешает использовать код в (13) проблемы с несчастливым числом?
19 vasbur
 
29.05.15
11:19
(18) теперь понял, вы предлагаете выбирать руками список КА и делать отбор по ссылке.

хочется таки нативные инструменты УФ использовать :)
20 Demetres
 
29.05.15
11:22
Вот это желательно добавить

/////////////////////
    ПараметрыОтбора.Вставить("Ссылка", ПриОткрытииНаСервере());
    ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора);
    ПараметрыФормы.Вставить("РежимВыбора", Истина);
////////////////////

(19) Так в чем проблема? Используйте :)
21 Fragster
 
гуру
29.05.15
11:24
(9) ну так текст запроса скинь сюда :)
22 vasbur
 
29.05.15
11:26
(21)
ВЫБРАТЬ
    СправочникКонтрагенты.Наименование,
    СправочникКонтрагенты.Код,
    СправочникКонтрагенты.НаименованиеПолное,
    СправочникКонтрагенты.ИНН КАК ЧистыйИНН,
    СправочникКонтрагенты.КПП КАК ЧистыйКПП,
    ВЫБОР
        КОГДА СправочникКонтрагенты.ОбособленноеПодразделение
            ТОГДА &ПредставлениеОбособленногоПодразделения
        ИНАЧЕ ПРЕДСТАВЛЕНИЕ(СправочникКонтрагенты.ЮридическоеФизическоеЛицо)
    КОНЕЦ КАК Вид,
    СправочникКонтрагенты.ГоловнойКонтрагент,
    СправочникКонтрагенты.Комментарий,
    СправочникКонтрагенты.Ссылка,
    СправочникКонтрагенты.ИНН КАК ИНН,
    СправочникКонтрагенты.КПП КАК КПП,
    ВЫБОР
        КОГДА НаличиеДублейУКонтрагентов.Контрагент ЕСТЬ NULL
            ТОГДА ЛОЖЬ
        ИНАЧЕ ИСТИНА
    КОНЕЦ КАК ЕстьДубли,
    СправочникКонтрагенты.ИННВведенКорректно,
    СправочникКонтрагенты.КППВведенКорректно,
    ВЫБОР
        КОГДА (СправочникКонтрагенты.ИННВведенКорректно
                    И СправочникКонтрагенты.КППВведенКорректно
                ИЛИ СправочникКонтрагенты.ИННВведенКорректно
                    И СправочникКонтрагенты.ЮридическоеФизическоеЛицо = ЗНАЧЕНИЕ(Перечисление.ЮридическоеФизическоеЛицо.ФизическоеЛицо))
                И СостоянияКонтрагентов.Состояние В (&Состояния)
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК ПроверкаКонтрагентовКонтрагентНеСуществует,
    СостоянияКонтрагентов.Состояние КАК ПроверкаКонтрагентовСостояние
ИЗ
    Справочник.Контрагенты КАК СправочникКонтрагенты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеДублейУКонтрагентов КАК НаличиеДублейУКонтрагентов
        ПО СправочникКонтрагенты.Ссылка = НаличиеДублейУКонтрагентов.Контрагент
            И СправочникКонтрагенты.ИНН = НаличиеДублейУКонтрагентов.ИНН
            И СправочникКонтрагенты.КПП = НаличиеДублейУКонтрагентов.КПП
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияКонтрагентов КАК СостоянияКонтрагентов
        ПО СправочникКонтрагенты.Ссылка = СостоянияКонтрагентов.Контрагент
            И (&ИспользованиеПроверкиВозможно)
23 Demetres
 
29.05.15
11:29
(22) А у реквизита "ИНН" что написано в свойстве "Использование"? Небось "Для элемента"?
24 vasbur
 
29.05.15
11:33
(23) где это смотреть?
я только вот что вижу: http://screencast.com/t/obXxSikvVl02
25 Demetres
 
29.05.15
11:38
Смотрите что получается, свойство ИНН есть только у элементов, у групп там NULL и когда вы ставите отбор на ИНН, программе становится плохо когда она сравниваете ИНН(NULL) = ххх,
Попробуйте ещё использовать использовать в параметрах формы "ВыборГруппИЭлементов" = ЛОЖЬ; может поможет.
26 vasbur
 
29.05.15
11:39
(25) ага, понятно.
странно, что когда я в интерфейсе выбираю такой отбор, то ничего не ломается
27 vasbur
 
29.05.15
11:43
(25) в параметрах формы "ВыборГруппИЭлементов" = ЛОЖЬ не выключает просмотр по иерархии.

остановился на методе, описанном в  (13) вроде работает.
посмотрим, что скажут наши клиенты нашей техподдержке.
28 Demetres
 
29.05.15
11:43
(26) Это догадка, точно можно сказать только посмотрев отладчиком что там. Могу сказать одно, мой горбатенький из (13) работает.
29 vasbur
 
29.05.15
11:46
(26) а как это отлаждчиком смотреть? Это же механизм, который работает в недрах формы
30 Demetres
 
29.05.15
11:48
А это где происходит, откуда этот код?
31 Demetres
 
29.05.15
11:48
{(1, 40)}: Неоднозначное поле "ИНН"
(СправочникКонтрагенты.ЭтоГруппа ИЛИ ((<<?>>ИНН = &П)))
32 Demetres
 
29.05.15
11:50
:)) про недра формы зачет
33 vasbur
 
29.05.15
11:50
(30) так в том-то и дело - что непонятно.
есть гипотеза, что при накладывании отбора платформа как-то модифицирует запрос, которым получается динамический список контрагентов, и добавляет в него какие-то доп условия
34 Demetres
 
29.05.15
11:55
(33) Мне кажется что это конкретное место в конфе, куда можно зайти и посмотреть. Полный текст ошибки в студию :)
35 Demetres
 
29.05.15
12:01
А если нажать на кнопку конфигуратор обычно из режима предприятия можно перенестись в конфигуратор к месту ошибки, что там у вас, есть такая кнопка?
К тому же можно глобальным поиском пройтись и найти все строки "СправочникКонтрагенты.ЭтоГруппа ИЛИ ((".
36 blopp
 
29.05.15
12:04
(0)
https://bugboard.v8.1c.ru/error/000007601.html

В режиме просмотра Список не проявляется.
37 vasbur
 
29.05.15
12:05
(35) "кнопки переноса" нету.
38 blopp
 
29.05.15
12:05
(35)
СправочникКонтрагенты.ЭтоГруппа ИЛИ...
это условие добавленное платформой.
39 vasbur
 
29.05.15
12:06
(36) спасибо.
Теперь понятно, что костыль - это единственно правильное решение :)
40 Demetres
 
29.05.15
12:08
(38) А мне кажется что это запрос кто-то неправильно запилил, и все на нем крашится, хотя может и ваша правда. Конфы нет и проверить не получится без неё :( хотя любопытно
41 Demetres
 
29.05.15
12:12
(36) можете текст выложить что там написано, у меня нет возможности посмотреть
42 blopp
 
29.05.15
12:22
(38) А я вот уверен, чему уж тут казаться:
- если основная таблица иерархическая, в ней могут быть группы и список отображает иерархию
- все условия из ГДЕ запроса выковыриваются
- и засовываются обратно в запрос в виде
(<ЭтоГруппа> ИЛИ <Все что было в ГДЕ>)
- когда условие помещается обратно в запрос к именам полей не добавляется имя таблицы (это видно из текста ошибки)
43 Demetres
 
29.05.15
12:31
(42) можно быть тысячу раз уверенным и все равно ошибиться, доказать можно только имея базу.
44 Fragster
 
гуру
29.05.15
12:41
В ПриСозданииНаСервере есть что?
45 vasbur
 
29.05.15
12:47
(40) возьмите типовую БП, запрос оттуда