Добавлен: 31.03.2023
Просмотров: 930
Скачиваний: 13
Рис. 65. Форма документа ПродажаТоваров в режиме 1С:Предприятие
Регистры накопления
В задачах учета практически ни одно прикладное решение не обходится без использования регистров. В информационной структуре, создаваемой системой на основании объекта конфигурации регистр накопления, производится автоматическое накопление данных. Основным назначением регистра накопления является аккумулирование числовой информации в разрезе одного или нескольких измерений. Эти измерения описываются разработчиком в режиме конфигуратора.
Виды числовой информации, накапливаемой регистром, называются ресурсами. Они также являются подчиненными объектами и описываются в режиме конфигуратора. Изменение состояния регистра накопления происходит, как правило, при проведении документа. В этом случае в регистр добавляется одна или несколько записей. Каждая запись содержит значения измерений, значения приращений ресурсов, а также ссылку на документ, который вызвал эти изменения. Такая ссылка на документ называется регистратором, а набор записей регистра накопления, формируемых в результате проведения документа, называется движениями регистра накопления.
Кроме того, регистр накопления может хранить дополнительную информацию, описывающую каждое движение. Набор такой дополнительной информации задается разработчиком при помощи реквизитов регистра накопления.
Регистр накопления КоличествоТоваров
Для создания регистра накопления КоличествоТоваров следует в окне Конфигурация щелчком правой кнопки мыши на значке Регистры накопления вызвать контекстное меню. Далее после выбора пункта Добавить перед нами откроется окно редактирования объекта конфигурации (рис. 66).
Рис. 66. Вкладка «Основные» окна редактирования регистра «КоличествоТоваров»
Здесь на вкладке Основные необходимо дать название создаваемому регистру и указать, что он будет являться регистром остатков. После таких начальных установок перейдем на вкладку Данные, где создадим два измерения регистра накопления КоличествоТоваров (рис. 67):
- Товар (тип данных — СправочникСсылка.Товары)
- Филиал (тип данных — СправочникСсылка.Филиалы)
Теперь сформируем в регистре один ресурс — Количество (тип данных — число).
Рис. 67. Измерения и ресурс регистра КоличествоТоваров
На этом все необходимые действия по разработке нового объекта конфигурации завершаются, однако использовать созданный регистр накопления без документа, который бы совершал движения по данному регистру, невозможно. Более того, если вы сейчас попробуете перейти в режим 1С:Предприятие, то система напомнит о незавершенности выполненных действий.
Итак, в окне редактирования объекта конфигурации вернемся к документу ПоступлениеТоваров и откроем вкладку Движения (рис. 68).
Рис. 68. Вкладка «Движения» окна редактирования документа ПоступлениеТоваров
Здесь в списке регистров конфигурации необходимо отметить флажком единственный регистр, который мы на данный момент создали. После установки флажка сразу становится доступна кнопка Конструктор движений, которым мы и воспользуемся. Конструктор движений устроен достаточно просто — в списке Регистры перечислены регистры, по которым документ может создавать движения (рис. 69). В данном случае это единственный регистр — КоличествоТоваров.
Рис. 69. Окно конструктора движений регистров
В нижней левой части окна конструктора движения необходимо указать соответствие полей регистра накопления и реквизитов документа. Технически это можно выполнить либо щелчком на кнопке Заполнить выражения, либо двойным щелчком на необходимом реквизите документа в правом верхнем разделе окна на рис. 69. В результате напротив названий полей регистра формируются соответствующие выражения (рис. 70).
Рис. 70. Заполнение выражений в окне конструктора движений регистра
Обратим внимание на одну важную деталь: в качестве значения параметра Тип движения регистра по умолчанию с помощью переключателя установлен вариант Приход, что соответствует добавлению ресурсов регистра при проведении документа. Альтернативный вариант Расход связан с уменьшением ресурсов.
Теперь все действия в окне конструктора выполнены, осталось щелкнуть на кнопке «OK». Это приводит к автоматической генерации программной процедуры, которая формирует движения по регистру при проведении документа ПоступлениеТоваров (см. листинг 1.6). В дальнейшем если потребуется эту процедуру найти, то в окне редактирования объекта конфигурации ПоступлениеТоваров следует перейти на вкладку Прочее. Здесь после щелчка на кнопке Модуль объекта перед нами открывается текст, представленный в листинге 1.7.
Листинг 1.7. Процедура проведения документа ПоступлениеТоваров
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
Движения.КоличествоТоваров.Записывать = Истина;
Для Каждого ТекСтрокаПереченьТоваров Из ПереченьТоваров Цикл
// регистр КоличествоТоваров Приход
Движение = Движения.КоличествоТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Товар = ТекСтрокаПереченьТоваров.Товар;
Движение.Филиал = Филиал;
Движение.Количество = ТекСтрокаПереченьТоваров.Количество;
КонецЦикла; //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Основное содержание процедуры ОбработкаПроведения() составляет цикл, в котором перебираются строки табличной части ПереченьТоваров рассматриваемого документа ПоступлениеТоваров:
Для Каждого ТекСтрокаПереченьТоваров Из ПереченьТоваров Цикл
При каждом проходе цикла с помощью метода Добавить()создается очередная запись в регистре. В последующих строках процедуры устанавливаются значения полей регистра в соответствии с данными из очередной строки табличной части документа. Вследствие несложных визуальных действий были реализованы в документе ПоступлениеТоваров формирование движений по регистру накопления КоличествоТоваров. В дальнейшем автоматически созданную программную процедуру ОбработкаПроведения() можно при необходимости скорректировать либо дополнить фрагментами программного кода.
Включим регистр накопления КоличествоТоваров в подсистему Управление. Теперь после проделанной работы перейдем в режим 1С:Предприятие и проверим результат выполненных изменений. Выберем пункт Поступление товаров в меню Документы, создадим новый документ и заполним его информацией. После внесения данных в форму документа щелчок на кнопке Провести и закрыть приводит к записи созданного документа в информационную базу. Кроме того, осуществляется его проведение (формируются движения по регистру). На рис. 71 показано содержание регистра накопления КоличествоТоваров с внесенными записями, связанными с данным документом поступления.
Рис. 71. Формирование записей в регистре КоличествоТоваров
Однако у нас имеется еще и документ ПродажаТоваров. Проведение этого документа должно приводить к уменьшению ресурса регистра КоличествоТоваров. Для того чтобы это технически реализовать, необходимо в окне редактирования объекта конфигурации ПродажаТоваров перейти на вкладку Движения. Дальнейшие действия аналогичны рассмотренной ранее доработке документа ПоступлениеТоваров. Новых технических моментов при доработке документа ПродажаТоваров нет, за исключением того, что в качестве типа движения регистра следует установить вариант Расход.
После выполнения необходимых действий в окне конструктора движений автоматически генерируется программная процедура, которая формирует движения по регистру КоличествоТоваров при проведении документа ПродажаТоваров (листинг 1.8).
Листинг 1.8. Процедура проведения документа ПродажаТоваров
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
Движения.КоличествоТоваров.Записывать = Истина;
Для Каждого ТекСтрокаПереченьТоваров Из ПереченьТоваров Цикл
// регистр КоличествоТоваров Расход
Движение = Движения.КоличествоТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Товар = ТекСтрокаПереченьТоваров.Товар;
Движение.Филиал = Филиал;
Движение.Количество = ТекСтрокаПереченьТоваров.Количество;
КонецЦикла; //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Теперь осталось перейти в режим 1С:Предприятие и ввести документ ПродажаТоваров (один вариантов документа показан на рис. 72).
Рис. 72. Форма документа ПродажаТоваров в режиме 1С:Предприятие
В результате проведения документа продажи товаров в регистре КоличествоТоваров появились новые записи (рис. 73).
Рис. 73. Изменения в регистре КоличествоТоваров после продажи товаров
Перемещение товаров на выставку и обратно
Ситуация, когда некоторые товары перемещаются с филиала на выставку (а затем возвращаются обратно в филиал), достаточно типична. Для реализации данной функциональности создадим два документа:
- ПеремещениеНаВыставку
- ПеремещениеСВыставки
Начнем с документа ПеремещениеНаВыставку. После задания имени документа на вкладке Основные перейдем на вкладку Данные для формирования реквизитов. Так, для создаваемого документа в области шапки разместим реквизит «Филиал», в качестве типа данных которого установим СправочникСсылка.Филиалы. После этого в документе создадим табличную часть, которую традиционно для данной главы назовем «ПереченьТоваров», а уже в ней разместим реквизиты:
- Товар (тип данных — СправочникСсылка.Товары)
- Количество (тип данных — число)
Далее необходимо реализовать проводки документа ПеремещениеНаВыставку, поэтому с помощью конструктора движений (вкладка «Движения») сформируем соответствие полей регистра «КоличествоТоваров» и реквизитов документа (рис. 74).
Рис. 74. Окно конструктора движений для документа «ПеремещениеНаВыставку»
Учитывая, что перемещения товаров на выставку является расходом ресурса, следует установить переключатель «Расход». После этого щелчком на кнопке «OK» сгенерируем необходимую процедуру (листинг 1.9).
Листинг 1.9. Процедура проведения документа ПеремещениеНаВыставку
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
Движения.КоличествоТоваров.Записывать = Истина;
Для Каждого ТекСтрокаПереченьТоваров Из ПереченьТоваров Цикл
// регистр КоличествоТоваров Расход
Движение = Движения.КоличествоТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Товар = ТекСтрокаПереченьТоваров.Товар;
Движение.Филиал = Филиал;
Движение.Количество = ТекСтрокаПереченьТоваров.Количество;
КонецЦикла; //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Отнесем созданный документ ПеремещениеНаВыставку к подсистеме «Управление».
В результате выполненных действий в режиме 1С:Предприятие с помощью документа «ПеремещениеНаВыставку» мы можем регистрировать перемещение товаров с наших филиалов на выставку. На рис. 75 приведено состояние регистра накопления «КоличествоТоваров» после проведения одного из документов «ПеремещениеНаВыставку».
Рис. 75. Изменения в регистре КоличествоТоваров после перемещении товара на выставку
Теперь нам требуется создать еще один (аналогичный) документ, который назовем «ПеремещениеСВыставки». Реквизиты разрабатываемого документа полностью аналогичны реквизитам предыдущего документа «ПеремещениеНаВыставку». Для обеспечения движений по регистру «КоличествоТоваров» также воспользуемся конструктором движений. Рис. 76 иллюстрирует соответствие полей регистра и реквизитов документа в окне конструктора движений.
Рис. 76. Окно конструктора движений
В результате после щелчка на кнопке «OK» мы автоматически получим необходимую процедуру проведения документа «ПеремещениеСВыставки» (листинг 1.10).
Листинг 1.10. Процедура проведения документа ПеремещениеСВыставки
Процедура ОбработкаПроведения(Отказ, Режим)