Практикум 4. Створення періодичного реєстру відомостей Ціни
Розпочнемо створення періодичного реєстру відомостей, який зберігатиме розгорнуті в часі роздрібні ціни матеріалів і вартості послуг, що надаються нашою фірмою.Створення функції РоздрібнаЦіна(). Автоматичне заповнення ціни в документі НаданняПослуги. Перелічення. Реорганізація довідника Номенклатура. Зміна процедури проведення документа НаданняПослуги. Створення реєстру накопичення ВартістьМатеріалів. Зміна процедури проведення документа НаданняПослуги. Створення оборотного реєстру накопичення Продажі. Зміна процедури проведення документа НаданняПослуги
Створення функції РоздрібнаЦіна()
Автоматичне заповнення ціни в документі НаданняПослуги
Перелічення. Реорганізація довідника Номенклатура
Зміна процедури проведення документа НаданняПослуги
Створення реєстру накопичення ВартістьМатеріалів
Зміна процедури проведення документа НаданняПослуги
Створення оборотного реєстру накопичення Продажі
Зміна процедури проведення документа НаданняПослуги
Розпочнемо створення періодичного реєстру відомостей, який зберігатиме розгорнуті в часі роздрібні ціни матеріалів і вартості послуг, що надаються нашою фірмою.
1. Створіть новий об'єкт конфігурації РеєстрВідомостей з іменем Ціни.
2. Установимо періодичність цього реєстру в межах секунди.

3. На вкладці Дані створимо вимір реєстру Номенклатура з типом ДовідникПосилання.Номенклатура. Зазначимо, що цей вимір буде провідним.

Властивість Провідне має сенс використовувати лише тоді, коли вимір має тип посилання на об'єкт бази даних.
Установлення властивості Провідне означатиме, що запис реєстру відомостей становить інтерес, доки існує цей об'єкт. У разі видалення об'єкта, усі записи реєстру відомостей за цим об'єктом також буде автоматично видалено. Крім того, у формі списку довідника з'являється кнопка командної панелі Перейти. За нею можливий перехід до записів реєстру, відібраних за значенням вибраного елемента довідника.
3. Створимо новий ресурс Ціна, тип Число, довжина 15, точність 2, невід'ємне.

4. Запустимо 1С:Підприємство в режимі налагодження та подивимося, як працює наш періодичний реєстр відомостей Ціна.
5. Виконайте команду Операції в†’ Реєстр відомостей в†’ Ціни.
6. Задайте вартість послуг фірми та роздрібні ціни на матеріали таким чином:

Оскільки ціни зберігаються з прив'язкою до дати, ми можемо заздалегідь установити нові ціни та бути впевненими в тому, що нові ціни набудуть чинності не раніше зазначеної для
них дати.
Тепер подивимося, як можна використати задані нами ціни в документі НаданняПослуги.
Створення функції РоздрібнаЦіна()
Спочатку ми створимо функцію, яка повертатиме нам актуальну роздрібну ціну номенклатури.
1. Відкрийте конфігуратор, у гілці Загальні в†’ Загальні модулі створимо новий об'єкт конфігурації Модуль і назвемо його РоботаЗДовідниками.
2. Помістимо в ньому такий текст:

Для отримання роздрібної ціни ми передаватимемо у функцію два параметри:
- АктуальнаДата → параметр типу Дата визначає точку на осі часу, у якій нас цікавить значення роздрібної ціни;
- ЕлементНоменклатури → посилання на елемент довідника Номенклатура, для якого ми хочемо отримати роздрібну ціну.
У тілі процедури ми спочатку створюємо допоміжний об'єкт Відбір. За його допомогою визначаємо, що нас цікавитимуть записи реєстру, у яких вимір Номенклатура дорівнює переданому в процедуру посиланню на елемент довідника.
У другому рядку ми звертаємося до менеджера реєстру відомостей Ціни (РеєстриВідомостей.Ціни) і виконуємо метод ОтриматиОстаннє(), який повертає нам значення ресурсів найпізнішого запису реєстру, що відповідає переданій даті (АктуальнаДата) і значенням вимірів реєстру (Відбір).
Значення ресурсів повертаються в об'єкті Структура, тому в наступному рядку ми отримуємо шукану роздрібну ціну, просто зазначивши через крапку ім'я потрібного нам ресурсу реєстру (ЗначенняРесурсів.Ціна).
Тепер перевіримо, як працює ця функція.
Автоматичне заповнення ціни в документі НаданняПослуги
Під час створення документа НаданняПослуги нам необхідно забезпечити автоматичне заповнення поля Ціна після того, як користувач вибере послугу. Причому ціна послуги повинна визначатися виходячи з дати створюваного документа.
1. Відкрийте форму ФормаДокумента у документі НаданняПослуги.
2. Відкрийте властивості поля введення, розташованого в колонці Номенклатура, і внизу списку знайдіть подію ПідЧасЗміни.
3. Натиснемо кнопку з лупою та у відкритій заготовці обробника події напишемо такий текст:

