/// Как прочитать записи регистра накопления в 1с 8.3, 8.2
&НаСервере
Процедура КакПрочитатьЗаписиРегистраНакопленияНаСервере()
// Получим все записи регистра накопления ЗаказыКлиентов
// по организации ООО "Ромашка" за 1 квартал 2014 года,
// упорядочив их по возрастанию даты.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказыКлиентов.Период,
| ЗаказыКлиентов.Регистратор,
| ЗаказыКлиентов.НомерСтроки,
| ЗаказыКлиентов.Активность,
| ЗаказыКлиентов.Контрагент,
| ЗаказыКлиентов.Номенклатура,
| ЗаказыКлиентов.Количество
|ИЗ
| РегистрНакопления.ЗаказыКлиентов КАК ЗаказыКлиентов
|ГДЕ
| ЗаказыКлиентов.Активность = Истина И
| ЗаказыКлиентов.Организация = &ВыбОрганизация И
| ЗаказыКлиентов.Период МЕЖДУ &НачДата И &КонДата
|УПОРЯДОЧИТЬ ПО
| ЗаказыКлиентов.Период";
Запрос.УстановитьПараметр("ВыбОрганизация",
Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""")
);
// начальная дата - 1 января 2014 года
Запрос.УстановитьПараметр("НачДата", '20140101000000');
// конечная дата - 31 марта 2014 года 23 часа 59 минут 59 секунд
Запрос.УстановитьПараметр("КонДата", '20140331235959');
РезультатЗапроса = Запрос.Выполнить();
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
Сообщить(
"[" + Записи.Период + "] " +
Записи.Номенклатура + " " +
Записи.Количество + " шт." +
" (" + Записи.Регистратор + ")"
);
КонецЦикла;
КонецПроцедуры
/// Как получить обороты по регистру накопления в 1с 8.3, 8.2
&НаСервере
Процедура КакПолучитьОборотыПоРегиструНапопленияНаСервере()
// За получение оборотов по регистру накопления за произвольный период
// с заданной периодичностью в различных разрезах аналитики отвечает
// виртуальная таблица Обороты,
// у неё есть следующие параметры:
// 1. Начало периода (включая)
// 2. Конец периода (включая)
// 3. Периодичность (например, Период, Запись, Год, Месяц...)
// 4. Условие (например, Организация = &ВыбОрганизация)
// Пример №1
Сообщить("Пример №1");
// Посчитаем сколько и каких продуктов было заказано за 1 квартал
// 2014 года в организации ООО "Ромашка".
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказыКлиентовОбороты.Номенклатура,
| ЗаказыКлиентовОбороты.Организация,
| ЗаказыКлиентовОбороты.КоличествоОборот
|ИЗ
| РегистрНакопления.ЗаказыКлиентов.Обороты(
| ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00),
| ДАТАВРЕМЯ(2014, 03, 31, 23, 59, 59),
| Период,
| Организация = &ВыбОрганизация
| ) КАК ЗаказыКлиентовОбороты
|УПОРЯДОЧИТЬ ПО
| ЗаказыКлиентовОбороты.Номенклатура";
Запрос.УстановитьПараметр("ВыбОрганизация",
Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""")
);
РезультатЗапроса = Запрос.Выполнить();
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
Сообщить(
"За 1 кв. 2014 года заказали " +
Записи.КоличествоОборот + " шт. " +
Записи.Номенклатура
);
КонецЦикла;
// Пример №2
Сообщить("Пример №2");
// Посчитаем сколько бананов было заказано за каждый месяц
// в 1 квартале 2014 года в организации "Ромашка".
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказыКлиентовОбороты.Период,
| ЗаказыКлиентовОбороты.Номенклатура,
| ЗаказыКлиентовОбороты.Организация,
| ЗаказыКлиентовОбороты.КоличествоОборот
|ИЗ
| РегистрНакопления.ЗаказыКлиентов.Обороты(
| &НачПериод,
| &КонПериод,
| Месяц,
| Организация = &ВыбОрганизация И
| Номенклатура = &ВыбНоменклатура
| ) КАК ЗаказыКлиентовОбороты
|УПОРЯДОЧИТЬ ПО
| ЗаказыКлиентовОбороты.Период";
Запрос.УстановитьПараметр("НачПериод", '20140101000000');
Запрос.УстановитьПараметр("КонПериод", '20140331235959');
Запрос.УстановитьПараметр("ВыбОрганизация",
Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""")
);
Запрос.УстановитьПараметр("ВыбНоменклатура",
Справочники.Номенклатура.НайтиПоНаименованию("Банан")
);
РезультатЗапроса = Запрос.Выполнить();
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
Сообщить(
"За " + Формат(Записи.Период, "ДФ=ММММ") +
" заказали " + Записи.КоличествоОборот + " шт. " +
Записи.Номенклатура
);
КонецЦикла;
КонецПроцедуры
/// Как получить остатки по регистру накопления в 1с 8.3, 8.2
&НаСервере
Процедура КакПолучитьОстаткиПоРегиструНакопленияНаСервере()
// За получение остатков по регистру накопления в разрезе
// аналитики отвечает виртуальная таблица Остатки,
// у неё есть следующие параметры:
// 1. Период, на который считаем остатки, исключая саму дату.
// Если нужны остатки на дату включительно - используем
// тип Граница (см. пример ниже).
// 2. Условие (например, Организация = &ВыбОрганизация)
// Получим остатки бананов на основном складе в организации
// ООО "Ромашка" на 31 марта 2014 года (включительно)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗапасыЕдыОстатки.Склад,
| ЗапасыЕдыОстатки.Номенклатура,
| ЗапасыЕдыОстатки.Организация,
| ЗапасыЕдыОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ЗапасыЕды.Остатки(
| &ВыбДата,
| Склад = &ВыбСклад И
| Номенклатура = &ВыбНоменклатура
| ) КАК ЗапасыЕдыОстатки";
Запрос.УстановитьПараметр("ВыбДата",
Новый Граница('20140331235959', ВидГраницы.Включая)
);
Запрос.УстановитьПараметр("ВыбСклад",
Справочники.Склады.НайтиПоНаименованию("Основной")
);
Запрос.УстановитьПараметр("ВыбНоменклатура",
Справочники.Номенклатура.НайтиПоНаименованию("Банан")
);
РезультатЗапроса = Запрос.Выполнить();
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
Сообщить(
"Остатки " + " " + Записи.Номенклатура +
" на складе " + Записи.Склад + " на дату " +
"31.03.2014 (включительно) " +
" составляют " + Записи.КоличествоОстаток + " шт.");
КонецЦикла;
КонецПроцедуры
/// Как получить сразу остатки и обороты по регистру
/// накопления в 1с 8.3, 8.2
&НаСервере
Процедура КакПолучитьСразуОстаткиИОборотыПоРегиструНакопленияНаСервере()
// За получение остатков и оборотов за произвольный период
// с заданной периодичностью в разрезе аналитики отвечает
// виртуальная таблица ОстаткиИОбороты, у неё есть параметры:
// 1. Начало периода (включая)
// 2. Конец периода (включая)
// 3. Периодичность (например, Период, Год, Месяц...)
// 4. Метод дополнения периодов (Движение или ДвиженияИГраницыПериода)
// 5. Условие (например, Организация = &ВыбОрганизация)
// Для примера получим начальный остаток, приход, расход и конечный остаток
// банана на всех складах за каждый месяц 2014 года для
// организация ООО "Ромашка".
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗапасыЕдыОстаткиИОбороты.Период,
| ЗапасыЕдыОстаткиИОбороты.Номенклатура,
| ЗапасыЕдыОстаткиИОбороты.Организация,
| ЗапасыЕдыОстаткиИОбороты.КоличествоНачальныйОстаток,
| ЗапасыЕдыОстаткиИОбороты.КоличествоОборот,
| ЗапасыЕдыОстаткиИОбороты.КоличествоПриход,
| ЗапасыЕдыОстаткиИОбороты.КоличествоРасход,
| ЗапасыЕдыОстаткиИОбороты.КоличествоКонечныйОстаток
|ИЗ
| РегистрНакопления.ЗапасыЕды.ОстаткиИОбороты(
| ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00),
| ДАТАВРЕМЯ(2014, 12, 31, 23, 59, 59),
| Месяц, ДвиженияИГраницыПериода,
| Организация = &ВыбОрганизация И
| Номенклатура = &ВыбНоменклатура
| ) КАК ЗапасыЕдыОстаткиИОбороты
|УПОРЯДОЧИТЬ ПО
| ЗапасыЕдыОстаткиИОбороты.Период";
Запрос.УстановитьПараметр("ВыбОрганизация",
Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""")
);
Запрос.УстановитьПараметр("ВыбНоменклатура",
Справочники.Номенклатура.НайтиПоНаименованию("Банан")
);
РезультатЗапроса = Запрос.Выполнить();
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
Сообщить(
Формат(Записи.Период, "ДФ=ММММ") + " [" +
Записи.Номенклатура + "] " + "нач. остаток " +
Записи.КоличествоНачальныйОстаток + " приход " +
Записи.КоличествоПриход + ", расход " +
Записи.КоличествоРасход + " кон. остаток " +
Записи.КоличествоКонечныйОстаток
);
КонецЦикла;
КонецПроцедуры
/// Как найти и изменить программно записи в регистр накопления
/// документа (регистратора) в 1с 8.3, 8.2
&НаСервере
Процедура КакНайтиИИзменитьЗаписиДокументаНаСервере()
// Предположим у нас есть ссылка на проведенный документ
// поступления еды № ВМБП-000002
ПоступлениеСсылка =
Документы.ПоступлениеЕды.НайтиПоНомеру(
"ВМБП-000002", '20141231'
);
// Мы значем, что этот документ делает следующие записи
// в регистр накопления "ЗапасыЕды":
// Приход [Организация, Склад, Номенклатура] [Количество]
// Наша задача: найти эти записи и изменить
// их (например, удвоим количество поступившего товара)
// и записать вместо старых.
// Используем объектную технику получения записей,
// ведь мы будем их изменять.
Поступление = ПоступлениеСсылка.ПолучитьОбъект();
// Получим набор записей этого документа в регистр "ЗапасыЕды".
НаборЗаписей = Поступление.Движения.ЗапасыЕды;
// Прочитаем записи из базы данных.
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
// Выведем старые значения.
Сообщить(
"[" + Запись.Организация + ", " +
Запись.Склад + ", " +
Запись.Номенклатура + "] " +
"[" + Запись.Количество + "]"
);
// Удвоим количество.
Запись.Количество = 2 * Запись.Количество;
КонецЦикла;
// Добавим новую запись в регистр накопления.
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Организация =
Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""");
НоваяЗапись.Склад =
Справочники.Склады.НайтиПоНаименованию("Основной");
НоваяЗапись.Номенклатура =
Справочники.Номенклатура.НайтиПоНаименованию("Банан");
НоваяЗапись.Период = ТекущаяДата();
НоваяЗапись.Количество = 1000;
// Разом запишем набор записей.
НаборЗаписей.Записать(
Истина // удалим старые записи и запишем вместо них новые
);
// Теперь записи регистра ЗапасыЕды по документу № ВМБП-000002,
// отличаются от тех, что были записаны документом при проведении.
// Чтобы вернуть их к начальному виду - нужно
// перепровести документ.
КонецПроцедуры
/// Как прочитать записи документа в регистр накопления
/// запросом в 1с 8.3, 8.2
&НаСервере
Процедура КакПрочитатьЗаписиДокументаЗапросомНаСервере()
// Этот приём используется, если не требуется изменять
// найденные записи.
// Предположим у нас есть ссылка на проведенный документ
// поступления еды № ВМБП-000002
ПоступлениеСсылка =
Документы.ПоступлениеЕды.НайтиПоНомеру(
"ВМБП-000002", '20141231'
);
// Мы значем, что этот документ делает записи
// в регистр накопления "ЗапасыЕды".
// Прочитаем эти записи запросом.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗапасыЕды.Период,
| ЗапасыЕды.Регистратор,
| ЗапасыЕды.НомерСтроки,
| ЗапасыЕды.Активность,
| ЗапасыЕды.ВидДвижения,
| ЗапасыЕды.Склад,
| ЗапасыЕды.Номенклатура,
| ЗапасыЕды.Организация,
| ЗапасыЕды.Количество
|ИЗ
| РегистрНакопления.ЗапасыЕды КАК ЗапасыЕды
|ГДЕ
| ЗапасыЕды.Регистратор = &ВыбРегистратор
|УПОРЯДОЧИТЬ ПО
| ЗапасыЕды.НомерСтроки";
Запрос.УстановитьПараметр(
"ВыбРегистратор",
ПоступлениеСсылка
);
РезультатЗапроса = Запрос.Выполнить();
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
Сообщить(
"[" + Записи.Организация + ", " +
Записи.Склад + ", " +
Записи.Номенклатура + "] " +
"[" + Записи.Количество + "]"
);
КонецЦикла;
КонецПроцедуры
/// Как создать записи регистра накопления без привязки
/// к документу в 1с 8.3, 8.2
&НаСервере
Процедура КакСоздатьЗаписиБезДокументаНаСервере()
// В нашей тестовой конфигурации нет документа
// "ОперацияБух", который присутствует в бухгалтерской базе.
Сообщить("Этот пример нельзя выполнить в этой базе.");
Возврат;
// Записи регистра накопления обязательно
// должны быть привязаны к документу, в данном случае
// этим документом будет документ "ОперацияБух",
// задуманный как раз для ручных операций.
Операция = Документы.ОперацияБух.СоздатьДокумент();
Операция.Дата = ТекущаяДата();
Операция.Организация =
Справочники.Организации.НайтиПоНаименованию("Милькин В. В. ИП");
Операция.СуммаОперации = 1000;
Операция.Содержание = "Ручная операция по регистру накопления ИПДоходы";
Операция.Записать(РежимЗаписиДокумента.Запись);
// Затем получаем его набор записей для регистра ИПДоходы
НаборЗаписей = Операция.Движения.ИПДоходы;
Запись = НаборЗаписей.Добавить();
Запись.Период = Операция.Дата;
Запись.Организация = Операция.Организация;
// и т.д. заполняем все нужные поля регистра
Запись.Сумма = 1000;
НаборЗаписей.Записать(Истина);
КонецПроцедуры
Смотрите также:
Электронный учебник по программированию в 1С Рекомендации по изучению программирования 1С с нуля Игра "Кто хочет стать миллионером?" с вопросами на определенную тематику (язык программирования JavaScript, английские, немецкие, французские, испанские, португальские, нидерландские, итальянские слова, электробезопасность, промышленная безопасность, бокс и т.п.), написанная на 1С Программирование в 1С 8.3 с нуля - краткий самоучитель Комплексная подготовка программистов 1С:Предприятие 8.2 Сайты с уроками программирования и со справочниками Youtube-каналы с уроками программирования Сайты для обучения программированию Лекции и уроки