Изучаю реализацию контроля остатков в 1С, по всем примерам делаю вроде, но результаты чтетны. Помогите, подскажите, что не так?
Документы: ПолучениеУчебников и РеализацияУчебников
Табличные части: Учебники
Регистр накопления: ОстаткиУчебников
Код отрабатывает без ошибок, но не отображает остаток.
Вот код:
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстатокУчебников.Записывать = Истина;
Для Каждого ТекСтрокаУчебники Из Учебники Цикл
Движение = Движения.ОстатокУчебников.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Учебники = ТекСтрокаУчебники.Наименование;
Движение.Количество = ТекСтрокаУчебники.Количество;
КонецЦикла;
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстатокУчебниковОстатки.Учебники,
| ОстатокУчебниковОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстатокУчебников.Остатки(
| ,
| Учебники В
| (ВЫБРАТЬ
| РеализацияУчебниковУчебники.Наименование.Ссылка
| ИЗ
| Документ.РеализацияУчебников.Учебники КАК РеализацияУчебниковУчебники
| ГДЕ
| РеализацияУчебниковУчебники.Наименование.Ссылка = &Ссылка)) КАК ОстатокУчебниковОстатки
|ГДЕ
| ОстатокУчебниковОстатки.КоличествоОстаток < 0";
Из того что я вижу (как я понимаю это модуль объекта документа РеализацияУчебников, а что творится в модуле объекта документа ПолучениеУчебников и модуля набора записей регистра ОстаткиУчебников остается неизвестным) хочу отметить несколько моментов:
1) В модулях объектов не принято писать вызов метода Сообщить(). И не только потому, что он устаревший и не рекомендуется к использованию (вместо него нужно использовать объект СообщениеПользователю), а поскольку нет 100% вероятности, что данное сообщение будет показано и прочитано - к примеру при работе регламентного задания.
2) Если у вашего документа запрещено оперативное проведение, то блок в условии "Режим = РежимПроведенияДокумента.Оперативный" не будет выполнен.
3) В вашей логике пропущена запись набора движения до выполнения запроса. Команда "Движения.ОстатокУчебников.Записывать = Истина;" говорит лишь о том, что при завершении процедуры проведения записи из свойства Движения.ОстатокУчебников необходимо записать в базу данных. Но, если вы в рамках проведения хотите запросом проверять измененное состояние в базе, то проводки перед этим стоит записать явно методом Записать().
Здесь проблема в запросе! То что Вы указали и без всего записывает в бд. Делаю простой запрос типа: Запрос.Текст =
"ВЫБРАТЬ
| ОстатокУчебниковОстатки.Учебники,
| ОстатокУчебниковОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстатокУчебников.Остатки КАК ОстатокУчебниковОстатки
|ГДЕ
| ОстатокУчебниковОстатки.КоличествоОстаток < 0";
Все работает, но при достижении у кого наименования учебника отрицательного значения - все перестает проводить. Проблема во вложенном запросе. Если знаете, то помогите...
Pepper1, согласен подзапрос написан несколько бредово.
Во первых, неправильное условие отбора; должно быть так:
"ГДЕ РеализацияУчебниковУчебники.Ссылка = &Ссылка".
Во вторых, что вы выбираете? У вас действительно в табличной части учебников ссылка на учебник названа НАИМЕНОВАНИЕ??? Мне кажется, что там у вас какая-то вспомагательная информация (если такое поле вообще существует). А правильным должно быть что-то такое:
"ВЫБРАТЬ РеализацияУчебниковУчебники.Учебник".
Pepper1, это Гилев такое пример придумал? Тот который Евгений? Ну-ну...
Главную ошибку поняли из моего предыдущего комментария? Из условия нужно удалить слово НАИМЕНОВАНИЕ - просто ССЫЛКА.
Учебники - это у вас строка, которую вы каждый раз вносите вручную со всеми ISBN в надежде не сделать опечатку? Срочно переделать на использование справочника. Тогда из табличных частей документов Получения и Реализации учебников удалить строковый реквизит Наименование, а сделать новый реквизит Учебник, типа СправочникСсылка.Учебники. Реквизит Учебники из регистра ОстаткиУчебников переделать из типа Строка на тип СправочникСсылка.Учебники. И тогда строчка, которую я дал в прошлом комментарии будет верной. Если вы мазохист и любите много печатать, то в вашем варианте достаточно исправить "Выбрать РеализацияУчебниковУчебники.Наименование.Ссылка" на просто "Выбрать РеализацияУчебниковУчебники.Наименование"