|
v8: УФ, список выбора | ☑ | ||
---|---|---|---|---|
0
ЧтоТакое1С
23.08.11
✎
11:13
|
доброго времени суток.
подскажите как проще реализовать такую управляемую форму: Есть 2 справочника КонфигурацииКонтрагентов и его владелец справочник Контрагенты. Про выборе контрагента должен формироваться список выбора с конфигурациями этого контрагента, а при выборе конфигурации должен отображаться ее регистрационный номер который хранится так же в справочнике КонфигурацииКонтрагентов. |
|||
1
ЧтоТакое1С
23.08.11
✎
11:36
|
ап
|
|||
2
ЧтоТакое1С
23.08.11
✎
12:05
|
Как из запроса формировать список выбора в УФ??
|
|||
3
Cube
23.08.11
✎
12:07
|
(2) А как не в УФ знаешь? Вот в УФ также.
|
|||
4
ЧтоТакое1С
23.08.11
✎
12:11
|
Колонка = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Конфигурация");
Список.ЗагрузитьЗначения(Колонка); ЭлементыФормы.ПолеВыбора.СписокВыбора = Список; я так делаю, в уф так не фунциклирует |
|||
5
ЧтоТакое1С
23.08.11
✎
12:12
|
в уф вообще нет элемента СписокВыбора
|
|||
6
Cube
23.08.11
✎
12:16
|
(5) Правильно, нет. А ты посмотри обработку события поля ввода "Начало выбора" - что там за параметр "ДанныеВыбора"?... :)
|
|||
7
jump if zero
23.08.11
✎
12:35
|
&НаСервере
Процедура ПолучитьДоговоры() Выборка= Справочники.Договоры.Выбрать(,Контрагент); Элементы.Договор.СписокВыбора.Очистить(); Пока Выборка.Следующий() Цикл Элементы.Договор.СписокВыбора.Добавить(Выборка.ссылка); КонецЦикла; КонецПроцедуры |
|||
8
Cube
23.08.11
✎
12:36
|
(7) А на клиенте?)
|
|||
9
jump if zero
23.08.11
✎
12:38
|
&НаКлиенте
Процедура ДоговорНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ПолучитьДоговоры(); КонецПроцедуры |
|||
10
jump if zero
23.08.11
✎
12:40
|
в смысле заполнить СписокВыбора без вызова сервера ?
|
|||
11
Cube
23.08.11
✎
12:43
|
(10) Да)
Я тебе подскажу: смотри (7), потом (9), потом (6). :) |
|||
12
ЧтоТакое1С
23.08.11
✎
12:52
|
&НаКлиенте
Процедура КонфигурацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка, ТекущийКонтрагент) ТекущийКонтрагент = ЭтаФорма.Элементы.Контрагент; КонфигурацияНачалоВыбораСервер(Элемент, ДанныеВыбора, СтандартнаяОбработка, ТекущийКонтрагент) КонецПроцедуры &НаСервере Функция КонфигурацияНачалоВыбораСервер(Элемент, ДанныеВыбора, СтандартнаяОбработка, ТекущийКонтрагент) СписокКонф = Новый СписокЗначений; ЗапросКонф = Новый Запрос; ЗапросКонф.Текст = "ВЫБРАТЬ | КонфигурацииКонтрагентов.Владелец.Ссылка, | КонфигурацииКонтрагентов.Конфигурация.Ссылка |ИЗ | Справочник.КонфигурацииКонтрагентов КАК КонфигурацииКонтрагентов |ГДЕ | КонфигурацииКонтрагентов.Владелец.Ссылка = &ТК"; ЗапросКонф.УстановитьПараметр("ТК", ТекущийКонтрагент); КолонкаКонф = ЗапросКонф.Выполнить().Выгрузить().ВыгрузитьКолонку("Конфигурация"); СписокКонф.ЗагрузитьЗначения(КолонкаКонф); Возврат СписокКонф; КонецФункции Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. что не так? |
|||
13
Cube
23.08.11
✎
12:53
|
(12) Блин)) Я для кого (6) написал?) Иди в синтаксис-помощнике посмотри, что за параметр "ДанныеВыбора"...
|
|||
14
ЧтоТакое1С
23.08.11
✎
12:57
|
(13) Данные Выбора нет в синтаксис помошнике)
|
|||
15
Cube
23.08.11
✎
13:06
|
(14) Дарю свой СП (бесплатно) :)
Расширение поля формы для поля ввода (Form field extension for a text box) НачалоВыбора (StartChoice) Синтаксис: НачалоВыбора(<ДанныеВыбора>, <СтандартнаяОбработка>) Параметры: <ДанныеВыбора> Тип: СписокЗначений. В обработчике можно сформировать и передать в этом параметре данные для выбора. При этом параметр <СтандартнаяОбработка> должен быть установлен в Ложь. Значение по умолчанию: Неопределено <СтандартнаяОбработка> Тип: Булево. В данный параметр передается признак выполнения стандартной (системной) обработки события. Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная обработка события производиться не будет. Значение по умолчанию: Истина Описание: Возникает в момент нажатия кнопки выбора или клавиши F4. Примечание: В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере. |
|||
16
ЧтоТакое1С
23.08.11
✎
13:10
|
&НаКлиенте
Процедура КонфигурацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка, ТекущийКонтрагент) ТекущийКонтрагент = ЭтаФорма.Элементы.Контрагент; СтандартнаяОбработка = ЛОЖЬ; ДанныеВыбора = КонфигурацияНачалоВыбораСервер(Элемент, ДанныеВыбора, СтандартнаяОбработка, ТекущийКонтрагент) КонецПроцедуры так? |
|||
17
ЧтоТакое1С
23.08.11
✎
13:13
|
(16) не работает.
В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере. а где взять тогда ДанныеВыбора? |
|||
18
Cube
23.08.11
✎
13:13
|
(16) О госпади... :)
Пожалуй, напишу за тебя: &НаКлиенте Процедура КонфигурацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка, ТекущийКонтрагент) СтандартнаяОбработка = ЛОЖЬ; ДанныеВыбора = Новый СписокЗначений; ДанныеВыбора.Добавить("Значение1"); ДанныеВыбора.Добавить("Значение2"); КонецПроцедуры |
|||
19
Cube
23.08.11
✎
13:14
|
+(18) Точнее, так:
&НаКлиенте Процедура КонфигурацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = ЛОЖЬ; ДанныеВыбора = Новый СписокЗначений; ДанныеВыбора.Добавить("Значение1"); ДанныеВыбора.Добавить("Значение2"); КонецПроцедуры |
|||
20
ЧтоТакое1С
23.08.11
✎
14:51
|
значения из запроса браться должны..
|
|||
21
ЧтоТакое1С
23.08.11
✎
15:23
|
&НаКлиенте
Процедура КонфигурацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ТекущийКонтрагент = ЭтаФорма.Элементы.Контрагент; ДанныеВыбора = Новый СписокЗначений; СтандартнаяОбработка = ЛОЖЬ; Массив = КонфигурациПолучить(ТекущийКонтрагент); а = Массив.Количество(); Для б = 0 по а - 1 Цикл ДанныеВыбора.Добавить(Массив [б]); КонецЦикла; КонецПроцедуры &НаСервере Функция КонфигурациПолучить(ТекущийКонтрагент) ЗапросКонф = Новый Запрос; ЗапросКонф.Текст = "ВЫБРАТЬ | КонфигурацииКонтрагентов.Владелец.Ссылка, | КонфигурацииКонтрагентов.Конфигурация.Ссылка |ИЗ | Справочник.КонфигурацииКонтрагентов КАК КонфигурацииКонтрагентов |ГДЕ | КонфигурацииКонтрагентов.Владелец.Ссылка = &ТК"; ЗапросКонф.УстановитьПараметр("ТК", ТекущийКонтрагент); Выборка = ЗапросКонф.Выполнить().Выбрать(); Массив = Новый Массив; Пока Выборка.Следующий() Цикл Массив.Добавить(Выборка.КонфигурацияСсылка) КонецЦикла; Возврат Массив; КонецФункции так в чем ошибка? |
|||
22
Mort
23.08.11
✎
15:26
|
(21) Это загадка? Угадайте какую ошибку выдает программа?
|
|||
23
ЧтоТакое1С
23.08.11
✎
15:27
|
{Документ.Документ3.Форма.ФормаДокумента.Форма(7)}: Ошибка при вызове метода контекста (КонфигурациПолучить)
Массив = КонфигурациПолучить(ТекущийКонтрагент); по причине: по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'param': форма: Элемент имя: {http://v8.1c.ru/8.2/managed-application/modules}param по причине: Ошибка отображения типов: Отсутствует отображение для типа 'ПолеФормы |
|||
24
Mort
23.08.11
✎
15:30
|
(23) Ты в параметр суешь элемент формы а не его значение. Хватит уже получать значения реквизитов через элементы формы! Если в 8.1 иногда это было необходимо, то в 8.2 непривязанных элементов формы тупо не видно.
Массив = КонфигурациПолучить(Контрагент) |
|||
25
Mort
23.08.11
✎
15:30
|
+(24) * в УФ 8.2
|
|||
26
Mort
23.08.11
✎
15:32
|
А вообще зайди в свойства поля конфигурации и попробуй создать связи параметров выбора.
|
|||
27
Mort
23.08.11
✎
15:33
|
А этот код распечатай на память (паржать через пару лет) и удали к ч.м.
|
|||
28
ЧтоТакое1С
23.08.11
✎
16:06
|
через связи параметров выбора при выборе почему то <> и все, хотя варианты для выбора пральные
|
|||
29
Cube
25.08.11
✎
11:27
|
(21) Вотэтода!)))
Что тебе в (19) было не понятно? Уже вроде и пожевал... В рот положить? Ну чтож, положим: &НаКлиенте Процедура КонтрагентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ДанныеВыбора = Новый СписокЗначений; Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 10 | Контрагенты.Ссылка |ИЗ | Справочник.Контрагенты КАК Контрагенты"); ДанныеВыбора.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка")); КонецПроцедуры //КонтрагентНачалоВыбора() |
|||
30
ЧтоТакое1С
26.08.11
✎
11:40
|
мм..спасибо. а можно в список выбора записать из 2 х колонок запроса типа ДанныеВыбора.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка" + "Ссылка2")); ??
|
|||
31
ЧтоТакое1С
26.08.11
✎
11:40
|
чтобы был список:
значение, 123 значение, 234 значение, 345 |
|||
32
Cube
26.08.11
✎
11:44
|
(30) Ну у тебя два варианта:
1). Получить такое поле запросом, путем сложения этих строк прямо в запросе. 2). Пройтись по выборке из запроса циклом и заполнять ДанныеВыбора ручками, как в (19) |
|||
33
ЧтоТакое1С
26.08.11
✎
11:50
|
такие оперативные ответы..
а почему у меня не записывается в документ значение из ДанныхВыбора (29)? |
|||
34
Cube
26.08.11
✎
11:54
|
(33) "такие оперативные ответы.." - в смысле, что-то не устраивает?
"а почему у меня не записывается в документ значение из ДанныхВыбора" - "СтандартнаяОбработка = Ложь" это тебе ни о чем не говорит? :) |
|||
35
ЧтоТакое1С
26.08.11
✎
11:57
|
В смысле удивляюсь по доброму!
|
|||
36
ЧтоТакое1С
26.08.11
✎
11:57
|
СтандартнаяОбработка = Ложь мы ж специально ставили
|
|||
37
ЧтоТакое1С
26.08.11
✎
12:00
|
если СтандартнаяОбработка = Истина, то ничего не работает
|
|||
38
Cube
26.08.11
✎
12:00
|
(36) Правильно, специально. А что значит "СтандартнаяОбработка = Ложь"?)))
|
|||
39
ЧтоТакое1С
26.08.11
✎
12:06
|
отказ от стандартных действий системы для замены своим алгоритмом
|
|||
40
Cube
26.08.11
✎
12:10
|
(39) Ну вот и ответ на (33) :)
|
|||
41
Cube
26.08.11
✎
12:11
|
Ладно, подскажу))) Помимо "НачалоВыбора" у поля формы есть ещё и "ОбработкаВыбора"...
|
|||
42
ЧтоТакое1С
26.08.11
✎
12:12
|
Ну ведь в ЭтаФорма.Элементы.Конфигурация данные есть которые мы выбрали, а а ЭтаФорма.Объект.Конфигурация разве нет? Путь к данным у поля к реквизиту же написан
|
|||
43
Kookish
26.08.11
✎
12:17
|
Каков крайний вариант кода? Тот, что в (21)? Тогда какой тип у переменной ТекущийКонтрагент при передаче ее в процедуру на сервере?
|
|||
44
ЧтоТакое1С
26.08.11
✎
12:20
|
я написал
&НаКлиенте Процедура КонфигурацияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) ЭтаФорма.Объект.Конфигурация = ВыбранноеЗначение; КонецПроцедуры и нет что то |
|||
45
ЧтоТакое1С
26.08.11
✎
12:21
|
(43) неа, в (29)
|
|||
46
Cube
26.08.11
✎
12:21
|
(44)
&НаКлиенте Процедура КонфигурацияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) Объект.Конфигурация = ВыбранноеЗначение; КонецПроцедуры |
|||
47
Cube
26.08.11
✎
12:26
|
+(46) Ой, что-то я накосячил))) Вот так, конечно же:
&НаКлиенте Процедура КонфигурацияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) Конфигурация = ВыбранноеЗначение; КонецПроцедуры |
|||
48
ЧтоТакое1С
26.08.11
✎
12:32
|
(47) что то не фунциклирует..
|
|||
49
Cube
26.08.11
✎
12:41
|
(48) Отладчик в руки! В процедуру "ОбработкаВыбора" заходит?
|
|||
50
ЧтоТакое1С
26.08.11
✎
12:43
|
угумс, и значение передавалось во всех вариантах (44),(46),(47) но не записывалось в документ. Значение типа справочник ссылка
|
|||
51
Cube
26.08.11
✎
12:47
|
(50) Что значит "не записывалось в документ"? В реквизит формы значение попадает?
|
|||
52
ЧтоТакое1С
26.08.11
✎
12:52
|
Ну оно же на форме отображается, но после проводки его нету
|
|||
53
Cube
26.08.11
✎
12:53
|
(52) Распиши всё по пунктам. А лучше со скриншотами, а то моя твоя не понимает...
|
|||
54
ЧтоТакое1С
26.08.11
✎
13:01
|
Процедура РегНомерНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ТекущийКонтрагент = ЭтаФорма.Объект.Контрагент; СтандартнаяОбработка = Истина; ДанныеВыбора = Новый СписокЗначений; Запрос = Новый Запрос("ВЫБРАТЬ | КонфигурацииКонтрагентов.Конфигурация КАК Конфигурация, | КонфигурацииКонтрагентов.РегНомер, | КонфигурацииКонтрагентов.Владелец |ИЗ | Справочник.КонфигурацииКонтрагентов КАК КонфигурацииКонтрагентов |ГДЕ | КонфигурацииКонтрагентов.Владелец = &ТК | И (НЕ КонфигурацииКонтрагентов.ПометкаУдаления)"); Запрос.УстановитьПараметр("ТК", ТекущийКонтрагент); Результат=Запрос.Выполнить(); ДанныеВыбора.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("РегНомер")); КонецПроцедуры После этой процедуры в ПолеВвода Конфигурация у которой тип Объект.Конфигурация появляется список, вы его открываем и выбираем значения (тип СправочникСсылка.Конфигурации) Но после нажатия записать и закрыть это значение не сохраняется в документе. Ну т.е. я открываю список документов и там поле Конфигурация пустое |
|||
55
ЧтоТакое1С
26.08.11
✎
13:02
|
в (54) колонка не регномер в Конфигурация
|
|||
56
ЧтоТакое1С
26.08.11
✎
13:03
|
вот точнее она
Процедура КонфигурацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ТекущийКонтрагент = ЭтаФорма.Объект.Контрагент; СтандартнаяОбработка = Ложь; ДанныеВыбора = Новый СписокЗначений; Запрос = Новый Запрос("ВЫБРАТЬ | КонфигурацииКонтрагентов.Конфигурация КАК Конфигурация, | КонфигурацииКонтрагентов.РегНомер, | КонфигурацииКонтрагентов.Владелец |ИЗ | Справочник.КонфигурацииКонтрагентов КАК КонфигурацииКонтрагентов |ГДЕ | КонфигурацииКонтрагентов.Владелец = &ТК | И (НЕ КонфигурацииКонтрагентов.ПометкаУдаления)"); Запрос.УстановитьПараметр("ТК", ТекущийКонтрагент); Результат=Запрос.Выполнить(); ДанныеВыбора.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Конфигурация")); |
|||
57
ЧтоТакое1С
26.08.11
✎
13:47
|
обед чтоль у всех ))
|
|||
58
Cube
26.08.11
✎
13:56
|
Рабочий день кончился. За МКАДом тоже жизнь есть, прикинь? :)
Удачи разобраться с вопросом. |
|||
59
ЧтоТакое1С
26.08.11
✎
14:38
|
угумс, спасибо!
|
|||
60
jump if zero
26.08.11
✎
14:41
|
чем тебя вариант в (7) не устраивал ?
)) |
|||
61
ЧтоТакое1С
26.08.11
✎
16:10
|
(60) не знаю )
(58) всего навсего в поле надо было поставить режим выбора нет а кнопка выбора да |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |