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