Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0

1. Вводная часть
1.1. Введение во введение
Настоящий курс является продолжением курса Введение в конфигурирование в системе 1С:Предприятие 8.0. Основные объекты. Подразумевается, что у обучаемого уже имеется определенная ясность по приемам работы в конфигураторе.
Основная цель данного курса - получить навыки самостоятельной работы по созданию оперативных учетных и управленческих решений.
Поэтому будем придерживаться следующей технологии изучения материала каждой главы:
  1. Разбираем теоретические аспекты;
  2. Выполняем практическую работу вместе с

    преподавателем (или методикой);
  3. Выполняем самостоятельную работу.
С прикладной точки зрения обучение будет происходить в процессе создания конфигурации, реализующей как учет основных торговых операций, так и управленческий блок планирования и контроля работы отдела активного маркетинга.
1.2. Объектная схема построения конфигураций для решения учетных и управленческих задач.
В рамках предыдущего курса Вы познакомились с основными классами объектов, применяемыми в системе 1С:Предприятие 8.0. Начинающих программистов при этом всегда гнетет одна и та же мысль: Хорошо, а как со всем этим работать? Когда и что применять?.
Вот поэтому, прежде чем приступать к постижению тайн организации решений оперативных задач в системе - сначала немного осмотримся.
Итак, какие основные классы объектов нужно иметь для реализации учетных и управленческих задач.
Начнем с глубины веков. Когда появилось вообще понятие учета?
Правильно - учет появился только при появлении документирования. Вот сохранились со времен древнего Египта папирусы и таблички с долговыми расписками и книгами продаж -мы констатируем, да - был учет в древнем Египте! А был ли раньше? Может, и был. Но раз документов не сохранилось - то учесть факт появление учета ранее ... не представляется возможным.


Конфигурирование в системе "1С:Предприятие 8.0". Решение оперативных задач
Итак, основа любой системы учета ДОКУМЕНТ. Потому как
документ есть ничто иное, как объект, предназначенный для
регистрации событий, важных с точки зрения некоей предметной

области.
Вот паспорт - документ? Документ! А какое событие он регистрирует? Правильно - признание Вашего гражданства.
Трамвайный талон - документ? Правильно - документ, фиксирует потенциальную оплату проезда (когда прокомпостируете - будет фиксировать уже реальную). И так далее...
Какой документ в окружающей жизни ни возьми - это объект для регистрации некоего события, да еще и запоминающий сопутствующую этому действию информацию.
Таким образом, в систему 1С:Предприятие просто необходимо было внести класс объектов Документ. Именно посредством объектов даннVго класса и будут вноситься и регистрироваться в системе произошедшие события бизнес-процессов, хозяйственной деятельности, в общем - предметной области.
Идем далее.
Есть класс объектов для регистрации входящей информации - логично предположить необходимость класса объектов для ее обобщения, формирования и вывода в удобном для пользователя виде. Это ОТЧЕТЫ.
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



Можно было бы конечно ограничиться набором этих двух классов объектов.
Но...давайте вспомним славную молодость на колхозных полях, когда колхозники помогают интеллигенции убирать урожай...(те, кто этого в жизни не испытал - ну что ж, напрягите воображение...)
На краю бурта обязательно сидит бригадир тетя Нюра и при высыпании очередного ведра корнеплодов в бурт рисует очередную палочку у себя в тетради.
Приезжает в конце дня председатель колхоза и спрашивает: тетя Нюра, сколько сегодня ведер?. И начинает тетя Нюра палочки считать в тетради.... В зависимости от ее способностей и аккуратности за время от 10 минут до получаса ответа дождаться можно ... Вот, это как раз пример быстродействия простейшей учетной схемы: Документы- отчеты.


Вводная часть
А вот если бы где-то еще промежуточные данные для отчета накапливать. А вот если бы, кроме записи в тетрадочке, тетя Нюра еще на краю бурта после очередного высыпания исправляла мелком 67 ведер на 68, 68 на 69 и т.д., то по приезду председателя - сколько времени понадобилось бы на выдачу точного отчета?
Таким образом, если ввести в систему класс объектов Регистры учета - получаем средство быстрого формирования отчетности за счет предварительного накопления и подготовки отчетных данных.
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



Платформа 1С:Предприятие 8.0 имеет в своем составе несколько классов регистров учета. Это:
  • Регистры сведений;
  • Регистры накопления;
  • Регистры бухгалтерии;
  • Регистры расчета.
Часть из них мы обстоятельно и подробно изучим в данном курсе. Сейчас бы хотелось заострить внимание только на их предназначении.
Да, создавая регистры учета - мы намеренно вносим в систему избыточность. Как правило, регистры получают информацию из документов, а не от пользователя (напрямую). Но за счет использования регистров неимоверно возрастает простота и скорость получения отчетной информации.
Причем, в системе 1С:Предприятие 8.0 с помощью регистров можно учитывать не только фактические, но и ПЛАНОВЫЕ операции (т.е. те, что должны произойти в будущем).
Итак, уже три класса объектов.
Необходимость в следующем классе объектов возникнет в случае, когда нашей автоматизированной системой учета будет пользоваться более одного человека.
Если дать возможность пользователям набирать наименования вручную при вводе товаров в накладных, то будьте готовы к следующей ситуации:
Товаровед оприходовал поступление товара Огурцы свежие, а менеджер выпишет в расходной накладной Свежие огурцы. Ну, ... и как системе понять - что это одно и то же?


