Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
23 июн 2021, 09:19

Оперативный учёт

Автор gaur7, 30 мая 2017, 11:31

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

gaur7

Помогите разобраться в чём проблема?
При проведение расходной накладной в Предприятие 1С выдаёт ошибку (Поле объекта не обнаружено (КоличествоПартии)
Точка останова доходит до строчки (Если ВыборкаНоменклатуры.КоличествоВДокументе > ВыборкаНоменклатуры.КоличествоПартии Тогда)

Вот сам код Расходной Накладной:
----------------------------------------------------
Процедура ОбработкаПроведения(Отказ, РежимПроведения)

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

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

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

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

ТаблицаОстатков = Запрос.Выполнить().Выгрузить();

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

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

Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);

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


Для каждого СтрокаТоваров Из ТаблицаОстатков Цикл

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

ОтборСтрок = Новый Структура("Номенклатура", ВыборкаНоменклатуры.Номенклатура);
НайденныеСтроки = ТаблицаОстатков.НайтиСтроки(ОтборСтрок);

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

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


// Сформируем записи в регистре "ОстаткиНоменклатуры"
ВыборкаПартий = ВыборкаНоменклатуры.Выбрать();
ОсталосьСписать = ВыборкаНоменклатуры.Количество;

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

Если ВыборкаПартий.КоличествоПартии = 0 Тогда
Продолжить;
КонецЕсли;

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

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

ОсталосьСписать = ОсталосьСписать - КоличествоСписания;

СуммаСписанногоПоТовару = СуммаСписанногоПоТовару + Движение.Сумма;

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

КонецЦикла;


// Сформируем записи в регистре "Продажи"
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаНоменклатуры.Номенклатура;
Движение.Количество = ВыборкаНоменклатуры.Количество;
Движение.Себестоимость = СуммаСписанногоПоТовару;
Движение.СуммаПродаж = ВыборкаНоменклатуры.СуммаВДокументе;

ОбщаяСуммаПродаж = ОбщаяСуммаПродаж + Движение.СуммаПродаж;

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

КонецЦикла;

КонецЦикла;

КонецЦикла;


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


wise

Цитата: gaur7 от 30 мая 2017, 11:31Если ВыборкаНоменклатуры.КоличествоВДокументе > ВыборкаНоменклатуры.КоличествоПартии Тогда

Если ВыборкаНоменклатуры.КоличествоВДокументе > СтрокаТоваров.КоличествоПартии Тогда
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

gaur7

Спасибо, помогло!
Но теперь не проходит движение - записи в регистре "ОстаткиНоменклатуры"

Точка остановки доходит до: Пока ОсталосьСписать > 0 И ВыборкаПартий.Следующий() Цикл

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

wise

(2) :lol:



Цитата: gaur7 от 30 мая 2017, 13:04ВыборкаПартий = ВыборкаНоменклатуры.Выбрать();

посмотри отладчиком - ТипЗнч(ВыборкаНоменклатуры) и станет ВСЁ понятно...
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

gaur7

Мне это не помогло.:dfbsdfbsdf:

ТипЗнч(ВыборкаНоменклатуры)- Выборка из результата запроса
ВыборкаНоменклатуры - Значение (КоличествоВдокументе - 1, Номенклатура - Молоко, Ссылка - Расходная накладная)


wise

(4) а ты пишешь
Цитата: gaur7 от 30 мая 2017, 13:04ВыборкаПартий = ВыборкаНоменклатуры.Выбрать();

Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

gaur7

Я не совсем понимаю, что мне нужно написать то вместо (ВыборкаПартий = ВыборкаНоменклатуры.Выбрать();)
Я выполняю выборку партии из запроса же.

wise

(6) нет из таблицы значений
Цитата: gaur7 от 30 мая 2017, 11:31ТаблицаОстатков = Запрос.Выполнить().Выгрузить();

Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

Dethmontt

экстримальное программирование - "Методом ТЫКА"
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Теги:

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

Рейтинг@Mail.ru Rambler's Top100

Поиск