Программирование в 1С для всех
Очень часто возникает необходимость программно открыть какую-то форму выбора (документа, справочника), выбрать нужное значение, и передать это значение на форму, которая инициализировала открытие формы выбора. Давайте разберемся, как это делать.
А делается это при помощи уже знакомого нам метода ОткрытьФорму.
Для тех, кто не знаком с вышеприведенным методом, рекомендую первым делом ознакомиться с моими статьями, где я подробно о нем рассказываю:
Открытие управляемой формы 1С с передачей параметров
Открытие управляемой формы 1С в отдельном окне
Для этой статьи я в конфигураторе 1С создам обработку, на форму этой обработки помещу команду, при выполнении которой, откроется форма выбора справочника Номенклатура, и запишу выбранное значение в реквизит формы обработки.
Здесь и далее приведена конфигурация из книги «Основы разработки в 1С: Такси».
Замечу, что в моей конфигурации нет формы выбора
т.е. мы будем открывать автоматически сгенерированную форму выбора.
Поэтому в методе ОткрытьФорму, когда мы будем выбирать нужную управляемую форму 1С, то просто выбираем ФормаВыбора.
Для того, чтобы получить какое-то значение с формы нужно использовать шестой параметр метода ОткрытьФорму – ОписаниеОповещенияОЗакрытии, который имеет тип ОписаниеОповещение.
Алгоритм такой: первым делом мы создаем новый объект с типом ОписаниеОповещения, в параметрах конструктора объекта указываем экспортную процедуру формы, которая сработает после выбора нужного значения с открытой формы. Создаем эту процедуру, где будем обрабатывать выбранное значение. Она должна иметь два параметра: РезультатВыбора и ДополнительныеПараметры. Вот такой должен получиться код:
&НаКлиенте
Процедура ВыбратьНоменклатуру ( Команда )
Если Не ЗначениеЗаполнено ( РезультатЗакрытия ) Тогда
Возврат;
КонецЕсли;
Где ВыбраннаяНоменклатура это реквизит формы.
Заметьте, процедура ОбработатьВыборНоменклатуры, которую мы указали в описании оповещения, обязательно должна быть экспортной.
Теперь нам осталась указать объект описание выбора в шестом параметре метода ОткрытьФорму
&НаКлиенте
Процедура ВыбратьНоменклатуру ( Команда )
И всё! Сейчас при выполнении команды, откроется форма выбора, и если какая-то номенклатура будет выбрана, то она запишется в реквизит формы в процедуре ОбработатьВыборНоменклатуры.
Изучайте управляемые формы 1С с моими статьями:
Открытие управляемой формы существующего объекта
Открытие управляемой формы 1С на основании другого объекта
Открытие обычной формы в управляемом приложении 1С
Очень подробно вопросы по работе с управляемыми формами в частности и с управляемым приложением в целом рассмотрены в книге «Основы разработки в 1С: Такси. Разработка управляемого приложения за 12 шагов». Эта книга станет настоящим подспорьем для тех, кто только начал знакомится с разработкой управляемого приложения.
Многие начинающие думают, что изучить язык программирование в 1С сложно и трудно. В действительности программировать в 1С — легко. Помогут Вам легко и быстро освоить программирование в 1С мои книги: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»
Книга «Основы разработки в 1С: Такси» отлично подойдёт тем, кто уже начал программировать и испытывает определенные сложности с этой темой и тем, кто уже давно программирует, но ни разу еще не работал с управляемыми формами 1С
Промо-код на скидку в 15% — 48PVXHeYu
Книга «Программировать в 1С за 11 шагов»
Изучите программирование в 1С с помощью моей книги «Программировать в 1С за 11 шагов»
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Вступайте в мои группы в соцсетях, и будьте в курсе всех новостей
Работа с формами в «1С:Предприятии 8»
Например, формы списков вы можете увидеть при открытии разнообразных справочников, журналов документов, списков записей в регистрах конфигурации и т. п.
Например, вызывая справочник «Контрагенты», мы получаем на экране как раз такую форму-список (рис. 1).
Как правило, кроме собственно списка, у форм такого типа присутствует командная панель с кнопками-действиями, которые выполняются над элементами данного списка.
При наведении (не нажатии!) мышью на одно из действий, вы получите краткое пояснения этого действия и «горячую» клавишу (или комбинацию клавиш) для его выполнения, если имеется такая возможность.
Кроме этого, в командной панели, как правило, присутствует элемент «Действия», где собраны все действия, которые можно выполнять над элементами данного списка.
При отметке какого-либо элемента в списке, можно нажать на нем правой кнопкой мыши. В результате вы получите список разрешенных действий для данного элемента.
Некоторые действия одинаковы для всех списков, некоторые созданы разработчиками конфигурации и могут отсутствовать в других формах списков.
Для часто используемых в форме списков действий назначены комбинации клавиш (подробнее об использовании «горячих» клавиш читайте в номере 10 (октябрь) «БУХ.1С» за 2007 год, стр. 8), использование которых повысит эффективность работы в программе:
Действие
Сочетание клавиш
Активация действия в командной панели
Добавить новый элемент
Пометка на удаление
Добавить группу (для справочников с иерархией)
Переместить элемент в другую группу (для справочников с иерархией)
Быстрый вход внутрь группы (для справочников с иерархией)
Выход на уровень выше
Добавить новый элемент копированием текущего
Изменить текущий элемент
В некоторых списках имеется возможность множественного выделения выбранных элементов с целью их групповой обработки. Для того, чтобы выделить несколько элементов (если это разрешено в списке), достаточно нажать клавишу Shift и прощелкать мышью необходимые элементы.
Для этого можно использовать клавиши со стрелками (вверх, вниз, вправо, влево), включая привычное всем нам страничное листание (PageUp/PageDown) в сочетании с этими клавишами. Работают также общепринятые «горячие» клавиши:
Действие
Сочетание клавиш
Выделить все от текущей позиции до начала списка
Выделить все от текущей позиции до конца списка
Выделить все элементы
Копирование текстового представления текущей ячейки в списке элементов
Форма списка
Например, формы списков вы можете увидеть при открытии разнообразных справочников, журналов документов, списков записей в регистрах конфигурации и т. п.
Например, вызывая справочник «Контрагенты», мы получаем на экране как раз такую форму-список (рис. 1).
Как правило, кроме собственно списка, у форм такого типа присутствует командная панель с кнопками-действиями, которые выполняются над элементами данного списка.
При наведении (не нажатии!) мышью на одно из действий, вы получите краткое пояснения этого действия и «горячую» клавишу (или комбинацию клавиш) для его выполнения, если имеется такая возможность.
Кроме этого, в командной панели, как правило, присутствует элемент «Действия», где собраны все действия, которые можно выполнять над элементами данного списка.
При отметке какого-либо элемента в списке, можно нажать на нем правой кнопкой мыши. В результате вы получите список разрешенных действий для данного элемента.
Некоторые действия одинаковы для всех списков, некоторые созданы разработчиками конфигурации и могут отсутствовать в других формах списков.
Для часто используемых в форме списков действий назначены комбинации клавиш (подробнее об использовании «горячих» клавиш читайте в номере 10 (октябрь) «БУХ.1С» за 2007 год, стр. 8), использование которых повысит эффективность работы в программе:
Действие
Сочетание клавиш
Активация действия в командной панели
Добавить новый элемент
Пометка на удаление
Добавить группу (для справочников с иерархией)
Переместить элемент в другую группу (для справочников с иерархией)
Быстрый вход внутрь группы (для справочников с иерархией)
Выход на уровень выше
Добавить новый элемент копированием текущего
Изменить текущий элемент
В некоторых списках имеется возможность множественного выделения выбранных элементов с целью их групповой обработки. Для того, чтобы выделить несколько элементов (если это разрешено в списке), достаточно нажать клавишу Shift и прощелкать мышью необходимые элементы.
Для этого можно использовать клавиши со стрелками (вверх, вниз, вправо, влево), включая привычное всем нам страничное листание (PageUp/PageDown) в сочетании с этими клавишами. Работают также общепринятые «горячие» клавиши:
Действие
Сочетание клавиш
Выделить все от текущей позиции до начала списка
Выделить все от текущей позиции до конца списка
Выделить все элементы
Копирование текстового представления текущей ячейки в списке элементов
Форма элемента
Чтобы не перегружать наше восприятие, информационное наполнение формы распределяется в ней по нескольким закладкам.
Для форм элементов характерно наличие командных панелей сверху и/или снизу открываемого окна. Это командные панели формы с действиями, которые относятся к открытому объекту конфигурации целиком.
Обычно одна из команд назначена «кнопкой по умолчанию». Она активируется комбинацией клавиш Ctrl+Enter. Такая кнопка выделяется жирным (в нашем примере, это кнопка «ОК»).
Как правило, на форме элемента четко можно определить разницу между командными панелями формы и вспомогательными командными панелями.
Комбинация Alt+F10 работает и здесь, она активирует ту командную панель, с элементами которой пользователь работает в данный момент времени.
Полезно знать, что практически все действия на форме элемента можно выполнять без использования мыши.
Клавиатурное управление, как правило, значительно ускоряет процесс работы с данными. Например, нажатие на клавишу Enter или Tab, позволяет «перескакивать» с одного элемента формы на другой (следующий за ним). Нажатие Shift+Tab позволяет «скакать» по элементам в обратном направлении. Если вы находитесь в каком-либо поле ввода (например, на рис. 2 в группе контрагентов), достаточно написать первые буквы нужного вам элемента и нажать Tab и программа автоматически подставит нужный элемент в поле ввода (если он уникален в системе), либо предоставит автоматический список для уточнения вашего варианта.
Действие
Сочетание клавиш
Открыть форму выбора нужного элемента
Открыть форму элемента уже выбранного объекта в поле ввода
Очистить поле ввода
Быстрое переключение между закладками на форме, если они есть
Ctrl+PageUp и Ctrl+PageDown
Переключение активного элемента типа «Флажок»
Отказаться от внесенных изменений в текстовых элементах формы
Вернуть отмененное действие
Закрытие практически любой формы
Закрытие/открытие окна служебных сообщений (того, которое может появляться внизу)
При вводе новых объектов конфигурации при помощи форм элементов, обязательные для заполнения поля подчеркнуты красным. Например, для документа «Реализация товаров и услуг: Продажа, комиссия» такими полями являются поле «Контрагент» и поле «Договор» (рис. 4).
Выделять текстовые блоки можно мышью, а можно курсорами с нажатой клавишей Shift. Это бывает полезно для операций с буфером обмена.
Форма выбора
Как правило, в форме выбора можно выполнять массу подобных форме списка действий. Например, завести новый элемент. О том, какие действия возможны в данном случае, вы всегда сможете узнать из наполнения командной панели формы выбора и по тому, какие горячие клавиши работают, а какие нет.
Форма группы
Для каждого объекта конфигурации, может быть задано при разработке несколько форм: разнообразные формы элемента, выбора, вспомогательные формы. Необходимо это, в первую очередь, для облегчения ввода и обработки информации, хранящейся в этом объекте. То есть набор форм, как правило, определяется на этапе создания конфигурации и в разных конфигурациях может отличаться друг от друга даже для однотипных объектов (например, в типовых конфигурациях «Бухгалтерия предприятия» и «Управление торговлей»).
В любом случае, поведение элементов, расположенных на форме, как правило, идентично с точки зрения возможностей управления ими мышью или «горячими» клавишами.
Если специальных пояснений нет, то вам отобразится общая информация по работе с текущим типом формы.
Вызвать справку можно, нажав клавишу F1.
Кроме этого, в таком случае всегда доступны «горячие» клавиши Ctrl+Shift+Стрелка вверх и Ctrl+Shift+Стрелка вниз.
Для начинающих: как выбрать файл в 1С?
Добавим новую форму с кнопкой, нажав на которую будет открываться окно выбора файла. Дальнейшая обработка файла в данном примере не рассматривается. Рекомендуется тренироваться на копии базы или пустой конфигурации. Пример создан на конфигурации 1С:CRM 3.0.
Сначала подготовим конфигуратор.
Заходим в конфигуратор 1С. Если конфигурация не открыта, открываем ее и снимаем с поддержки. В меню «Конфигурация» нажимаем «Открыть конфигурацию». Далее в меню «Конфигурация» нажимаем «Поддержка» и выбираем «Настройка поддержки». В окне нажимаем кнопку «Включить возможность изменения» и устанавливаем переключатели как на картинке. Нажимаем «Ок».
Теперь создадим простую обработку.
Находим в левой таблице объектов объект «Обработки», нажимаем на ней правой кнопкой мыши и выбираем «Добавить». Далее потребуется заполнить Имя обработки, указать, в какой подсистеме 1С хотите вызвать обработку, и добавить новую форму в разделе «Формы».
После создания формы появится окно как представлено ниже.
Теперь создадим команду формы «Загрузить» нажав на плюс в верхнем правом окне. Обязательно укажите свойство «Действие». Это будет название процедуры 1С.
Далее добавляем на форму кнопку «Загрузить», нажав на плюс в левом верхнем окне. Обязательно укажите свойство «ИмяКоманды». Здесь укажем название команды, которую создали на предыдущем шаге «Загрузить». В результате на форме появится кнопка «Загрузить».
Далее напишем небольшой код.
Внизу окна нажимаем на закладку «Модуль». У нас здесь уже есть пустая процедура. Добавляем в нее код.
ДиалогВыбора = новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбора.Заголовок = «Выберите файл»;
ДиалогВыбора.Фильтр = «Excel документ, .xls|.xls»;
Если ДиалогВыбора.Выбрать() Тогда
В результате получится так как на рисунке ниже.
И в конце остается проверить в пользовательском режиме. Для этого нажимаем «Начать отладку» или F5. Конфигуратор спросит обновить ли конфигурацию базы данных. Отвечаем «Да» и у нас открывается 1С (режим пользователя). Далее находим подсистему, куда добавили обработку (в нашем случае это «Маркетинг») и проверяем.
На простейшем примере было показано как написать код, прикрепить его на форму и вызвать в пользовательском режиме 1С.
Форма выбора (подбор) в управляемых формах
Статья будет состоять из нескольких приведенных примеров кода с описанием того, как прибегнуть к Подбору.
Пример 1.
Простой вызов формы выбора с одним возвращаемым результатом:
Пример 2.
Выбор нескольких значений (документов или справочников) :
В первых 2-х примерах мы использовали обработчик (Событие) формы «ОбработкаВыбора».
Теперь рассмотрим пример с использованием «Обработки оповещения», на мой взгляд более удобно )
Пример 3.
Думаю многие не знают про фишку Оповещением «на Сервере». То есть результат можно вернуть сразу на сервер без дополнительных условий. Работает до 8.3.13.1644, с 8.3.16.1063 этот метод недоступен.
Пример 4.
Мы видим что открывается форма выбора (из списка документов «Реализация товаров и услуг»), но иногда необходимо добавить некий отбор, чтобы при открытии формы не выводить все документы в целом.
Пример 5.
Есть моменты когда не всегда можно обойтись простым отбором, например необходимо открыть форму выбора со списком за определенный период.
Пример 6.
Пример 7.
Как открыть форму выбора с Позиционированием ранее выбранного значения:
Тестировалось на 1С:Предприятие 8.3 (8.3.16.1063) и 1С:Предприятие 8.3 (8.3.13.1644), Спасибо за внимание, возможно, кому-то поможет)
Трюки 1С 8 – Передача формы документа в форму выбора
В числе таких слабостей, к примеру, невозможность подписки на события обычных форм (смотри следующую статью Трюки 1С 8 – Управление обычными формами из общего модуля ) или на событие изменения показателей любого регистра накопления (статья еще не написана).
Для затравки начну с небольшого трюка, связанного со штатным механизмом выбора из подчиненного справочника. Покажу его на реальном примере в конфигурации Комплексная Автоматизация.
При выборе серии номенклатуры по кнопке выбора в табличной части Товары документов СчетНаОплатуПокупателю или РеализацияТоваровУслуг штатный механизм связи (через указание номенклатуры-владельца) выводит на экран все серии для номенклатуры из текущей строки табличной части. Хотя логично было бы ожидать только серии, зарегистрированные на складе, который указан в соответствующем документе.
Воспользуемся тем, что предопределенность объектов конфигурации влечет за собой некоторую избыточность их состава. Из нескольких десятков реквизитов любого объекта конфигурации обычно реально используются и инициализируются программистом не более десятка. Посмотрим пристальнее на поле ввода серии номенклатуры и увидим в нем строковый реквизит Подсказка, который обычно пуст и вполне может сгодиться на роль контрабандиста для наших реквизитов.
Суть трюка – перед переходом в форму выбора серий номенклатуры из поля ввода мы добавляем в его реквизит Подсказка ссылку на текущий документ, добавив обработчик события НачалоВыбора:
Теперь в форме выбора можно обратиться к форме документа и любым ее элементам, например, реквизиту Склад (и заодно восстановить исходную подсказку):
Процедура ПриОткрытии()
Используя значение Склад, можно запросом выбрать список кодов нужных серий номенклатуры и использовать его в дополнительном элементе отбора:
В приложенном файле – полный код процедуры ПриОткрытии формы выбора (КА 1.1, 1С 8.2).
Штатный подход в обычных формах, как отметил в комментарии awk, более прямолинейный:
т.е. мы отказываемся от стандартной обработки, инициализируем и открываем форму выбора самостоятельно.