PDA

Просмотр полной версии : Последовательность. Восстановление



Krpolina1996
24.12.2018, 05:28
Процедура ОбработкаПроведения(Отказ, Режим)
// регистр ТоварыНаСкладах Расход
Движения.ТоварыНаСкладах.З аписывать = Истина;


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

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

Запрос.МенеджерВременныхТ� �блиц = МенеджерВТ;
Запрос.Текст = "ВЫБРАТЬ
| РасходнаяНакладнаяТовары.� �оменклатура КАК Номенклатура,
| РасходнаяНакладнаяТовары.� �клад КАК Склад,
| СУММА(РасходнаяНакладнаяТ� �вары.Количество) КАК КоличествоВДокументе,
| РасходнаяНакладнаяТовары.� �умма КАК СуммаВДокументе,
| РасходнаяНакладнаяТовары.� �сылка КАК Ссылка,
| РасходнаяНакладная.Дата КАК Дата
|ПОМЕСТИТЬ НоменклатураДокумента
|ИЗ
| Документ.РасходнаяНакладн� �я.Товары КАК РасходнаяНакладнаяТовары
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладн� �я КАК РасходнаяНакладная
| ПО РасходнаяНакладнаяТовары.� �сылка = РасходнаяНакладная.Ссылка
|ГДЕ
| РасходнаяНакладнаяТовары.� �сылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяТовары.� �оменклатура,
| РасходнаяНакладнаяТовары.� �клад,
| РасходнаяНакладнаяТовары.� �умма,
| РасходнаяНакладнаяТовары.� �оличество,
| РасходнаяНакладнаяТовары.� �сылка,
| РасходнаяНакладная.Дата";

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

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

Запрос2=Новый Запрос;
Запрос2.МенеджерВременныхТ аблиц = МенеджерВТ;
Запрос2.Текст = "ВЫБРАТЬ
| НоменклатураДокумента.Ном� �нклатура КАК Номенклатура,
| НоменклатураДокумента.Сум� �аВДокументе КАК СуммаВДокументе,
| ЕСТЬNULL(ТоварыНаСкладахОст� �тки.КоличествоОстаток, 0) КАК КоличествоОстаток,
| НоменклатураДокумента.Скл� �д КАК Склад,
| ЕСТЬNULL(ТоварыНаСкладахОст� �тки.СуммаОстаток, 0) КАК СуммаОстаток,
| ТоварыНаСкладахОстатки.Па� �тия КАК Партия,
| НоменклатураДокумента.Кол� �чествоВДокументе КАК КоличествоВДокументе
|ИЗ
| НоменклатураДокумента КАК НоменклатураДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыН� �Складах.Остатки(
| &Период,
| (Номенклатура, Склад) В
| (ВЫБРАТЬ
| НоменклатураДокумента.Ном� �нклатура,
| НоменклатураДокумента.Скл� �д
| ИЗ
| НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки
| ПО НоменклатураДокумента.Ном� �нклатура = ТоварыНаСкладахОстатки.Но� �енклатура
| И НоменклатураДокумента.Скл� �д = ТоварыНаСкладахОстатки.Ск� �ад
|
|УПОРЯДОЧИТЬ ПО
| ТоварыНаСкладахОстатки.Па� �тия.Дата
|ИТОГИ
| МАКСИМУМ(СуммаВДокументе),
| СУММА(КоличествоОстаток),
| МАКСИМУМ(КоличествоВДокум� �нте)
|ПО
| Номенклатура,
| Склад";
Запрос2.УстановитьПараметр ("Период",МоментВремени());
//Последовательности.Себест� �имостьПартийТоваров.Устан овитьГраницу(МоментВремен� �());
//ГраницаМоментВремени = Последовательности.Себест� �имостьПартийТоваров.Получ итьГраницу();


Момент = Новый МоментВремени(Дата,Ссылка);
Отбор = Новый ТаблицаЗначений;
Отбор.Колонки.Добавить("Номенклатура");
Отбор.Добавить().Номенклату ра = ТекНоменклатура;
Последовательности.Себест� �имостьПартийТоваров.Восст ановить(Момент,Отбор);

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

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

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

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

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

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

Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не хватает товара """
+ ВыборкаДетальныеЗаписи.Но� �енклатура
+ """,из необходимых "+ ВыборкаДетальныеЗаписи.Ко� �ичествоВДокументе
+ " в наличии осталось только " + ВыборкаДетальныеЗаписи.Ко� �ичествоОстаток;

Сообщение.УстановитьДанны� �(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина;
Движения.ТоварыНаСкладах.З аписывать = Ложь;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;

Если Отказ Тогда
Возврат;
КонецЕсли;

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


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


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



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

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


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

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

Движение = Движения.ТоварыНаСкладах.Д обавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Рас� �од;
Движение.Период = Дата;
Движение.Номенклатура =ВыборкаДетальныеЗаписи.Но менклатура;
Движение.Склад =ВыборкаДетальныеЗаписиСк� �ад.Склад;
Движение.Количество = Списать;
Если ВыборкаДетальныеЗаписи.Ко� �ичествоОстаток <> 0 Тогда
Движение.Сумма = Себестоимость;
КонецЕсли;

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

ОсталосьСписать = ОсталосьСписать - Списать;
//КонецЕсли;
КонецЦикла;
КонецЦикла;

КонецЦикла;

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

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

Не работает последовательность. Не пойму в чем дело