Разработка в 1С 8.0

         

Активность


 

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

 



Активность записей


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



Движения


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

 



ДвиженияИГраницыПериода


(по умолчанию)  

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




Пример обращения к этой таблице приведен



<Имя измерения>


Набор полей содержит значения измерений регистра. Имена полей соответствуют именам измерений.  

 


Набор полей содержит значения измерений регистра. Имена полей соответствуют именам измерений.  

 



<Имя реквизита>


 

Набор полей содержит значения реквизитов регистра.  

 



<Имя ресурса>


Набор полей содержит значения ресурсов регистра.  

 



<Имя ресурса>Оборот


 

Набор полей содержит обороты по ресурсам регистра. Имена полей соответствуют именам ресурсов с добавлением слова Оборот. Для оборотных регистров оборот подсчитывается как сумма всех движений. Для регистров остатков оборот подсчитывается как сумма всех движений Приход со знаком + (плюс) и Расход со знаком - (минус).  

 



<Имя ресурса>Остаток


 

Набор полей содержит остатки ресурсов регистра. Имена полей соответствуют именам ресурсов с добавлением слова Остаток.  


Следующий запрос показывает остатки по регистру УчетНоменклатуры:

ВЫБРАТЬ * ИЗ РегистрНакопления.УчетНоменклатуры.Остатки  


В результате получим следующие записи.

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

Для этого у таблицы получения остатков имеются следующие параметры:



<Имя ресурса>Приход


Набор полей содержит суммы всех движений типа «приход» по ресурсам регистра. Имена полей соответствуют именам ресурсов с добавлением слова Приход. Это поле существует только для регистров остатков.  

 



<Имя ресурса>Расход


 

Набор полей содержит суммы всех движений типа «расход» по ресурсам регистра. Имена полей соответствуют именам ресурсов с добавлением слова Расход. Это поле существует только для регистров остатков.  

 



Измерения


 

Содержит список измерений через запятую, для которых надо разворачивать обороты. Если параметр не указан, то остатки будут сформированы по всем измерениям.  

 



Код:


Выборка= РегистрыНакопления.Остатки.Выбрать();

Пока Выборка.Следующий() Цикл

Если СокрЛП(Выборка.Комментарий) = ЗаданнаяСтрока Тогда  

...   

КонецЕсли;  

КонецЦикла;


РегМенеджер = РегистрыНакопления.СтоимостнойУчетНоменклатуры;

Отбор = Новый Структура("Номенклатура",ВыбТовар); 

тзОстатки = РегМенеджер.Остатки(,Отбор);

Если тзОстатки.Количество() > 0 Тогда 

КоличествоТовара = тзОстатки[0].Количество;  

СтоимостьТовара = тзОстатки[0].Сумма;  

КонецЕсли;

Метод Обороты имеет следующий синтаксис:

Обороты(<Начало периода>,<Конец периода>,

     <Отбор>,<Измерения>,<Ресурсы>)

Параметры Начало периода и Конец периода могут содержать дату, момент времени или объект типа Граница. Они указывают, за какой период нужно получить обороты. Остальные параметры аналогичны таким же параметрам метода Остатки.

Метод Обороты также возвращает таблицу значений, содержащую колонки с измерениями, указанными в параметре Измерения. Если производится обращение к регистру остатков, то названия колонок для ресурсов формируются следующим образом «<Имя ресурса>Приход» и «<Имя ресурса>Расход». При обращении к регистру оборотов названия колонок совпадают с именами ресурсов, как показано в следующем



Конец периода


Указывается конец периода расчета итогов.  

 



Менеджер регистра накопления


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



Менеджер регистров накопления


Объект РегистрыНакопленияМенеджер через свои свойства предоставляет доступ к объектам РегистрНакопленияМенеджер. Свойство глобального контекста РегистрыНакопления является объектом именно этого типа, например:

 

РегОстатки = РегистрыНакопления.ОстаткиТоваров;  

РегПродажи = РегистрыНакопления.Продажи;  



Модуль набора записей


У набора записей регистра накопления есть собственный модуль, который открывается из окна редактирования свойств регистра. Можно считать, что модуль набора записей является аналогом модуля любого другого прикладного объекта, например, модуля справочника или модуля документа.

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



Момент времени


 

Параметр может содержать дату, момент времени или объект типа Граница. Он указывает, на какой момент времени нужно получить остатки регистра.  

 



МоментВремени


 

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


Следующий простой запрос выбирает несколько столбцов из оборотного регистра накопления Продажи:

ВЫБРАТЬ Период, Регистратор, Номенклатура, Количество, Сумма  

ИЗ РегистрНакопления.Продажи  

Результат запроса показан ниже.



