|
должна вызываться форма выбора контрагента | ☑ | ||
---|---|---|---|---|
0
bplmeddy
27.04.17
✎
15:30
|
Доброго времени суток. Есть задача: при нажатии на кнопку, если поле ввода не заполнено, должна вызываться форма выбора контрагента, с последующей записью ЗначенияВыбора в соответствующее поле. Есть "ПолеВвода", привязанное к реквизиту (тип рекв. - Справочник.Ссылка.Контрагенты). Также на форме документа есть кнопка подбор, через которую в документ набиваются товары/услуги. Привожу кусок кода из процедуры, в которой вызывается выбор Контрагента:
Если ЭлементыФормы.Склад.Значение.Пустая() Тогда Предупреждение("Вы не выбрали СКЛАД !"); Возврат КонецЕсли; Если Склад = Справочники.Склады.НайтиПоКоду("000000002") Тогда Родитель = Справочники.Контрагенты.НайтиПоКоду("000004171"); КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Контрагенты.Код |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Родитель = &Родитель"; Запрос.УстановитьПараметр("Родитель",Родитель); Номера = Новый СписокЗначений; Номера.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Код")); ФормаКонтр = Справочники.Контрагенты.ПолучитьФормуВыбора("ФормаВыбора"); ФормаКонтр.Отбор.Код.ВидСравнения = ВидСравнения.ВСписке; ФормаКонтр.Отбор.Код.Значение = Номера; ФормаКонтр.Отбор.Код.Использование = Истина; ФормаКонтр.ОткрытьМодально(); Также, код процедуры "ОбработкаВыбора": Если Источник.Заголовок = "Подбор продажи" Тогда Кол = 1; Цен = 1; ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000007"); Если НЕ ЗначениеВыбора.ТипыНоменклатуры = Справочники.ТипыНоменклатуры.НайтиПоКоду("000000002") Тогда Если ВвестиЧисло(Кол, "Введите количество товара", 10, 0) Тогда Номен = ЗначениеВыбора; СтруктураОтбора = Новый Структура; СтруктураОтбора.Вставить("Номенклатура",Номен); СтруктураОтбора.Вставить("Склад",ЭлементыФормы.Склад.Значение); Ост = РегистрыНакопления.ТоварыНаСкладах.Остатки(,СтруктураОтбора,"Номенклатура","Количество").Итог("Количество"); Если Кол > Ост Тогда Предупреждение("Такого количество товара нет на складе "+ЭлементыФормы.Склад.Значение+" !"); Возврат КонецЕсли; Иначе Возврат КонецЕсли; Если ВвестиЧисло(Цен,"Введите цену продажи",10,2) Тогда СтруктураОтбора.Очистить(); СтруктураОтбора.Вставить("Номенклатура",ЗначениеВыбора.Ссылка); СтруктураОтбора.Вставить("ТипыЦен",ТипЦен); РезЦен = Окр(РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(,СтруктураОтбора).Цена*Справочники.Валюты.НайтиПоКоду("000000001").Курс,2,1); Если РезЦен > Цен Тогда Предупреждение("Продажа в МИНУС !!!"); Возврат КонецЕсли; Иначе Возврат КонецЕсли; ЭлементыФормы.ТоварыИУслуги.ДобавитьСтроку(); ЭлементыФормы.ТоварыИУслуги.ТекущаяСтрока.Товар = ЗначениеВыбора; ЭлементыФормы.ТоварыИУслуги.ТекущаяСтрока.Количество = Кол; ЭлементыФормы.ТоварыИУслуги.ТекущаяСтрока.Цена = Цен; ПодсчётСумы(); ИтоговаяЦена(); КонецЕсли; Источник.Активизировать(); ИначеЕсли Источник.Заголовок = "Справочник Контрагенты" Тогда ЭлементыФормы.Мастер.Значение = ЗначениеВыбора; КонецЕсли; Пробовал сделать через оператор "Если" и анализ заголовков. При подборе товара всё работает нормально, но при выборе Контрагента, платформа даже на обращается к процедуре "ОбработкаВыбора". Вопрос: как можно решить эту проблему ? Буду очень благодарен! |
|||
1
aka AMIGO
модератор
27.04.17
✎
15:33
|
(0) Что означает название ветки?
|
|||
2
Масянька
27.04.17
✎
15:33
|
(1) Поддерживаю.
|
|||
3
Джинн
27.04.17
✎
15:34
|
После Справочники.Склады.НайтиПоКоду("000000002") и Справочники.Контрагенты.НайтиПоКоду("000004171") даже читать дальше не стал.
|
|||
4
bplmeddy
27.04.17
✎
15:34
|
(1) Случайно стёр, извиняюсь. Должно быть "Одна "ОбработкаВыбора" на две процедуры.
|
|||
5
bplmeddy
27.04.17
✎
15:36
|
(3) Это всё, что Вы можете сказать по теме ? Возможно я не правильно сформулировал вопрос. Или возможно, в Вашем (конечно единственно верном) понимании, все изначально всё делают правильно, и иначе "ни-ни" ?
|
|||
6
Масянька
27.04.17
✎
15:37
|
(5) Не понятно сформулировал... Совсем...
|
|||
7
aka AMIGO
27.04.17
✎
15:37
|
(3) Тут вот что.. Если БД устоявшаяся, и пользователи обученные/инструктированные и аккуратные - поиск по коду уместен.
|
|||
8
bplmeddy
27.04.17
✎
15:40
|
(6) Суть в чём: когда идёт подбор товара - всё нормально, обработка выбора вызывается и корректно работает. Когда идёт выбор Контрагента, в этом куске:
Номера = Новый СписокЗначений; Номера.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Код")); ФормаКонтр = Справочники.Контрагенты.ПолучитьФормуВыбора("ФормаВыбора"); ФормаКонтр.Отбор.Код.ВидСравнения = ВидСравнения.ВСписке; ФормаКонтр.Отбор.Код.Значение = Номера; ФормаКонтр.Отбор.Код.Использование = Истина; ФормаКонтр.ОткрытьМодально(); то даже нет вызова процедуры "ОбработкаВыбора". Главный вопрос - почему? Так лучше ? |
|||
9
Михаил Козлов
27.04.17
✎
15:40
|
(5) Обычно это делают в событии элемента формы НачалоВыбора.
|
|||
10
Масянька
27.04.17
✎
15:42
|
(8) То есть есть кнопка "Подбор"? Именно, кнопка.
|
|||
11
bplmeddy
27.04.17
✎
15:42
|
(9) Хорошо, это в принципе решает ситуацию, если к примеру вызвать это событие в нужный момент. Если подскажите как - с радостью воспользуюсь.
|
|||
12
bplmeddy
27.04.17
✎
15:43
|
(10) Да. Именно кнопка. К слову, конфигурация самописная(самопальная).
Вот код, который привязан к подбору товара: Процедура ПодборТовараНажатие(Элемент) Если ЭлементыФормы.Склад.Значение.Пустая() Тогда Предупреждение("Вы не выбрали склад!"); Возврат Иначе ФормаПодбора = Справочники.Номенклатура.ПолучитьФормуВыбора("ФормаВыбора",ЭтаФорма); ФормаПодбора.ЗакрыватьПриВыборе = Ложь; ФормаПодбора.Заголовок = "Подбор продажи"; ФормаПодбора.Открыть(); КонецЕсли; КонецПроцедуры |
|||
13
bplmeddy
27.04.17
✎
15:47
|
(12) Всё, сам досмотрел. Сильно извиняюсь, я дурак.
Решение: если в условии получения формы подбора, не указать владельца "("ФормаВыбора",ЭтаФорма);" то "ОбработкаВыбора" не будет вызываться. Всем спасибо. Можно расходится. Ещё раз, тысяча извинений =) |
|||
14
Михаил Козлов
27.04.17
✎
18:32
|
(12) Во всех типовых выбор договора контрагента в документах. Например, в возврате товаров покупателем (фильтр на вид договора. Фильтр на организацию и владельца устанавливается в РаботаСДиалогами.НачалоВыбораЗначенияДоговораКонтрагента(...):
Процедура ДоговорКонтрагентаНачалоВыбора(Элемент, СтандартнаяОбработка) // сохраним договор контрагента, возможно понадобится к нему вернуться мТекущийДоговорКонтрагента = ДоговорКонтрагента; СписокВидовДоговоров = Новый СписокЗначений; СписокВидовДоговоров.Добавить(Перечисления.ВидыДоговоровКонтрагентов.СПокупателем); СписокВидовДоговоров.Добавить(Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером); РаботаСДиалогами.НачалоВыбораЗначенияДоговораКонтрагента(ЭтотОбъект, ЭтаФорма, Элемент, Контрагент, ДоговорКонтрагента, СписокВидовДоговоров, СтандартнаяОбработка); КонецПроцедуры // ДоговорКонтрагентаНачалоВыбора() |
|||
15
Михаил Козлов
27.04.17
✎
18:34
|
(14)+ А вот и из РаботыСДиалогами (только она длинная):
Процедура НачалоВыбораЗначенияДоговораКонтрагента(ДокументОбъект, ФормаДокумента, ЭлементФормы, Контрагент, ДоговорКонтрагента, ВидыДоговораВзаиморасчетов, СтандартнаяОбработка, СтруктураДополнительныхПараметров = Неопределено) Экспорт СтандартнаяОбработка = Ложь; МетаданныеДокумента = ДокументОбъект.Метаданные(); // В качестве владельца формы выбора устанавливаем данный элемент формы, чтобы выбранное // значение было присвоено стандартно. ФормаВыбора = Справочники.ДоговорыКонтрагентов.ПолучитьФормуВыбора(,ЭлементФормы,); // Владельца менять по умолчанию не даем. ФормаВыбора.ПараметрОтборПоВладельцу = Контрагент; ФормаВыбора.ЭлементыФормы.СправочникСписок.НастройкаОтбора.Владелец.Доступность = Ложь; Если ВидыДоговораВзаиморасчетов<>Неопределено Тогда // Оставим в выборе только "правильные" договоры Если ТипЗнч(ВидыДоговораВзаиморасчетов) = Тип("СписокЗначений") Тогда ФормаВыбора.СправочникСписок.Отбор.ВидДоговора.ВидСравнения = ВидСравнения.ВСписке; Иначе ФормаВыбора.СправочникСписок.Отбор.ВидДоговора.ВидСравнения = ВидСравнения.Равно; КонецЕсли; ФормаВыбора.СправочникСписок.Отбор.ВидДоговора.Значение = ВидыДоговораВзаиморасчетов; ФормаВыбора.СправочникСписок.Отбор.ВидДоговора.Использование = Истина; ФормаВыбора.ЭлементыФормы.СправочникСписок.НастройкаОтбора.ВидДоговора.Доступность = Ложь; КонецЕсли; // Еще надо фильтровать по организации, если она заполнена Если ОбщегоНазначения.ЕстьРеквизитДокумента("Организация",МетаданныеДокумента) И ЗначениеЗаполнено(ДокументОбъект.Организация) Тогда ФормаВыбора.СправочникСписок.Отбор.Организация.Значение = ДокументОбъект.Организация; ФормаВыбора.СправочникСписок.Отбор.Организация.Использование = Истина; ФормаВыбора.СправочникСписок.Отбор.Организация.ВидСравнения = ВидСравнения.Равно; ФормаВыбора.ЭлементыФормы.СправочникСписок.НастройкаОтбора.Организация.Доступность = Ложь; КонецЕсли; // Добавим фильтры по дополнительным параметрам отбора Если ТипЗнч(СтруктураДополнительныхПараметров) = Тип("Структура") Тогда Для каждого ЭлементСтруктуры Из СтруктураДополнительныхПараметров Цикл СтруктураОтбора = ЭлементСтруктуры.Значение; ЗначениеОтбора = Неопределено; ВидСравненияОтбора = Неопределено; ДоступностьОтбора = Неопределено; Если СтруктураОтбора.Свойство("ЗначениеОтбора", ЗначениеОтбора) Тогда Если СтруктураОтбора.Свойство("ВидСравненияОтбора", ВидСравненияОтбора) Тогда ФормаВыбора.СправочникСписок.Отбор[ЭлементСтруктуры.Ключ].ВидСравнения = ВидСравненияОтбора; Иначе ФормаВыбора.СправочникСписок.Отбор[ЭлементСтруктуры.Ключ].ВидСравнения = ВидСравнения.Равно; КонецЕсли; ФормаВыбора.СправочникСписок.Отбор[ЭлементСтруктуры.Ключ].Значение = ЗначениеОтбора; ФормаВыбора.СправочникСписок.Отбор[ЭлементСтруктуры.Ключ].Использование = Истина; Если СтруктураОтбора.Свойство("ДоступностьОтбора", ДоступностьОтбора) Тогда ФормаВыбора.ЭлементыФормы.СправочникСписок.НастройкаОтбора[ЭлементСтруктуры.Ключ].Доступность = ДоступностьОтбора; Иначе ФормаВыбора.ЭлементыФормы.СправочникСписок.НастройкаОтбора[ЭлементСтруктуры.Ключ].Доступность = Ложь; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; ФормаВыбора.ПараметрВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Элементы; ФормаВыбора.НачальноеЗначениеВыбора = ДоговорКонтрагента; ФормаВыбора.Открыть(); КонецПроцедуры // НачалоВыбораЗначенияДоговораКонтрагента() |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |