Практикум 2. Створення документів
Отже, фірма надає послуги з ремонту телевізорів і встановлення пральних машин. І в тому, і в іншому випадку потрібні деякі матеріали, які витрачаються у процесі надання цих послуг. Тому двома найважливішими подіями в господарському житті нашої організації будуть надходження матеріалів і надання послуг.Створення документа ПриходнаяНакладная. Створення форми документа. Створення процедури обробки події в модулі форми. Створення процедури обробки події в загальному модулі. Створення документа ОказаниеУслуги. Створення рухів документа ОказаниеУслуги
Створення документа ПриходнаяНакладная
Створення процедури обробки події в модулі форми
Створення процедури обробки події в загальному модулі
Створення документа ОказаниеУслуги
Створення рухів документа ОказаниеУслуги
Отже, фірма надає послуги з ремонту телевізорів і встановлення пральних машин. І в тому, і в іншому випадку потрібні деякі матеріали, які витрачаються у процесі надання цих послуг. Тому двома найважливішими подіями в господарському житті нашої організації будуть надходження матеріалів і надання послуг.
Для відображення цих подій у базі даних ми створимо два документи:
- «Прибуткова накладна»;
- «Надання послуги».
«Прибуткова накладна» фіксуватиме факт надходження до нашої організації необхідних матеріалів, а документ «Надання послуги» фіксуватиме надання послуг і витрачання матеріалів, які використовуються під час надання цих послуг.
Створення документа ПриходнаяНакладная
- Створіть новий об'єкт конфігурації Документ1. Надайте документу ім'я «ПриходнаяНакладная».
-
На вкладці «Дані» створимо реквізит документа з ім'ям «Склад» і типом СправочникСсылка.Склады. Для цього:
- над віконцем Реквізити клацніть по іконці
; - у вікні «Властивості: Реквізит» задайте ім'я документа «Склад»;
- у полі «Тип» за стрілочкою (за трикутником) зі спадного списку виберіть потрібний нам тип СправочникСсылка.Склады.
- над віконцем Реквізити клацніть по іконці

