новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума
krpolina1996
Приватное сообщение

Помощь с регистрами накопления

2 |  0
18 декабря 2018 в 05:11:47 (5 лет 19 недель 4 дня назад)
Текст задания
Здравствуйте!Помогите,пожалуйста с задачей..
Задание 1.
Создать пустую конфигурацию.
Создать справочники "Номенклатура", "Склады".
Организовать количественно-суммовой учёт товара в регистре
"ТоварыНаСкладах". Измерения "Номенклатура" и "Склад" Ресурсы:
"Сумма", "Количество".

Создать документ "Приходная накладная" Реквизиты шапки: "Склад"
Табличная часть: "Товары". Реквизиты табличной части: Номенклатура,
Количество, Цена, Сумма. Документ делает приход товара в регистр.
Создать документ "Расходная накладная". Реквизитов в шапке нет.
Табличная часть "товары" содержит реквизиты: номенклатура, склад,
количество, цена, сумма. (Склад в табличной части, следовательно
документом можно продать товары с нескольких складов).

В конфигурации документах и в регистрах все суммы (сумма и цена)
имеют измерения [15,2] что означает длина 15, знаков после запятой 2.
Количество везде имеет измерение [15,3]
Документ Расхродная накладная списывает товары со складов по
себестоимости (определяет стоимость товара в регистре и делает
движение "расход"). Если товара на складе не хватает, документ
сообщает об этом и не проводится.
Задание делать на управляемых формах. Форму создать пока одну для документа "Расходная накладная"
на неё стандартными методами вывести ссылку на движения по регистру "Товары на складах" для удобства отладки.


Вроде себестоимость считает правильно, но проблема с регистром накопления, считает не правильно 1)сумма остаток и 2) количество остаток

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

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

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

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

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

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

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

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



Движения.ТоварыНаСкладах.БлокироватьДляИзменения = Истина;
//////
Движения.ТоварыНаСкладах.Записать();
////
РезультатЗапроса = Запрос.Выполнить();

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

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

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

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


КонецЦикла;

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

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

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

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

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

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

Отказ = Истина;
//КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
0
Отклики (5)