Конфигурирование в системе "1С: Предприятие 8.0 ". Решение оперативных задач
Вот потому и необходимы классы объектов для ведения справочной информации.
Ситуация с огурцами легко преодолевается в том случае, если реквизит документа товар имеет не строковый тип, а ссылку на элемент СПРАВОЧНИКА Номенклатура - тогда и товаровед, и менеджер будут вынуждены выбирать один и тот же элемент.
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



Таким образом, классы справочных объектов служат, прежде всего, для организации правильного заполнении документов.
К подобным классам в системе 1С:Предприятие 8.0 можно отнести собственно сам класс объектов конфигурации СПРАВОЧНИКИ, а так же ПЕРЕЧИСЛЕНИЯ, КОНСТАНТЫ, ПЛАНЫ СЧЕТОВ, ПЛАНЫ ВИДОВ ХАРАКТЕРИСТИК, ПЛАНЫ РАСЧЕТОВ и т.д.
В результате мы с Вами логически вышли на ту систему классов объектов, что реализована средствами платформы 1С:Предприятие 8.0.
1.3. Роль и место регистров
Задачи, которые Вам предстоит решать в системе 1С;Предприятие, скорее всего, можно классифицировать, как управленческие или учетные.
А для того, чтобы утверждать, что какое-то явление полностью учтено (находится под управлением) обычно требуется доказать это.
В качестве доказательства предъявляют... значения контролируемых ПОКАЗАТЕЛЕЙ.
Таким образом, мы вышли с Вами к корню автоматизации любой учетной задачи. Система, автоматизирующая учет, или служащая для управления чем-либо - обязана максимально быстро, максимально точно быть готовой предоставлять информацию по тем ПОКАЗАТЕЛЯМ, состояние которых ей надлежит регистрировать.


Вводная часть
Все, что мы с Вами делаем, имеет конечной целью выдачу информации по этим показателям. Поскольку именно отчетность - это средство обеспечения существования бизнеса (регламентированная отчетность) и средство анализа (управленческая отчетность).
Давайте разберемся теперь с природой возможных показателей. Для

любого явления их можно придумывать сотни и тысячи. (По законам

Паркинсона, любая бюрократическая система естественным образом

увеличивает количество контролируемых показателей
экспоненциально с течением времени, вплоть до момента удушения дела, которым полагалось управлять.)
Но все их можно классифицировать по трем группам:
Первая группа - показатели остатка
Используются для учета явлений, которые то прирастают, то убывают, но нам необходимо знать состояние их на последний (или на каждый) момент времени. Таких показателей великое множество: количество товара на складе, сумма денег в кармане, число космонавтов на орбите и так далее.
Для проверки а не показатель ли это остатка можно сделать маленький тест:
Я положил в карман за сегодняшний день 10 рублей, 5 рублей и вынул 11 рублей. Могу ли я точно сказать - сколько денег у меня в кармане?
Думаете 4?
Ну, Вы же не в первом классе!
На самом деле, может быть и 4 и 104 и 997. Все зависит от того, что у меня со вчерашнего дня в кармане лежало!
Так вот, текущее состояние показателей остатка тесно связано с прошлым их состоянием. Это и является отличительным критерием!
Чаще всего показатели остатка используются в экономических задачах. Потому как, например, рыночная экономика - есть ничто иное, как оптимальный способ хозяйствования в условиях ограниченности ресурсов. Ну а уж если априорно ресурсы ограничены - то не контролировать их состояние просто нельзя!
Вторая группа - показатели оборотные.
Тот же пример Я положил в карман за сегодняшний день 10 рублей, 5 рублей и вынул 11 рублей.
Могу ли я точно сказать - сколько денег В ТЕЧЕНИЕ ДНЯ я положил в карман?
Могу! 15!


8
Конфигурирование в системе "1С:Предприятие 8.0". Решение оперативных задач
Показатели оборотные как раз и характеризуют движение за какой-то период. Причем заметьте, учитываются явления, растущие только в одну сторону. И выдается информация по совокупному обороту этого явления за указанный период.
Критериями принадлежности показателя к классу оборотный являются:
  • прежде всего, наличие периода в определении;
  • независимость его состояния за текущий период от состояния за

    прошлый.
Наиболее часто оборотными показателями интересуются задачи статистики.
ВВП России за год, Прирост пионеро-киллограмов за месяц, Уменьшение человеко-жалоб за отчетный период...
Третья группа - показатели состояния.
Оба вышерассмотренных класса показателей, несмотря на разные подходы, имели одно общее свойство: это все показатели накопления. То есть события происходят одно за другим и что-то прибавляют или убавляют в состоянии того или иного показателя.
Но, кроме того, полезно выделить еще класс показателей характеризующие состояния чего бы то ни было.
Например, такого-то числа, такого-то месяца, года Вы стали пожизненным президентом такой-то страны. Вот стали и все...
То, что Вы президент - это показатель? Ну, как минимум - пVказатель Ваших возможностей. К какому же классу его отнести? Зависело это состояние от прошлых Ваших состояний? Да вообще-то могло и не зависеть... Вот, если бы Вас поточным методом и соседние страны стали президентом избирать - тогда показатель Скольких стран президент - был бы показателем остатка. Но на это надежды мало. Хотя...
Может это оборотный показатель? Тогда было бы так: За отчетный квартал текущего года президентом скольких стран Вы стали? . А вот - нискольких!
Вы президент только одной страны еще с прошлого года. Вот единственная и достаточная характеристика текущего положения. Использование для нее показателей остатков слишком избыточно, а показателей оборотных - неинформационно.
Таким образом, разовые явления, устанавливающие некие показатели в определенное состояние, лучше всего отражать посредством показателей состояния.


Вводная часть
Критерием отнесения к классу показателей состояния является следующий:
Устанавливаемое состояние в принципе не зависит от прошлого состояния, но будет действовать не только в рамках какого-то жесткого периода, а или вечно, или до следующей смены состояния. Причем зачастую смена состояния происходит в произвольный момент времени.
Примерами таких показателей могут быть: котировки акций на бирже, курсы валют, местонахождение конкретного сотрудника (на работе, болен, в отпуске) и так далее...
Для чего мы подробнейшим образом разбирали и классифицировали все типы показателей?
Как уже выяснилось, задача любой системы учетной или управленческой - мгновенно выдавать информацию по состоянию того или иного показателя.
Мгновенно - это значит - сводя к минимуму затраты времени на расчеты значения. А чтобы ничего не считать, и сразу взять готовое значение - необходимо, чтобы что-то или кто-то это значение уже знал, и на всякий случай держал.
Этим чем-то в системе 1С:Предприятие 8.0 являются регистры.
Итак, РЕГИСТРЫ - объекты, предназначенные для хранения и практически мгновенной выдачи значений тех или иных показателей в произвольных разрезах.
Для хранения показателей остатков и оборотов служат Регистры накопления с соответствующими видами.
Для хранения показателей состояния служат Регистры сведений.
Кроме того, для более удобного хранения информации в интересах специфических механизмов учета есть еще Регистры бухгалтерии и Регистры расчета.
Первые служат для обслуживания задач бухгалтерского учета (работа с планом счетов, с поддержкой корреспонденции или без нее).
Вторые для реализации задач периодических расчетов. Когда из периода в период по примерно оинаковым законам производят примерно однотипные расчеты. Т.е. расчет зарплаты, биллинговые системы операторов сотовой связи и т.д.
В рамках данного курса с последними (бухгалтерскими и расчетными) регистрами мы знакомиться не будем. Сосредоточимся на классических задачах оперативного управления торговлей. Для них достаточно будет Регистров накопления и Регистров сведений.


Конфигурирование в системе "1С:Предприятие 8.0". Решение оперативных задач
1.4. Постановка задачи на создание конфигурации для подразделений активных продаж
Чтобы изучение курса не свелось к восприятию голой теории -поставим практическую задачу, которую надо будет решить в процессе его прохождения.
Необходимо на базе конфигурации от предыдущего курса Введение в конфигурирование в системе 1С:Предприятие 8.0. Основные объекты создать конфигурацию, предназначенную для:
  • учета торговых операций (покупка, продажа товара,

    контроль остатка товара на складе и взаиморасчетов с

    контрагентами).
  • управления отделом активных продаж. Считаем, что

    автоматизируемое предприятие не ждет, пока покупатели

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

    То есть адресным обзвоном, объездом клиентов,

    активными демонстрациями продукции и проч. Движущая

    сила бизнеса данного предприятия - активность

    менеджеров. Соответственно, система должна позволять

    составлять задания для менеджеров, контролировать

    результат их выполнения и планировать последующие

    действия (контакты с покупателями).
  • Кроме того, в конфигурации должны присутствовать

    аналитические отчеты, позволяющие оценивать как

    выгодность торговли теми или иными товарами, так и

    активность работы менеджерско! о отдела.
ю


2. Работа с регистрами (на примере регистра остатков)
2.1. Регистр остатков. Структура простейшего регистра. Измерения и ресурсы. Регистратор и Период. Граница периода
Регистры являются средством хранения состояния показателей остатков, оборотов или состояния и формирования текущих итогов. Именно поэтому очень важно правильно организовать регистры, а для этого необходимо знать, как они устроены и как в них заносится информация.
Для работы с регистрами необходимо будет уяснить следующие понятия:
  • Измерения;
  • Ресурсы;
  • Реквизиты;
  • Регистратор;
  • Период;
  • Граница периода рассчитанных итогов.
Структура регистров задается в конфигураторе (регистры - элементы метаданных) и определяется, прежде всего, набором измерений (объектов, в разрезе которых ведется учет) и набором ресурсов (показателей и характеристик, которые требуется подсчитывать или учитывать).
Чтобы представить структуру регистра, рассмотрим следующий пример регистра накопления (вида Остатки),
опустим, мы работаем в лесничестве, и самый главный лесник послал нас в рощу Кудрявая подсчитывать деревья. Результат подсчета можно представить в виде гистограммы:
и


Конфигурирование в системе "1С:Предприятие 8.0". Решение оперативных задач
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



С задачей справились, теперь осознаем, что мы сделали.
Мы представили в разрезе (по измерению) Тип дерева информацию о деревянных ресурсах рощи Кудрявой. Если после нашего отчета последует указание о проведении лесоповала (а в конфигурации это равносильно проведению одноименного документа) - это может существенно сократить наличные ресурсы.
Таким образом, мы создали простейший регистр с одним измерением и одним ресурсом.
А если потребуется представить данные не только по одной роще, а в разрезе всех окрестных лесов (дубрава Тенистая, массив Забугорье и т.д.), то волей-неволей придется добавлять к нашей гистограмме - ... правильно, еще одно измерение. То есть делать ее трехмерной.
А если еще что-нибудь добавить? Для удобства тогда лучше информацию представлять уже не в виде гистограммы, а в виде таблички:
12


