Об'єкти конфігурації. Регістри накопичення. H2>
Навіщо
потрібний регістр накопичення? p>
Здавалося
б, усе необхідне ми з вами вже створили: у нас є що витрачати і
прибуткувати (довідники), і у нас є чим витрачати і прибуткувати
(документи). Залишилося тільки побудувати кілька звітів, і автоматизація ТОВ
«На всі руки майстер» буде закінчена. p>
Однак
це не так p>
По-перше,
шляхом аналізу документів можна, звичайно, отримати необхідні нам вихідні
дані, але уявіть, що завтра ТОВ «На всі руки майстер» вирішить трохи
змінити свої бізнес-процеси, і нам буде потрібно ввести в конфігурацію ще один
документ (або декілька документів!). p>
Наприклад,
зараз ми вважаємо, що товари надходять в ТОВ і потім витрачаються. Керівництво
захотіло посилити матеріал контроль і вирішило прибуткувати товари на основний
склад організації і потім видавати їх матеріально відповідальним особам. У цьому
випадку нам доведеться додати в конфігурацію ще один документ, який буде
фіксувати переміщення матеріалів між основним складом і матеріально
відповідальними особами. І очевидно, нам доведеться переробити всі звіти,
які були нами створені до цього моменту з тим, щоб вони враховували зміни,
внесені новим документом. А уявіть, якщо в нашій конфігурації не дві, а
двадцять документів?! p>
По-друге,
звіти, що аналізують документи, будуть працювати досить повільно, що буде
викликати роздратування користувачів і невдоволення керівників. p>
Тому
в системі 1С: Підприємство є кілька об'єктів конфігурації, які
дозволяють створювати в базі даних структури, призначені для накопичення
інформації в зручному для подальшого аналізу формі. p>
Використання
таких «сховищ» даних дозволяє нам, з одного боку, накопичувати в них
дані, що поставляються різними документами (або іншими об'єктами бази
даних), а з іншого боку, легко створювати потрібні нам звіти або використовувати
ці дані в алгоритмах роботи конфігурації (рис. 4.1). p>
p>
Рис.
4.1. Алгоритм роботи конфігурації p>
В
конфігурації існує кілька об'єктів, які називаються регістрами, для опису
подібних «сховищ». Зараз ми розглянемо один з них. P>
Об'єкт
конфігурації Регістр накопичення p>
Об'єкт
конфігурації Регістр накопичення є прикладним і призначений для опису
структури накопичення даних. На основі об'єкту конфігурації Регістр накопичення
платформа створює в базі даних інформаційну структуру, в якій будуть
накопичуватися дані, «що поставляються» різними об'єктами бази даних. Ці
дані будуть зберігатися в регістрі у вигляді окремих записів, кожна з яких
має однакову, задану в конфігураторі структуру. p>
Відмінною
особливістю регістра накопичення є те, що він не призначений для
інтерактивного редагування користувачем. Розробник може при
необхідності надати користувачеві можливість редагувати регістр
накопичення, але призначення регістра накопичення полягає в тому, щоб його
модифікація проводилася на основі алгоритмів роботи інших об'єктів бази
даних (не обов'язково документів, як у версії 7.7), а не в результаті
безпосередніх дій користувача. p>
Для
тих хто працював з версій 7.7 p>
Руху
документа за регістром накопичення можуть бути тепер з різними датами. Наприклад,
документ План продажу може внести в регістр накопичення запису про передбачувані
продажах компанії кількома різними датами. p>
Основним
призначенням регістра накопичення є накопичення числової інформації в
розрізі декількох вимірювань, які описуються розробником в
відповідному об'єкті конфігурації Регістр накопичення і є підпорядкованими
об'єктами конфігурації. p>
Види
числової інформації, що накопичується регістром накопичення, називаються ресурсами і
також є підпорядкованими об'єктами і описуються в конфігураторі. p>
Наприклад,
регістр накопичення може накопичувати інформацію про кількість і суму товарів на
складах. У цьому випадку він буде мати вимірювання Товар і Склад, і ресурси
Кількість і Сума. P>
Зміна
стану регістра накопичення відбувається, як правило, при проведенні
документа, і полягає в тому, що в регістр додається деяка кількість
записів. Кожен запис містить значення вимірювань, значення збільшень
ресурсів, посилання на документ, який викликав ці зміни (реєстратор) та
«Напрямок» приросту (прихід чи витрата). Такий набір записів називається
рухами регістру накопичення. Кожному руху регістра накопичення завжди
повинен відповідати реєстратор. p>
Крім
того, регістр накопичення може зберігати додаткову інформацію, що описує
кожен рух. Набір такої додаткової інформації задається розробником
за допомогою реквізитів об'єкта конфігурації Регістр накопичення. p>
Створення регістру накопичення «ОстаткіМатеріалов» h2>
Тепер,
коли ми знаємо, для чого призначені регістри накопичення, подивимося, як
можна їх використовувати у нашому прикладі. p>
Перш
за все, нас цікавить інформація про те, скільки і яких матеріалів є в нас
на складах. Для накопичення такої інформації ми створимо регістр
ОстаткіМатеріалов. P>
Відкриємо
в конфігураторі нашу навчальну конфігурацію і створимо новий об'єкт конфігурації
Регістр накопичення. Задамо ім'я регістра - ОстаткіМатеріалов. Натиснемо Далі і
перейдемо до створення структури регістра. p>
Створимо
виміру регістра: p>
Матеріал,
з типом СправочнікСсилка.Номенклатура, p>
Склад,
з типом СправочнікСсилка.Склади. p>
Потім
створимо ресурс Кількість з довжиною 15 і точністю 3. p>
В
Внаслідок цих дій регістр ОстаткіМатеріалов повинен мати такий вигляд p>
p>
Рис.
4.2. p>
Якщо
ви зараз спробуєте запустити 1С: Підприємство в режимі налагодження, то система
видасть повідомлення про помилку: РегістрНакопленія.ОстаткіМатеріалов: Жоден з
документів не є реєстратором для регістра. Це повідомлення ще раз
підтверджує той факт, що призначення регістра накопичення в тому, щоб
акумулювати дані, що поставляються різними документами p>
Створення рухів документа «ПріходнаяНакладная» h2>
Руху
документа - це записи в регістрах, які створюються в процесі проведення
документа і відображають зміни, що виробляються документом. Відкриємо вікно
редагування об'єкту конфігурації Документ ПріходнаяНакладная. p>
Перейдемо
на закладку Руху і в списку регістрів конфігурації відзначимо регістр
накопичення ОстаткіМатеріалов (рис. 4.3) p>
p>
Рис.
4.3. Відзначимо регістр накопичення і скористаємося конструктором рухів ... p>
Зверніть
увагу, що відразу після відмітки вибраного регістра стає доступною
кнопка Конструктор рухів. Цим конструктором ми і скористаємося. P>
Конструктор
влаштований просто (рис. 4.4). У списку Регістри перераховані регістри, в яких
документ може створювати руху. У нашому випадку там поки один регістр
ОстаткіМатеріалов. p>
В
списку Реквізити документу повинні перебувати вихідні дані для створення
рухів. А в таблиці Поле - Вираз повинні бути задані формули, за якими
будуть обчислюватися значення вимірювань і ресурсів регістра при записі рухів p>
p>
Рис.
4.4. Конструктор рухів p>
Зверніть
увагу, що за замовчуванням конструктор пропонує нам створювати руху
приходу (Тип руху регістра - Прихід, знак "+" поруч з назвою регістру)
за регістром ОстаткіМатеріалов. Це нас цілком влаштовує, адже документ
ПріходнаяНакладная і повинен прибуткувати матеріали. p>
В
поле вибору Таблична частина виберемо табличну частина нашого документа --
Матеріали. Список реквізитів документа автоматично заповниться реквізитами
нашої табличної частини. Тепер натиснемо кнопку Заповнити вирази. p>
В
нижньому вікні сформується відповідність полів і виразів (рис. 4.5) p>
p>
Рис.
4.5. Виберемо табличну частину і натиснемо «Заповнити вираження» ... p>
Як
бачите, конструктор рухів встановив відповідності відповідним чином: у
Як матеріал в регістр буде записаний матеріал з табличної частини
документа, як склад - склад, зазначений у шапці документа, а в якості
кількості - кількість з табличної частини документа. p>
Натиснемо
кнопку OK і подивимося, який текст сформував конструктор в модулі об'єкта
(лістинг 4.1) p>
Лістинг
4.1. Процедура ОбработкаПроведенія () p>
Процедура
ОбработкаПроведенія (Відмова, Режим) p>
//{{__ КОНСТРУКТОР_ДВІЖЕНІЙ_РЕГІСТРОВ p>
//
Даний фрагмент побудований конструктором. P>
//
При повторному використанні конструктора, p>
//
внесені вручну зміни будуть втрачені !!! p>
Для
Кожного ТекСтрокаМатеріали З Матеріали Цикл p>
//
Регістр ОстаткіМатеріалов Прихід p>
Рух
= Двіженія.ОстаткіМатеріалов.Добавіть (); p>
Двіженіе.ВідДвіженія
= ВідДвіженіяНакопленія.Пріход; p>
Двіженіе.Період
= Дата; p>
Двіженіе.Матеріал
= ТекСтрокаМатеріали.Матеріал; p>
Двіженіе.Склад
= Склад; p>
Двіженіе.Колічество
= ТекСтрокаМатеріали.Колічество; p>
КонецЦикла; p>
//
)) __КОНСТРУКТОР_ДВІЖЕНІЙ_РЕГІСТРОВ P>
КонецПроцедуры p>
Конструктор
створив обробник події ОбработкаПроведенія об'єкту конфігурації Документ і
помістив його в модуль об'єкта. p>
Всередині
обробника розташований цикл, який призначений для перебору рядків табличної
частини нашого документу. У циклі звернення до табличної частини документа
відбувається по імені (Статті), а рядки табличної частини документа
являють собою колекцію значень, для перебору якої можна використовувати
конструкцію Для Кожного ... З ... Цикл. p>
Об'єкт
вбудованої мови ДокументОб'ект має властивість Руху. Воно повертає
колекцію наборів записів регістрів, які належать до цього документа. До
набору записів документа, що належить конкретному регістру, можна
звернутися, вказавши через точку ім'я цього регістра. p>
Таким
чином, в першому рядку тіла циклу ми додаємо до набору записів, який
створює наш документ в регістрі, новий запис і зберігаємо її в змінній
Рух. p>
Потім
ми присвоюємо потрібні значення всіх полях цього запису і після перебору всіх
рядків документа (після завершення циклу) «одним махом» записуємо в регістр
ОстаткіМатеріалов весь набір записів рухів документа. P>
Подивимося,
як це працює. Запустимо 1С: Підприємство в режимі налагодження і відкриємо
одночасно два вікна: список документів ПріходнаяНакладная і список регістра
накопичення ОстаткіМатеріалов. p>
Відкриємо
документ Прибуткова накладна № 1 і натиснемо OK. Зверніть увагу, що при
проведенні прибуткової накладної з'являються відповідні записи в регістрах
накопичення (рис. 4.6) p>
p>
Рис.
4.6. Взаємодія документа і регістра p>
Аналогічні
дії проробимо і з документом Прибуткова накладна № 2. p>
Створення
рухів документа «ОказаніеУслугі» p>
Тепер
ми аналогічним чином створимо руху документа ОказаніеУслугі. p>
При
використанні конструктора будемо уважні і звернемо увагу на те, що
документ Надання послуги повинен витрачати матеріали. Тому перед тим, як
натиснути кнопку OK, переконаємося, що обрано правильний тип руху регістрів (нам
потрібен Витрата). Крім того, при автоматичному заповненні поле Матеріал не заповниться
автоматично. Якщо ми залишимо це так, як є, то в регістрі накопичення в
рядках з типом Рух регістра - витрата ім'я номенклатури фіксувати не
буде. Щоб уникнути цього, треба вибрати поле Матеріал і в полі Реквізити
документа двічі клацнути по рядку ТекСтрокаПереченьНомеклатури.Номенклатура.
Таким чином, ім'я номенклатури для рядків регістра накопичення буде вибиратися
з табличної частини документа. p>
Запустимо
налагодження і створимо документ надання послуги, який буде витрачати один
транзистор Philips за 3 рубля. p>
Проведемо
документ надання послуги і переконаємося, що в регістрі накопичення він створив вірні
руху. p>
Сформовані
таким чином руху цього документа будуть не зовсім правильні. Справа в тому,
що в документі ОказаніеУслугі, на відміну від документа ПріходнаяНакладная,
можуть міститися не тільки витрачаються матеріали, але й послуги. Тому в
регістр ОстаткіМатеріалов потраплятимуть запису і про використання послуги, що
неправильно. p>
Список літератури h2>
Для
підготовки даної роботи були використані матеріали з сайту http://referat.ru/
p>