Реорганізація довідника «Номенклатура»
До цих пір ми не звертали уваги на те, що в нас немає ніякої ознаки, по якій ми могли б сказати, чим є конкретний елемент довідника Номенклатура: матеріалом або послугою. Щоб розв'язати цю проблему ми створимо у довідника Номенклатура спеціальний реквізит, у якого тип значення утвориться новим об'єктом конфігурації Перерахування.
Об'єкт конфігурації Перечисление є прикладним і призначений для опису структури зберігання постійних наборів значень, не змінюваних у процесі роботи конфігурації. На основі об'єкта конфігурації Перечисление платформа створює в базі даних інформаційну структуру, у якій може зберігатися набір деяких постійних значень. Набір всіх можливих значень, які містить перерахування, задається при конфігуруванні системи, і користувач не може змінювати їх, видаляти або додавати нові.
Відкриємо конфігуратор і створимо спочатку новий об'єкт конфігурації Перечисление з ім'ям ВидыНоменклатуры.
На закладці Данные додамо два значення перерахування: Материал і Услуга. Для цього натиснемо кнопку Добавить над списком значень перерахування (рис. 6.11).
Щоб прив'язати номенклатуру до значень перерахування, ми зробимо:
У режимі Конфігуратор створимо в довіднику Номенклатура реквізит, що буде зберігати значення перерахування.
У режимі 1С:Підприємство проставимо потрібні значення цього реквізиту для всіх елементів довідника Номенклатура.
Рис. 6.11. Дані перерахування «Видыноменклатуры»
Додамо в довідник Номенклатура новий реквізит ВидНоменклатуры з типом ПеречислениеСсылка.Видыноменклатуры.
Для цього відкриємо вікно редагування об'єкта конфігурації Довідник Номенклатура й на закладці Данные натиснемо кнопку Добавить над списком реквізитів довідника (рис. 6.12).
Рис. 6.12. Дані довідника «Номенклатура»
Після цього запустимо 1С:Підприємство в режимі налагодження. Платформа видасть попередження про те, що наше перерахування не включене в жодну підсистему. Проігноруємо його й приймемо зміни конфігурації.
У режимі 1С:Підприємство задамо для кожного елемента довідника Номенклатура відповідне значення реквізиту Вид номенклатуры (рис. 6.13).
Рис. 6.13. Дані довідника «Номенклатура»
Тепер подивимося, як можна застосувати нові дані, отримані завдяки використанню перерахування ВидыНоменкпатуры.
Зміна процедури проведення документа «Надання послуги»
Якщо ви пам'ятаєте, коли створювалися рухи документа ОказаниеУслуги по регістру накопичення ОстаткиМатериалов, ми сказали, що вони не зовсім правильні, оскільки в регістр будуть попадати не тільки записи про витрачені матеріали, але й записи про зроблені послуги. Тепер ми доробимо документ таким чином, щоб у регістрі з'являлися тільки записи, що стосуються витрат матеріалів. Ця доробка буде не зовсім ефективна з погляду продуктивності, зате дозволить нам одержати потрібні дані в регістрі ОстаткиМатериалов.
Скорегуємо рухи документа, виключивши з обробки ті рядки табличної частини, у яких перебувають послуги. Для цього відкриємо в конфігураторі модуль документа ОказаниеУслуги (контекстне меню документа - Открыть модуль объекта) і додамо в оброблювач події ОбработкаПроведения умову.
У результаті процедура ОбработкаПроведения повинна виглядати наступним чином (лістинг 6.1).
Лістинг 6.1. Руху документа «Оказаниеуслуги»
Процедура ОбработкаПроведенияЮтказ, Режим}
//{{...КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
/Данный фрагмент построен конструктором.
//При повторном использовании конструктора
// внесенные вручную изменения будут утеряны!!!
Движения.ОстаткиМатериаловЗаписывать = Истина;
Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл
Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры = Леречисления.ВидыНоменклагуры.Материал Тогда
// регистр ОстаткиМатериалов Расход
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
ДвижениеЛериод = Дата;
Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура; ДвижениеХклад = Склад;
Движение.Количество = ТекСтрокаПереченьНоменклатурыЖоличество;
КонецЕсли;
КонецЦикла;
//}}...КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Доданий текст виключає виконання операторів циклу для тих рядків табличної частини документа, у яких номенклатура не є матеріалом.
До значення перерахування Материал ми звертаємося, використовуючи менеджер перерахування ВидыНоменклатуры (Перечисление.ВидыНоменклатуры) і вказуючи в якості його властивості ім'я потрібного нам значення перерахування.
Запустимо 1C:Підприємство в режимі налагодження й перевіримо роботу процедури проведення документа Оказание Услуги.
Відкриємо документ Оказание услуги № 1 і внесемо в нього наступні зміни:
видалимо з табличної частини рядок, що містить Транзистор Philips;
додамо послугу - Підключення води;
додамо матеріал - Шланг гумовий (рис. 6.14).
Зверніть увагу, що ціни підставляються автоматично з регістра відомостей Ціни. Натиснемо кнопку Провести в командній панелі форми документа.
Потім виконаємо команду Остатки материалов у панелі навігації форми, щоб перейти до записів регістра Остатки материалов, пов'язаним з даним документом (рис. 6.15).
Як ми бачимо, в рухи по регістру Остатки материалов включаються тільки рядки, що містять матеріали. Запис про послугу Подключение воды в рухи не потрапив.
Рис. 6.14. Змінений документ «Оказание услуги № 1»
Рис. 6.15. Записи регістра «Остатки материалов»
Контрольні питання
Для чого призначений об'єкт конфігурації Регістр
відомостей.
Якими особливостями володіє об'єкт конфігурації Регістр відомостей.
У чому головні відмінності регістра відомостей від регістра накопичення.
Що таке періодичний регістр відомостей і що таке незалежний регістр відомостей.
Як створити періодичний регістр відомостей.
Що таке провідний вимір регістра.
Для чого призначений об'єкт конфігурації Перерахування.
Як за допомогою перерахування задати приналежність елементів довідника до тої або іншої смислової групи.
Як звернутися до значення перерахування засобами убудованої мови.