Работа с регистрами (на примере регистра остатков)


Измерения
Ресурс
Лес
Тип дерева
Количество
Роща Кудрявая
Сосна
16
Роща Кудрявая
Береза
10
Роща Кудрявая
Дуб
5.5
Дубрава Тенистая
Береза
12
Дубрава Тенистая
Дуб
21
Питомник
Береза
48
Состав любого регистра должен быть таким, чтобы для каждого значения ресурса в любой момент времени можно было бы однозначно определить значения всех измерений.
Т.е., если уж у Вас два измерения Лес и Тип дерева, то при проведении лесоповала Вы должны точно указывать, сколько каких деревьев и в каком лесу надо валить. За это Ваш благодарный регистр всегда будет быстро и точно сообщать, в каком лесу, сколько чего осталось, т.е. выдавать остатки ресурсов.
Кроме измерений и ресурсов в регистре могут присутствовать реквизиты. Реквизит также может иметь любой тип значения, но в отличие от измерения, реквизит - только характеристика движения. Это признак, пометочка на память. Как, например, если бы мы при проведении лесоповала помечали, что эта партия древесины пошла на Сыктывкарский комбинат, следующая на Одинцовский и т.п.
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



Реквизиты никак не влияют на расчет остатков. Таким образом, при выборе остатков из регистра, значения реквизитов программисту не доступны, но если он выбирает записи (движения) по регистру, то значения реквизитов можно получить, в чем-то накопить и представить для отчета. Кроме того, реквизиты можно использовать и при построении запросов по регистрам.
13


Конфигурирование в системе "!С:Предприятие 8.0". Решение оперативных задач
При проектировании структуры регистров нужно учитывать следующие обстоятельства:
  • измерениями регистров могут быть объекты ссылочных

    или примитивных типов данных. (Рекомендуется

    использовать именно ссылочные);
  • количество измерений определяет размерность регистра и,

    следовательно, от него сильно зависит физический размер

    таблиц регистра;
  • ресурсы регистров могут быть только числового типа (за

    одним исключением - ресурсы регистров сведений могут

    быть и не числовыми);
  • реквизиты - дополнительная информация о каждом

    движении (записи) регистра.
  • Хотя из регистра можно получить и движения и остатки

    (для регистров остатков), в регистр заносятся только

    записи о приращениях регистров - движения.
Понятие Границы периода рассчитанных итогов связано с внутренним порядком хранения данных в реальных таблицах регистра. На каждый регистр выделяется две таблицы. Первая хранит сами записи движений (приращения). Вторая - рассчитанные итоги по этим записям.
При получении итогов система всегда посчитает их правильно, но чем ближе к реальной дате граница периода рассчитанных данных в таблице итогов - тем быстрее система будет выдавать требуемые данные. Если точнее - то при получении итогов на круглую дату (помесячно) система берет уже готовые итоги, а на некруглую дату просматривает движения от ближайшей круглой даты
Управлять положением границы периода можно в пользовательской части программы. Меню Операции, пункт Управление итогами. Попадаем в системное диалоговое окно Управление итогами.
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



14


Работа с регистрами (на примере регистра остатков)
Как видите, можно управлять итогами для всех регистров сразу, а можно - отдельно.
Теперь поговорим подробнее о технологии записи движений.
В любой строгой системе учета недостаточно только предоставлять информацию о состоянии того или иного ресурса. Например: Спирта на складе больше нет.
Необходимо еще иметь возможность предоставить по первому требованию проверяющих органов документальное подтверждение правомерности этого состояния:
Вот акт приемки от такого-то числа, вот приказ от такого-то за подписью дирMктора выдать такого-то числа группе монтеров 10 литров, а вот расписка о реквизиции остатков, полученная вчера!.
Именно поэтому в регистрах накопления для корректного внесения записи (приращения ресурсов) обязательны для заполнения поля Регистратор и Период.
Регистратор - это атрибут, содержащий ссылку на документ, изменивший состояние ресурсов регистра.
Период - атрибут, указывающий на период (момент времени), с которого действуют данные изменений ресурсов.
Необходимо упомянуть еще один атрибут регистра остатков -ВидДвижения. Посредством данного атрибута указывается -необходимо прирастить ресурсы или убавить.
Практикум №1
В базе от предыдущего курса есть регистр Остатки-Номенклатуры, позволяющий вести учет товаров на складе. Учтем еще и состояние задолженностей. Создайте регистр Задолженности таким образом, чтобы он позволил в разрезе контрагентов учитывать их долги. На будущее договоримся - если долг положительный — это нам контрагент должен, если отрицательный - это мы ему должны.
2.2. Возможные способы записи движений по регистру
Прежде всего, разберемся - что значит сформировать движения.
А значит это очень простую вещь. Требуется сформировать запись в регистре, куда попадут нужные данные. Чаще всего данные берутся непосредственно из документа, то есть считываются из соответствующих реквизитов.
Всего же можно классифицировать четыре различных способа формирования движений:
15


Конфигурирование в системе " 1С:Предприятие 8.0". Решение оперативных задач


Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0







1) при проведении документов
Движения можно сформировать в модуле объекта Документ

посредством процедуры - обработчика событий
ОбработкаПроведения().
Разберем подробно этот способ на примере проведения Приходной накладной. Тело процедуры сформировано конструктором движений еще в прошлом курсе. (Если Вы тогда не успели - сформируйте сейчас)
Выглядит следующим образом:




Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