Набор записей регистра накопления


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

У документов есть атрибут Движения, который предоставляет доступ к наборам записей этого документа по каждому регистру, поэтому при проведении документов сначала добавляются записи в набор, а затем набор записывается в базу данных. Можно создать новый набор записей из объекта РегистрНакопленияМенеджер, если вызвать его метод СоздатьНаборЗаписей,



Начало интервала, Конец интервала


 

Позволяют задать границы интервала и могут иметь тип «дата», МоментВремени или Граница.  

 



Начало периода


 

Указывается начало периода расчета итогов.  

 



Например:


Набор= РегистрыНакопления. Продажи. СоздатьНаборЗаписей();

Набор.Отбор.Регистратор.Значение = ВыбДок;

Набор.Прочитать();

Для Каждого движ Из Набор Цикл

Сообщить(движ.Сумма);  

КонецЦикла;

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


Набор= РегистрыНакопления.Продажи.СоздатьНаборЗаписей();

Набор.Отбор.Регистратор.Значение = ВыбДок;

Движ = Набор.Добавить();

Движ.Регистратор = ВыбДок;

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

Движ.Контрагент = ВыбКонтрагент;

Движ.Период = РабочаяДата;

Движ.Количество = Количество;

Движ.Сумма = Сумма;

Набор.Записать(Ложь); //добавить к набору записей по документу




Выборка= РегистрыНакопления.Остатки.Выбрать();

Пока Выборка.Следующий() Цикл

Сообщить(СокрЛП(Выборка.Товар) + " " +  

СокрЛП(Выборка.Склад) + " " +  

СокрЛП(Выборка.Количество));  

КонецЦикла;

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

Синтаксис метода Выбрать следующий:

Выбрать(<Начало интервала>,<Конец интервала>,<Отбор>,<Порядок>)

Назначение параметров метода Выбрать таково:



Ниже


ВЫБРАТЬ

Номенклатура, Склад, Период,

ВЫРАЗИТЬ(КоличествоНачальныйОстаток КАК ЧИСЛО(15,3)) НачОстаток, 

ВЫРАЗИТЬ(КоличествоПриход КАК ЧИСЛО(15,3)) Приход, 

ВЫРАЗИТЬ(КоличествоРасход КАК ЧИСЛО(15,3)) Расход, 

ВЫРАЗИТЬ(КоличествоКонечныйОстаток КАК ЧИСЛО(15,3)) КонОстаток 

ИЗ РегистрНакопления.УчетНоменклатуры.ОстаткиИОбороты( 

&НачДата,&КонДата, Месяц,,Номенклатура=&ВыбТовар)  

ИТОГИ

Сумма(НачОстаток),  

Сумма(Приход),  

Сумма(Расход),  

Сумма(КонОстаток) ПО ОБЩИЕ  

Этот запрос показывает остатки и обороты для конкретной номенклатуры по всем складам с разворотом по месяцам. Дополнительно подсчитываются общие итоги, что потребовало приведения данных к числовому типу с помощью конструкции ВЫРАЗИТЬ.



НомерСтроки


Содержит номер строки, определяемый как порядковый номер записи в наборе записей. Это поле существует, если только параметр Периодичность имеет значение Запись.  


Следующий простой запрос показывает все поля из таблицы Обороты регистра Продажи:

   

ВЫБРАТЬ * ИЗ РегистрНакопления.Продажи.Обороты  


Для регистра остатков УчетНоменклатуры картина будет немного другая:

   

ВЫБРАТЬ * ИЗ РегистрНакопления.УчетНоменклатуры.Обороты  


Напомним, что для регистра остатков колонка <ИмяРесурса>Оборот рассчитывается как разность между колонками <ИмяРесурса>Приход и <ИмяРесурса>Расход. Таблица получения оборотов для регистра накопления имеет следующие параметры вызова:



Основная таблица регистра накопления


Основная таблица регистра накопления существует для обоих типов регистров (остатков и оборотов) и предоставляет следующие поля:



Отбор


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

 


Структура только с одним элементом, которая задает фильтр по полю. Ключ структуры описывает имя поля, а значение структуры ? значение отбора по этому полю.  


Приведем пример выборки записей регистра накопления за определенный период по заданному



ПересчитатьИтоги


 

Позволяет осуществить полный пересчет итогов регистра накопления.  

 



Период


Содержит период (дату) записи регистра.  

 


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

 




Содержит начальную дату и время периода, к которому от-носится оборот регистра. Существует в случае, если только используется разворот по периодам, т.е. параметр Периодичность имеет какое-либо значение, например, Год, Квартал, Запись и т.д.  

 



Периодичность


 

