- •1С:Предприятие 8.2. Практическое пособие разработчика.
- •4 1С:Предприятие 8.3. Практическое пособие разработчика
- •Что такое конфигурируемость системы «1с:Предприятие»?
- •Ориентировочная продолжительность занятия - 2 часа 10 минут.
- •I I "Йт Склады Рис. 3.8. Справочник «Склады» с предопределенным элементом «Основной»
- •Ориентировочная продолжительность занятия - 1 час 30 минут.
- •1C: Пред приятие
- •I ПриходнаяНак ладная j
- •X ран и л ище Зна че и и я у ника льныйИденгификатор СправочникСсылка СправочникСсылка.Клиенты СправочникСсылка.Сотрудники СправочникСсылка.Н оменклатура
- •Локальный контекст модуля формы.
- •Свойства и методы расширения формы, определяемого типом того объекта, данные которого содержатся в основном реквизите формы.
- •0 £ Управляемая форма © Ei УправляемаяФорма © е Расширение элементов Формы © е Расширение объектов © е Расширение констант
- •Глобальный контекст, в том числе неглобальные общие модули и экспортируемые функции и процедуры глобальных общих модулей.
- •Экспортируемые переменные, процедуры и функции модуля управляемого приложения.
- •3 Документ ПринплнляНлкладная ФпрмаДпкумента
- •4 ' Рис. 5.36. Панель инструментов «Точки останова»
- •208 209 211 211 214 221 223 223 224 225 225 228 229 231 Занятие 6
- •Ориентировочная продолжительность занятия - 50 минут.
- •Оказание услуги Рис. 8.15. Печатная форма документа «Оказание услуги»
- •1C: Пред приятие
- •Периодический независимый регистр сведений "Цены"
- •0 D Стиральные машины
- •Ориентировочная продолжительность занятия - 1 час 20 минут.
- •Движения по регистру Стоимость материалов Рис. 11.8. Записи регистра «Остатки материалов» Рис. 11.7. Приходная накладная № 1
- •322 1С:Предприятие 8.3. Практическое пособие разработчика
- •0™ Номенклатура © Колонки
- •0Е™ Клиент е 01ч Диаграмма © т очки
- •0™ Клиент © Серии
- •0Е33 Номенклатура
- •0 Щ] Отчет
- •I Отлично
- •77 Перечень услуг
- •Универсальный 1 Ец1е " Рис. 13.113. Результат отчета
- •Ориентировочная продолжительность занятия - 3 часа 20 минут.
- •В остальных случаях функция вернет само значение этого поля.
- •Ориентировочная продолжительность занятия - 2 часа 50 минут.
- •I Период t | Регистратор | н... | Материал | Склад | Набор свойств | Количество
- •Остатки материалов по свойствам Рис. 15.47. Результат отчета
- •0 Для чего предназначен объект конфигурации «План видов харак
- •0 В чем принципиальное отличие плана вида характеристик от справочника?
- •0 Что такое тип значения характеристик?
- •0 Зачем нужны дополнительные значения характеристик?
- •0 Как, используя план видов характеристик, организовать учет по переменному количеству характеристик?
- •0 Как создать план видов характеристик?
- •0 Что такое связь по параметрам выбора?
- •0 Как изменить заголовок формы?
- •0 Как скрывать элементы формы с подчиненной информацией при ее создании?
- •0 Как описать характеристики в метаданных?
- •0 Как использовать характеристики при выполнении отчета?
- •Ориентировочная продолжительность занятия - 1 час 50 минут.
- •По периоду действия
- •I ДиаграммаГ анга |
- •15 Форма
- •1 Номенклатура: Строчный трансформатор Samsung Последние запросы (материал)
- •6. Оказание услуги: Оказание услуги 000000002 от 11.07.2013 16:14:06
- •3. Начисление сотрудникам: Начисление сотрудникам 1
- •0 Для чего предназначен документ для ввода начальных остатков, и как его создать?
- •Ориентировочная продолжительность занятия - 1 час 50 минут.
- •Ориентировочная продолжительность занятия - 1 час 10 минут.
- •Ориентировочная продолжительность занятия - 6 часов 10 минут.
- •1Е проверять
- •3AnwcbXml.3aKpNTbO;
- •3AnMCbXml.3aKpNTbO;
- •С предварительным вопросом пользователю
- •Ориентировочная продолжительность занятия - 2 часа 10 минут.
- •® В ® © ® ® Рис. 27.6. Контекст поля формы дополняется контекстом расширения поля ввода
- •I ключать в пользовательские настройки
- •I доступ
- •Из формы элемента
- •Из формы узла
С предварительным вопросом пользователю
&НаКлиенте
Процедура ПодборВопрос(Команда)
Оповещение = Новый ОписаниеОповещенияС'ПодборЗавершение", ЭтотОбъект); ПоказатьВопрос(Оповещение, "Подобрать номенклатуру в документ?", РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ПодборЗавершение(Результат, Параметры) Экспорт
Поясним этот код.
В процедуре ПодборВопрос() сначала создается объект ОписаниеОпо- вещения, в конструкторе которого первым параметром указывается имя процедуры - обработчика оповещения, которая будет выполнена после получения ответа пользователя. А во втором параметре указывается, в каком модуле расположена эта процедура.
Процедура - обработчик оповещения может располагаться в модуле управляемой формы, в общем неглобальном клиентском модуле или модуле команды. В данном случае эта процедура располагается в модуле нашей формы, на что указывает ссылка ЭтотОбъект.
После этого с помощью немодального метода ПоказатьВопрос() отображается окно с вопросом пользователю. В этот метод передается объект ОписаниеОповещения, указывающий на процедуру модуля (ПодборЗавершение), которая будет выполнена после того, как пользователь сделает выбор в блокирующем окне.
Процедура - обработчик оповещения должна быть объявлена как экспортная, с использованием ключевого слова Экспорт. В параметре
Если
Результат
= КодВозвратаДиалога.Да
Тогда
ПараметрыФормы
= Новый
СфуктураС'МножественныйВыбор1',
Истина);
ОткрытьФормуС'Справочник.Номенклатура.ФормаВыбора1',
ПараметрыФормы,
Элементы.Материалы);
КонецЕсли;
КонецПроцедуры
Свойства:
Команда
IKlli
х
v
▼
Основные:
Имя
Подбор
Заголовок
Подбор
|
Действие
|"1одборВ
опрос
▼
Q.|
Изменяет
сохраняемые,
данные
.
I МатериалыКоличествоПриИзменении
Использование
М
атериалыЦ
енаП
риИ
зменении
Функи
ио
нал
ьныеопц
ии
Подбор
J
▼
П
редставление:
ПодборВопрос
Картинка
Подсказка
Подбор
Отображение
Авто
Сочетание
клавиш
-
Действие
Чтобы не путаться, установим новый обработчик для команды Подбор. В палитре свойств этой команды в строке Действие выберем процедуру ПодборВопрос (рис. 26.4).
Рис. 26.4. Установка действия для команды «Подбор»
В режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки.
Перейдем в раздел Учет материалов, откроем список приходных накладных и создадим новую приходную накладную. В командной панели списка материалов нажмем кнопку Подбор.
Перед тем как выполнять подбор, всплывает блокирующее окно с вопросом пользователю о необходимости подбора. Это окно блокирует интерфейс, но не останавливает выполнение прикладного решения. Подбор номенклатуры в документ выполняется только в случае положительного ответа пользователя.
Как задать вопрос пользователю в обработчике события
Рассмотрим теперь более сложный пример, когда вопрос пользователю требуется задать в обработчике события. Например, перед добавлением номенклатуры в табличную часть приходной накладной нужно спросить, добавлять ли выбранные элементы номенклатуры в документ. Причем подтверждение о добавлении номенклатуры в документ у пользователя нужно спрашивать только один раз.
Конечно, этот пример (как и предыдущий) вряд ли понадобится при разработке реальной конфигурации, но в целом оба примера хорошо демонстрируют общий подход отказа от использования модальных окон, описанный выше в теоретической части этого раздела.
Реализуем вариант одиночного подбора с использованием множественного выбора. В форме документа ПриходнаяНакладная откроем палитру свойств команды Подбор и в строке Действие установим в качестве обработчика команды процедуру Подбор.
Изменим текст обработчика команды Подбор следующим образом (листинг 26.8).
Листинг 26.8. Обработчик нажатия кнопки «Подбор»
&НаКлиенте
Процедура Подбор(Команда)
ПараметрыФормы = Новый СфуктураС'МножественныйВыбор1', Истина); ОткрытьФормУ(''Справочник.Номенклатура.ФормаВыбора'', ПараметрыФормы,
Элементы.Материалы);
КонецПроцедуры
Затем добавим в обработчик события ОбработкаВыбора таблицы Материалы открытие блокирующего окна с вопросом пользователю (листинг 26.9).
Листинг 26.9. Обработчик события «ОбработкаВыбора» таблицы
«Материалы» с предварительным вопросом пользователю
&НаКлиенте
Процедура МатериалыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ОтветПередДобавлением <> Истина Тогда СтандартнаяОбработка = Ложь;
Оповещение = Новый ОписаниеОповещения(
"ДобавлениеЗавершение", ЭтотОбъект, ВыбранноеЗначение); ПоказатьВопрос(Оповещение, "Добавить номенклатуру в табличную часть?", РежимДиалогаВопрос.ДаНет);
Иначе
Для Каждого ВыбранныйЭлемент Из ВыбранноеЗначение Цикл НоваяСтрока = Объект.Материалы.Добавить();
НоваяСтрока.Материал = ВыбранныйЭлемент;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Поясним этот код.
Используя переменную ОтветПередДобавлением, мы определяем, был ли получен ответ от пользователя.
Если нет, то отменяем стандартную обработку для события ОбработкаВыбора и показываем блокирующее окно с вопросом пользователю. Если ответ от пользователя уже был получен, то список номенклатуры добавляется в табличную часть без вопросов.
Если значение переменной ОтветПередДобавлением не истинно, то сначала создается объект ОписаниеОповещения, в конструкторе которого первым параметром указывается имя процедуры - обработчика оповещения, которая будет выполнена после получения ответа пользователя. Во втором параметре указывается, в каком модуле расположена эта процедура (в нашем случае - в модуле формы). А в третьем параметре в качестве дополнительного параметра передается массив выбранных значений номенклатуры (ВыбранноеЗначение).
После этого с помощью немодального метода ПоказатьВо- прос() отображается окно с вопросом пользователю. В этот метод передается объект ОписаниеОповещения, указывающий на экспортную процедуру модуля (ДобавлениеЗавершение), которая будет выполнена после того, как пользователь сделает выбор в блокирующем окне.
В этой процедуре в параметре СписокНоменклатуры содержится массив выбранных значений номенклатуры. В параметре Результат содержится результат ответа пользователя. В случае положительного ответа пользователя значение переменной ОтветПередДобав- лением становится истинным, и затем выполняется добавление выбранных элементов номенклатуры в табличную часть документа (листинг 26.10).
Листинг 26.10. Процедура - обработчик оповещения «ДобавлениеЗавершение()»
&НаКлиенте
Процедура ДобавлениеЗавершение(Результат, СписокНоменклатуры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда ОтветПередДобавлением = Истина;
Для Каждого ВыбранныйЭлемент Из СписокНоменклатуры Цикл НоваяСтрока = Объект.Материалы.Добавить();
НоваяСтрока.Материал = ВыбранныйЭлемент;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Причем если пользователь уже подтвердил, что он хочет добавить номенклатуру в документ, то больше это вопрос не задается, так как значение переменной ОтветПередДобавлением становится истинным.
Остается только объявить эту переменную в самом начале модуля формы (листинг 26.11).
Листинг 26.11. Объявление переменной в модуле формы
&НаКлиенте
Перем ОтветПередДобавлением;
В режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки.
Результат выполнения примера будет таким же, как и в предыдущем случае, за исключением того, что вопрос пользователю будет задан после выбора номенклатуры, а не до этого. А также подтверждение о добавлении номенклатуры в документ требуется только один раз.
ПРИМЕЧАНИЕ
Проверить код конфигурации на предмет отсутствия модальных методов можно с помощью команды конфигуратора Конфигурация ► Проверка конфигурации... В окне параметров проверки нужно установить флажок Поиск использования модальности.
Ввод на основании
Механизм ввода на основании может быть использован для ввода новых объектов различного типа (документы, справочники, планы видов характеристик и т. д.). Мы рассмотрим этот механизм на примере ввода новых документов как наиболее распространенном.
Для каждого объекта конфигурации Документ можно разрешить его ввод на основании других объектов базы данных и возможность являться основанием для других объектов.
Действия по заполнению реквизитов при вводе на основании должны быть описаны в модуле объекта Документ, в обработчике события ОбработкаЗаполнения.
Это можно сделать вручную или с использованием конструктора ввода на основании, который позволяет визуальными средствами конструировать текст обработчика.
Рассмотрим пример, когда документ ОказаниеУслуги будет вводиться на основании элемента справочника Клиенты.
Команда ввода на основании В режиме «Конфигуратор»
Откроем окно редактирования объекта конфигурации Документ ОказаниеУслуги и добавим новый реквизит документа - ОбъектОснование с типом СправочникСсылка.Клиенты.
Создание такого реквизита не является обязательной частью механизма ввода на основании и понадобится нам только для того, чтобы впоследствии построить цепочку зависимых документов.
Перейдем на закладку Ввод на основании и определим состав документов, на основании которых может вводиться документ ОказаниеУслуги и основанием для которых он может являться.
Нажмем кнопку Редактировать элемент списка над списком Вводится на основании и выберем справочник Клиенты (рис. 26.5).
Конструктор
ввода
на
основании]])
Является
основанием
дл:
Выбор
объекта
©
тт
L
пк
|
0
Ш
Справочники
Отмена
@ПВ
Клиенты
ОШ
Сотрудники
ОШ
Номенклатура
ОШ
Склады
ОШ
ВариангыНоменклатуры
ОШ
ДополнительныеСвойстваНоменклатуры
ОШ
Субконто
ОШ
ВидыГраФиковРаботы
©
@
Документы
▼
Права
Обмен
данными
Прочее
►
Ввод
на
основании
&
К
Справочник.
Клиенты
Вводится
на
основании:
Основные
Подсистемы
Функциональные
опции
Данные
Нумерация
Движения
П
ос
ледовательности
Журналы
Формы
Поле
ввода
Команды
Макеты
Действия -1 | <Назад ] | Далее> | | Закрыть | | Справка
Рис. 26.5. Определение состава объектов, на основании которых вводится документ
Затем вызовем конструктор ввода на основании и зададим значения реквизитов документа, создаваемого на основании. Для этого воспользуемся кнопкой Заполнить выражения (рис. 26.6).
Рис.
26.6. Заполнение
значений
реквизитов
документа,
создаваемого
на
основании
Обратите внимание, что для заполнения реквизита ОбъектОснование конструктор предложил использовать значение ДанныеЗа- полнения.Ссылка. В данном случае такая запись будет избыточной, поскольку в качестве основания будет передана ссылка на элемент справочника.
Однако в общем случае событие ОбработкаЗаполнения возникает при создании нового объекта на основании некоторого переданного значения. Совсем не обязательно, что это значение будет иметь тип ссылки.
Согласимся со всем, что предложил конструктор, и нажмем OK.
В модуле документа будет сформирован текст обработчика события ОбработкаЗаполнения (листинг 26.12).
Листинг 26.12. Обработчик события «ОбработкаЗаполнения»
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) //{{_КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ // Данный фрагмент построен конструктором.
// При повторном использовании конструктора внесенные вручную изменения будут утеряны!!! Если ТипЗнч(ДанныеЗаполнения) = Тип(''СправочникСсылка.Клиенты'') Тогда // Заполнение шапки Клиент = ДанныеЗаполнения.Ссылка;
ОбъектОснование = ДанныеЗаполнения.Ссылка;
КонецЕсли;
//}} КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
КонецПроцедуры
Как видите, для каждого типа объекта-основания формируется своя ветка условия Если..., в которой происходит заполнение реквизитов нового документа.
В режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки и проверим работу ввода на основании.
Откроем список клиентов. Обратите внимание, что в командной панели формы списка справочника Клиенты появилась команда Создать на основании.
Выделив нужного клиента и выполнив команду Создать на основании ► Оказание услуги, создадим новый документ Оказание услуги, где в качестве клиента будет выбран выделенный в списке справочника клиент (рис. 26.7).
о
I
I
*-
-»
|
Клиенты
Создать
] [ Найти... ] [ Отменить
поиск ]
Создать
на основании т
i|
Еще
-
Оказание
услуги
Ф.
И. О.
Код
=
Иванов
Михаил Юрьевич
000000001
=
Клиент
отделения
OTD00000001
=
Клиент
филиала
ФЛ000000001
=
Роман
000000002
=
Спиридонова
Галина
000000003
Рис. 26.7. Создание документа «Оказание услуги» на основании клиента
Введите самостоятельно еще несколько документов на основании какого-либо клиента.
Объекты, введенные на основании
Наряду с тем, что платформа содержит механизмы, позволяющие создавать одни объекты на основании других, каких-либо специальных механизмов для анализа цепочек связанных объектов в платформе нет.
Для решения подобной задачи мы дадим некоторые рекомендации, которые могут быть положены в основу конкретного решения.
Для построения цепочек связанных объектов необходимо у каждого объекта, который будет вводиться на основании, создать служебный реквизит для хранения ссылки на объект-основание. Затем следует создать объект конфигурации КритерийОтбора, который будет использоваться для установки отбора по требуемому значению служебного реквизита.
В дальнейшем для получения всех объектов, введенных на основании, достаточно будет установить нужное значение отбора в критерии отбора.
Критерий отбора
Объект конфигурации КритерийОтбора предназначен для задания правил, по которым может выполняться отбор объектов.
Этот объект используется в случае поиска различной информации, когда, например, требуется отобрать все документы, в которых используется (в реквизитах и в табличных частях) определенный контрагент.
При этом можно учитывать также и другие условия отбора информации (например, поиск ведется только среди проведенных документов или в определенном интервале дат).
Получение объектов, введенных на основании
Поскольку задача получения всех объектов, введенных на основании какого-либо другого объекта, чаще всего возникает при анализе документов, мы рассмотрим применение описанной выше методики на примере получения списка документов, введенных на основании элемента справочника Клиенты.
В режиме «Конфигуратор»
Раскроем ветвь Общие и создадим новый объект конфигурации КритерийОтбора с именем ОказаниеУслуги.
На закладке Данные выберем тип используемого критерия - Справоч- никСсылка.Клиенты.
На закладке Состав в качестве объектов, входящих в критерий, выберем реквизит ОбъектОснование документа ОказаниеУслуги (рис. 26.8).
Рис.
26.8. Состав
критерия
отбора
«ОказаниеУслуги»
После этого в панели навигации формы элемента справочника Клиенты в группе Перейти появится команда для открытия критерия отбора.
Создадим эту форму и на закладке Командный интерфейс установим видимость команды Оказание услуги (рис. 26.9).
XI##
Команда
Видимость
| Автовидимость
| Автоположе...
е
Щ
Панель
навигации
в
Важное
Q
п
П
ерейти
Оказание
услуги
(Обьект.Сс...
а
См.
также
©
^
Командная
панель
а
Важное
©
а
Создать
на
основании
S Элементы Щ Командный интерфейс J~
Рис. 26.9. Команда открытия критерия отбора из формы элемента справочника «Клиенты»
В режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки и проверим работу критерия отбора.
В форме списка клиентов выделим клиента Роман, на основании которого мы создавали документы Оказание услуги.
Откроем форму этого клиента. В панели навигации появилась команда Оказание услуги для открытия формы списка созданного нами критерия отбора с установленным отбором по открытому элементу справочника Клиенты.
Выполним эту команду (рис. 26.10).
Рис.
26.10. Открытие
списка
критерия
отбора
«ОказаниеУспуги»
с
отбором
по
клиенту
Мы видим в этом списке документы Оказание услуги, созданные на основании клиента Роман. К содержимому документа можно перейти, нажав соответствующую ссылку в списке документов.
( \
Контрольные вопросы
Л
Что такое подбор?
Как организовать различные виды подбора в табличную часть формы документа?
Как задать вопрос пользователю в команде?
Как задать вопрос пользователю в обработчике события формы? Чем модальные окна отличаются от блокирующих окон?
Что такое ввод на основании?
Как
с помощью критерия отбора вывести
список объектов, введенных на основании
текущего объекта?
[ЗАНЯТИЕ 27
Приемы разработки
форм
продолжительность
