Answers for "ex: 1C FIFO"

0

ex: 1C FIFO

Движения.ОстаткиНоменклатуры.Записывать = Истина;
Движения.Продажи.Записывать=Истина;

Движения.ОстаткиНоменклатуры.Записать();
Движения.Продажи.Записать();

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

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

Если МетодСписания = Перечисления.УчетнаяПолитика.ЛИФО Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВОЗР", "УБЫВ"); // если лифо - сортируем по УБЫВанию
КонецЕсли;

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

Пока ВыборкаНоменклатура.Следующий() Цикл

Если НЕ ВыборкаНоменклатура.Номенклатура.Услуга и ВыборкаНоменклатура.КоличествоОстаток < ВыборкаНоменклатура.КоличествоВДокументе Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не хватает " + Строка(ВыборкаНоменклатура.КоличествоВДокументе - ВыборкаНоменклатура.КоличествоОстаток) + " единиц номенклатуры " + ВыборкаНоменклатура.Номенклатура + ". Проведение невозможно.";
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;

Если Отказ Тогда
Продолжить;
КонецЕсли;

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

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

Если НЕ ВыборкаДетЗаписи.Номенклатура.Услуга Тогда

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

Если Средняя Тогда
СуммаСписания = ?(ВыборкаНоменклатура.КоличествоОстаток =КСписанию,
ВыборкаНоменклатура.СуммаОстаток,
ВыборкаНоменклатура.СуммаОстаток/ВыборкаНоменклатура.КоличествоОстаток * КСписанию);
Иначе
СуммаСписания = ?(ВыборкаДетЗаписи.КоличествоОстаток =КСписанию,
ВыборкаДетЗаписи.СуммаОстаток,
ВыборкаДетЗаписи.СуммаОстаток/ВыборкаДетЗаписи.КоличествоОстаток * КСписанию);
КонецЕсли;

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

НовоеДвижение = Движения.Продажи.Добавить();
НовоеДвижение.Активность = Истина;
НовоеДвижение.Период = Дата;
НовоеДвижение.Регистратор = Ссылка;
НовоеДвижение.Номенклатура = ВыборкаДетЗаписи.Номенклатура;
НовоеДвижение.Сумма = ВыборкаДетЗаписи.СуммаВДокументе;

Если НовоеДвижение.Номенклатура.Услуга Тогда
НовоеДвижение.Себестоимость = 0;
НовоеДвижение.Количество = ВыборкаНоменклатура.КоличествоВДокументе;
Иначе
НовоеДвижение.Количество = КСписанию;
НовоеДвижение.Себестоимость = СуммаСписания;
ОсталосьСписать = ОсталосьСписать - КСписанию;
КонецЕсли;

КонецЦикла;

КонецЦикла;
Posted by: Guest on March-08-2022

Browse Popular Code Answers by Language