Процедура ОбработкаПроведения(Отказ, Режим)
//{{_КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
//1
Для Каждого ТекСтрока Товары Из Товары Цикл // регистр ЦеныПоставшиков
Движение = Движения. Цен ыПостав щи ков. ДобавитьО; Движение. Период = Дата; Движение, Регистратор = Ссылка; Движение. Поставщик = Контрагент; Движение. Номенклатура = ТекСтрокаТовары. Номенклатура;


16


Работа с регистрами (на примере регистра остатков)
Движение.Цена = ТекСтрокаТовары.Цена;
//КонецЦикла;
//Для Каждого ТекСтрокаТовары Из Товары Цикл // регистр Остатки Номенклатуры Приход
Движение = Движения.ОстаткиНоменклатуры.ДобааитьО; //2
Движение.ВидДвиженPя = ВидДвиженияНакопления. Приход; //3

Движение.Период = Дата; //4
Движение. Регистратор = Ссылка; /15
Движение.Номенклатура - ТекСтрокаТовары.Номенклатура; //6 Движение.Количество = ТекСтрокаТовары. Количество; Движение.Сумма = ТекСтрокаТовары. Сумма;
КонецЦикла;
// записываем движения регистров
Движения.ЦеныПоставщиков.Записать();
Движения.ОстаткиНоменклатуры.Записать(); //7
//}}_КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонеиПроцедурыКонецПроцедуры
Комментарий к тексту процедуры:
Процедура содержит запись движений в регистр сведений ЦеныПоставщиков - этот кусочек комментировать не будем. Разберем только то, что касается движений по регистру ОстаткиНоменклатуры.
//1 В регистре имеется измерение Номенклатура. В документе Номенклатура является реквизитом табличной части Товары. Соответственно, чтобы иметь возможность по каждому товару сформировать движение - необходимо это делать в цикле перебора строк табличной части документа.
//2 ДокументОбъект (а именно в нем мы сейчас находимся) имеет свойство Движения. Данное свойство предоставляет доступ к коллекции наборов записей движений документа. В нашем случае обращаемся к ОстаткиНоменклатуры и получаем возможность добавить в него новую запись.
//3 записывать атрибуты (свойства) новой записи начинаем с ВидаДвижения. Производим это следующим образом:
Существует системное перечисление ВидДвиженияНакопления. У него есть только два значения Приход и Расход. Поскольку накладная приходная - нам нужен как раз Приход.
Кстати, вместо конструкции
Движение = Движения.ИмяРегистра.ДобавитьО;
Движение. ВндДвижения = ВндДвиженияНакопления.Приход;
Можно было бы написать:
17


Конфигурирование в системе " 1С. Предприятие 8.0 ". Решение оперативных задач
Движение = Движен и я.Имя Регистра. ДобавитьПриходО;
Эффект был бы тот же.
//4 указываем период действия данного движения. В данном случае мы присвоили ему значение, взятое из свойства документа Дата. (Как Вы помните, в системе 1С:Предприятие 8.0 дата - это не только день, но еще и часы, минуты, секунды.) Но с таким же успехом мы могли присвоить и любую другую дату! В ЮПредприятии 8.0 период действия движения может и не совпадать с датой документа. Это позволяет, например, использовать документы замедленного действия, результат проведения которых скажется в определенный, Вами заданный, момент! Например - при решении задач планирования.
115 записываем значение регистратора движения. В данном случае мы воспользовались ссылкой на сам документ. Можно было бы даже сослаться и на другой, если только этот другой имеет право делать движения по данному регистру. Именно эта особенность будет впоследствии использована при реализации третьего способа записи движений (извне). Но поскольку движения записываются посредством использования свойства Движения данного документа, то регистратором система все равно пропишет его!
//6 заполняем значения атрибутов записи регистра (измерений и ресурсов) значениями, взятыми из реквизитов строки табличной части документа.
Ill записываем получившийся в процессе выполнения цикла по строкам документа набор записей непосредственно в регистр,
Практикум №2
Добавить е процедуру проведения приходной накладной проведение по
регистру Задолженности. Поскольку при получении товара
выходит, что мы его берем в долг значит, движение должно быть
-расход.
Добавить в конфигурацию документы ПКО и РКО (реквизиты
Контрагент и Сумма) и проводить их по регистру
Задолженности. ПКО заолженность должена РКО
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0


Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



Заметьте, наш долг увеличивается, когда ресурс долг уменьшается, и наоборот, а долги клиентов -растут и уменьшаются соответственно ресурсу.




2) из модуля документа
В предыдущем способе одновременно формировались движения документа, и документ проводился. Признак документ проведен на самом деле означает тот факт, что обработка документа пользователем ПОЛНОСТЬЮ завершена. Однако, что делать,' если до окончания
18


Работа с регистрами (на примере регистра остатков)
обработки еще далеко, а какие-то движения по регистрам документ уже совершить должен?
Так вот, любая процедура в модуле документа, через свойство Движения может записать новые движения. Если эта процедура называется не ОбработкаПроведения() (и не вызывается из нее) -тогда создастся ситуация, при которой документ не проведен, но движения у него есть.
Чтобы оценить прикладное значение этой возможности, добавим в документ Расходная накладная процедуру предварительной блокировки товара.
С прикладной точки зрения это важно в случаях одновременной работы с большими документами. Пока пользователь заполняет такой документ, его коллеги могут перехватить товар. И при проведении документа может вдруг выясниться, что отпустить половину номенклатурных позиций уже невозможно. Они отданы другим покупателям.
Именно поэтому полезно еще на этапе заполнения документа каким-то образом блокировать товар (захватывать самому), причем в указанных в документе количествах.
Лучший способ запоминать подобную информацию реализуется посредством соответствующего регистра.
Итак, приступаем:
Создайте регистр БлокировкаТовара (регистр остатков), определите у него одно измерение Номенклатура, один ресурс Количество, настройте форму списка.
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



