1С 8.3 Регистры накопления
Данные > Примеры кода 1С > 1С 8.3 Регистры накопления
Регистр накопления в 1С 8.3 - это объект конфигурации, который образует многомерную систему измерений и позволяет накапливать числовые данные в разрезе нескольких измерений. Используется для учета движения средств (денежных, товарно-материальных ценностей, основных средств т. д.).
Подходит для автоматизации таких направлений, как складской учет, касса, взаиморасчеты, бюджетирование, планирование. С помощью такого регистра можно накапливать информацию об объемах продаж в разрезе номенклатуры и подразделения компании или об остатках товаров в разрезе номенклатуры и склада или о движении основных средств в разрезе объектов. Статьи по теме: Виртуальные таблицы: "Остатки" и "Остатки и обороты", Структура хранения в базе данных.
Оглавление:
Чтение записей регистра накопления в 1С 8.3:
&НаСервере
Процедура ЧтениеЗаписиРегистраНакопленияНаСервере()
// Получим все записи регистра накопления ЗаказыКонтрагентов
// по организации ООО "Сделай сам" за 1 квартал 2020 года, упорядочив их по возрастанию даты.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказыКонтрагентов.Период КАК Период,
| ЗаказыКонтрагентов.Регистратор КАК Регистратор,
| ЗаказыКонтрагентов.НомерСтроки КАК НомерСтроки,
| ЗаказыКонтрагентов.Активность КАК Активность,
| ЗаказыКонтрагентов.Контрагент КАК Контрагент,
| ЗаказыКонтрагентов.Материалы КАК Материалы,
| ЗаказыКонтрагентов.Количество КАК Количество
|ИЗ
| РегистрНакопления.ЗаказыКонтрагентов КАК ЗаказыКонтрагентов
|ГДЕ
| ЗаказыКонтрагентов.Активность = Истина И
| ЗаказыКонтрагентов.Организация = &ВыбОрганизация И
| ЗаказыКонтрагентов.Период МЕЖДУ &НачалоДата И &КонецДата
|УПОРЯДОЧИТЬ ПО
| ЗаказыКонтрагентов.Период";
Запрос.УстановитьПараметр("ВыбОрганизация",Справочники.Организации.НайтиПоНаименованию("ООО ""Сделай сам"""));
Запрос.УстановитьПараметр("НачалоДата", '20200101000000');// начальная дата - 1 января 2020 года
Запрос.УстановитьПараметр("КонецДата", '20200331235959');// конечная дата - 31 марта 2020 года 23 часа 59 минут 59 секунд
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить("за " + ВыборкаДетальныеЗаписи.Период + " (" + ВыборкаДетальныеЗаписи.Регистратор + ") " +
ВыборкаДетальныеЗаписи.Материалы + " " + ВыборкаДетальныеЗаписи.Количество + " шт. ");
КонецЦикла;
КонецПроцедуры
Процедура ЧтениеЗаписиРегистраНакопленияНаСервере()
// Получим все записи регистра накопления ЗаказыКонтрагентов
// по организации ООО "Сделай сам" за 1 квартал 2020 года, упорядочив их по возрастанию даты.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказыКонтрагентов.Период КАК Период,
| ЗаказыКонтрагентов.Регистратор КАК Регистратор,
| ЗаказыКонтрагентов.НомерСтроки КАК НомерСтроки,
| ЗаказыКонтрагентов.Активность КАК Активность,
| ЗаказыКонтрагентов.Контрагент КАК Контрагент,
| ЗаказыКонтрагентов.Материалы КАК Материалы,
| ЗаказыКонтрагентов.Количество КАК Количество
|ИЗ
| РегистрНакопления.ЗаказыКонтрагентов КАК ЗаказыКонтрагентов
|ГДЕ
| ЗаказыКонтрагентов.Активность = Истина И
| ЗаказыКонтрагентов.Организация = &ВыбОрганизация И
| ЗаказыКонтрагентов.Период МЕЖДУ &НачалоДата И &КонецДата
|УПОРЯДОЧИТЬ ПО
| ЗаказыКонтрагентов.Период";
Запрос.УстановитьПараметр("ВыбОрганизация",Справочники.Организации.НайтиПоНаименованию("ООО ""Сделай сам"""));
Запрос.УстановитьПараметр("НачалоДата", '20200101000000');// начальная дата - 1 января 2020 года
Запрос.УстановитьПараметр("КонецДата", '20200331235959');// конечная дата - 31 марта 2020 года 23 часа 59 минут 59 секунд
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить("за " + ВыборкаДетальныеЗаписи.Период + " (" + ВыборкаДетальныеЗаписи.Регистратор + ") " +
ВыборкаДетальныеЗаписи.Материалы + " " + ВыборкаДетальныеЗаписи.Количество + " шт. ");
КонецЦикла;
КонецПроцедуры
Чтение записей документа запросом в регистре накопления в 1С 8.3:
// Такая процедура используется, если не требуется изменять найденные записи.
&НаСервере
Процедура ЧтениеЗаписиДокументаЗапросомВРегистреНакопленияНаСервере()
// Например у нас есть ссылка на проведенный документ Поступление на склад № МРБ-000123
ПоступлениеСсылка = Документы.ПоступлениеНаСклад.НайтиПоНомеру("МРБ-000123", '20200101');
// Мы знаем, что этот документ делает записи в регистр накопления "МестоХраненияМатериалов".
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МестоХраненияМатериалов.Период,
| МестоХраненияМатериалов.Регистратор,
| МестоХраненияМатериалов.НомерСтроки,
| МестоХраненияМатериалов.Активность,
| МестоХраненияМатериалов.ВидДвижения,
| МестоХраненияМатериалов.МестоХранения,
| МестоХраненияМатериалов.Материалы,
| МестоХраненияМатериалов.Организация,
| МестоХраненияМатериалов.Количество
|ИЗ
| РегистрНакопления.МестоХраненияМатериалов КАК МестоХраненияМатериалов
|ГДЕ
| МестоХраненияМатериалов.Регистратор = &ВыбРегистратор
|УПОРЯДОЧИТЬ ПО
| МестоХраненияМатериалов.НомерСтроки";
Запрос.УстановитьПараметр("ВыбРегистратор",ПоступлениеСсылка);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить("по " + ВыборкаДетальныеЗаписи.Организация + ", " +ВыборкаДетальныеЗаписи.МестоХранения + ", " +
ВыборкаДетальныеЗаписи.Материалы + " <" + ВыборкаДетальныеЗаписи.Количество + ">");
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЧтениеЗаписиДокументаЗапросомВРегистреНакопленияНаСервере()
// Например у нас есть ссылка на проведенный документ Поступление на склад № МРБ-000123
ПоступлениеСсылка = Документы.ПоступлениеНаСклад.НайтиПоНомеру("МРБ-000123", '20200101');
// Мы знаем, что этот документ делает записи в регистр накопления "МестоХраненияМатериалов".
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МестоХраненияМатериалов.Период,
| МестоХраненияМатериалов.Регистратор,
| МестоХраненияМатериалов.НомерСтроки,
| МестоХраненияМатериалов.Активность,
| МестоХраненияМатериалов.ВидДвижения,
| МестоХраненияМатериалов.МестоХранения,
| МестоХраненияМатериалов.Материалы,
| МестоХраненияМатериалов.Организация,
| МестоХраненияМатериалов.Количество
|ИЗ
| РегистрНакопления.МестоХраненияМатериалов КАК МестоХраненияМатериалов
|ГДЕ
| МестоХраненияМатериалов.Регистратор = &ВыбРегистратор
|УПОРЯДОЧИТЬ ПО
| МестоХраненияМатериалов.НомерСтроки";
Запрос.УстановитьПараметр("ВыбРегистратор",ПоступлениеСсылка);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить("по " + ВыборкаДетальныеЗаписи.Организация + ", " +ВыборкаДетальныеЗаписи.МестоХранения + ", " +
ВыборкаДетальныеЗаписи.Материалы + " <" + ВыборкаДетальныеЗаписи.Количество + ">");
КонецЦикла;
КонецПроцедуры
Получение остатков по регистру накопления в 1С 8.3:
&НаСервере
Процедура ПолучениеОстатковПоРегиструНакопленияНаСервере()
// За получение остатков по регистру накопления в разрезе аналитики отвечает виртуальная таблица Остатки,
// У неё есть следующие параметры:
// 1. Период, на который считаем остатки, исключая саму дату. Если нужны остатки на дату включительно - используем
// тип Граница.
// 2. Условие (например, Организация = &ВыбОрганизация)
// Получим остатки "Доска обрезная" на складе "Основной" в организации
// ООО "Сделай сам" на 31 марта 2020 года (включительно)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МестоХраненияМатериаловОстатки.МестоХранения,
| МестоХраненияМатериаловОстатки.Материалы,
| МестоХраненияМатериаловОстатки.Организация,
| МестоХраненияМатериаловОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.МестоХраненияМатериалов.Остатки(
| &ВыбДата,
| МестоХранения = &ВыбМестоХранения И
| Материалы = &ВыбМатериалы
| ) КАК МестоХраненияМатериаловОстатки";
Запрос.УстановитьПараметр("ВыбДата",Новый Граница('20200331235959', ВидГраницы.Включая));
Запрос.УстановитьПараметр("ВыбМестоХранения",Справочники.МестоХраненияы.НайтиПоНаименованию("Основной"));
Запрос.УстановитьПараметр("ВыбМатериалы",Справочники.Материалы.НайтиПоНаименованию("Доска обрезная"));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить("Остатки " + " " + ВыборкаДетальныеЗаписи.Материалы + " на складе " + ВыборкаДетальныеЗаписи.МестоХранения
+ " на дату 31.03.2020 (включительно) составляют " + ВыборкаДетальныеЗаписи.КоличествоОстаток + " шт.");
КонецЦикла;
КонецПроцедуры
Процедура ПолучениеОстатковПоРегиструНакопленияНаСервере()
// За получение остатков по регистру накопления в разрезе аналитики отвечает виртуальная таблица Остатки,
// У неё есть следующие параметры:
// 1. Период, на который считаем остатки, исключая саму дату. Если нужны остатки на дату включительно - используем
// тип Граница.
// 2. Условие (например, Организация = &ВыбОрганизация)
// Получим остатки "Доска обрезная" на складе "Основной" в организации
// ООО "Сделай сам" на 31 марта 2020 года (включительно)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МестоХраненияМатериаловОстатки.МестоХранения,
| МестоХраненияМатериаловОстатки.Материалы,
| МестоХраненияМатериаловОстатки.Организация,
| МестоХраненияМатериаловОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.МестоХраненияМатериалов.Остатки(
| &ВыбДата,
| МестоХранения = &ВыбМестоХранения И
| Материалы = &ВыбМатериалы
| ) КАК МестоХраненияМатериаловОстатки";
Запрос.УстановитьПараметр("ВыбДата",Новый Граница('20200331235959', ВидГраницы.Включая));
Запрос.УстановитьПараметр("ВыбМестоХранения",Справочники.МестоХраненияы.НайтиПоНаименованию("Основной"));
Запрос.УстановитьПараметр("ВыбМатериалы",Справочники.Материалы.НайтиПоНаименованию("Доска обрезная"));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить("Остатки " + " " + ВыборкаДетальныеЗаписи.Материалы + " на складе " + ВыборкаДетальныеЗаписи.МестоХранения
+ " на дату 31.03.2020 (включительно) составляют " + ВыборкаДетальныеЗаписи.КоличествоОстаток + " шт.");
КонецЦикла;
КонецПроцедуры
Получение оборотов по регистру накопления в 1С 8.3:
&НаСервере
Процедура ПолучениеОборотовПоРегиструНапопленияНаСервере()
// За получение оборотов по регистру накопления за произвольный период с заданной периодичностью
// в различных разрезах аналитики отвечает виртуальная таблица Обороты,
// У неё есть следующие параметры:
// 1. Начало периода (включая)
// 2. Конец периода (включая)
// 3. Периодичность (например, Период, Запись, Год, Месяц...)
// 4. Условие (например, Организация = &ВыбОрганизация)
// Пример №1 Посчитаем сколько и каких материалов было заказано за 1 квартал 2020 года в организации ООО "Сделай сам".
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказыКонтрагентовОбороты.Материалы,
| ЗаказыКонтрагентовОбороты.Организация,
| ЗаказыКонтрагентовОбороты.КоличествоОборот
|ИЗ
| РегистрНакопления.ЗаказыКонтрагентов.Обороты(
| ДАТАВРЕМЯ(2020, 01, 01, 00, 00, 00),
| ДАТАВРЕМЯ(2020, 03, 31, 23, 59, 59), Период,
| Организация = &ВыбОрганизация) КАК ЗаказыКонтрагентовОбороты
|УПОРЯДОЧИТЬ ПО
| ЗаказыКонтрагентовОбороты.Материалы";
Запрос.УстановитьПараметр("ВыбОрганизация",Справочники.Организации.НайтиПоНаименованию("ООО ""Сделай сам"""));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить("За 1 кв. 2020 года заказали " + ВыборкаДетальныеЗаписи.КоличествоОборот + " шт. " + ВыборкаДетальныеЗаписи.Материалы);
КонецЦикла;
// Пример №2 Посчитаем сколько доски обрезной было заказано за каждый месяц в 1 квартале 2020 года в организации "Сделай сам".
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказыКонтрагентовОбороты.Период,
| ЗаказыКонтрагентовОбороты.Материалы,
| ЗаказыКонтрагентовОбороты.Организация,
| ЗаказыКонтрагентовОбороты.КоличествоОборот
|ИЗ
| РегистрНакопления.ЗаказыКонтрагентов.Обороты(
| &НачалоПериода,&КонецПериода,Месяц,
| Организация = &ВыбОрганизация И
| Материалы = &ВыбМатериалы) КАК ЗаказыКонтрагентовОбороты
|УПОРЯДОЧИТЬ ПО
| ЗаказыКонтрагентовОбороты.Период";
Запрос.УстановитьПараметр("НачалоПериода", '20200101000000');
Запрос.УстановитьПараметр("КонецПериода", '20200331235959');
Запрос.УстановитьПараметр("ВыбОрганизация",Справочники.Организации.НайтиПоНаименованию("ООО ""Сделай сам"""));
Запрос.УстановитьПараметр("ВыбМатериалы",Справочники.Материалы.НайтиПоНаименованию("Доска обрезная"));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить("За " + Формат(ВыборкаДетальныеЗаписи.Период, "ДФ=ММММ") + " заказали " +
ВыборкаДетальныеЗаписи.КоличествоОборот + " шт. " + ВыборкаДетальныеЗаписи.Материалы);
КонецЦикла;
КонецПроцедуры
Процедура ПолучениеОборотовПоРегиструНапопленияНаСервере()
// За получение оборотов по регистру накопления за произвольный период с заданной периодичностью
// в различных разрезах аналитики отвечает виртуальная таблица Обороты,
// У неё есть следующие параметры:
// 1. Начало периода (включая)
// 2. Конец периода (включая)
// 3. Периодичность (например, Период, Запись, Год, Месяц...)
// 4. Условие (например, Организация = &ВыбОрганизация)
// Пример №1 Посчитаем сколько и каких материалов было заказано за 1 квартал 2020 года в организации ООО "Сделай сам".
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказыКонтрагентовОбороты.Материалы,
| ЗаказыКонтрагентовОбороты.Организация,
| ЗаказыКонтрагентовОбороты.КоличествоОборот
|ИЗ
| РегистрНакопления.ЗаказыКонтрагентов.Обороты(
| ДАТАВРЕМЯ(2020, 01, 01, 00, 00, 00),
| ДАТАВРЕМЯ(2020, 03, 31, 23, 59, 59), Период,
| Организация = &ВыбОрганизация) КАК ЗаказыКонтрагентовОбороты
|УПОРЯДОЧИТЬ ПО
| ЗаказыКонтрагентовОбороты.Материалы";
Запрос.УстановитьПараметр("ВыбОрганизация",Справочники.Организации.НайтиПоНаименованию("ООО ""Сделай сам"""));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить("За 1 кв. 2020 года заказали " + ВыборкаДетальныеЗаписи.КоличествоОборот + " шт. " + ВыборкаДетальныеЗаписи.Материалы);
КонецЦикла;
// Пример №2 Посчитаем сколько доски обрезной было заказано за каждый месяц в 1 квартале 2020 года в организации "Сделай сам".
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказыКонтрагентовОбороты.Период,
| ЗаказыКонтрагентовОбороты.Материалы,
| ЗаказыКонтрагентовОбороты.Организация,
| ЗаказыКонтрагентовОбороты.КоличествоОборот
|ИЗ
| РегистрНакопления.ЗаказыКонтрагентов.Обороты(
| &НачалоПериода,&КонецПериода,Месяц,
| Организация = &ВыбОрганизация И
| Материалы = &ВыбМатериалы) КАК ЗаказыКонтрагентовОбороты
|УПОРЯДОЧИТЬ ПО
| ЗаказыКонтрагентовОбороты.Период";
Запрос.УстановитьПараметр("НачалоПериода", '20200101000000');
Запрос.УстановитьПараметр("КонецПериода", '20200331235959');
Запрос.УстановитьПараметр("ВыбОрганизация",Справочники.Организации.НайтиПоНаименованию("ООО ""Сделай сам"""));
Запрос.УстановитьПараметр("ВыбМатериалы",Справочники.Материалы.НайтиПоНаименованию("Доска обрезная"));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить("За " + Формат(ВыборкаДетальныеЗаписи.Период, "ДФ=ММММ") + " заказали " +
ВыборкаДетальныеЗаписи.КоличествоОборот + " шт. " + ВыборкаДетальныеЗаписи.Материалы);
КонецЦикла;
КонецПроцедуры
Получение одновременно остатков и оборотов по регистру накопления в 1С 8.3:
&НаСервере
Процедура ПолучениеОдновременноОстатковИОборотовПоРегиструНакопленияНаСервере()
// За получение остатков и оборотов за произвольный период с заданной периодичностью
// в разрезе аналитики отвечает виртуальная таблица ОстаткиИОбороты, У неё есть параметры:
// 1. Начало периода (включая)
// 2. Конец периода (включая)
// 3. Периодичность (например, Период, Год, Месяц...)
// 4. Метод дополнения периодов (Движение или ДвиженияИГраницыПериода)
// 5. Условие (например, Организация = &ВыбОрганизация)
// Получим начальный остаток, приход, расход и конечный остаток Доски обрезной на всех складах
// за каждый месяц 2020 года для организации ООО "Сделай сам".
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МестоХраненияМатериаловОстаткиИОбороты.Период,
| МестоХраненияМатериаловОстаткиИОбороты.Материалы,
| МестоХраненияМатериаловОстаткиИОбороты.Организация,
| МестоХраненияМатериаловОстаткиИОбороты.КоличествоНачальныйОстаток,
| МестоХраненияМатериаловОстаткиИОбороты.КоличествоОборот,
| МестоХраненияМатериаловОстаткиИОбороты.КоличествоПриход,
| МестоХраненияМатериаловОстаткиИОбороты.КоличествоРасход,
| МестоХраненияМатериаловОстаткиИОбороты.КоличествоКонечныйОстаток
|ИЗ
| РегистрНакопления.МестоХраненияМатериалов.ОстаткиИОбороты(
| ДАТАВРЕМЯ(2020, 01, 01, 00, 00, 00),
| ДАТАВРЕМЯ(2020, 12, 31, 23, 59, 59),
| Месяц, ДвиженияИГраницыПериода, Организация = &ВыбОрганизация И
| Материалы = &ВыбМатериалы) КАК МестоХраненияМатериаловОстаткиИОбороты
|УПОРЯДОЧИТЬ ПО
| МестоХраненияМатериаловОстаткиИОбороты.Период";
Запрос.УстановитьПараметр("ВыбОрганизация",Справочники.Организации.НайтиПоНаименованию("ООО ""Сделай сам"""));
Запрос.УстановитьПараметр("ВыбМатериалы",Справочники.Материалы.НайтиПоНаименованию("Доска обрезная"));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(Формат(ВыборкаДетальныеЗаписи.Период, "ДФ=ММММ") + " " + ВыборкаДетальныеЗаписи.Материалы + " " + "нач. остаток " +
ВыборкаДетальныеЗаписи.КоличествоНачальныйОстаток + " приход " + ВыборкаДетальныеЗаписи.КоличествоПриход + ", расход " +
ВыборкаДетальныеЗаписи.КоличествоРасход + " кон. остаток " + ВыборкаДетальныеЗаписи.КоличествоКонечныйОстаток);
КонецЦикла;
КонецПроцедуры
Процедура ПолучениеОдновременноОстатковИОборотовПоРегиструНакопленияНаСервере()
// За получение остатков и оборотов за произвольный период с заданной периодичностью
// в разрезе аналитики отвечает виртуальная таблица ОстаткиИОбороты, У неё есть параметры:
// 1. Начало периода (включая)
// 2. Конец периода (включая)
// 3. Периодичность (например, Период, Год, Месяц...)
// 4. Метод дополнения периодов (Движение или ДвиженияИГраницыПериода)
// 5. Условие (например, Организация = &ВыбОрганизация)
// Получим начальный остаток, приход, расход и конечный остаток Доски обрезной на всех складах
// за каждый месяц 2020 года для организации ООО "Сделай сам".
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МестоХраненияМатериаловОстаткиИОбороты.Период,
| МестоХраненияМатериаловОстаткиИОбороты.Материалы,
| МестоХраненияМатериаловОстаткиИОбороты.Организация,
| МестоХраненияМатериаловОстаткиИОбороты.КоличествоНачальныйОстаток,
| МестоХраненияМатериаловОстаткиИОбороты.КоличествоОборот,
| МестоХраненияМатериаловОстаткиИОбороты.КоличествоПриход,
| МестоХраненияМатериаловОстаткиИОбороты.КоличествоРасход,
| МестоХраненияМатериаловОстаткиИОбороты.КоличествоКонечныйОстаток
|ИЗ
| РегистрНакопления.МестоХраненияМатериалов.ОстаткиИОбороты(
| ДАТАВРЕМЯ(2020, 01, 01, 00, 00, 00),
| ДАТАВРЕМЯ(2020, 12, 31, 23, 59, 59),
| Месяц, ДвиженияИГраницыПериода, Организация = &ВыбОрганизация И
| Материалы = &ВыбМатериалы) КАК МестоХраненияМатериаловОстаткиИОбороты
|УПОРЯДОЧИТЬ ПО
| МестоХраненияМатериаловОстаткиИОбороты.Период";
Запрос.УстановитьПараметр("ВыбОрганизация",Справочники.Организации.НайтиПоНаименованию("ООО ""Сделай сам"""));
Запрос.УстановитьПараметр("ВыбМатериалы",Справочники.Материалы.НайтиПоНаименованию("Доска обрезная"));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(Формат(ВыборкаДетальныеЗаписи.Период, "ДФ=ММММ") + " " + ВыборкаДетальныеЗаписи.Материалы + " " + "нач. остаток " +
ВыборкаДетальныеЗаписи.КоличествоНачальныйОстаток + " приход " + ВыборкаДетальныеЗаписи.КоличествоПриход + ", расход " +
ВыборкаДетальныеЗаписи.КоличествоРасход + " кон. остаток " + ВыборкаДетальныеЗаписи.КоличествоКонечныйОстаток);
КонецЦикла;
КонецПроцедуры
Поиск и программное изменение записи в регистр накопления документа (регистратора) в 1С 8.3:
&НаСервере
Процедура ПоискИПрограммноеИзменениеЗаписиВРегистрНакопленияДокументаНаСервере()
// Предположим у нас есть ссылка на проведенный документ Поступление на склад № МРБ-000123
ПоступлениеСсылка = Документы.ПоступлениеНаСклад.НайтиПоНомеру("МРБ-000123", '20201231');
// Мы знаем, что этот документ делает следующие записи в регистр накопления "МестоХраненияМатериалов":
// Приход [Организация, МестоХранения, Материалы] [Количество]
// Наша задача: найти эти записи и изменить их (например, утроим количество поступившего товара)
// и записать вместо старых.
// Используем объектную технику получения записей, потому что мы будем их изменять.
Поступление = ПоступлениеСсылка.ПолучитьОбъект();
// Получим набор записей этого документа в регистр "МестоХраненияМатериалов".
НаборЗаписей = Поступление.Движения.МестоХраненияМатериалов;
// Прочитаем записи из базы данных.
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
// Выведем старые значения.
Сообщить(Запись.Организация + ", " +Запись.МестоХранения + ", " + Запись.Материалы + " = " + Запись.Количество + "]");
// Утроим количество.
Запись.Количество = 3 * Запись.Количество;
КонецЦикла;
// Добавим новую запись в регистр накопления МестоХраненияМатериалов.
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Организация = Справочники.Организации.НайтиПоНаименованию("ООО ""Сделай сам""");
НоваяЗапись.МестоХранения = Справочники.МестоХраненияы.НайтиПоНаименованию("Основной");
НоваяЗапись.Материалы = Справочники.Материалы.НайтиПоНаименованию("Доска обрезная");
НоваяЗапись.Период = ТекущаяДата();
НоваяЗапись.Количество = 3000;
НаборЗаписей.Записать(Истина); // удалим старые записи и запишем вместо них новые
// Теперь записи регистра МестоХраненияМатериалов по документу № МРБ-000123, отличаются от тех,
// что были записаны документом при проведении. Чтобы вернуть их к начальному виду - нужно перепровести документ.
КонецПроцедуры
Процедура ПоискИПрограммноеИзменениеЗаписиВРегистрНакопленияДокументаНаСервере()
// Предположим у нас есть ссылка на проведенный документ Поступление на склад № МРБ-000123
ПоступлениеСсылка = Документы.ПоступлениеНаСклад.НайтиПоНомеру("МРБ-000123", '20201231');
// Мы знаем, что этот документ делает следующие записи в регистр накопления "МестоХраненияМатериалов":
// Приход [Организация, МестоХранения, Материалы] [Количество]
// Наша задача: найти эти записи и изменить их (например, утроим количество поступившего товара)
// и записать вместо старых.
// Используем объектную технику получения записей, потому что мы будем их изменять.
Поступление = ПоступлениеСсылка.ПолучитьОбъект();
// Получим набор записей этого документа в регистр "МестоХраненияМатериалов".
НаборЗаписей = Поступление.Движения.МестоХраненияМатериалов;
// Прочитаем записи из базы данных.
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
// Выведем старые значения.
Сообщить(Запись.Организация + ", " +Запись.МестоХранения + ", " + Запись.Материалы + " = " + Запись.Количество + "]");
// Утроим количество.
Запись.Количество = 3 * Запись.Количество;
КонецЦикла;
// Добавим новую запись в регистр накопления МестоХраненияМатериалов.
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Организация = Справочники.Организации.НайтиПоНаименованию("ООО ""Сделай сам""");
НоваяЗапись.МестоХранения = Справочники.МестоХраненияы.НайтиПоНаименованию("Основной");
НоваяЗапись.Материалы = Справочники.Материалы.НайтиПоНаименованию("Доска обрезная");
НоваяЗапись.Период = ТекущаяДата();
НоваяЗапись.Количество = 3000;
НаборЗаписей.Записать(Истина); // удалим старые записи и запишем вместо них новые
// Теперь записи регистра МестоХраненияМатериалов по документу № МРБ-000123, отличаются от тех,
// что были записаны документом при проведении. Чтобы вернуть их к начальному виду - нужно перепровести документ.
КонецПроцедуры
Создание записи регистра накопления без привязки к документу в 1С 8.3:
&НаСервере
Процедура СозданиеЗаписиРегистраНакопленияБезПривязкиКДокументуНаСервере()
// ВыборкаДетальныеЗаписи регистра накопления обязательно должны быть привязаны к документу,
// в нашем случае этим документом будет документ "БухСправка",
Операция = Документы.БухСправка.СоздатьДокумент();
Операция.Дата = ТекущаяДата();
Операция.Организация = Справочники.Организации.НайтиПоКоду("0000001");// ООО "Сделай сам" - она у нас одна в справочнике
Операция.СуммаОперации = 5000;
Операция.Содержание = "Ручная операция по регистру накопления Движение денежных средств";
Операция.Записать(РежимЗаписиДокумента.Запись);
// Получаем его набор записей для регистра ДвижениеДенежныхСредств
НаборЗаписей = Операция.Движения.ДвижениеДенежныхСредств;
Запись = НаборЗаписей.Добавить();
Запись.Период = Операция.Дата;
Запись.Организация = Операция.Организация;
// и т.д. заполняем все нужные поля регистра
Запись.Сумма = 5000;
НаборЗаписей.Записать(Истина);
КонецПроцедуры
Процедура СозданиеЗаписиРегистраНакопленияБезПривязкиКДокументуНаСервере()
// ВыборкаДетальныеЗаписи регистра накопления обязательно должны быть привязаны к документу,
// в нашем случае этим документом будет документ "БухСправка",
Операция = Документы.БухСправка.СоздатьДокумент();
Операция.Дата = ТекущаяДата();
Операция.Организация = Справочники.Организации.НайтиПоКоду("0000001");// ООО "Сделай сам" - она у нас одна в справочнике
Операция.СуммаОперации = 5000;
Операция.Содержание = "Ручная операция по регистру накопления Движение денежных средств";
Операция.Записать(РежимЗаписиДокумента.Запись);
// Получаем его набор записей для регистра ДвижениеДенежныхСредств
НаборЗаписей = Операция.Движения.ДвижениеДенежныхСредств;
Запись = НаборЗаписей.Добавить();
Запись.Период = Операция.Дата;
Запись.Организация = Операция.Организация;
// и т.д. заполняем все нужные поля регистра
Запись.Сумма = 5000;
НаборЗаписей.Записать(Истина);
КонецПроцедуры
💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом #Регистры накопления:
📰 Актуальные новости с тегом #Регистры накопления:
- В версии 8.3.26 разработано новое значение перечисления РежимЗамещения.Обновление в методы РегистрСведенийНаборЗаписей.<Имя регистра сведений>. Записать(<Замещение>) и РегистрНакопленийНаборЗаписей.<Имя регистра сведений>. Записать(<Замещение>). В качестве параметра Замещение может передаваться одно из значений перечисления РежимЗамещения.В перечисление РежимЗамещения к существующим элементам Добавление, Замещение, Слияние, Удаление добавляется новый элемент Обновление. В отличие от режима Слияние в режиме Обновление производится только обновление существующих записей регистра, совпадающих по значениям ключевых полей с записями набора записей. Добавление новых записей в регистр не производится, что существенно ускоряет процедуру записи. Будет полезно например при свертке остатков.
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник