Добавлен: 31.03.2023
Просмотров: 937
Скачиваний: 13
ИзвлечьЦену(Товар)
Возврат Товар.ЦенаПоступления;
КонецФункции
Кроме разработанного сервиса извлечения информации из справочника «Товары» требуется обеспечить также автоматический расчет в поле «Сумма» после ввода количества единиц товара. Для этого вернемся к редактированию формы документа «Поступление» в режиме конфигуратора. Здесь необходимо сначала открыть окно свойств поля ПереченьКоличество и перейти к разделу «События», где щелкнуть на значке лупы для события «ПриИзменении». В результате этих действий на экране откроется окно для написания программного кода обработчика данного события. Здесь следует разместить текст процедуры, которая представлена в листинге 5.10.
Листинг 5.10. Обработчик события ПриИзменении для поля Количество
&НаКлиенте
Процедура ПереченьКоличествоПриИзменении(Элемент)
Стр=Элементы.Перечень.ТекущиеДанные;
Стр.Сумма= Стр.Количество*Стр.Цена;
КонецПроцедуры
Если теперь перейти в режим 1С:Предприятие, открыть форму документа Поступление, выбрать товар и ввести количество единиц товара, то мы увидим, что сумма вычисляется автоматически (рис. 226).
Рис. 226. Вычисление поля Сумма для документа Поступление после выбора товара
Существует еще несколько вариантов решения данной задачи. Можно разместить на вкладке модуля формы документа универсальную функцию, которая будет выдавать значение реквизита по его имени и ссылке на товар в текущей строке табличной части документа. Текст такой функции под названием ИзвлечьРеквизит приведен в листинге 5.11.
Листинг 5.11. Универсальная функция для извлечения реквизита
&НаСервереБезКонтекста
Функция ИзвлечьРеквизит(Ссылка,ИмяРеквизита)
Возврат Ссылка[ИмяРеквизита];
КонецФункции
С учетом этой новой функции необходимо по-другому оформить обработку события ПриИзменении для поля Товар. Новый вариант процедуры приведен в листинге 5.12.
Листинг 5.12. Измененный обработчик события ПриИзменении для поля Товар
&НаКлиенте
Процедура ПереченьТоварПриИзменении(Элемент)
Стр=Элементы.Перечень.ТекущиеДанные;
Стр.ЕдиницаИзмерения=ИзвлечьРеквизит(Стр.Товар,"ЕдиницаИзмерения");
Стр.Цена=ИзвлечьРеквизит(Стр.Товар,"ЦенаПоступления");
КонецПроцедуры
Разработка команды для формирования скидки
Рассмотрим еще одну задачу, связанную с автоматизацией работы пользователя с документом «Поступление». Допустим, что фирма-поставщик может предоставлять нам скидку при поставке товаров по определенному документу. Причин для скидок существует много, и их не имеет смысла обсуждать. Величина скидки также может быть различной.
Реализуем следующий функционал в форме документа «Поступление»: создадим на форме кнопку «СкидкаНаОдинПроцент», щелчком на которой все цены и суммы в табличной части документа должны автоматически уменьшаться на один процент. Значит, при каждом последующем щелчке на данной кнопке цены и суммы по товарам также дополнительно уменьшаются еще на один процент.
Для начала необходимо в форме документа «Поступление» создать команду «СкидкаНаОдинПроцент». Для этого на дополнительной вкладке «Команды» в окне редактирования формы воспользуемся значком «Добавить» (рис. 227).
Рис. 227. Создание новой команды
После указания имени команды в окне свойств перейдем к разделу «Действие», где щелчком на значке лупы перейдем в окно редактора программного кода команды. Текст процедуры для данной команды представлен в листинге 5.13.
Листинг 5.13. Процедура для команды СкидкаНаОдинПроцент
&НаКлиенте
Процедура СкидкаНаОдинПроцент(Команда)
Для Каждого ТекСтрокаПеречень Из Объект.Перечень Цикл
ТекСтрокаПеречень.Цена=ТекСтрокаПеречень.Цена*0.99;
ТекСтрокаПеречень.Сумма=
ТекСтрокаПеречень.Цена*ТекСтрокаПеречень.Количество;
КонецЦикла
КонецПроцедуры
В цикле производится последовательный перебор строк табличной части документа и при каждом проходе цикла цена в очередной строке уменьшается на один процент. После этого с учетом новой цены пересчитывается сумма по товару в текущей строке табличной части документа.
Таким образом, мы создали команду, которая выполняет пересчет всех строк в табличной части документа. Теперь необходимо разместить на форме элемент управления, с помощью которого пользователь данную команду сможет выполнять. По логике для этого лучше всего подходит кнопка.
Для создания кнопки в окне редактирования формы документа нужно перетащить мышью созданную команду на элемент «Командная панель». В результате система самостоятельно добавит на форму элемент управления для выполнения разработанной команды (рис. 228).
Рис. 228. Добавление кнопки на форму документа
Теперь все готово и можно проверить разработку на практике. Для этого перейдем в режим 1С: Предприятие (рис. 229).
Рис. 229. Формирование скидки в документе по поступлению товаров
Программное открытие формы
В процессе открытия формы для нового или существующего объекта происходит определенная последовательность программных вызовов. Так, при открытии формы нового объекта происходит следующая последовательность событий:
- Обработка заполнения
- Создание на сервере
- Открытие
В случае открытия формы существующего объекта последовательность событий несколько другая:
- Чтение на сервере
- Создание на сервере
- Открытие
Для программного открытия формы используется метод ОткрытьФорму. Данный метод доступен только в контексте клиента и содержит ряд параметров, которые позволяют задать форму для открытия и определить свойства открываемой формы. Значения параметров, передаваемых форме, программист может установить самостоятельно в обработчике события формы ПриСоздании на сервере.
Перейдем к примеру на данную тему. Скажем, в форме документа «Поступление» необходимо обеспечить удобный просмотр и редактирование цен по ступления товаров. Для этого мы создадим дополнительную кнопку на форме данного документа, щелчком на которой будет открываться форма справочника «Товары», но без цен продажи. Для начала такую форму справочника «Товары» необходимо создать.
Технические действия по созданию новой формы начинаются с того, что в окне редактирования объекта конфигурации Товары следует перейти на вкладку Формы и с помощью конструктора форм создать форму списка. Обратим внимание на то, что создаваемую форму не надо назначать в качестве основной для данного справочника (рис. 230).
Рис. 230. Окно конструктора формы справочника
В качестве имени новой формы укажем ФормаДляУстановкиЦенПоступления. В процессе работы с конструктором формы следует включить в форму не все реквизиты, а только следующие: Код, Наименование, ЕдиницаИзмерения и ЦенаПоступления. В результате в режиме конфигуратора форма должна выглядеть так, как показано на рис. 231.
. Рис. 231. Форма списка справочника «Товары»
Теперь после разработки формы списка необходимо обеспечить ее вызов из формы документа «Поступление». Для этого в режиме конфигуратора перейдем в окно редактирования формы данного документа. Здесь для начала нам необходимо создать новую команду, для чего на вкладке «Команды» следует воспользоваться кнопкой пиктографического меню для добавления новой команды, которую назовем «ПросмотрТоваров». После этого щелкнем на значке лупы в разделе Действие и введем программную процедуру, соответствующую данной команде (листинг 5.14).
Листинг 5.14. Процедура для команды для открытия формы справочника Товары
&НаКлиенте
Процедура ПросмотрТоваров(Команда)
ОткрытьФорму("Справочник.Товары.Форма.ФормаДляУстановкиЦенПоступления");
КонецПроцедуры
Теперь необходимо разместить на форме документа кнопку, чтобы обеспечить выполнение команды «ПросмотрТоваров» щелчком на кнопке. Для этого достаточно в окне редактора формы перетащить мышью данную команду на элемент «Командная панель». В результате на форме появится новый элемент управления, а его функциональность будет связана с разработанной командой.
Осталось перейти в режим 1С:Предприятие и открыть форму документа Поступление (рис. 232).
Рис. 232. Кнопка на форме документа «Поступление»
Использование динамического списка
Рассмотрим теперь более сложную задачу. Часто бывает так, что при работе с документами по поступлению товаров требуется обращать внимание не на весь перечень позиций, а только на определенную категорию, отличающуюся по цене или по каким-то другим параметрам. Для определенности будем считать, что нам необходимо в документе «Поступление» часто открывать список «дорогих» товаров, цена которых за единицу измерения превышает 100 рублей. Как и в предыдущем примере, для решения задачи разместим на форме документа кнопку с соответствующим названием, обеспечивающую вывод списка условно дорогих товаров.
Разработку можно разделить на несколько этапов. Для начала нам необходимо создать форму списка для справочника «Товары». В настоящий момент кроме форм, предлагаемых системой по умолчанию, существует одна пользовательская форма — «ФормаДляУстановкиЦенПоступления». В режиме конфигуратора перейдем в окно редактирования справочника «Товары». Здесь необходимо на вкладке «Формы» создать новую форму списка, которую назовем «ФормаДляДокумента» (будем открывать её из документа). Обратим внимание на то, что данную форму не надо делать основной. В результате при работе со справочником обычным способом будет открываться форма списка, предлагаемая по умолчанию, а из документа «Поступление» щелчком на нужной кнопке мы будем открывать форму с именем «ФормаДляДокумента».
В процессе работы с конструктором формы в списке реквизитов укажем все имеющиеся реквизиты справочника, за исключением цены продажи. После несложных технических действий с конструктором мы получим результат, представленный на рис. 233.
. Рис. 233. Форма списка справочника «Товары» с именем «ФормаДляДокумента»
Здесь присутствует реквизит «Список». Щелкнув правой кнопкой мыши на этом реквизите, вызовем контекстное меню и выберем пункт «Свойства», что позволит открыть на экране окно с аналогичным названием (рис. 234).
. Рис. 234. Окно свойств реквизита «Список»
В данном окне свойств установим флажок «Произвольный запрос», после чего щелкнем на ссылке «Открыть» в строке «Настройка списка». В результате на экране откроется окно «Динамический список», в котором требуется сформировать новый текст запроса, представленный на рис. 235. После этого в данном окне остается щелкнуть на кнопке «OK».
Рис. 235. Запрос для динамического списка
В данном запросе мы использовали параметр «НижняяГраницаЦены». Для работы с рассматриваемой формой этот параметр должен быть установлен при открытии формы. Процесс передачи значений параметров в форму требует, чтобы сами параметры существовали в форме. Для создания параметра «НижняяГраницаЦены» перейдем на вкладку «Параметры» в окне редактирования формы (рис. 236) и сформируем этот параметр с помощью кнопки «Добавить». В качестве типа данных создаваемого параметра следует указать число целого типа.
Рис. 236. Добавление параметра в форму списка с именем «ФормаДляДокумента»
На этом действия с формой справочника завершаются. Перейдем теперь к доработке формы документа «Поступление». Для начала нам потребуется создать новую команду с именем «ДорогиеТовары», которая будет использована для открытия формы «ФормаДляДокумента» справочника «Товары». Программный код данной команды приведен в листинге 5.15, в тексте которого мы установили нижнюю границу цены в 100 рублей. После создания команды требуется разместить на форме документа «Поступление» кнопку, с помощью которой пользователь ее сможет выполнить. Для этого достаточно перетащить команду «ДорогиеТовары» на элемент «Командная панель».
Листинг 5.15. Процедура для команды ДорогиеТовары
&НаКлиенте
Процедура ДорогиеТовары(Команда)
ПараметрыФормы=Новый Структура("НижняяГраницаЦены",30);
ОткрытьФорму("Справочник.Товары.Форма.ФормаДляДокумента",ПараметрыФормы);