Волшебство
программирования на 1С:Предприятие 7.7 и 8.0
Выпуск 75 / 22.09.2004
Здравствуйте,
уважаемые подписчики.
Начинающие программисты на 8.0 иногда затрудняются
организовать подбор в 8.0. Подбирать можно все,
что угодно: товары, контрагентов, сотрудников. Это типичная задача
для автоматизированной системы, поэтому нельзя обойти это вниманием.
Но даже если вы многое знаете, прочитайте этот выпуск
- есть некоторые тонкости.
v8:
Будни: Организация подбора
1. Простой подбор
В форме размещаем кнопку "Подбор".
Это может быть кнопка панели инструментов или отдельно стоящая
кнопка.
В обработчике события Нажатие для кнопки пишем:
Процедура кпТоварыПодбор(Кнопка)
ФормаПодбора
= Справочники.Номенклатура.ПолучитьФормуВыбора(,ЭтаФорма);
ФормаПодбора.ЗакрыватьПриВыборе = Ложь;
ФормаПодбора.Открыть();
КонецПроцедуры |
При этом происходят довольно интересные вещи:
- В первой строке получаем форму выбора. Это особая форма, которая
может не совпадать с формой списка (а может совпадать). Форму
выбора
можно
создать
самому, или она будет сгенерирована системой автоматически, или
форма списка может работать в режиме выбора.
Если вы получили не форму подбора, а обычную форму (методом
ПолучитьФорму или ПолучитьФормуСписка), то по умолчанию у нее
не установлено
свойство РежимВыбора. Нужно или установить это свойство в Истина,
или
оповещать о выборе элемента самостоятельно (см. событие табличного поля "Выбор" метод
формы ОповеститьОВыборе).
- Первым параметром можно передать имя формы или объект описания
метаданных типа формы. Если у объекта несколько форм выбора,
то здесь можно указать, какую форму нужно использовать.
- Вторым параметр указывается владелец формы -
форма или элемент управления, из которого производится
вызов формы
выбора. После совершения выбора именно владельцу формы будет
послано оповещение о выборе, которое инициирует событие "ОбработкаВыбора" (у
формы или элемента формы).
- Третьим параметром можно указать ключ уникальности для
поиска среди уже открытых форм. Если форма с таким ключом
уникальности будет найдена, то будет возвращена именно она.
Это удобно, если
не нужно
открывать новых форм выбора.
- Вторая строка устанавливает режим, при котором после выбора
значения форма не будет закрываться, т.е. это и и есть основная
функция подбора. При множественном выборе это свойство имеет
смысл установить в Истина, но об этом ниже. Здесь же можно присвоить
и другие свойства открываемой формы, например, расположение на
экране, задать значения реквизитов формы или экспортных переменных
модуля формы.
- Третья строка открывает форму выбора. После первой строки форма
еще не была открыта, но ее модуль уже был скомпилирован и инициализирован.
В свойствах формы должен
быть назначен обработчик события "ОбработкаВыбора".
Процедура ОбработкаВыбора(ЗначениеВыбора,
Источник)
Если ТипЗнч(ЗначениеВыбора) = Тип("СправочникСсылка.Номенклатура")
Тогда
Строка = Товары.Найти(ЗначениеВыбора,"Номенклатура");
Если Строка = Неопределено Тогда
Строка = Товары.Добавить();
Строка.Номенклатура = ЗначениеВыбора;
Строка.Количество = 1;
Иначе
Если Вопрос("Такой товар уже есть (" + СокрЛП(ЗначениеВыбора)
+ ")! Увеличить
кол-во?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
Строка.Количество = Строка.Количество + 1;
КонецЕсли;
КонецЕсли;
КонецЕсли; КонецПроцедуры |
2. Множественный выбор
При таком выборе пользователь
может выделить сразу несколько элементов (например, с помощью
клавиши Ctrl) и после нажатия кнопки "Выбрать" система
вернет массив выбранных элементов, а не один элемент, как
в первом случае.
Процедура кпТоварыПодбор(Кнопка)
ФормаПодбора
= Справочники.Номенклатура.ПолучитьФормуВыбора(,ЭтаФорма);
ФормаПодбора.МножественныйВыбор = Истина;
ФормаПодбора.ЗакрыватьПриВыборе = Истина;
ФормаПодбора.Открыть();
КонецПроцедуры
|
Тогда обработчик события ОбработкаВыбора можно написать так:
Процедура ОбработкаВыбора(ЗначениеВыбора,
Источник)
МассивВыбранныхЭлементов = Новый Массив;
Если ТипЗнч(ЗначениеВыбора) = Тип("СправочникСсылка.Номенклатура")
Тогда
МассивВыбранныхЭлементов.Добавить(ЗначениеВыбора);
ИначеЕсли ТипЗнч(ЗначениеВыбора) = Тип("Массив") Тогда
МассивВыбранныхЭлементов = ЗначениеВыбора;
КонецЕсли;
Для каждого Элемент Из МассивВыбранныхЭлементов Цикл
//действия с очередным элементом
КонецЦикла;
КонецПроцедуры |
Вот,
собственно, и все. Подбор - легкая вещь, если понимаешь, что происходит.
--------
Ветки
по 8.0 за 23 сентября 2004 г.
См. также:
1С:Предприятие 7.7: учебник, курс
лекций, статьи, ссылки
Книга "Разработка в системе 1С:Предприятие 8.0" -
http://www.v8.1c.ru/book/v8develop.htm
Официальный
сайт рассылки - www.mista.ru
Волшебный форум - www.forum.mista.ru,
Форум по 1С - http://www.forum.mista.ru/index.php?forum=1c
Архив выпусков этой рассылки - http://www.mista.ru/subscribe
Новое!
Раздел
форума исключительно по 8.0 - http://www.forum.mista.ru/index.php?forum=1c&v8=1
С уважением,
Станислав Митичкин (Волшебник)
stasmit@mail.ru
<< Предыдущий
выпуск | Список
выпусков |
Следующий выпуск >>
|