19




Конфигурирование в системе " 1С:Предприятие 8.0". Решение оперативных задач
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



В форме Документа определим свойства кнопки командной панели
управления
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0


(добавим в существующую панель управления свою кнопку ПредПровед). Вызовем обработчик нажатия кнопки.
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



В модуле формы документа пропишем текст процедуры-обработчика нажатия:
Процедура ОсновныеДействияФормыПредПроведение(Кнопка)
БлокированиеТовара(); КонецПроцедуры
Из обработчика вызываем процедуру БлокированиеТовара() модуля объекта Документ.Расходная.
Непосредственно же движения по регистру выполним следующим образом:
Процедура БлокированиеТовара() Экспорт
Записать(); //1
Движения. Блокировка Товара.Очистить();
20


Работа с регистрами (на примере регистра остатков)
Для Каждого ТекСтрокаТовары Из Товары Цикл 112
Движение = Движения.БлокировкаТовара.Добавить();
Движеиие.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение. Период = Дата;
Движение.Регистратор = Ссылка;
Движение.Номенклатура = ТекСтрокаТовары. Номенклатура;
Движение.Количество = ТекСтрокаТовары-Количество;

КонецЦикла;

Движения.БлокировкаТовара.Записать(); 113
КонецПроцедуры
Прокомментируем текст процедуры:
//1 При записи движений по регистру накопления обязательно указание регистратора. Если документ еще не записан - с этим возникнут проблемы. Поэтому первым делом записываем сам документ.
Кроме того, необходимо предусмотреть очистку старых движений документа по регистру БлокировкаТовара. Иначе, если данный документ уже блокировал товар - мы рискуем добавить эти блокировки еще раз.
//2 технология формирования движения одинакова во всех случаях. Мы ее только что разбирали на примере проведения приходной накладной. Поэтому только коротко повторим основные этапы: Цикл перебора строк табличной части (чтобы добраться до каждого товара и его количества). Внутри него, посредством свойства ДокументОбъекта Движения, получаем возможность добавить записи по регистру БлокировкаТовара. Формируем очередную запись, заполняя необходимые атрибуты.
//3 Записываем сформированный набор записей регистра
БлокировкаТовара
Для чего в заголовке процедуры слово Экспорт - помните? Совершенно верно, в предыдущем курсе разбирали, как именно получается возможность вызывать процедуры модуля объекта из формы.
Теперь запустите пользовательскую часть, посмотрите, как работает наша процедура. При заполнении документа пользователь получает возможность, нажимая кнопку ПредПроведение, помещать в регистр БлокировкаТоваров информацию по уже заполненной части документа. Как воспользоваться этой информацией для реальной блокировки товаров - мы разберем чуть позже. Сейчас хотелось бы обратить Ваше внимание на следующий момент:
Если документ провести стандартным образом, посредством нажатия кнопки ОК, то система ...сначала удалит все его движения по
21


Конфигурирование в системе "1С:Предприятие 8.0". Решение оперативных задач
регистру БлокировкаТоваров, а потом проведет должным образом. Именно для этого мы и контролировали наличие свойства автоматическое удаление движений.
С прикладной точки зрения получается, что при нормальном проведении накладной товар сначала разблокируется, ну а потом, очевидно, будет уже списан.
3) извне
Любой объект, содержащий процедуру работы с набором записей регистра, может приписать любому возможному регистратору данного регистра любые движения.
Для демонстрации этой возможности вынесем процедуру Блокировка товаров из модуля документа.
С прикладной точки зрения теперь задача будет звучать так: Пользователь, просматривая список расходных накладных, должен иметь возможность заблокировать товары для тех документов, которые он выберет. Естественно, что если накладная уже проведена и товар списала, больше для нее блокировать ничего не надо
Реализуем:
В форме Списка Документа определим свойства кнопки командной
панели управления
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0


(добавим в существующую панель управления свою кнопку ПредПровед). Создадим обработчик нажатия кнопки.
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



Текст процедуры-обработчика сделаем таким:
22




Работа с регистрами (на примере регистра остатков) Процедура ДействияФормыПредПровед(Кнопка)
ТекДок = ЭлементыФормы.ДокументСписок.ТекущиеДанные.Ссылка; //1

Если ТекДок.Проведен Тогда //2
Возврат; КонецЕсли;
Для КаждогоТекСтрокаТовары Из ТекДок.Товары Цикл //5
Движение = Движения.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

Движение.Период = ТекДок.Дата;

Движение.Регистратор = ТекДок.Ссылка;

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

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

КонецЦикла;

Движения.Записать(); //6
КонецПроцедуры
Комментарий к тексту процедуры:
//1 Получаем доступ к документу в текущей строке табличного поля в форме списка документов.
//2 Поскольку блокировать есть смысл только для непроведенных документов, проведенные - отсекаем.
//3 Создаем набор записей по регистру БлокировкаТовара.
//4 Указываем, что движения будут касаться такого-то регистратора (нашего документа). Если это не сделать - ничего не получится при данном способе формирования движений.
//5 Формируем в цикле перебора строк документа очередную запись набора.
//6 Записываем все сформированные записи в регистр.
4) вручную (ручная операция)
Реализуется посредством специального документа (регистратора), которому запрещено делать движения программным способом. Но имеются интерактивные возможности непосредственного создания записей в регистре.


