Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
12 дек 2024, 22:58

Проблема с записью в регистр накопления

Автор Андрей Бутенко, 12 сен 2022, 13:05

0 Пользователей и 1 гость просматривают эту тему.

Андрей Бутенко

Здравствуйте! При решении задачи по списанию товаров по партиям возникла ситуация. Расходная накладная записывается и проводится без ошибок, но в регистре не отображается. Подскажите пожалуйста, где я ошибся? Процедура ОбработкаПроведения(Отказ, Режим)

Движения.ОстаткиТоваров.Записывать = Истина;
// Создаем новый менеджерВременныхТаблиц
МенеджерВТ = Новый МенеджерВременныхТаблиц;

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

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

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


Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();
//#КонецОбласти

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

Движения.ОстаткиТоваров.Записать();
Запрос2.УстановитьПараметр("МоментВремени", МоментВремени());
Запрос2.УстановитьПараметр("Склад", Склад);   //
//
РезультатЗапроса = Запрос2.Выполнить();

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

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

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

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

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

СуммаСписания = ?(ВыборкаДетЗаписи.Остаток =КСписанию,
ВыборкаДетЗаписи.Стоимость,
ВыборкаДетЗаписи.Стоимость/ВыборкаДетЗаписи.Остаток * КСписанию);

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

LexaK

Андрей Бутенко, но мы всех ваших настроек не знаем,
попробуйте перед выходом из процедуры проведения выполнить команду записи

    ...
    Движения.ОстаткиТоваров.Записать();

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

или у вас условия не выполняются и записи в регистр не добавляются,
посмотрите под отладчиком, как у вас набор записей формируется
и формируется ли?
если помогло нажмите: Спасибо!

Андрей Бутенко

LexaK, получается что не срабатывает внутренний цикл где должно быть движение. Не подскажете, что там может быть не так?

LexaK

Андрей Бутенко, эээ, у вас там ошибка в логике программы! кроме вас эту логику ни кто не знает!  :fdbsdfbsd:
как и что тут можно подсказать?
такие проводки, (обработку проведения) которую делаете вы, ни кто не делает!

если помогло нажмите: Спасибо!

Андрей Бутенко

LexaK, Я уже понял что не работает мой код. Можете подсказать как надо делать проводку в моем случае?

LexaK

Андрей Бутенко, самое простое и правильное  - попробуйте взять какой нибудь учебник по 1С найти в нем пример учет и движения товара по партиям и воспроизвести его в свой базе, проанализировать каждую команду, каждый запрос, понять методику и логику учета.
после этого сможете с успехом применять подобные решения в своих задачах!
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск