Untitled
unknown
plain_text
2 years ago
5.4 kB
11
Indexable
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
// Так как периодичность регистра - месяц, то чтобы избежать ошибки при вводе пользовательских данных,
// принудительно устанавливаем дату в начало месяца. Тогда не будет расхождений в дате документа,
// даты установки учетной политики и даты получения и записи данных в регистр остатков.
Дата = НачалоМесяца(Дата);
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
// ДВИЖЕНИЯ ПО РЕГИСТРУ УЧЕТНАЯ ПОЛИТИКА
Движения.УчетнаяПолитика.Записывать = Истина;
// Отражение в регистре Учетная политика метода списания, указанного в документе
Движение = Движения.УчетнаяПолитика.Добавить();
Движение.Период = Дата;
Движение.МетодСписания = МетодСписания;
// ДВИЖЕНИЯ ПО РЕГИСТРУ ОСТАТКИ НОМЕНКЛАТУРЫ
Движения.ОстаткиНоменклатуры.Записывать = Истина;
// Если устанавливаемый метод списаний - по средней, то получаем все остатки из регистра по партиям,
// списываем их и помещаем их на одну партию - сам документ установки учетной политики
Если МетодСписания = Перечисления.МетодыСписания.ПоСредней Тогда
Движения.ОстаткиНоменклатуры.Записать();
// Установка блокировки данных в регистре Остатки номенклатуры по всем записям
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();
// Запрос для формирования движений. Итоги для того, чтобы минимизировать количество записей помещаемых в регистр
// по оприходованию остатков: данные по одной номенклатуре разных партий будут записаны одной строкой
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиНоменклатурыОстатки.Номенклатура КАК Номенклатура,
| ОстаткиНоменклатурыОстатки.Партия КАК Партия,
| ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК Количество,
| ОстаткиНоменклатурыОстатки.СуммаОстаток КАК Сумма
|ИЗ
| РегистрНакопления.ОстаткиНоменклатуры.Остатки(&МоментИтогов, ) КАК ОстаткиНоменклатурыОстатки
|ИТОГИ
| СУММА(Количество),
| СУММА(Сумма)
|ПО
| Номенклатура";
Запрос.УстановитьПараметр("МоментИтогов", МоментВремени());
// Обход результатов запроса
ВыборкаНоменклатура = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаНоменклатура.Следующий() Цикл
// Оприходование остатков на одну партию - текущий документ
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.Период = Дата;
ЗаполнитьЗначенияСвойств(Движение, ВыборкаНоменклатура);
Движение.Партия = Ссылка;
ВыборкаДетальные = ВыборкаНоменклатура.Выбрать();
Пока ВыборкаДетальные.Следующий() Цикл
// Списание имеющихся движений по партиям
Движение = Движения.ОстаткиНоменклатуры.ДобавитьРасход();
Движение.Период = Дата;
ЗаполнитьЗначенияСвойств(Движение, ВыборкаДетальные);
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Editor is loading...