23


Конфигурирование в системе "1С:Предприятие 8.0". Решение оперативных задач
Добавим в конфигурацию документ РучнаяБлокировкаТовара. Никаких реквизитов и табличных частей документ содержать не должен. Более того, у него должно быть запрещено проведение!
Документ будет служить только для ручного формирования движений по регистру БлокировкаТоваров
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



Построим конструктором форму нашего документа.
Лучше еще на этапе работы с конструктором указать необходимость добавления в форму табличного поля для работы с движениями по регистру Блокировка Товара:
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



Если после построения конструктором в табличном поле формы отсутствуют колонки с атрибутами регистра, следует войти в свойства табличного поля и еще раз перевыбрать свойство Данные.
24




Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



Работа с регистрами (на примере регистра остатков)
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



Укажите опять, что это должны быть движения по регистру БлокировкаТовара.


После этого останется немного доработать состав появившихся колонок.
Лучше убрать колонку Регистратор. Поскольку регистратором однозначно должен выступать данный документ.
Зато стоит добавить колонку ВидДвижения. Это позволит вручную формировать как движения Приход, так и Расход - то есть еще и снимать товары с блокировки.
Добавляя колонку, не забудьте указать свойства данные и элемент управления так, как показано на следующем рисунке:
25


Конфигурирование в системе " 1С:Предприятие 8.0". Решение оперативных задач
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



Практикум №3
Создайте документ Ручная коррекция задолженности, с возможностью формирования ручных записей по регистру Задолженности.
2.3. Возможные способы получения данных из регистра остатков
Использование объектной модели системы 1С:Предприятие (РегистрНакопленияМенеджер)
Одним из способов получения данных из регистров является способ обращения с использованием объектной модели данных системы 1С:Предприятие.
В частности, чтобы получить накопившиеся итоги в регистре остатков,

достаточно воспользоваться методом объекта
РегистрНакопленияМенеджер - Остатки().
26


Работа с регистрами (на примере регистра остатков) Синтаксис этого метода выглядит следующим образом:
Остатки(Момент времени, Отбор, Измерения, Ресурсы)
Где:
Момент времени (необязательный)
Тип: Дата, МоментВремени, Граница. Момент времени, на который необходимо получить остатки. Если параметр не указан или установлен в Неопределено, то будут получены текущие остатки (на максимальную дату движений регистра). Если в качестве параметра передана Дата без указания времени, то остатки будут получены на начало дня, если МоментВремени - то в остатках не будут учтены движения регистра, произошедшие в тот же момент времени. Значение по умолчанию: Неопределено.
Отбор (необязательный)
Тип: Структура. Структура, содержащая набор значений измерений
регистра, по которым надо отбирать итоги. Имя Ключа структуры
должно совпадать с именем измерения регистра, заданного в
конфигураторе.
Значение по умолчанию: Неопределено.
Измерения (необязательный)
Тип: Строка. Список измерений, для которых надо получить остатки.

Строка, содержащая имена измерений, разделенные запятыми.

Если параметр не указан или указана пустая строка, то остатки будут

сформированы по всем измерениям.
Значение по умолчанию: Неопределено.
Ресурсы (необязательный)
Тип: Строка. Список ресурсов, для которых надо получить остатки.

Строка, содержащая имена ресурсов, разделенные запятыми.

Если параметр не указан или указана пустая строка, то остатки будут

сформированы по всем ресурсам.
Значение по умолчанию: пустая строка.
Результат выполнения метода - таблица значений, заполненная итогами и содержащая колонки с измерениями, указанными в параметре Измерения, и колонки с ресурсами, указанными в параметре Ресурсы.
Разберемся с данной технологией на следующем примере:
Необходимо дать возможность пользователю контролировать в старых Расходных следующий момент: какие остатки были на складе, когда накладная выписывалась?.
Для этого покажем на форме остатки для товаров, попавших в табличную часть, причем актуальные на момент самого документа.
Прежде всего, для этого создадим реквизит формы Ост, тип -Строка:
27


Конфигурирование в системе "1С:Предприятие 8.0". Решение оперативных задач
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



Поместим в форму элемент управления Надпись ( т ).
Если в его свойствах указать Ост в качестве данных, а заголовок очистить - получим возможность отображения вычисляемого реквизита формы.
Именно в нем и будет виден текущий остаток товара.
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



28