Прокоментуємо вміст обробника.
Перший рядок обробника нам уже знайомий: ми отримуємо поточний рядок табличної частини документа, оскільки він знадобиться нам надалі.
У другому ми встановлюємо отриману ціну в документі, викликаючи нашу процедуру РоздрібнаЦіна. Першим параметром ми передаємо дату документа, на яку необхідно отримати ціну. Другим параметром ми передаємо посилання, яке відображає елемент керування форми, що викликав цю подію (Елемент.Значення), тобто посилання на елемент довідника Номенклатура.
Насамкінець ми викликаємо нашу процедуру РозрахуватиСуму із загального модуля РоботаЗДокументами для того, щоб вона перерахувала підсумкову суму в рядку нашого документа.
4. Запустіть 1С:Підприємство в режимі налагодження та відкрийте реєстр відомостей Ціни. Для транзистора Рhilips додамо наступним числом нову ціну:

5. Тепер відкриємо документ НаданняПослуги №– 1. Цим документом ми якраз «витратили» два таких транзистори.
Установимо дату документа такою самою, як дата, коли було задано перше значення ціни транзистора, і повторимо вибір транзистора в колонці Номенклатура табличної частини документа. Автоматично буде встановлено перше значення ціни.

Тепер змінимо дату документа на «правильну» (тобто ту, яка була) і знову повторимо вибір транзистора. Буде встановлено нове значення ціни:

Таким чином, у документі з'являється актуальна на момент створення документа ціна послуги.
Перелічення. Реорганізація довідника Номенклатура
1. Створіть новий об'єкт конфігурації Перелічення з іменем ВидиНоменклатури.
2. На вкладці Дані додамо два значення перелічення: Матеріал і Послуга.

3. Потім до довідника Номенклатура додамо новий реквізит ВидНоменклатури з типом ПереліченняПосилання.ВидиНоменклатури.
![Е Справочник Номенклатура Свойства: Реквизит Основные Иерархия Владельцы Данные Нумерация Формы Макеты Подсистемы Ввод на основании Права Интерфейсы Обмен данными Прочее Длина кода Длина наименования гТип кода — Число Строка г Основн О В вр 0 В ВР П[М]! Ў](/img/materialy_praktikum_4_sozdanie_periodicheskogo_registra_svedeniy_tseny/107.png)
4. Запустіть 1С:Підприємство в режимі налагодження та задайте для кожного елемента довідника Номенклатура відповідне значення реквізиту ВидНоменклатури.

Тепер подивимося, як можна застосувати нові дані, отримані завдяки використанню перелічення ВидиНоменклатури.
Зміна процедури проведення документа НаданняПослуги
Якщо ви пам'ятаєте, то, коли створювалися рухи документа НаданняПослуги за реєстром накопичення ЗалишкиМатеріалів, ми сказали, що вони не зовсім правильні, оскільки до реєстру потраплятимуть не лише записи про витрачені матеріали, а й записи про надані послуги.
Тепер ми доопрацюємо документ таким чином, щоб у реєстрі з'являлися лише записи, що стосуються витрачання матеріалів. Це доопрацювання буде не зовсім ефективним з погляду продуктивності, зате дасть нам змогу отримати потрібні дані в реєстрі ЗалишкиМатеріалів. Ефективніший варіант обробки проведення цього документа ми розглянемо пізніше.
1. Скоригуємо рухи документа, виключивши з обробки ті рядки табличної частини, у яких містяться послуги.
Для цього до обробника події ОбробкаПроведення, розташованого в модулі документа НаданняПослуги,

додамо такий текст (текст слід додати на початок циклу обходу табличної частини документа одразу після слова Цикл):

Тепер модуль матиме такий вигляд:


Доданий текст виключає з виконання операторів циклу ті рядки документа, у яких номенклатура не є матеріалом. До значення перелічення Матеріал ми звертаємося, використовуючи менеджер перелічення ВидиНоменклатури (Перелічення. ВидиНоменклатури) і зазначаючи як його властивість ім'я потрібного нам значення перелічення.
2. Запустимо 1С:Підприємство в режимі налагодження та перевіримо роботу процедури проведення документа НаданняПослуги.
3. Відкрийте документ НаданняПослуги №– 1.
4. Перед тим як провести документ, відкриємо список реєстратора ЗалишкиМатеріалів, що містить рухи цього документа.
Зробити це можна двома способами:
- виконавши команду Операції в†’ Реєстр накопичення в†’ Залишки матеріалів з головного меню;
- виконавши команду Перейти в†’ Залишки матеріалів з командної панелі списку документа.
а
5. Проведемо документ і переконаємося, що до рухів за реєстром Залишки матеріалів включаються лише рядки, що містять матеріали.
6. Проведіть усі інші документи. Перевірте список рухів реєстру Залишки матеріалів.
Створення реєстру накопичення ВартістьМатеріалів
1. Створіть реєстр накопичення з іменем ВартістьМатеріалів.
2. Цей реєстр матиме:
- один вимір → Матеріал з типом ДовідникПосилання.Номенклатура;
- один ресурс → Вартість з довжиною 15 і точністю 2.
Після створення реєстр ВартістьМатеріалів має виглядати в дереві конфігурації таким чином:

