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



 

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

 

Листинг 10.3.Процедура«ОбработкаПроведения()»документа «ОказаниеУслуги»

Процедура ОбработкаПроведения(Отказ, Режим) //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

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

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

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

Движения.ОстаткиМатериалов.Записывать = Истина; Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл

Движение = Движения.ОстаткиМатериалов.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Материал =ТекСтрокаПереченьНоменклатуры.Номенклатура; Движение.Склад = Склад;

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

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры

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

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

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

 

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

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

 

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

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

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

 

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

Процедура ОбработкаПроведения(Отказ, Режим) //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

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

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

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

Движения.ОстаткиМатериалов.Записывать = Истина; Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл

Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда

Движение = Движения.ОстаткиМатериалов.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура; Движение.Склад = Склад;

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

КонецЕсли;

КонецЦикла;

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры

Добавленный текст исключает выполнение операторов цикла для тех строк табличной части документа, в которых номенклатура не является материалом. Поясним это условие.

В переменной ТекСтрокаПереченьНоменклатуры содержатся на каждом шаге цикла данные текущей строки табличной части ПереченьНоменклатуры.

Указывая через точку имя колонки Номенклатура (ТекСтрокаПеречень Номенклатуры.Номенклатура), мы обращаемся к ссылке на элемент номенклатуры, которая содержится в этой строке табличной части.

Затем, указывая через точку ВидНоменклатуры (ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры), мы обращаемся к реквизиту ВидНоменклатуры этого элемента справочника Номенклатура.

Полученное значение с помощью оператора сравнения (=) мы сравниваем со значением Материал перечисления ВидыНоменклатуры (Перечисления.ВидыНоменклатуры.

Материал).

Если значения совпадают, операторы цикла выполняются. Если нет, мы переходим к следующей итерации цикла, к следующей строке табличной части.

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

Запустим «1С:Предприятие» в режиме отладки и проверим работу процедуры проведения документа Оказание услуги.

Откроем список документов, выполнив команду Оказание услуг

в разделе Оказание услуг.

Откроем документ Оказание услуги № 1 и внесем в него следующие изменения:

-удалим из табличной части строку, содержащую Транзистор Philips;

-  добавим услугу – Подключение воды;

- добавим материал – Шланг резиновый (рис. 10.7).

 

 

Рис. 10.7.Измененный документ «Оказание услуги № 1»

 

Обратите внимание, что цены подставляются автоматически из регистра сведений Цены.

Нажмем кнопку Провести в командной панели формы документа.

Затем выполним команду Остатки материалов в панели навигации формы, чтобы перейти к записям регистра Остатки материалов, связанным с данным документом (рис. 10.8).

 

 

Рис. 10.8.Записи регистра «Остатки материалов»

 

Как мы видим, в движения по регистру Остатки материалов включаются только строки, содержащие материалы. Запись про услугу Подключение воды в движения не попала.

 

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

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

 

1)  Для чего предназначен объект конфигурации«Перечисление»?

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

2)  Как создать новое перечисление?

 

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

 

На закладке Данные добавим два значения перечисления: Материал и Услуга

 

3) Как с помощью перечисления задать принадлежность элементовсправочника к той или иной смысловой группе?

4)

5) Как обратиться к значению перечисления средствами встроенного языка?

6) Как задать произвольное представление объекта конфигурации?

 


Дата добавления: 2018-06-01; просмотров: 885; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!