Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование на платформе 1С Предприятие 8.3. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
6.3. Примеры работы с регистрами накопления
91
Если состав измерений в структуре отбора и строке Измерения сов-
падает, то получим сводный итог и в таблице значений будет только одна строка, а доступ к значениям полей выполняется так: ТабЗнач[0]. ИмяПоля.
Пример.
Фильтр=Новый Структура; Фильтр.Вставить(“Студент”, СсылкаНаСправСтудентов); Фильтр.Вставить(“Предмет”,СсылкаНаСправПредметов); Фильтр.Вставить(“ВидЗанятия”, СсылккаНаВидЗанятия); Таб=РегистрыНакопления.БаллыСтудентов.Остатки(Дата,Фильтр, “Студент, Предмет, Вид Занятия”,”Балл”); Сообщить(Таб[0]. Балл); Получение развернутого итога из регистра остатков Развернутый итог – итог по нескольким значениям одного или не-
скольких измерений.
Вычисляется тем же методом Остатки, что и в предыдущем случае,
но для сводного итога перечень фильтруемых измерений в параметре От­бор должен быть меньше перечня измерений, по которым получаем остатки – строка Измерения.
В этом случае результатом метода является таблица значений из не-
скольких строк.
ИмяИзмерения1
Имя
Измерения2
…
ИмяРесурса1
…
Значение1
Измерения1
Значение1
Измерения2
…
Остаток1ПоРе-
сурсу1
…
Значение2
Измерения1
Значение2
Измерения2
…
Остаток2ПоРе-
сурсу1
…
…
Для выбора данных из такой таблицы применяется цикл. Кол=Таб.Количество(); //Кол-во строк таблицы Для Ном=0 По Кол Цикл Таб[Ном].ИмяСтолбца – обращение к значению столбца строки
Ном
… КонецЦикла;
6. Регистры накопления
92
Пример.
В качестве примера получим баллы всех студентов по некоторому предмету и выведем их в качестве сообщения.
Фильтр=Новый Структура;
Фильтр.Вставить(“Предмет”,СсылкаНаСправПредметов);
Таб=РегистрыНакопления.БаллыСтудентов.Остатки(Дата,Фильтр,
“Студент,Предмет ”,”Балл”);
Кол=Таб.Количество();
Для Н=0 По Кол Цикл
Сообщить(Таб[Н].Студент);
Сообщить(Таб[Н].Балл);
КонецЦикла;
Получение итогов из регистров оборотов
Выполняется методом регистров накопления
Обороты(НачПериода,КонПериода,Отбор,Измерения,Ресурсы)
НачПериода – дата или момент времени, задающий с какого времени нужно вычислять обороты. Если не задано – с самого начала.
КонПериода – дата или момент времени, задающий по какое время вычислять обороты, если не задано – по текущий момент.
Отбор, Измерения, Реквизиты – имеют точно такой же смысл как и при вычислении остатков.
Метод, аналогично остаткам, возвращает таблицу значений и ис­пользуется аналогично, за исключением задания начального и конечного моментов времени.
Перебор набора записей (движений) документа
Для выборки движений документа устанавливается отбор по реги­стратору с указанием ссылки на этот документ.
Набор=РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(ВыбДок);
Набор.Прочитать();
Для Каждого Движ Из Набор Цикл
Сообщить(Движ.Сумма);
КонецЦикла;
Контрольные вопросы
93
Очистка набора записей (движений) документа.
Рег=РегистрыНакопления.ЗаказыПоставщикам; НаборЗаказыПоставщикам=Рег.СоздатьНаборЗаписей(); НаборЗаказыПоставщикам.Отбор.Регистратор.Установить
(Ссылка);
НаборЗаказыПоставщикам.Прочитать(); НаборЗаказыПоставщикам.Очистить(); НаборЗаказыПоставщикам.Записать();
Добавление или замещение записей (движений) документа
Набор=РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(ВыбДок);
Движ=Набор.Добавить(); // Эту последовательность операторов Движ.Регистратор= ВыбДок;// Движ.Номенклатура = ВыбТовар; // Движ. Контрагент = ВыбКонтрагент; // Движ.Период = РабочаяДата;// Движ.Количество = Количество;// Движ.Сумма = Сумма;// Можно выполнять в цикле Набор.Записать(Ложь); //добавить к набору записей по документу
или
Набор.Записать(Истина); //заменить все старые записи по документу
на новые
Контрольные вопросы
1. Для чего предназначены регистры накопления?
2. В чем заключается задача товароматериального учета?
3. Приведите примеры, когда нужно оперативно в режиме реального
времени получить данные об остатках или оборотах.
4. Какие данные регистра накопления можно просмотреть через ин-
терфейс системы?
5. Какие данные регистра накопления можно получить только в
форме отчетов?
6. Как задается регистр накопления?
7. Что такое измерения регистра накопления?
6. Регистры накопления
94
8. Что такое ресурсы регистра накопления?
9. Что такое реквизиты регистра накопления?
10. К какому виду регистров относится регистр остатков товаров?
11. К какому виду регистров относится регистр закупки товаров?
12. Какие два вида регистров накопления используются в 1С:Предпри-
ятие?
13. Какие движения можно выполнить в регистре остатков?
14. Какие движения можно выполнить в регистре оборотов?
15. В качестве каких частей можно представить регистр накопления?
16. Что является атрибутами регистра?
17. Какие атрибуты имеются у движений регистра?
18. Приведите пример записи движений в регистр остатков.
19. Приведите пример записи движений в регистр оборотов.
20. Как получить сводный итог из регистра остатков?
21. Каковы правила использования метода Остатки для регистра
остатков?
22. Как получить развернутый итог из регистра остатков?
23. Каковы правила использования метода Обороты для регистра обо-
ротов?
24. Как получить сводный оборот из регистра оборотов?
25. Как получить развернутый оборот из регистра оборотов?
7.2. Примеры использования регистров сведений
95
7. РЕГИСТРЫ СВЕДЕНИЙ
7.1. Назначение и виды регистров сведений
Регистр сведений – это многомерная таблица данных, задачей кото-
рой является хранение информации, состав которой развернут по опреде­ленной комбинации значений.
Например, регистр сведений ЦеныТоваров для хранения информа-
ции о ценах в разрезе товаров и поставщиков изображен в табл. 7.1.
Таблица 7.1
Пример регистра сведений
Товары / поставщики
Вист-Дон
Санрайз
М-видео
Процессор
7000
6500
6800
Память
2000
2100
2200
Материнская плата
3500
3400
3300
Регистр сведений, в котором данные хранятся без привязки ко вре-
мени, называется непериодическим. Если же регистр хранит историю из­менения значений данных, он называется периодическим.
Для периодического регистра устанавливается свойство Периодич­ность, которое задает интервал времени, в течение которого значения ре­сурсов являются постоянными и не могут быть изменены. Возможные ва­рианты: в пределах секунды, дня, месяца, квартала, года. Примером пери­одического регистра сведений являются данные о курсах валют.
Состав столбцов многомерной таблицы регистра сведений называ­ется измерениями регистра, а состав данных в ячейках таблицы – ресур­сами регистра. Измерения и ресурсы являются основными данными, кото­рые задают структуру регистра. Для этого используется вкладка Данные в окне свойств регистра, изображенная на рис. 7.1.
В приведенном примере измерениями являются Товары и Постав­щики, а ресурс один – Цена.
Измерения регистра могут быть назначены как Ведущие. Это озна­чает, что запись регистра с некоторым значением такого измерения имеет смысл, пока существует связанный с нею объект информационной базы.
7. Регистры сведений
96
Если же объект удален, то должна быть удалена и соответствующая запись регистра сведений.
Рис. 7.1. Вкладка Данные окна свойств регистра сведений
Например, измерение Товары является ведущим и соответствует
справочнику товаров. Если из справочника товаров удалить Процессор, то будут удалены записи о процессорах по всем поставщикам, как ненужные.
Помимо измерений и ресурсов записи регистра могут содержать набор значений реквизитов. Реквизиты являются средством размещения в регистре вспомогательной информации, используемой в целях отбора значений.
Запись в регистр сведений может выполняться двумя путями, зави­сящими от вида регистра.
Для независимых регистров запись может осуществляться либо вручную, либо средствами встроенного языка.
7.2. Примеры использования регистров сведений
97
Для регистров, подчиненных регистратору, запись может выпол-
няться только документом при проведении документа. Все записи жестко привязаны к своим документам: если документ удален или сделан не про­веденным, все связанные с ним записи удаляются из регистра.
Атрибутами регистра сведений являются: <Имя измерения> – для обращения к измерениям; <Имя ресурса> – для обращения к ресурсам; <Имя реквизита> – для обращения к реквизитам; Период – для задания даты установки или выборки значений перио-
дического регистра.
7.2. Примеры использования регистров сведений
Запись в периодический регистр
Движения.ЦеныТоваров.Записывать = Истина; Движение = Движения. ЦеныТоваров.Добавить(); Движение.Товар =СсылкаНаСправТоваров; Движение.Поставщик = СсылкаНаСправПоставщиков; Движение.Цена = УстанавливаемаяЦена; Движение.Период=ДатаЦены;
Запись в непериодический регистр
Движения.ЦеныТоваров.Записывать = Истина; Движение = Движения. ЦеныТоваров.Добавить(); Движение.Товар =СсылкаНаСправТоваров; Движение.Поставщик = СсылкаНаСправПоставщиков; Движение.Цена = УстанавливаемаяЦена;
Извлечение значений ресурсов периодического регистра
Используется метод Получить (Период, Отбор).
Период– момент времени, на который требуется получить значения
ресурсов.
Отбор – структура для отбора по значениям измерений. Возвращаемое значение – структура, ключами которой являются
имена ресурсов.
Пример.
7. Регистры сведений
98
Отбор = Новый Структура;
Отбор.Вставить(“Товары”,СсылкаНаСправТоваров);
Отбор.Вставить(“Поставщики”,СсылкаНаСправПоставщиков);
ЗначРесурсов=Регистры.ЦеныТоваров.Получить(Дата,Отбор);
ЦенаТовара=ЗначРесурсов.Цена;
Извлечение значений ресурсов непериодического регистра
Отбор = Новый Структура;
Отбор.Вставить(“Товары”,СсылкаНаСправТоваров);
Отбор.Вставить(“Поставщики”,СсылкаНаСправПоставщиков);
ЗначРесурсов=Регистры.ЦеныТоваров.Получить(Отбор);
ЦенаТовара=ЗначРесурсов.Цена;
Получение последних значений ресурсов периодического реги­стра
Выполняется при помощи следующего метода.
ПолучитьПоследнее(КонецПериода,Отбор).
КонецПериода – момент времени, на который нужно получить по­следние значения. Если он не задан, выдаются самые последние значения.
Отбор – структура, задающая отбор по значениям измерений.
Возвращаемое значение – структура, ключами которой являются имена ресурсов.
Пример.
Отбор = Новый Структура;
Отбор.Вставить(“Товары”,СсылкаНаСправТоваров);
Отбор.Вставить(“Поставщики”,СсылкаНаСправПоставщиков);
ЗначРесурсов=Регистры.ЦеныТоваров.ПолучитьПоследнее(Отбор);
ЦенаТовара=ЗначРесурсов.Цена;
Получение первых значений ресурсов периодического регистра
Выполняется при помощи следующего метода.
ПолучитьПервое(НачалоПериода,Отбор)
НачалоПериода – момент времени, на который нужно получить по­следние значения. Если он не задан, выдаются самые первые значения.
Отбор – структура, задающая отбор по значениям измерений.
Возвращаемое значение – структура, ключами которой являются имена ресурсов.
7.2. Примеры использования регистров сведений
99
Пример.
Отбор = Новый Структура; Отбор.Вставить(“Товары”,СсылкаНаСправТоваров); Отбор.Вставить(“Поставщики”,СсылкаНаСправПоставщиков); ЗначРесурсов=Регистры.ЦеныТоваров.ПолучитьПервое(Отбор); ЦенаТовара=ЗначРесурсов.Цена;
Выборка движений регистра по регистратору
ВыбДок = Документы.УстановкаЦен.Выбрать(); Если ВыбДок.Следующий() Тогда ВыбДвиж= РегистрыСведений. ЦеныТоваров.ВыбратьПоРеги-
стратору( ВыбДок );
Пока ВыбДвиж.Следующий() Цикл Сообщить(ВыбДвиж.Но-
менклатура.Наименование + " " + ВыбДвиж.Цена);
КонецЦикла; КонецЕсли;
Выборка движений периодического регистра
Выполняется при помощи следующего метода. Выбрать (НачалоИнтервала, КонецИнтервала, Отбор, Порядок). НачалоИнтервала – задает начальную дату/время. КонецИнтервала – задает конечную дату/время. Отбор – структура для отбора движений (необязательно). Порядок – правило упорядочивания движений (необязательно).
Пример.
Курсы = РегистрыСведений.КурсыВалют; ОтборВалют = Новый Структура("Валюта"); ОтборВалют.Валюта = ВыбВалюта; ВыборкаКурсовВалют = Курсы.Выбрать(Дата1,Дата2,ОтборВалют); Пока ВыборкаКурсовВалют.Следующий() Цикл
Сообщить("Дата " + ВыборкаКурсовВалют.Период + " Валюта "+СокрЛП(ВыборкаКурсовВалют.Валюта) + ", Курс "+ ВыборкаКурсовВалют.Курс ); КонецЦикла;
7. Регистры сведений
100
Добавление новой записи периодического независимого реги­стра сведений
Так можно выполнять запись в регистр, не подчиненный регистра­тору, т.е. не в модуле документа.
Набор Записей = Регистры Сведений. Курсы Валют. Создать Набор­Записей (); Набор Записей. Отбор. Валюта. Установить (Текущая Валюта);
НовЗапись = Набор Записей. Добавить();
НовЗапись. Валюта = Текущая Валюта;
НовЗапись. Период = Текущая Дата;
НовЗапись. Курс = Текущий Курс;
НовЗапись. Кратность = Текущая Кратность;
Набор Записей. Записать(Истина);
Чтение/изменение существующей записи периодического неза­висимого регистра
Набор Записей = Регистры Сведений. Валюты. Создать Набор Запи­сей(); Набор Записей. Отбор. Период. Установить (Дата Записи); Набор За­писей. Прочитать();
Для Каждого Запись Из Набор Записей Цикл
// Чтение и вывод данных полей записи.
Сообщить (Строка (Запись. Период) + " " + Строка (Запись. Ва- люта) + " " + Строка (Запись. Курс));
// Изменение данных полей записи.
Запись.Курс = 0;
КонецЦикла;
НаборЗаписей.Записать();
Удаление записи независимого регистра
Набор Записей = Регистры Сведений. Курсы Валют. Создать Набор­Записей(); Набор Записей. Записать();
Добавление записей в непериодический независимый регистр
НаборЗаписей = РегистрыСведений.ОстаткиТоваров.СоздатьНабор­Записей(); НаборЗаписей.Отбор.Товар.Установить(СсылкаНаТовар); НаборЗаписей.Отбор.Склад.Установить(СсылкаНаСклад);
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]