- Додайте табличну частину з ім'ям «Матеріали».
- У цій табличній частині створіть чотири реквізити:
- «Матеріал» з типом СправочникСсылка.Номенклатура;
- «Кількість» з типом Число (довжина → 15, точність → 3, невід'ємне);
- «Ціна» з типом Число (довжина → 15, точність → 2, невід'ємне);
- «Сума» з типом Число (довжина → 15, точність → 2, невід'ємне).

- Запустіть 1С:Підприємство в режимі налагодження.
- Виконайте команду Операції в†’ Документи в†’ Прибуткова накладна. Система відкриє одну з основних форм документа → основну форму списку.
- Створіть новий документ. Система автоматично надасть номер новому документу та позначить дату створення документа. Як склад виберемо «Основний». Тепер нам залишається заповнити лише табличну частину прибуткової накладної. Заповніть її матеріалами так, як показано на рисунку:

- Аналогічним чином створіть другу накладну, яка оприбутковуватиме такі матеріали для встановлення пральних машин:

У створюваних накладних значення у стовпці «Сума» нам довелося вводити вручну. Це незручно, і виникає природне бажання автоматизувати роботу документа так, щоб сума обчислювалася автоматично щоразу під час зміни ціни або кількості матеріалів у рядку.
Для цього нам потрібно буде створити власну форму документа, а потім скористатися можливостями вбудованої мови.
Створення форми документа
Досі ми використовували наперед визначені форми об'єктів, які система 1С:Підприємство створювала для нас сама «за замовчуванням».
Тепер у нас виникла необхідність трохи змінити логіку роботи форми документа, а отже, нам доведеться створити власну форму документа «ПриходнаяНакладная», щоб у ній ми могли описати потрібний нам алгоритм.
-
Поверніться до конфігуратора та відкрийте вікно редагування об'єкта конфігурації «ПриходнаяНакладная»:
- у конфігураторі двічі клацніть по документу «ПриходнаяНакладная». Відкриється вікно «Документ ПриходнаяНакладная».
- Перейдіть на вкладку «Форми».
- Щоб створити форму документа, натисніть на символ лупи в полі введення Документа:

- Система викличе ще один корисний інструмент розробника → конструктор форм. Цей інструмент також побудований за принципом «майстрів» — введення даних у певній послідовності та переміщення кнопками «Далі» і «Назад».
Відразу натиснемо кнопку «Готово», погоджуючись тим самим з усім, що запропонувала нам система.
Зверніть увагу, що в дереві об'єктів конфігурації в об'єкта конфігурації Документ «ПриходнаяНакладная» з'явилася форма «ФормаДокумента», а на екрані відкрилося вікно редактора форм, що містить цю форму.
Форма документа «ПриходнаяНакладная» містить велику кількість різноманітних полів. Ці поля називаються елементами керування. Вони мають різне призначення та різну поведінку, що відповідає їхньому призначенню. Проте всі вони призначені для відображення інформації, що зберігається в базі даних, і організації інтерактивної роботи з цією інформацією.
- У цьому випадку нас цікавлять три елементи керування → це три поля введення, розташовані в колонках «Кількість», «Ціна» і «Сума».
Створення процедури обробки події в модулі форми
1. Клацніть правою кнопкою миші на полі введення в колонці «Кількість» і відкрийте для нього палітру властивостей (пункт контекстного меню Властивості)

2. Прокрутіть список до кінця, і ви знайдете групу «Події», у якій міститься перелік подій, що можуть бути пов'язані з цим полем введення.

3. Серед подій знайдіть подію «ПриИзменении». Ця подія виникає після зміни значення поля введення.
Клацніть по кнопці з лупою наприкінці поля введення, і система створить заготовку процедури обробника цієї події в модулі нашої форми.

4. До модуля форми додамо такий текст:

Пояснимо значення цих рядків.
У першому рядку ми звертаємося до програмного об'єкта ЭлементыФормы. Цей об'єкт є колекцією значень, що містить усі елементи керування, розташовані на нашій формі. Кожен елемент керування форми можна отримати, вказавши його ім'я як властивість об'єкта ЭлементыФормы. У цьому випадку ми звертаємося до елемента керування з ім'ям «Матеріали» (ЭлементыФормы.Материалы).
Цей елемент керування відображає рядки табличної частини нашого документа. Отримати той рядок, у якому наразі здійснюється редагування, можна за допомогою властивості програмного об'єкта ТабличноеПоле → ТекущиеДанные. Таким чином, у результаті виконання першого рядка змінна СтрокаТабличнойЧасти міститиме об'єкт ДокументТабличнаяЧастьСтрока.ПриходнаяНакладная. Материалы, у якому містяться дані, що редагуються.
У другому рядку обчислюється сума як добуток кількості та ціни. Об'єкт ДокументТабличнаяЧастьСтрока.<имя> дає змогу звернутися до даних конкретної колонки, вказавши ім'я колонки як властивість об'єкта. Наприклад, СтрокаТабличнойЧасти.Количество.
5. Закриємо всі вікна та подивимося, як це працює, запустивши 1С:Підприємство в режимі налагодження.
6. У вікні програми відкрийте список документів «ПриходнаяНакладная» і відкрийте будь-який із двох створених вами документів. Якщо ви тепер зміните кількість у будь-якому рядку документа, то сума в рядку буде перерахована автоматично.
7.Поверніться до конфігуратора і для поля «Ціна» зробіть те саме.
Створення процедури обробки події в загальному модулі
Якщо подумати про майбутнє, то буде зрозуміло, що подібне автоматичне заповнення поля «Сума» може знадобитися нам і в інших документах. Тому буде краще помістити розрахунок суми в деякому «загальнодоступному» місці, щоб різні документи, що мають аналогічні реквізити табличної частини, могли використовувати цей алгоритм.
Для опису таких «загальнодоступних» місць слугують об'єкти конфігурації Загальний модуль, розташовані в гілці Загальні в†’ Загальні модулі. Процедури та функції, що містяться в цих модулях, можуть бути доступні для будь-яких об'єктів конфігурації.
Щоб алгоритм, який виконується під час обробки події, був доступний для різних документів, ми створимо загальний модуль і перенесемо до нього нашу процедуру розрахунку суми. А в документі просто залишимо виклики цієї процедури із загального модуля.
1. Створіть об'єкт конфігурації Загальний модуль у гілці Загальні в†’ Загальні модулі і назвіть його «РоботаСДокументами».
2. Він міститиме такий текст:

Ключове слово Экспорт наприкінці оператора «Процедура» якраз указує на те, що ця процедура може бути доступна з інших програмних модулів.
3. Поверніться до нашої форми (у дереві конфігурації Документи → ПриходнаяНакладная → Форми → ФормаДокумента).
4. У вікні, що відкрилося, Документ ПриходнаяНакладная: ФормаДокумента на нижній панелі клацніть по клавіші
.
5. У кожному модулі форми змініть текст обробника:

Таким чином, тепер замість безпосереднього розрахунку суми ми викликатимемо процедуру із загального модуля та передаватимемо їй як параметр потрібний нам рядок табличної частини.
6. Запустіть 1С:Підприємство в режимі налагодження та переконайтеся, що все працює як слід.
Створення документа ОказаниеУслуги
1. Створіть новий об'єкт конфігурації Документ «ОказаниеУслуги».
2. На вкладці «Дані» створіть реквізити:
- «Склад», тип СправочникСсылка.Склады;
- «Клієнт», тип СправочникСсылка.Клиенты;
- «Майстер», тип СправочникСсылка.Сотрудники.
3. Створіть табличну частину «ПерелікНоменклатури» з реквізитами:
- «Номенклатура», тип СправочникСсылка.Номенклатура;
- «Кількість», тип Число, довжина 15, точність 3, невід'ємне;
- «Ціна», тип Число, довжина 15, точність 2, невід'ємне;
- «Сума», тип Число, довжина 15, точність 2, невід'ємне.
4. Створіть основну форму документа.
5. Для полів введення колонок «Кількість» і «Ціна» створіть обробник події «ПриИзменении», у якому викличте процедуру «РассчитатьСумму» із загального модуля «РаботаСДокументами».
6. У результаті документ «ОказаниеУслуги» у дереві конфігурації матиме такий вигляд:

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



Тепер наш документ «ОказаниеУслуг» має мати такий вигляд:

Створення регістру накопичення ОстаткиМатериалов
Насамперед нас цікавить інформація про те, скільки і яких матеріалів є у нас на складі. Для накопичення такої інформації ми створимо регістр «ОстаткиМатериалов».
1. Створіть новий об'єкт конфігурації Регістр накопичення з ім'ям «ОстаткиМатериалов».
2. На вкладці «Дані» створимо виміри регістру:
- «Матеріал» з типом СправочникСсылка.Номенклатура;
- «Склад» з типом СправочникСсылка.Склады.
3. Створимо ресурс «Кількість» з довжиною 15 і точністю 3.
4. У результаті цих дій регістр «ОстаткиМатериалов» має мати такий вигляд:

5. Якщо ви зараз спробуєте запустити 1С:Підприємство в режимі налагодження, то система видасть повідомлення про помилку:

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

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

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

Як бачите, конструктор рухів установив відповідності належним чином:
- як матеріал до регістру буде записано матеріал із табличної частини документа;
- як склад → склад, зазначений у шапці документа;
- як кількість → кількість із табличної частини документа.
5. Натисніть «ОК» і подивіться, який текст сформував конструктор у модулі об'єкта:

Конструктор створив обробник події ОбработкаПроведения об'єкта конфігурації Документ і помістив його в модуль об'єкта.
Усередині обробника розташований цикл, призначений для перебору рядків табличної частини нашого документа. У циклі звернення до табличної частини документа відбувається за ім'ям (Материалы), а рядки табличної частини документа являють собою колекцію значень, для перебору якої можна використовувати конструкцію Для Каждого …¦ Из …¦ Цикл.
Об'єкт вбудованої мови ДокументОбъект має властивість Движения. Вона повертає колекцію наборів записів регістрів, що належать цьому документу. До набору записів документа, що належить конкретному регістру, можна звернутися, вказавши через крапку ім'я цього регістру.
Таким чином, у першому рядку тіла циклу ми додаємо до набору записів, який створює наш документ у регістрі, новий запис і зберігаємо його в змінній Движение.
Потім ми присвоюємо потрібні значення всім полям цього запису і після перебору всіх рядків документа (після завершення циклу) «одним махом» записуємо в регістр ОстаткиМатериалов увесь набір записів рухів документа.
6. Подивимося, як це працює. Запустимо 1С:Підприємство в режимі налагодження та відкриємо одночасно два вікна:
- список документів ПриходнаяНакладная;
- список регістру накопичення ОстаткиМатериалов.
7. Відкриємо Прибуткову накладну №– 1 і натиснемо ОК. Зверніть увагу, що під час проведення прибуткової накладної з'являються відповідні записи в регістрах накопичення.
8. Аналогічні дії виконайте і з документом Прибуткова накладна №– 2.
Створення рухів документа ОказаниеУслуги
1. Створіть рухи документа ОказаниеУслуги.
Під час використання конструктора будьте уважні та зверніть увагу на те, що документ ОказаниеУслуги має витрачати матеріали.
2. Під час автоматичного заповнення поле Матеріал не заповниться.
Якщо ми залишимо це так, як є, то в регістрі накопичення в рядках із типом Рух регістру → витрата назва номенклатури не фіксуватиметься. Щоб уникнути цього, треба вибрати поле Матеріал і в полі Реквізити документа двічі клацнути по рядку ТекСтрокаПереченьНоменклатуры.Номенклатура.

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