В разрабатываемой информационной системе предлагается два регистра сведений: Прайс (цены на услуги с привязкой к дате), заполняется пользователе и является основанием для установления цены услуги на конкретную дату; Учетные цены (цена учета материалов), заполняется автоматических по требованию пользователя.
Регистр сведений Прайс
Добавить новый регистр сведений. Имя – ПрайсУслуги. Периодичность – в пределах секунды (дата с точностью до секунды), режим записи – независимый.
Вкладка Данные. Измерение – Услуга (тип данных – ссылка на справочник Услуги). Ресурс – ЦенаПродажи. В регистре будут храниться сведения о ценах продаж в разрезе услуг на указанный период. Под указанным периодом для цены на услугу понимаем период от даты конкретной записи для услуги до даты следующей (поздней) записи для той же услуги.
Регистр сведений УчетныеЦены
Создать новый регистр сведений, присвоить имя. Задать периодичность и режим записи.
Вкладка Данные. Измерение – Материал, ресурс – ЦенаУчетная. В регистре будут храниться сведения об учетных ценах в разрезе материалов на указанный период.
В фирме принят метод ФИФО для оценки запасов и формирования учетных цен. В соответствии с методом ФИФО (первый на приход – первый на списание) учетная цена материалов будет определяться по последней поставке. Конечно, подобный расчет не будет выполняться каждый день. Для простоты расчетов, считаем, что бухгалтер сам определяет дату (период расчета учетной цены). Наша задача – разработать соответствующую процедуру формирования записей в регистре сведений УчетныеЦены в соответствии с политикой организации. Данная процедура будет представлена несколько позже после знакомства с механизмом использования запросов в системе 1С:Предприятие.
Запустить приложение 1С:Предприятие, просмотреть регистры сведений, заполнить сведения о ценах на услуги (регистр сведений Прайс).
Регистр сведений Расценки
Добавить новый регистр сведений. Имя – Расценки. Периодичность – в пределах секунды (дата с точностью до секунды), режим записи – независимый.
Вкладка Данные. Измерение – ВидРабот (тип данных – ссылка на справочник ВидРабот). Ресурс – Стоимость. В регистре будут храниться сведения о расценках в разрезе видов работ на указанный период.
Прикладная задача: использование регистра сведений при заполнении документов
Вернемся к документу Договор на оказание услуг. Выше отмечалось, что для пользователя необходима автоматизация следующих операций при работе с договором:
· при выборе услуги – автоматический вывод последней цены по Прайсу (последней по отношению к дате документа Договор);
· при изменении значения количества – расчет полей Сумма, НДС, Сумма СНДС, а также итоговых полей документа.
Запуск требуемой процедуры будет производиться в момент события изменения значения объекта формы Поля - ввода Услуга. Для соответствующего поля в форме вызвать окно свойств (двойной щелчок по полю ввода Услуга), в списке свойств в разделе События найти событие При изменении, щелкнуть по лупе. В модуле формы появляется «заготовочка» процедуры обработки СпецификацияУслугУслугаПриИзменении. Сформируем текст процедуры:
Процедура СпецификацияУслугУслугаПриИзменении(Элемент) | |
СТЧ=ЭлементыФормы.СпецификацияУслуг.ТекущиеДанные; | Ссылку на текущую строку присваиваем переменной СТЧ |
Отбор=Новый Структура("Услуга", СТЧ.Услуга); | Создаем новую (временную) структуру данных, которая состоит из заголовка поля («Услуга»), значения поля (СТЧ.Услуга). Данной структуре присваиваем имя Отбор. Отбор – предопределенное имя для объекта Отбор, по которому осуществляется текущая фильтрация записей при считывании или записи набора. Внимание: имя поля («Услуга») должно точно соответствовать имени соответствующего измерения в регистре сведений Прайс. |
Значение=РегистрыСведений.ПрайсУслуги.ПолучитьПоследнее(Дата,Отбор) | Обращаемся к регистру сведений ПрайсУслуги и используем метод ПолучитьПоследнее(Дата,Отбор), который возвращает нам значения ресурсов наиболее поздней записи регистра, которая соответствует дате договора (параметр Дата) и значению передаваемого измерения (Отбор). Возвращается соответствующая запись регистра, которой присваиваем имя Значение. |
СТЧ.ЦенаПродажи=Значение.ЦенаПродажи; | Присваиваем значение ЦеныПродажи найденной записи соответствующему полю документа. |
КонецПроцедуры |
Запустить приложение, ввести договор, проверить работу процедуры.
Процедуру расчета полей Сумма, НДС, Сумма СНДС, а также итоговых полей документа сформировать самостоятельно (см. процедуру на стр. 6).
3.4 Регистры Накопления
Объект конфигурации регистр накопления предназначен для описания структур хранения данных, поставляемых другими объектами базы, чаще всего документами. Данные документов будут храниться в регистре в виде отдельных записей одинаковой структуры. Структура регистра задается разработчиком при создании регистра и включает также измерения и ресурсы. Для формирования записей регистра при проведении документов создается процедура движения. Каждому движению присваивается вид движения: приход (+) или расход (-). Каждая запись регистра привязывается к порождающему ее документу (регистратору).
При работе с запросами Регистр накопления представляется как виртуальная таблица, позволяющая отобразить не только показатели прихода и расхода ресурсов, но и остатки. При этом разработчику не требуется прописывать дополнительные процедуры итогов, что очень удобно при анализе информации, разработке отчетов и др.
Для на шей информационной системы регистры накопления необходимы для:
· контроля выполнения договоров;
· контроля запасов на складе;
· ряда других контролирующих и аналитических функций, в том числе учете затрат.
3.4.1 Создание регистров накопления
На данном этапе разработаем 2 регистра накопления:
Выполнение договора. Позволяет накапливать информацию о выполнении обязательств перед контрагентами в разрезе конкретных договоров, услуг. Регистраторами являются: Договор на оказание услуг (вид движения – приход), Акт об оказании услуг (вид движения – расход). На основании записей регистра можно отслеживать ход выполнения обязательств, анализировать взаимоотношения с клиентами, проводить мониторинг «востребованности» услуг и др.
Движение материалов. Позволяет накапливать информацию о движении материалов: поступление, расход, запасы. Регистраторы: Поставка материалов (вид движения – приход), Акт об оказании услуг (вид движения – расход). На основании записей данного регистра можно отслеживать оборот материальных запасов, определять потребность в закупках, контролировать запасы.
Регистр накопления ВыполнениеДоговоров.
Создать новый регистр, присвоить имя. Вид регистра – остатки (в представлениях регистра при конструировании запросов будут автоматически рассчитываться остатки в заданных пользователем измерениях).
Вкладка Данные. Измерения: Контрагент, Договор, Услуга, ЦенаПоДоговору. Типы данных – ссылки на соответствующие справочники и документы. Ресурсы: Количество, Сумма.
Вкладка Регистраторы. Активизировать соответствующие регистраторы (Договор об оказании услуг, Акт об оказании услуг).
Регистр накопления ДвижениеМатериалов.
Создать новый регистр, присвоить имя. Вид регистра – остатки
Вкладка Данные. Измерения: Материал. Типы данных – ссылки на соответствующие справочники и документы. Ресурсы: Количество, Сумма.
Вкладка Регистраторы. Активизировать соответствующие регистраторы (ПоставкаМатериалов, Акт об оказании услуг).
3.4.2 Разработка движений документов
Движения документа – записи в регистре, которые создаются при проведении документа и отражают изменения, производимые документом.
По регистру ВыполнениеДоговоров необходимо сформировать движения для документов Договор на оказание услуг, Акт об оказании услуг.
Движения документа Договор на оказание услуг
Открыть документ Договор, перейти на вкладку Движения. Активизировать конструктор движений, добавить новое движение по регистру ВыполнениеДоговоров.
Установить тип движения регистра – приход. Выбрать табличную часть СпецификацияДоговора.
Для ускорения заполнения выражений (для полей регистра) нажать кнопку ЗаполнитьВыражения. Проверить заполнение. В качестве значения ресурса Сумма будем считать значение суммы без НДС[1].
Для поля Договор устанавливаем выражение Ссылка (прописывается вручную).
Нажать ОК и просмотреть сформированную конструктором процедуру:
Для Каждого ТекСтрокаСпецификацияУслуг Из СпецификацияДоговора Цикл | Цикл для перебора строк табличной части документа (СпецификацияДоговора) |
Движение = Движения.ВыполнениеДоговора.Добавить(); | По каждой строке добавляется запись в регистр накопления ВыполнениеДоговоров |
Движение.ВидДвижения = ВидДвиженияНакопления.Приход; | Задается вид движения |
Движение.Период = Дата; | Устанавливаются значения полей регистра накопления |
Движение.Контрагент = Контрагент; | |
Движение.Договор = Ссылка; | |
Движение.Услуга = СпецификацияДоговора.Услуга; | |
Движение.Количество = СпецификацияДоговора.Количество; | |
Движение.Сумма = ТекСтрока СпецификацияДоговора.Сумма; | |
КонецЦикла; | |
Движения.ВыполнениеДоговора.Записать(); | Сохранение записи в регистре |
Для проверки запустить приложение. Открыть любой созданный договор (создать), провести документ (кнопка ОК в форме документа). Через меню Операции/Регистры накопления открыть соответствующий регистр, просмотреть сформированные записи[2].