Читайте дальше...
Запись в регистр накопления
// Запись одной записи в регистр накопления
Процедура ЗаписатьДвижениеРегистра()
Движение = РегистрыНакопления.ОстаткиТоваров.СоздатьДвижение();
Движение.Период = ТекущаяДата();
Движение.Регистратор = Документ.ПоступлениеТоваровУслуг.Выбрать().ПолучитьПервый();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Товар = Справочники.Номенклатура.НайтиПоНаименованию("Ноутбук");
Движение.Количество = 5;
Движение.Склад = Справочники.Склады.НайтиПоНаименованию("Основной склад");
Движение.Записать();
КонецПроцедуры
Пакетная запись движений
// Пакетная запись нескольких движений
Процедура ЗаписатьНесколькоДвижений()
МенеджерДвижений = Новый МенеджерДвижений;
НаборДвижений = МенеджерДвижений.РегистрыНакопления.ОстаткиТоваров;
// Первое движение
Движение1 = НаборДвижений.Добавить();
Движение1.Период = ТекущаяДата();
Движение1.Регистратор = Документ.ПоступлениеТоваровУслуг.Выбрать().ПолучитьПервый();
Движение1.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение1.Товар = Справочники.Номенклатура.НайтиПоНаименованию("Ноутбук");
Движение1.Количество = 3;
Движение1.Склад = Справочники.Склады.НайтиПоНаименованию("Основной склад");
// Второе движение
Движение2 = НаборДвижений.Добавить();
Движение2.Период = ТекущаяДата();
Движение2.Регистратор = Документ.ПоступлениеТоваровУслуг.Выбрать().ПолучитьПервый();
Движение2.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение2.Товар = Справочники.Номенклатура.НайтиПоНаименованию("Монитор");
Движение2.Количество = 2;
Движение2.Склад = Справочники.Склады.НайтиПоНаименованию("Основной склад");
МенеджерДвижений.Записать();
КонецПроцедуры
Получение остатков на дату
// Получение остатков товаров на определенную дату
Функция ПолучитьОстаткиТоваровНаДату(ДатаОстатков, Товар = Неопределено, Склад = Неопределено)
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| ОстаткиТоваровОстатки.Товар,
| ОстаткиТоваровОстатки.Склад,
| СУММА(ОстаткиТоваровОстатки.Количество) КАК Количество
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки(&ДатаОстатков,) КАК ОстаткиТоваровОстатки
|ГДЕ
| ИСТИНА";
// Добавляем условия при необходимости
Если Товар <> Неопределено Тогда
Запрос.Текст = Запрос.Текст + "
| И ОстаткиТоваровОстатки.Товар = &Товар";
КонецЕсли;
Если Склад <> Неопределено Тогда
Запрос.Текст = Запрос.Текст + "
| И ОстаткиТоваровОстатки.Склад = &Склад";
КонецЕсли;
Запрос.Текст = Запрос.Текст + "
|СГРУППИРОВАТЬ ПО
| ОстаткиТоваровОстатки.Товар,
| ОстаткиТоваровОстатки.Склад";
Запрос.УстановитьПараметр("ДатаОстатков", ДатаОстатков);
Если Товар <> Неопределено Тогда
Запрос.УстановитьПараметр("Товар", Товар);
КонецЕсли;
Если Склад <> Неопределено Тогда
Запрос.УстановитьПараметр("Склад", Склад);
КонецЕсли;
Результат = Запрос.Выполнить().Выгрузить();
Возврат Результат;
КонецФункции
Получение оборотов за период
// Получение оборотов товаров за период
Функция ПолучитьОборотыТоваровЗаПериод(ДатаНачала, ДатаОкончания, Товар = Неопределено)
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| ОстаткиТоваровОбороты.Товар,
| ВЫБОР
| КОГДА ОстаткиТоваровОбороты.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА ""Приход""
| ИНАЧЕ ""Расход""
| КОНЕЦ КАК ВидДвижения,
| СУММА(ОстаткиТоваровОбороты.Количество) КАК Количество
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Обороты(&ДатаНачала, &ДатаОкончания,,) КАК ОстаткиТоваровОбороты
|ГДЕ
| ИСТИНА";
Если Товар <> Неопределено Тогда
Запрос.Текст = Запрос.Текст + "
| И ОстаткиТоваровОбороты.Товар = &Товар";
КонецЕсли;
Запрос.Текст = Запрос.Текст + "
|СГРУППИРОВАТЬ ПО
| ОстаткиТоваровОбороты.Товар,
| ОстаткиТоваровОбороты.ВидДвижения";
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
Если Товар <> Неопределено Тогда
Запрос.УстановитьПараметр("Товар", Товар);
КонецЕсли;
Результат = Запрос.Выполнить().Выгрузить();
Возврат Результат;
КонецФункции
Удаление движений регистра
// Удаление движений регистра по документу-регистратору
Процедура УдалитьДвиженияПоДокументу(ДокументРегистратор)
НаборЗаписей = РегистрыНакопления.ОстаткиТоваров.ВыбратьДвижения(ДокументРегистратор);
Пока НаборЗаписей.Следующий() Цикл
НаборЗаписей.Удалить();
КонецЦикла;
НаборЗаписей.Записать();
КонецПроцедуры
Корректировка записей регистра
// Корректировка существующих записей регистра
Процедура КорректироватьДвижения(ДокументРегистратор, НовыйСклад)
НаборЗаписей = РегистрыНакопления.ОстаткиТоваров.ВыбратьДвижения(ДокументРегистратор);
Пока НаборЗаписей.Следующий() Цикл
НаборЗаписей.Склад = НовыйСклад;
НаборЗаписей.Записать();
КонецЦикла;
КонецПроцедуры
Пример использования временных таблиц для работы с регистрами
// Использование временных таблиц для сложных расчетов
Процедура РасчетОстатковСВременнымиТаблицами()
ВременнаяТаблица = Новый ТаблицаЗначений;
ВременнаяТаблица.Колонки.Добавить("Товар", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ВременнаяТаблица.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
// Заполняем временную таблицу данными
// ...
// Используем временную таблицу в запросе к регистру
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| т.Товар,
| т.Количество КАК ПланируемоеКоличество,
| ЕСТЬNULL(Остатки.Количество, 0) КАК ФактическоеКоличество
|ПОМЕСТИТЬ ВТ_Сравнение
|ИЗ
| &ВременнаяТаблица КАК т
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(&ДатаОстатков,) КАК Остатки
| ПО т.Товар = Остатки.Товар";
Запрос.УстановитьПараметр("ВременнаяТаблица", ВременнаяТаблица);
Запрос.УстановитьПараметр("ДатаОстатков", ТекущаяДата());
Результат = Запрос.Выполнить().Выгрузить();
// Дальнейшая обработка результата
// ...
КонецПроцедуры
Эти примеры охватывают основные сценарии работы с регистрами накопления в 1С: запись, чтение, удаление и корректировка движений, получение остатков и оборотов, а также использование временных таблиц для сложных расчетов.