Работа с регистрами (на примере регистра остатков)
Теперь определимся с заполнением его данных. Как и любое другое программное действие - оно должно быть ответом на некое событие. Очевидно, что событие должно быть как-то связано с табличным полем Товары формы документа.
Находим в перечне событий данного табличного поля: ПриАктивизацииСтроки и формируем для него процедуру:
Процедура ТоварыПриАктивизацииСтроки(Элемент)
ОстаткиТов = РегистрыНакопления.ОстаткиНоменклатуры; //1
ТекТовар= ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура; //2
ФильтрТов = Новый Структура(); Фильтр Тов. Вставить("Номенклатура",ТекТовар);
ТаблицаОст = Остатки Тов.Остатки(Дата,Фильтр Тов, "Номенклатура",''Количество"); //з

Ост = "Тек.Ост: " + ТаблииаОст.Итог("Количество"); //4

КонецПроцедуры
Комментарий к тексту процедуры:
11\ Создаем переменную, дающую доступ к объекту РегистрНакопленияМенеджер. ОстаткиНоменклатуры.
112 Готовим структуру, содержащую фильтр по нужному товару.
//3 Получаем в таблицу значений остатки нужного товара, актуальные на дату документа.
//4 выводим на форму итог.
Практикум №4
Учесть в выводимом на форму остатке заблокированное количество товара. То есть выводить свободный остаток, который определяется как разница между остатком по регистру ОстаткиНоменклатуры и остатком по регистру Блокировка То вара.
Обеспечить, что бы остаток был виден не только при активации уже существующей строки, но и при заполнении новой.
Практикум №5
Позаботимся о следующем сервисе для пользователя; Допустим, он начинает выписывать Приходный кассовый ордер для конкретного контрагента. А программа сразу подсказывает: сколько этот контрагент нам должен. Поэтому:
29


Конфигурирование в системе "1С:Предприятие 8.0". Решение оперативных задач
При выборе контрагента в документе ПКО создать процедуру, которая проверит задолженность данной организации перед нами, и в случае, если та - положительная, пропишет эту задолженность в поле Сумма.
При выборе Контрагента в документе РКО создать процедуру, которая проверит задолженность данной организации перед нами, и в случае, если та — отрицательная (то есть, мы должны), пропишет эту задолженность в поле Сумма.
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



30




Конфигурирование в системе "1С:Предприятие 8.0". Решение оперативных задач
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



Указываем параметры виртуальной таблицы
ОстаткиНоменклатуры.Остатки. Для этого надо нажать кнопочку
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0


над разделом Таблицы конструктора.
В качестве параметров можно указать Период, на который хотим получить итоги и фильтрующее условие.
В нашем случае фильтровать есть смысл только по значениям Номенклатуры. А конструктор условия любезно подсказывает', какие операторы можно использовать в условии.
В нашем случае лучше всего подойдет В ИЕРАРХИИ. Если взять просто В, то при пустом входном параметре ПарНоменклатура получим выходную таблицу не по всем товарам, а.. .пустую.
32


Работа с регистрами (на примере регистра остатков)


Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0











Далее указываем поля, которые будем выбирать из таблицы ОстаткиНоменклатурыОстатки. Это Номенклатура с его представлением, КоличествоОстаток и СуммаОстаток:
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



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


Конфигурирование в системе "1С:Предприятие 8.0 ". Решение оперативных задач
поставим галочку Общие итоги, и укажем - по какому суммируемому полю:


Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0







На закладке Выходная форма остается только уточнить тип значения полей ввода параметров:
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



34


Работа с регистрами (на примере регистра остатков)
В нашем случае параметр ПарНоменклатура, естественно, должен иметь тип СправочникСсылка.Номенклатура, а параметр Дата тип Дата. Кроме того, тут же можно поменять подпись к параметру на более благозвучную. Именно ее и увидит пользователь на диалоге отчета.
Остается нажать кнопку ОК и ... любоваться, как конструктор создаст макет, диалог и процедуру формирования отчета.
Подробно текст процедуры разбирать не будем. Вы это делали уже в предыдущем курсе. Единственное, на чем заострим внимание - это на тексте запроса:
Запрос. Текст =
"ВЫБРАТЬ
| ОстаткиНоменклатурыОстатки.Номенклатура,
ОстаткиНоменклатурыОстатки.Номенклатура.Представление,

| ОстаткиНоменклатурыОстатки.КоличествоОстаток,
| ОстаткиНоменклатурыОстатки.СуммаОстаток КАК СуммаОстаток
|ИЗ
РегистрНакопления.ОстаткиНомеиклатуры.Остатки(ДатаОтчета, Номенклатура В ИЕРАРХИИ(ПарНоменклатура)) КАК ОстаткиНоменклатурыОстатки
|ИТОГИ СУММА(СуммаОстаток) ПО

I ОБЩИЕ";
Обратите внимание, все данные получаем из виртуальной таблицы ОстаткиНоменклатурыОстатки, а саму таблицу посредством конструкции:
РегистрНакопления.имяРегистра.Остаток(Период, Условие).
Период - это параметр типа Дата, Момент времени или Граница, на который будет произведен расчет итогов для формирования таблицы (то есть - не включая). Если период не указывать - данные будут получены по самую последнюю запись в регистре.
В качестве условия может выступать логическая конструкция, оперирующая с полями регистра накопления. Используется для ограничения состава записей, по которым будут выбираться итоги. В нашем случае - будем строить отчет не по всем товарам, а только по входящим в ПарНоменклатура.
Заметьте, Условие здесь применяется к исходным записям, которые содержатся в регистре, а не по уже отобранным.
35


Конфигурирование в системе "1С: Предприятие 8.0". Решение оперативных задач
И последнее замечание - в расчете для данных выходной таблицы будут использоваться только активные записи регистра!
На выходе получаем таблицу вида:


РегистрНакопления.Имя.Остатки(Период,Условие)
Поле
Тип
Измерение
Тип измерения
РесурсОстаток
Число
То есть с измерениями и итогами ресурсов по этим наборам измерений.
В нашем случае получится таблица:
Габец А. - Решение оперативных задач в системе 1С Предприятие 8.0



Обратите внимание, обращение к итогам ресурсов требует до

    Бухгалтерия: Автоматизация - Система 1С