Тепер ми можемо розпочати внесення змін до процедур проведення документів.
Зміна процедури проведення документа ПрибутковаНакладна
1. Відкрийте в конфігураторі вікно редагування об'єкта конфігурації Документ «ПрибутковаНакладна» і перейдіть на вкладку Рухи.
2. У списку реєстрів зазначимо, що документ тепер створюватиме рухи і за реєстром ВартістьМатеріалів.
3. Запустимо конструктор рухів і погодимося з тим, що наявну процедуру ОбробкаПроведення буде замінено.
4. Перед нами відкриється вікно конструктора рухів, яке міститиме створені нами раніше рухи документа за реєстром ЗалишкиМатеріалів.
Додамо до списку реєстрів, за якими формуються рухи, ще один → ВартістьМатеріалів.

5. Виберемо для нього ту саму табличну частину Матеріали і заповнимо вирази.
Для ресурсу Вартість виберемо значення реквізиту табличної частини Сума.

6. Натиснемо ОК і подивимося на текст, який сформував для нас конструктор.
7. Як ви бачите, конструктор створив два цикли обходу табличної частини документа → окремо для кожного реєстру. Так відбувається тому, що в загальному випадку документ може мати кілька табличних частин, і інформація, що міститься в кожній із них, може призначатися для свого окремого реєстру.
У нашому випадку таблична частина лише одна, тому можна об'єднати ці два цикли в один, закоментувавши такі рядки:

8. Запустіть 1С:Підприємство в режимі налагодження та перепроведіть прибуткові накладні.
9. Переконайтеся, що записи реєстрів Залишки матеріалів і Вартість матеріалів відповідають дійсності.
Зміна процедури проведення документа НаданняПослуги
Для внесення зміни до процедури обробки проведення документа НаданняПослуги виходитимемо з побажання, висловленого керівництвом фірми.
Суть його полягає в тому, що на першому етапі, під час списання матеріалів, витрачених у процесі надання послуги, має бути можливість зазначати різну вартість одного й того самого матеріалу, яку керівництво розрахувало виходячи з поточних кон'юнктурних міркувань.
Оскільки в документі НаданняПослуги у нас відображено лише ціну номенклатури, нам потрібно буде додати до табличної частини документа ще одне поле, у якому зазначатиметься вартість номенклатури.
1. Відкрийте в конфігураторі вікно редагування об'єкта конфігурації Документ НаданняПослуги.
2. На вкладці Дані створіть новий реквізит табличної частини документа з іменем Вартість, типом Число, довжиною 15 і точністю 2.
3. Після цього відкриємо форму ФормаДокумента документа НаданняПослуги і додамо до табличного поля колонку, що відображає новий реквізит Вартість, розташувавши її після колонки Номенклатура.
Для цього:
- виділимо табличне поле;
- виконаємо команду контекстного меню Розміщення даних (див. рисунок);
- у вікні Розміщення даних позначимо реквізит Вартість;
- натиснемо ОК;
- у табличній частині з'явилася ще одна колонка (остання) Вартість. Якщо ви її не бачите, розсуньте межі табличної частини;
- зачепивши лівою кнопкою миші заголовок, перетягнемо колонку Вартість після колонки Номенклатура.

Тепер таблична частина нашого документа матиме такий вигляд:

4. Тепер створимо рухи документа НаданняПослуги так само, як ми робили це для документа ПрибутковаНакладна:
- відкриємо в конфігураторі вікно редагування об'єкта конфігурації Документ НаданняПослуги;
- зазначимо, що він створюватиме рухи за реєстром накопичення ВартістьМатеріалів;
- запустимо конструктор рухів документа та додамо до списку реєстрів реєстр ВартістьМатеріалів;
- опишемо рухи документа так, як показано на рисунку.
Зверніть увагу, що вартість обчислюється як добуток вартості й кількості, зазначених у табличній частині.

5. Натиснемо ОК і в тексті, сформованому конструктором, відновимо зміни, внесені нами раніше (не записувати рухи, якщо номенклатура → не матеріал). Також об'єднаємо два цикли обходу табличної частини документа в один.

