Главная » Файлы » Справка на Примерах 1С » Регистры Накопления |
Скачивать материалы с сайта, могут только зарегистрированные пользователи.
Для регистрации заполните два поля ниже!
Через минуту Вы получите "Гостевой доступ"
2012 Май 23, 21:11 | |
1С:Предприятие v8. Часть 8. Регистры накопления1С:Предприятие v8. Часть 8. Регистры накопленияВ этой статье я хочу рассмотреть такой механизм 1С:Предприятия 8, как регистры накопления. Этот механизм позволяет нам накапливать числовые показатели о деятельности фирмы, причем эти показатели он обрабатывает, рассчитывает итоги и позволяет нам получать остатки и обороты по этим показателям. В качестве примера приведу регистр накопления ТоварыНаСкладах из конфигурации "Управление торговлей” Этот регистр используется для хранения остатков товаров на складах компании в разрезе номенклатуры, характеристики номенклатуры, серии и качества товара. Т.е. в любой момент мы можем посмотреть, сколько на конкретном складе, например "Центральный склад” у нас хранится номенклатуры "Ботинки мужские”, с характеристикой "43 размер”, серией от "20.08.2011” и качеством "новый”. А чтобы это было возможным, в регистр нужно записывать данные. Платформа 1С:Предприятие так устроена, что записывать данные в регистр, можно только с привязкой к документам. Т.е. если в регистре что-то меняется (приход товара, или его продажа) должен быть обязательно указан документ, который это сделал. Обычно данные в регистр записываются, когда документ проводится. В модуле документа, есть предопределенная процедура ОбработкаПроведения, в которой разработчик и описывает алгоритм, по которому формуруются записи в регистрах накопления. Давайте рассмотрим процесс создания регистра с самого начала. Как вы
помните, мы создавали конфигурацию, в которой у нас уже есть справочники
и документы. Сейчас мы добавим к ней регистр накопления. Добавляем
регистр накопления, название "ТоварыНаСкладах”, вид регистра "Остатки”.
Вид регистра "Обороты” мы рассмотрим позже. На закладке данные добавляем
измерение "Номенклатура” типа "Справочник.Номенклатура” и добавляем
ресурс "Количество” типа число(15,3). Теперь, нужно обеспечить формирование записей регистра при проведении документа. Но из документов у нас только "ПриходныйКассовыйОрдер” и "РасходнаяНакладная”. Документа, который делал бы приходные движения в наш регистр у нас нет. Давайте создадим его. Создаем документ, название "Оприходование товаров”, на закладке данные добавляем табличную часть "Товары”, в ней реквизиты "Номенклатура” и "Количество”. Чтобы наш документ делал движения по регистру накопления "ТоварыНаСкладах” на закладке Движения отметим его (регистр) галочкой и нажмем кнопку "Конструктор движений”. Этот конструктор помогает нам написать алгоритм формирования записей регистров, который находится в уже упомянутой процедуре "ОбработкаПроведения”. В конструкторе вид движения регистра оставляем "Приход”, в поле
Табличная часть выбираем "Товары”,нажимаем кнопку "Заполнить выражения” и
затем кнопку ОК. Откроется модуль документа, в котором уже создана процедура ОбработкаПроведения. Процедура ОбработкаПроведения(Отказ, Режим) //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! // регистр ТоварыНаСкладах Приход Движения.ТоварыНаСкладах.Записывать = Истина; Движения.ТоварыНаСкладах.Очистить(); Для Каждого ТекСтрокаТовары Из Товары Цикл Движение = Движения.ТоварыНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Количество = ТекСтрокаТовары.Количество; КонецЦикла; //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры Теперь давайте запустим режим Предприятие и создадим несколько документов. У документов в верхней панели появилось подменю "Перейти”, по которому можно посмотреть созданные документов движения в регистрах. Чтобы посмотреть какие же товары есть у нас на складе мы сделаем отчет, который будет показывать остатки по регистру "ТоварыНаСкладах”. Переходим в режим Конфигуратор и создаем отчет. Название устанавливаем "ОстаткиТоваров”. На закладе формы создаем новую форму отчета, и назначаем ее основной. Добавляем на форму ПолеТабличногоДокумента, это можно через меню "Форма-Вставить элемент управления” и выбрать вид элемента - поле табличного документа, назначить ему имя ТабДок и расположить на всю форму. Затем переходим в обработчик кнопки "Сформировать”, удаляем находящийся там комментарий, устанавливаем курсор в тексте процедуры обработчика события, щелкаем правой кнопкой мыши и выбираем "Конструктор запроса с обработкой результата”. Это позволит нам создать запрос и сразу вывести его результат в отчет. На закладке Обработка результата выбираем "Вывод в табличный документ”, переходим на закладку "Таблицы и поля”. Видим, что таблица ТоварыНаСкладах представление в виде четырех таблиц. Первая таблица - это список записей, которые мы формировали в обработке проведения документов, остальные это виртуальные таблицы, которые платформа создает сама. Эти таблицы позволяют нам получить обработанные данные по регистру - обороты за период, остатки на дату, или остатки и обороты в одной таблице. Мы хотим вывести остатки, поэтому выбираем таблицу Остатки. Из этой таблицы выбираем все поля Номенклатура и КоличествоОстаток. Нажимаем кнопку ОК. Конструктор сформировал алгоритм, который выведет нам отчет по остаткам, нам лишь нужно указать куда вывести отчет. Добавим строку: "ТабДок = ЭлементыФормы.ТабДок;” перед текстом, сформированным конструктором. ТабДок = ЭлементыФормы.ТабДок; //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! Макет = Отчеты.ОстаткиТоваров.ПолучитьМакет("Макет"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.Номенклатура, | ПРЕДСТАВЛЕНИЕ(ТоварыНаСкладахОстатки.Номенклатура), | ТоварыНаСкладахОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки"; Результат = Запрос.Выполнить(); ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок"); ОбластьПодвал = Макет.ПолучитьОбласть("Подвал"); ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы"); ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы"); ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали"); ТабДок.Очистить(); ТабДок.Вывести(ОбластьЗаголовок); ТабДок.Вывести(ОбластьШапкаТаблицы); ТабДок.НачатьАвтогруппировкуСтрок(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи); ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень()); КонецЦикла; ТабДок.ЗакончитьАвтогруппировкуСтрок(); ТабДок.Вывести(ОбластьПодвалТаблицы); ТабДок.Вывести(ОбластьПодвал); //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА Запустим режим 1С:Предприятие и посмотрим работу отчета. Как видим, что-то более-менее приемлемое конструктор нам создал. Еще у нас есть "Реализация товаров”, которая должна уменьшать наши остатки. Давайте сделаем так, чтобы она тоже формировала движения по регистру. Открываем документ, на закладке Движения устанавливаем "галочку” напротив нашего регистра, и нажимаем кнопку "Конструктор движений”. Тип движение регистра ставим расход, выбираем табличную часть
"Товары”, нажимаем "Заполнить выражения” и "ОК”. Конструктор сформировал
алгоритм проведения документа, давайте его проверим. Для этого вновь
запустим режим 1С:Предприятие и перепроведем созданные документы
"РеализацияТоваров”. Как видите, остатки уменьшились, даже по некоторым позициям ушли в минус. Это происходит потому, что мы не контролируем наличие остатков при реализации товаров. Наш регистр "ТоварыНаСкладах” типичный пример регистра остатков, у него есть движения как приходные, так и расходные. Но в системе 1С еще есть регистры оборотов. В качестве примера, приведу регистр "Продажи”. Каждый раз при продаже товара клиенту, мы записываем кто, чего и сколько у нас купил. А затем в отчете мы можем посмотреть, а сколько товара у нас купил тот-то. В этот регистр не будут записываться движения отдельно приход или расход. Движения будут равнозначные. В этих случаях и используется регистр оборотов. Давайте и в нашей конфигурации создадим такой регистр. Добавим новый
регистр накопление, название "Продажи”, тип регистра "Обороты”, на
закладке данные добавим измерение "Клиент” и "Номенклатура”, ресурсы
"Количество” и "Сумма”. Вернемся к документу "РеализацияТоваров”, на закладе движения установим "галочку” напротив регистра "Продажи”, и нажмем кнопку "Конструктор движений”. Нажмем кнопку (+) (добавить) и выберем регистр "Продажи”, дальше как обычно выбираем табличную часть и нажимаем "Заполнить выражения”. "ОК”. // регистр Продажи Движения.Продажи.Записывать = Истина; Движения.Продажи.Очистить(); Для Каждого ТекСтрокаТовары Из Товары Цикл Движение = Движения.Продажи.Добавить(); Движение.Период = Дата; Движение.Клиент = Клиент; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Количество = ТекСтрокаТовары.Количество; Движение.Сумма = ТекСтрокаТовары.Сумма; КонецЦикла; Запускаем 1С в режим Предприятие, перепроводим документы "РеализацияТоваров”, проверяем сформированы ли движения. Отчет вы можете сформировать сами, делается это все по такому же принципу как и прошлый отчет, таблицу нужно выбирать "Продажи.Обороты”. А теперь давайте в нашу конфигурацию добавим интерфейс, чтобы не
приходлось документы открывать через меню "Операции”. Открываем в
конфигураторе ветку "Общие”, ищем в ней Интерфейсы и добавляем новый.
Откроется конструктор интерфейсов, в нем нажимаем кнопку "Построить”.
Все. Упрощенный интерфейс готов. Чтобы он открывался по умолчанию нужно в
свойствах конфигурации (правой кнопкой по самому верхнему элементу
дерева конфигурации - Свойства) установить в качестве основного
интерфейса, созданный нами интерфейс. Вот и все, что хотел рассказать сегодня о регистрах накопления. Если будут вопросы пишите, буду рад помочь. Written by: Роман Заболотин | |
Просмотров: 3445 | Загрузок: 7 | |
Выразить благодарность - Поделиться с друзьями!
Всего комментариев: 0 | |