Опубликован: 06.12.2011 | Уровень: для всех | Доступ: платный
Лекция 7:

Документы, регистры накопления, СКД

< Лекция 6 || Лекция 7: 123456 || Лекция 8 >

Регистры накопления

Представим себе организацию, в которой все сведения о приходе материалов хранятся лишь в виде приходных документов. Для того, чтобы узнать количество и стоимость имеющихся в организации материалов, нам понадобится обращаться к документам, просматривать каждый из них, выписывая нужные данные, после чего суммировать их, получая нужные данные. Такой подход неудобен – он слишком медленный как для нашего воображаемого "ручного" случая, так и для автоматизированного учета.

Логичнее было бы, в дополнение к документам, вести специальные таблицы, в которые, при приеме материалов и при их списании, вносить краткие сведения об этом. Если, скажем, ежедневно, подводить итоги по этим таблицам и выводить остатки материалов, то, для того, чтобы сказать, сколько и каких материалов имеется в организации на определенную дату, достаточно обратиться к соответствующей графе таблицы. В системе 1С:Предприятие такими таблицами являются регистры накопления. Как следует из названия, они предназначены для отражения, накопления, неких показателей. И отражение в регистрах прихода и расхода материалов – один из типичных примеров их использования.

В нашей организации ведется учет материалов в привязке к ответственным лицам, которые их получают и с которых эти материалы списывают при отпуске в производство. Нам нужно хранить информацию о количестве материалов и об их стоимости, а так же, при списании в производство, иметь сведения о том, какому именно мастеру эти материалы переданы. Эти соображения позволяют нам спроектировать структуру регистра накопления, который мы сейчас будем создавать.

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

Итак, нам нужно хранить следующие данные:

  • Номенклатурная позиция
  • Ответственный сотрудник, на котором числится данная позиция
  • Количество номенклатуры
  • Стоимость номенклатуры
  • Данные о мастере, которому переданы материалы для использования.

Измерения регистра, или разрезы, в которых хранятся данные, позволяют нам ответить на вопросы о том, какие именно данные хранятся в регистре. В нашем случае нам нужно знать две основных характеристики – это, за каким ответственным лицом закреплена та или иная номенклатурная позиция. Очевидно, измерениями из нашего списка данных будут номенклатурная позиция и ответственный сотрудник.

Ресурсы регистра – это всегда числовые значения, характеризующие хранимые данные. Числовые значения – это количество и сумма, и именно они будут ресурсами нашего регистра.

Реквизиты регистра играют вспомогательную роль, и, в нашем случае, логично будет в реквизите регистра хранить сведения о мастере, получившем материалы для работы – на тот случай, если нам понадобится узнать – кто именно эти материалы использовал.

Еще один важный вопрос, который нужно решить, проектируя регистр, заключается в том, будет ли этот регистр регистром остатков или регистром оборотов. Нас интересуют и сведения об остатках материалов, и сведения об оборотах, поэтому при настройке регистра следует указать вид регистра – Остатки. Регистр с видом Остатки позволяет нам работать и с остатками и с оборотами

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

Обсудив теоретическую часть вопроса, перейдем к практике. Создадим новый регистр накопления, назовем его ОстаткиМатериалов, параметр Вид регистра оставим в значении Остатки, рис. 6.12.

Регистр накопления ОстаткиМатериалов

Рис. 6.12. Регистр накопления ОстаткиМатериалов

Включим регистр накопления в состав подсистемы ОперативныйУчетМатериалов.

На вкладке Данные создадим следующие измерения, ресурсы и реквизиты:

Измерения:

Имя: Номенклатура, Тип: СправочникСсылка.Номенклатура, Запрет незаполненных значений – установлено.

Имя: ОтветственныйСотрудник, Тип: СправочникСсылка.Сотрудники, Запрет незаполненных значений – установлено.

Ресурсы

Имя: Количество, Тип: число, длина 10, точность 3

Имя: Сумма, Тип: число, длина 10, точность 2

Реквизиты:

Имя: ПолучательМатериалов, Тип: СправочникСсылка.Сотрудники

Обратите внимание на имена этих реквизитов, на их типы, а так же – на стандартные реквизиты регистра ( рис. 6.13.) – эти данные пригодятся нам при работе над процедурой проведения документа.

Исключим из состава реквизитов регистра общий реквизит Организация. Сейчас в нем нет необходимости. Для организации хранения данных в регистре в разрезе различных организаций нам понадобилось бы новое измерение – Организация, благодаря наличию которого мы смогли бы работать с материалами различных организаций.

Регистр накопления ОстаткиМатериалов, состав данных

увеличить изображение
Рис. 6.13. Регистр накопления ОстаткиМатериалов, состав данных

Перейдем на вкладку Регистраторы окна редактирования объекта и выберем в качестве документов-регистраторов документы – ПоступлениеМатериалов и ОтпускМатериаловМастеру.

На данном этапе настройка регистра накопления окончена, перейдем к настройкам документов. Начнем с документа ПоступлениеМатериалов.