Перевіримо, як тепер працює проведення документа НаданняПослуги.
6. Запустимо 1С:Підприємство в режимі налагодження та створимо ще кілька документів «НаданняПослуги», враховуючи дати, які ми зазначили в реєстрі відомостей Ціни і зазначаючи вартість вибраних матеріалів.
Ці документи знадобляться нам надалі, тому будьте уважні та зверніть увагу на те, що ці документи створено з різними датами.



7. А тепер проведіть ці документи та подивіться на рухи цих документів за реєстром ВартістьМатеріалів.
Три старі документи про надання послуг можна знищити.
Створення оборотного реєстру накопичення Продажі
1. Відкрийте конфігуратор і створіть новий об'єкт конфігурації Реєстр накопичення. Назвемо його Продажі і визначимо вид реєстру — Обороти.

2. На вкладці Дані створимо виміри реєстру:
- Номенклатура, тип ДовідникПосилання.Номенклатура;
- Клієнт, тип ДовідникПосилання.Клієнти;
- Майстер, тип ДовідникПосилання.Співробітники.
3. У реєстру буде три ресурси:
- Кількість, тип Число, довжина 15, точність 3;
- Виручка, тип Число, довжина 15, точність 2;
- Вартість, тип Число, довжина 15, точність 2.
4. Відкрийте вікно редагування об'єкта конфігурації Документ НаданняПослуги і на вкладці Рухи зазначте, що цей документ створюватиме рухи за реєстром Продажі.
5. Запустіть 1С:Підприємство в режимі налагодження та відкрийте форми списку реєстрів накопичення Продажі і Залишки матеріалів.
Зверніть увагу, що форми практично однакові, за винятком складу вимірів і ресурсів.
Зміна процедури проведення документа НаданняПослуги
Цього разу ми не використовуватимемо конструктор рухів документа, а внесемо необхідні доповнення безпосередньо до обробника події ОбробкаПроведення документа НаданняПослуги.
Відкриємо в конфігураторі модуль об'єкта конфігурації Документ НаданняПослуги. І знайдемо в ньому процедуру обробника події ОбробкаПроведення.
![Документ ОказаниеУслуги Основные Данные Нумераци Движени Последов Журналы Формы Макеты Поденете Ввод на о Права ИнтерФей Обмен да Модуль объекта Прочее Щ Документ ОказаниеУслуги: Модуль объекта 0 Процедура ОбработкаПроведения Отказ, Режим [Г] Действия Наза](/img/materialy_praktikum_4_sozdanie_periodicheskogo_registra_svedeniy_tseny/128.png)
Одразу після завершення об'єднаного циклу створимо ще один цикл обходу табличної частини та команду запису рухів реєстру Продажі.
У тіло створеного циклу вставимо команди створення рухів реєстру Продажі.

Усі додані конструкції вам уже відомі.
Зверніть увагу лише на те, що в оборотного реєстру відсутня властивість ВидРуху, оскільки відображення виду руху (надходження або витрачання) має сенс лише за обліку залишків. У разі реєстру оборотів нас цікавить лише значення, яке має бути записано до ресурсу реєстру.
Запустимо 1С:Підприємство в режимі налагодження та перепроведемо всі документи НаданняПослуги. Рухи цих документів за реєстром Продажі мають мати такий вигляд:
![fГ Список Продажи Действия - [ ] / Регистратор Н... А... Период - Номенклатура Клиент Мастер л Оказание услуги 000000005 от 01.09.2... 1 01.09.2009... Подключение воды Иванов Михаил Юрьевич Деловой Иван Оказание услуги 000000005 от 01.09.2... 2 01.09.2009.](/img/materialy_praktikum_4_sozdanie_periodicheskogo_registra_svedeniy_tseny/130.png)
![_ П х Действия Ў fo] Yl f7j Щ Регистратор Но... Актив... Период - Материал Склад Количество /ч + Приходная накладная 000000001 от 27.03.2003... 1 27.03.2003... Строчный трансформатор GoldStar Основной 10,00 LJ + Приходная накладная 000000001 от 27.03.2003.](/img/materialy_praktikum_4_sozdanie_periodicheskogo_registra_svedeniy_tseny/118.png)
![Гг Список Стоимость материалов Действия fo] Т Регистратор Номер... Акт... Период Материал Стоимость Л Оказание услуги 000000005 от 01.09.2003 12:0... 1 01.09.200312... Шланг резиновый 100,00 Оказание услуги 000000007 от 02.09.2003 0:00... 1 02.09.2003 0:..](/img/materialy_praktikum_4_sozdanie_periodicheskogo_registra_svedeniy_tseny/126.png)