Указывается дополнительный разворот итогов по периодичности. Задается один из следующих вариантов: Период (не разворачивать), Регистратор, День, Неделя, Декада, Месяц, Квартал, Полугодие, Год.  

 



ПолучитьПериодРассчитанныхИтогов


Возвращает дату, по которую рассчитаны итоги регистра накопления.  

 



и загружаются записи, имеющие тот


МассивОстатков= Набор.ВыгрузитьКолонку("Количество");

Набор.ЗагрузитьКолонку(МассивОстатков,"Количество");

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

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

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




Менеджер регистра накопления позволяет пересчитывать


//обращениек регистру остатков

Отбор = Новый Структура("Номенклатура",ВыбТовар); 

тзОбороты = РегистрыНакопления.УчетНоменклатуры.Обороты(,,Отбор);

Если тзОбороты.Количество() > 0 Тогда 

ПриходТовара = тзОбороты[0].КоличествоПриход;  

РасходТовара = тзОбороты[0].КоличествоРасход;  

КонецЕсли;

 

//обращение к регистру оборотов

Отбор = Новый Структура("Номенклатура",ВыбТовар); 

тзОбороты = РегистрыНакопления.Продажи.Обороты(,,Отбор);

Если тзОбороты.Количество() > 0 Тогда

ОборотТовара = тзОбороты[0].Сумма;  

КонецЕсли;

Менеджер регистра накопления позволяет пересчитывать итоги и устанавливать границу периода, по которую итоги будут считаться рассчитанными. Для этого предназначены следующие методы:

к итогам регистра. Под итогами


РегОстатки= РегистрыНакопления.Остатки;

Выборка = РегОстатки.Выбрать();

МенеджерЗаписи = РегОстатки.СоздатьМенеджерЗаписи();

Набор = РегОстатки.СоздатьНаборЗаписей();

ФормаСписка = РегОстатки.ПолучитьФормуСписка();

ОсновнойМакет = РегОстатки.ПолучитьМакет("Основной");

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

Метод Остатки применим только для регистра остатков и не применим для регистра оборотов.Метод Обороты применим как для регистра оборотов, так и для регистра остатков.

Метод Остатки имеет следующий синтаксис:

   

Остатки(<Момент времени>, <Отбор>, <Измеренмя>, <Ресурсы>)  



Ниже описаны параметры метода Остатки:

 

Регистратор


 

Содержит ссылку на документ-регистратор движения.  

 


 

Содержит ссылку на документ-регистратор движения. Существует только в случае, если параметр Периодичность имеет значение Регистратор или Запись.  

 



РегистрНакопленияКлючЗаписи


 

Этот объект нужен для идентификации записи в списке. Он используется для позиционирования в списке на конкретной записи регистра.  

Объекты для работы с регистрами накопления взаимосвязаны друг с другом. Из одних объектов с помощью свойств и методов можно получить другие объекты. Графически эту взаимосвязь можно представить следующим образом:  

 

Далее более подробно описаны типичные действия над регистром накопления с помощью этих объектов.



РегистрНакопленияМенеджер


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

 



РегистрНакопленияНаборЗаписей


 

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

 



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


Обеспечивает управление списком записей регистра накопления в форме в элементе управления ТабличноеПоле.  

 



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


 

С помощью этого объекта можно организовать обход записей регистра накопления (перебор).  

 



РегистрНакопленияЗапись


Обеспечивает доступ к одной записи набора регистра накопления. Этот объект возвращается методами других объе-тов, например, методом Добавить у объекта РегистрНакопленияНаборЗаписей.  

 



Регистры оборотов


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

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

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

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



Регистры остатки и регистры оборотов


В системе 1С:Предприятие 8.0 возможно использование регистров накопления двух типов: регистры остатков и регистры оборотов. Разница между ними понятна из их названия и заключается в характере хранимой информации: из регистров остатков можно бы-стро получить информацию о состоянии средств на момент времени, а из регистров оборотов ? данные за период.

Если из регистра нужно быстро получать остаток чего-либо на текущий момент, тогда нужно завести регистр остатков. Если из регистра нужно быстро получать обороты чеголибо за период, тогда нужно создать оборотный регистр.



Регистры остатков


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



РегистрыНакопленияМенеджер


 

Предоставляет доступ к объектам РегистрНакопленияМенеджер через свои свойства. Свойство глобального контекста РегистрыНакопления является объектом именно этого типа.  

 



Ресурсы


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


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



Совпадают:


Набор.Прочитать(); 

тзЗаписи = Набор.Выгрузить();

Набор.Загрузить(тзЗаписи);

Набор.Записать();

Можно выгружать в массив и загружать из массива только одну колонку набора записей, для чего предназначены методы ВыгрузитьКолонку и ЗагрузитьКолонку



Таблица получения оборотов


Таблица получения оборотов существует у регистра остатков и регистра оборотов. Эта таблица включает следующие поля:



Таблица получения остатков


Таблица получения остатков существует только у регистра остатков и предоставляет в распоряжение разработчику следующие поля:



Таблица получения остатков и оборотов


В языке запросов системы 1С:Предприятие 8.0 существует возможность получения комбинированной информации по остаткам и оборотам. Для этого предназначена таблица-источник ОстаткиИОбороты, которая существует у регистра остатков и регистра оборотов.

Таблица ОстаткиИОбороты предоставляет следующие поля:

 

·<Имя измерения>,  

·<Имя ресурса>НачальныйОстаток,  

·<Имя ресурса>КонечныйОстаток,  

·<Имя ресурса>Оборот,  

·<Имя ресурса>Приход,  

·<Имя ресурса>Расход,  

·Период (поле существует только, если в параметрах указана периодичность, не равная Период),  

·Регистратор (если периодичность Регистратор или Запись),  

·НомерСтроки (если периодичность Запись)  

 

При вызове данной таблицы есть возможность указать следующие параметры:  

 

·Начало периода,  

·Конец периода,  

·Периодичность,  

·Метод дополнения,  

·Условие.  

Нуждается в пояснении параметр «Метод дополнения». Он задает один из следующих вариантов:



Товару:


Нач = Новый МоментВремени(ВыбДатаВремяНачала);

Кон = Новый Граница(ВыбДатаВремяОкончания,ВидГрачицы.Включая);

Отбор = Новый Структура("Товар",ВыбТовар);

Выборка = РегистрыНакопления.ОстаткиТоваров.Выбрать(Нач,Кон,Отбор);

Пока Выборка.Следующий() Цикл

Сообщить(СокрЛП(Выборка.Товар) + " " +  

СокрЛП(Выборка.Склад) + " " +  

СокрЛП(Выборка.Количество));  

КонецЦикла;



Условие


 

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


Например, следующий запрос получает остатки конкретного товара на заданную дату на каждом складе:

   

ВЫБРАТЬ *  

ИЗ РегистрНакопления.УчетНоменклатуры.Остатки(&ВыбДата,   

Номенклатура=&ВыбТовар)  



Указывается условие на языке запросов. Условие может оперировать полями регистра накопления. Оно будет использовано для ограничения состава записей, по которым будут выбираться обороты. То есть условие будет применяться к исходным записям, а не к уже отобранным. Если параметр не задан, анализируются все активные записи регистра.  


Например, следующий запрос показывает месячные обороты конкретного товара по каждому складу за заданный период:

ВЫБРАТЬ * ИЗ РегистрНакопления.УчетНоменклатуры.Обороты(  

&НачДата,  

&КонДата,  

Месяц,  

Номенклатура=&ВыбТовар)  



УстановитьПериодРассчитанныхИтогов


 

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


Актуальность итогов регистров можно также установить интерактивно, используя пункт меню «Операции

Управление итогами».



ВидДвижения


Значение системного перечисления ВидДвиженияНакопления, которое определяет вид движения записи ? приход или расход  

 



Под итогами понимается сводная информация,


 

Под итогами понимается сводная информация, выдаваемая регистром накопления. Это могут быть ответы на следующие вопросы:  

 

·остаток конкретного товара на конкретном складе,  

·остаток конкретного товара на всех складах,  

·стоимость всех товаров на конкретном складе.  

 

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

 

Список записей регистра накопления может выглядеть следующим образом.  

 

При создании регистра накопления, кроме измерений и ресурсов, можно определить реквизиты регистра. Их можно представить как дополнительные колонки в таблице записей регистра. Реквизиты содержат сопроводительную информацию для каждой записи. Например, в регистр накопления Остатки можно добавить реквизит Комментарий, который будет сопровождать каждую запись о движении товара.  

 

Разработчик может использовать реквизиты для отбора нужных записей при обходе выборки или при использовании запроса. Следующий пример перебирает все записи регистра, у которых реквизит равен определенному значению:
function doExpand(paraNum, imageNum) { if (paraNum.style.display=="none") {paraNum.style.display=""; imageNum.src="arrowdn.gif"} else {paraNum.style.display="none"; imageNum.src="arrowrt.gif"} }
 






 

Через набор записей можно обращаться к уже существующим записям регистра накопления. Для этого нужно установить свойство Отбор и прочитать записи из базы данных. Свойство Отбор является объектом типа Отбор, свойства которого совпадают с именами измерений регистра и являются объектами типа ЭлементОтбора.


Выборка из регистра накопления


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