Откроем окно редактирования объекта для этого документа, перейдем на вкладку Движения ( рис. 6.14.) и нажмем на кнопку Конструктор движений

Документ ПоступлениеМатериалов, вкладка Движения

Рис. 6.14. Документ ПоступлениеМатериалов, вкладка Движения

В конструкторе, выберем тип движения регистра – Приход, в поле Табличная часть укажем табличную часть документа Материалы, нажмем на кнопку Заполнить выражения. Автоматический механизм установления соответствия между данными документа и регистра не всегда работает правильно (в том случае, если не может однозначно определить соответствия, или тогда, когда соответствие, определенное им по его логике, отличается от желаемого), поэтому проверим правильность установленных соответствий. В итоге окно Конструктора движения регистра должно выглядеть так, как показано на рис. 6.15.

Конструктор движений

Рис. 6.15. Конструктор движений

После нажатия на кнопку ОК, в модуле объекта документа будет сформирована такая процедура обработки проведения (так она выглядит после удаления комментариев о том, что код построен конструктором движений):

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

Эта процедура объявлена в модуле объекта, она исполняется на сервере. Установка свойства Движения.ОстаткиМатериалов.Записывать в значение Истина говорит системе о том, что она должна записать в регистр движения, сформированные в процедуре. Движения заполняются в цикле обхода табличной части документа. Они будут физически записаны в регистр после того, как будет сформирован полный набор записей. Процедура проведения вполне может использовать и другие механизмы обращения к данным. Например, нужные данные могут быть получены с помощью запроса.

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

Запустим конфигурацию в режиме 1С:Предприятие, проверим работу механизма на практике. Для этого перепроведем существующие документы ПоступлениеМатериалов, можем ввести и новые документы этого вида. При проведении или перепроведении данные из документов попадают в регистр накопления ОстаткиМатериалов, рис. 6.16.

Данные в регистре накопления

увеличить изображение
Рис. 6.16. Данные в регистре накопления

Обратите внимание на то, что регистры накопления, как объекты, которые не предназначены изначально для "ручной" работы пользователя, не выводятся в командном интерфейсе даже при указании подсистем, в которые они входят. Нам, при разработке, понадобится просматривать регистры.

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

При записи данных о приходе материалов нам, в нашем случае, нет нужды в каких-либо дополнительных проверках вводимых данных, поэтому нас вполне устроит стандартная процедура проведения.

Следующим документом, проведение которого мы хотим организовать, является документ, списывающий материалы – ОтпускМатериаловМастеру. Им мы займемся в следующей лекции, а сейчас построим отчет ОстаткиМатериалов.

< Лекция 6 || Лекция 7: 123456 || Лекция 8 >
Лариса Дятчина
Лариса Дятчина

Код 

&НаКлиенте

Процедура ОсновноеКонтактноеЛицоПриИзменении(Элемент)

Если НЕ ПроверитьЗаполнениеРеквизита() Тогда

 Сообщить("Выбранное контактное лицо, "+Объект.ОсновноеКонтактноеЛицо+",не работает у контрагента.");

КонецЕсли;

КонецПроцедуры

 

&НаСервере

Функция ПроверитьЗаполнениеРеквизита()

 Возврат (Объект.ОсновноеКонтактноеЛицо.ПредставительРаботает);  

КонецФункции

&НаСервере

Процедура УстановитьНомерПредставителя()

 

 Объект.ТелефонКонтактногоЛица=Объект.ОсновноеКонтактноеЛицо.КонтактныеСведения;

КонецПроцедуры

При проверке выдает ошибку:

{Справочник.Контрагенты.Форма.ФормаСписка.Форма(12,11)}: Переменная не определена (Объект)
 Возврат (<<?>>Объект.ОсновноеКонтактноеЛицо.ПредставительРаботает);   (Проверка: Сервер)
{Справочник.Контрагенты.Форма.ФормаСписка.Форма(17,2)}: Переменная не определена (Объект)
 <<?>>Объект.ТелефонКонтактногоЛица=Объект.ОсновноеКонтактноеЛицо.КонтактныеСведения; (Проверка: Сервер)
{Справочник.Контрагенты.Форма.ФормаСписка.Форма(17,32)}: Переменная не определена (Объект)
 Объект.ТелефонКонтактногоЛица=<<?>>Объект.ОсновноеКонтактноеЛицо.КонтактныеСведения; (Проверка: Сервер)
{Справочник.Контрагенты.Форма.ФормаСписка.Форма(6,41)}: Переменная не определена (Объект)
 Сообщить("Выбранное контактное лицо, "+<<?>>Объект.ОсновноеКонтактноеЛицо+",не работает у контрагента."); (Проверка: Тонкий клиент)

 

работаю на версии 1С:Предприятие 8.3 (8.3.10.2650)

максим матасов
максим матасов
Леонид Альбрехт
Леонид Альбрехт
Россия, Екатеринбург, 10, 2004
Оксана Максимова
Оксана Максимова
Россия, Екатеринбург, Уральский государственный университет им. А. М. Горького, 2013