@Pepper1

Как реализовать контроль остатков в 1С?

Изучаю реализацию контроля остатков в 1С, по всем примерам делаю вроде, но результаты чтетны. Помогите, подскажите, что не так?

Документы: ПолучениеУчебников и РеализацияУчебников
Табличные части: Учебники
Регистр накопления: ОстаткиУчебников

Код отрабатывает без ошибок, но не отображает остаток.
Вот код:

Процедура ОбработкаПроведения(Отказ, Режим)

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



Если Режим = РежимПроведенияДокумента.Оперативный Тогда





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

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

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

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

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

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


КонецЦикла;

Сообщить (Режим); Сообщить (ВыборкаДетальныеЗаписи.Количество());

КонецЕсли;

КонецПроцедуры
  • Вопрос задан
  • 2337 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Dementor
программист, архитектор, аналитик
Что значит "результаты чтетны"?

Из того что я вижу (как я понимаю это модуль объекта документа РеализацияУчебников, а что творится в модуле объекта документа ПолучениеУчебников и модуля набора записей регистра ОстаткиУчебников остается неизвестным) хочу отметить несколько моментов:

1) В модулях объектов не принято писать вызов метода Сообщить(). И не только потому, что он устаревший и не рекомендуется к использованию (вместо него нужно использовать объект СообщениеПользователю), а поскольку нет 100% вероятности, что данное сообщение будет показано и прочитано - к примеру при работе регламентного задания.

2) Если у вашего документа запрещено оперативное проведение, то блок в условии "Режим = РежимПроведенияДокумента.Оперативный" не будет выполнен.

3) В вашей логике пропущена запись набора движения до выполнения запроса. Команда "Движения.ОстатокУчебников.Записывать = Истина;" говорит лишь о том, что при завершении процедуры проведения записи из свойства Движения.ОстатокУчебников необходимо записать в базу данных. Но, если вы в рамках проведения хотите запросом проверять измененное состояние в базе, то проводки перед этим стоит записать явно методом Записать().
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы