helpf.pro
Регистрация

v8: Последовательность. Восстановление

krpolina1996
24.12.2018 09:43Прочитано: 750

Здравствуйте! Помогите разобраться с восстановлением последовательности! Не пойму почему не работает

Процедура ОбработкаПроведения(Отказ, Режим)

// регистр ТоварыНаСкладах Расход

Движения.ТоварыНаСкладах.Записывать = Истина;

МенеджерВТ = Новый МенеджерВременныхТаблиц;

Запрос = Новый Запрос;

Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос.Текст = "ВЫБРАТЬ

|РасходнаяНакладнаяТовары.Номенклатура КАК Номенклатура,

|РасходнаяНакладнаяТовары.Склад КАК Склад,

|СУММА(РасходнаяНакладнаяТовары.Количество) КАК КоличествоВДокументе,

|РасходнаяНакладнаяТовары.Сумма КАК СуммаВДокументе,

|РасходнаяНакладнаяТовары.Ссылка КАК Ссылка,

|РасходнаяНакладная.Дата КАК Дата

|ПОМЕСТИТЬ НоменклатураДокумента

|ИЗ

|Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары

|ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК РасходнаяНакладная

|ПО РасходнаяНакладнаяТовары.Ссылка = РасходнаяНакладная.Ссылка

|ГДЕ

|РасходнаяНакладнаяТовары.Ссылка =Ссылка

|

|СГРУППИРОВАТЬ ПО

|РасходнаяНакладнаяТовары.Номенклатура,

|РасходнаяНакладнаяТовары.Склад,

|РасходнаяНакладнаяТовары.Сумма,

|РасходнаяНакладнаяТовары.Количество,

|РасходнаяНакладнаяТовары.Ссылка,

|РасходнаяНакладная.Дата";

Запрос.УстановитьПараметр("Ссылка", Ссылка);

РезультатЗапроса = Запрос.Выполнить();

Запрос2=Новый Запрос;

Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос2.Текст = "ВЫБРАТЬ

|НоменклатураДокумента.Номенклатура КАК Номенклатура,

|НоменклатураДокумента.СуммаВДокументе КАК СуммаВДокументе,

|ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,

|НоменклатураДокумента.Склад КАК Склад,

|ЕСТЬNULL(ТоварыНаСкладахОстатки.СуммаОстаток, 0) КАК СуммаОстаток,

|ТоварыНаСкладахОстатки.Партия КАК Партия,

|НоменклатураДокумента.КоличествоВДокументе КАК КоличествоВДокументе

|ИЗ

|НоменклатураДокумента КАК НоменклатураДокумента

|ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(

|&Период,

|(Номенклатура, Склад) В

|(ВЫБРАТЬ

|НоменклатураДокумента.Номенклатура,

|НоменклатураДокумента.Склад

|ИЗ

|НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки

|ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура

|И НоменклатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад

|

|УПОРЯДОЧИТЬ ПО

|ТоварыНаСкладахОстатки.Партия.Дата

|ИТОГИ

|МАКСИМУМ(СуммаВДокументе),

|СУММА(КоличествоОстаток),

|МАКСИМУМ(КоличествоВДокументе)

|ПО

|Номенклатура,

|Склад";

Запрос2.УстановитьПараметр("Период",МоментВремени());

//Последовательности.СебестоимостьПартийТоваров.УстановитьГраницу(МоментВремени());

//ГраницаМоментВремени = Последовательности.СебестоимостьПартийТоваров.ПолучитьГраницу();

Момент = Новый МоментВремени(Дата,Ссылка);

Отбор = Новый ТаблицаЗначений;

Отбор.Колонки.Добавить("Номенклатура");

Отбор.Добавить().Номенклатура = ТекНоменклатура;

Последовательности.СебестоимостьПартийТоваров.Восстановить(Момент,Отбор);

Движения.ТоварыНаСкладах.БлокироватьДляИзменения = Истина;

Движения.ТоварыНаСкладах.Записать();

РезультатЗапроса = Запрос2.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл //ИЗУЧИ ВОПРОС ВЫБОРКА В ВЫБОРКЕ ВыборкаДетальныеЗаписи.Выбрать( )

ВыборкаДетальныеЗаписиСклад = ВыборкаДетальныеЗаписи.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаДетальныеЗаписиСклад.Следующий() Цикл

ВыборкаДетальныеЗаписиПартии = ВыборкаДетальныеЗаписиСклад.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаДетальныеЗаписиПартии.Следующий() Цикл

Если ВыборкаДетальныеЗаписи.КоличествоВДокументе > ВыборкаДетальныеЗаписи.КоличествоОстаток Тогда

Сообщение = Новый СообщениеПользователю();

Сообщение.Текст = "Не хватает товара """

+ ВыборкаДетальныеЗаписи.Номенклатура

+ """,из необходимых "+ ВыборкаДетальныеЗаписи.КоличествоВДокументе

+ " в наличии осталось только " + ВыборкаДетальныеЗаписи.КоличествоОстаток;

Сообщение.УстановитьДанные(ЭтотОбъект);

Сообщение.Сообщить();

Отказ = Истина;

Движения.ТоварыНаСкладах.Записывать = Ложь;

КонецЕсли;

КонецЦикла;

КонецЦикла;

КонецЦикла;

Если Отказ Тогда

Возврат;

КонецЕсли;

ВыборкаДетальныеЗаписи.Сбросить();

//ТЗ = РезультатЗапроса.Выгрузить();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

ВыборкаДетальныеЗаписиСклад = ВыборкаДетальныеЗаписи.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

ОсталосьСписать = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

Пока ВыборкаДетальныеЗаписиСклад.Следующий() Цикл

ВыборкаДетальныеЗаписиПартии = ВыборкаДетальныеЗаписиСклад.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаДетальныеЗаписиПартии.Следующий() И ОсталосьСписать <> 0 Цикл

//Если ВыборкаДетальныеЗаписи.КоличествоОстаток <> 0 Тогда

Списать = Мин(ОсталосьСписать, ВыборкаДетальныеЗаписиПартии.КоличествоОстаток);

Себестоимость = Списать/ВыборкаДетальныеЗаписиПартии.КоличествоОстаток *

ВыборкаДетальныеЗаписиПартии.СуммаОстаток;

Движение = Движения.ТоварыНаСкладах.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Номенклатура =ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Склад =ВыборкаДетальныеЗаписиСклад.Склад;

Движение.Количество = Списать;

Если ВыборкаДетальныеЗаписи.КоличествоОстаток <> 0 Тогда

Движение.Сумма = Себестоимость;

КонецЕсли;

Движение.Партия = ВыборкаДетальныеЗаписиПартии.Партия;

ОсталосьСписать = ОсталосьСписать - Списать;

//КонецЕсли;

КонецЦикла;

КонецЦикла;

КонецЦикла;

Движения.Записать();

КонецПроцедуры

Yandex
Возможно, вас также заинтересует
Реклама на портале
Подсказка: Вы получили ответ на свой вопрос - закройте вопрос!
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.