Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Волшебство программирования на 1С:Предприятие 7.7 и 8.0 . Выпуск 75


Информационный Канал Subscribe.Ru

Волшебство программирования на 1С:Предприятие 7.7 и 8.0
Выпуск 75 / 22.09.2004

Здравствуйте, уважаемые подписчики.

Начинающие программисты на 8.0 иногда затрудняются организовать подбор в 8.0. Подбирать можно все, что угодно: товары, контрагентов, сотрудников. Это типичная задача для автоматизированной системы, поэтому нельзя обойти это вниманием.

Но даже если вы многое знаете, прочитайте этот выпуск - есть некоторые тонкости.


v8: Будни: Организация подбора

1. Простой подбор

В форме размещаем кнопку "Подбор". Это может быть кнопка панели инструментов или отдельно стоящая кнопка.

В обработчике события Нажатие для кнопки пишем:

Процедура кпТоварыПодбор(Кнопка)

ФормаПодбора = Справочники.Номенклатура.ПолучитьФормуВыбора(,ЭтаФорма);
ФормаПодбора.ЗакрыватьПриВыборе = Ложь;
ФормаПодбора.Открыть();

КонецПроцедуры

При этом происходят довольно интересные вещи:

  1. В первой строке получаем форму выбора. Это особая форма, которая может не совпадать с формой списка (а может совпадать). Форму выбора можно создать самому, или она будет сгенерирована системой автоматически, или форма списка может работать в режиме выбора.

    Если вы получили не форму подбора, а обычную форму (методом ПолучитьФорму или ПолучитьФормуСписка), то по умолчанию у нее не установлено свойство РежимВыбора. Нужно или установить это свойство в Истина, или оповещать о выборе элемента самостоятельно (см. событие табличного поля "Выбор" метод формы ОповеститьОВыборе).
    1. Первым параметром можно передать имя формы или объект описания метаданных типа формы. Если у объекта несколько форм выбора, то здесь можно указать, какую форму нужно использовать.
    2. Вторым параметр указывается владелец формы - форма или элемент управления, из которого производится вызов формы выбора. После совершения выбора именно владельцу формы будет послано оповещение о выборе, которое инициирует событие "ОбработкаВыбора" (у формы или элемента формы).
    3. Третьим параметром можно указать ключ уникальности для поиска среди уже открытых форм. Если форма с таким ключом уникальности будет найдена, то будет возвращена именно она. Это удобно, если не нужно открывать новых форм выбора.
  2. Вторая строка устанавливает режим, при котором после выбора значения форма не будет закрываться, т.е. это и и есть основная функция подбора. При множественном выборе это свойство имеет смысл установить в Истина, но об этом ниже. Здесь же можно присвоить и другие свойства открываемой формы, например, расположение на экране, задать значения реквизитов формы или экспортных переменных модуля формы.
  3. Третья строка открывает форму выбора. После первой строки форма еще не была открыта, но ее модуль уже был скомпилирован и инициализирован.

В свойствах формы должен быть назначен обработчик события "ОбработкаВыбора".

Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)

 Если ТипЗнч(ЗначениеВыбора) = Тип("СправочникСсылка.Номенклатура") Тогда

Строка = Товары.Найти(ЗначениеВыбора,"Номенклатура");
Если Строка = Неопределено Тогда

Строка = Товары.Добавить();
Строка.Номенклатура = ЗначениеВыбора;
Строка.Количество = 1;

Иначе

Если Вопрос("Такой товар уже есть (" + СокрЛП(ЗначениеВыбора) + ")! Увеличить кол-во?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда

Строка.Количество = Строка.Количество + 1;

КонецЕсли;

КонецЕсли;

  КонецЕсли;

КонецПроцедуры

2. Множественный выбор

При таком выборе пользователь может выделить сразу несколько элементов (например, с помощью клавиши Ctrl) и после нажатия кнопки "Выбрать" система вернет массив выбранных элементов, а не один элемент, как в первом случае.

Процедура кпТоварыПодбор(Кнопка)

ФормаПодбора = Справочники.Номенклатура.ПолучитьФормуВыбора(,ЭтаФорма);
ФормаПодбора.МножественныйВыбор = Истина;
ФормаПодбора.ЗакрыватьПриВыборе = Истина;
ФормаПодбора.Открыть();

КонецПроцедуры

Тогда обработчик события ОбработкаВыбора можно написать так:

Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)

МассивВыбранныхЭлементов = Новый Массив;

Если ТипЗнч(ЗначениеВыбора) = Тип("СправочникСсылка.Номенклатура") Тогда
     МассивВыбранныхЭлементов.Добавить(ЗначениеВыбора);

ИначеЕсли ТипЗнч(ЗначениеВыбора) = Тип("Массив") Тогда
     МассивВыбранныхЭлементов = ЗначениеВыбора;
КонецЕсли;

Для каждого Элемент Из МассивВыбранныхЭлементов Цикл
       //действия с очередным элементом
КонецЦикла;

КонецПроцедуры

Вот, собственно, и все. Подбор - легкая вещь, если понимаешь, что происходит.


--------

Ветки по 8.0 за 23 сентября 2004 г.

Рубрика Отв. Тема
Общие вопросы 82 OFF: опрос: у кого в городе широко используется 1с 8.0?
Общие вопросы13 Что может быть лучше 1с
Безопасность7 Как в 8.0 защитить конфигурацию?
Безопасность1 Настройка ролей.
Архитектура1 Структура базы. Запрос к регистру сведений. СрезПоследних
Архитектура 2 Не могу из файла *.DT вытащить конфигурацию
Администрирование2 Программный разрыв соединений пользователей
Администрирование 3 Ошибка SDBL, может кто ее уже видел?
Администрирование 6 Перестали запускаться файловые базы
Администрирование 1 Удаленное обновление платформы у клиента (MSI)
Формы 2 Как определить нажата ли клавиша при возникновении события?
Формы 3 Чем ПараметрВыборПоВладельцу отлич. от ПараметрОтборПоВладельцу
Формы 3 Как в табличном поле удалить строки
Формы 2 Цвета строк в журнале
Формы5Выбрать элемент справочника
Встроенный язык 2 Чем фактически отличаются "ПередЗаписью()" от "ПриЗаписи()"?
Встроенный язык 2 Есть ли в восьмерке аналог системной константы "РазделительСтрок"?
УТ 7 Редактирование категорий в форме списка
УПП 11 У кого работает обновление УПП из конфигурации через Интернет?
УПП 12 Сегодня вышел новый релиз УПП, 8.1.0.15
Запросы 7 Запрос к регистру накопления
Запросы 4 Условие выбора только числовых значений
Запросы 10 Поиск элементов по части наименования
Запросы 2 Почему не работает фильтр по группам в запросе
Запросы 1 Сложный запрос по регистру расчетов
Запросы 1 В результат запроса не попадают даты без оборотов.
Запросы 8 Виртуальная таблица регистра накопления в запросе
Сертификация 7 Вопрос к тем, кто сдавал сертификацию по управлению торговлей
Сертификация 45 экзамен на специалиста по платформе
Сертификация 1 Теперь я специалист по УТ
COM-соединение 4 Как работать через COM
Обмен данными 3 Загрузка данных при обмене
Справочники 7 Как во встроенном языке получить предопред. элемент по имени?
Внешние компоненты 6 ACTIVEBARCODE
Обновление 10 V8, УТ, впервые вижу, туплю... Как включить возможность изменения?
 


См. также:
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



http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.magic1c
Отписаться

В избранное