Регистрация расхода только той номенклатуры, которая является материалом

Что такое перечисление

Добавление перечисления

Привязка номенклатуры к значениям перечисления «ВидНоменклатуры».................................................................................

Регистрация расхода только той номенклатуры, которая является материалом

Контрольные вопросы

 

До сих пор мы с вами не обращали внимания на то, что у нас нет никакого признака, по которому мы могли бы сказать, чем является конкретный элемент справочника Номенклатура: материалом или услугой. То, что все элементы справочника разложены у нас по некоторым группам, не может являться надежным критерием оценки: группы можно удалить, переименовать, сгруппировать элементы по другим принципам.

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

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

Кроме этого, мы скорректируем процедуру проведения документа Оказание услуги и покажем, как работать с перечислением средст­вами встроенного языка.

 

Что такое перечисление

Объект конфигурации Перечисление предназначен для описания структуры хранения постоянных наборов значений, не изменяемых в процессе работы конфигурации. На основе объекта конфигурации Перечисление платформа создает в базе данных таблицу, в которой может храниться набор некоторых постоянных значений.

В реальной жизни этому объекту может соответствовать, например, перечисление вариантов указания цены («включая НДС», «без НДС»). Набор всех возможных значений, которые содержит пере­числение, задается при конфигурировании системы, и пользователь не может изменять их, удалять или добавлять новые.

Из этого следует важная особенность перечисления: значения перечисления не «обезличены» для конфигурации, на них могут опираться алгоритмы работы программы.

 

Добавление перечисления

В режиме Конфигуратор

Откроем конфигуратор и создадим сначала новый объект конфигу­рации Перечисление с именем ВидыНоменклатуры.

На закладке Данные добавим два значения перечисления: Материал и Услуга. Для этого нажмем кнопку Добавить над списком значений перечис­ления (рис. 1).

Рис. 1. Данные перечисления «ВидыНоменклатуры»

 

Привязка номенклатуры к значениям перечисления «ВидНоменклатуры»

Чтобы привязать номенклатуру к значениям перечисления, мы сделаем следующее:

■ В режиме Конфигуратор создадим у справочника Номенклатура реквизит, который будет хранить значение перечисления.

■ В режиме 1С:Предприятие проставим нужные значения этого реквизита для всех элементов справочника Номенклатура.

 

В режиме Конфигуратор

Добавим в справочник Номенклатура новый реквизит ВидНоменклатуры с типом ПеречислениеСсылка.ВидыНоменклатуры. Для этого откроем окно редактирования объекта конфигурации Справочник Номенклатура и на закладке Данные нажмем кнопку Добавить над списком реквизитов справочника (рис. 2)

 
 

Рис. 2 Данные справочника Номенклатура

В режиме 1С:Предприятие

После этого запустим 1С:Предприятие в режиме отладки.

Платформа выдаст предупреждающее сообщение о том, что наше перечисление не включено ни в одну подсистему. Проигнорируем его и примем изменения конфигурации.

В режиме 1С:Предприятие зададим для каждого элемента справочника Номенклатура соответствующее значение реквизита Вид номенклатуры (рис. 3).

Рис. 3. Данные справочника «Номенклатура»

Теперь посмотрим, как можно применить новые данные, полученные благодаря использованию перечисления ВидыНоменклатуры.

Регистрация расхода только той номенклатуры, которая является материалом

Если вы помните, когда создавались движения документа ОказаниеУслуги по регистру накопления ОстаткиМатериалов, мы сказали, что они не совсем правильные, поскольку в регистр будут попадать не только записи об израсходованных материалах, но и записи об оказанных услугах(Листинг 1).

Листинг 1. Процедура ОбработкаПроведения(Отказ, Режим)

//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

// Данный фрагмент построен конструктором.

// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

// регистр ОстаткиМатериалов Расход

Движения.ОстаткиМатериалов.Записывать = Истина;

Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл

Движение = Движения.ОстаткиМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;

Движение.Склад = Склад;

Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;

КонецЦикла;

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

 

Теперь мы доработаем документ таким образом, чтобы в регистре появлялись только записи, относящиеся к расходу материалов.

Для этого мы сначала в режиме Конфигуратор изменим процедуру проведения документа так, чтобы в регистр попадали записи только о той номенклатуре, которая является материалом, а потом в режиме 1С:Предприятие заново проведем (перепроведем) все документы Оказание услуги, чтобы данные в регистре изменились в соответс­твии с новым алгоритмом проведения документа.

Эта доработка будет не совсем эффективна с точки зрения произво­дительности, зато позволит нам получить нужные данные в регистре ОстаткиМатериалов.

 

В режиме Конфигуратор

Скорректируем движения документа, исключив из обработки те строки табличной части, в которых находятся услуги.

Для этого откроем в конфигураторе модуль документа ОказаниеУслуги (контекстное меню документа - Открыть модуль объекта) и добавим в обработчик события ОбработкаПроведения это условие.

Текст следует добавить в начало цикла обхода табличной части документа после строки Для Каждого ТекСтрокаПереченьНоменкла-туры Из ПереченьНоменклатуры Цикл.

В результате процедура ОбработкаПроведения должна выглядеть следующим образом (листинг 2).

Листинг 2. Движения документа «ОказаниеУслуги»

Процедура ОбработкаПроведения(Отказ, Режим)

//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

// Данный фрагмент построен конструктором.

// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

// регистр ОстаткиМатериалов Расход

Движения.ОстаткиМатериалов.Записывать = Истина;

Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл