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

Ошибка при выполнении обработчика - 'ОбработкаПроведения': Поле объекта не обнаружено (Выручка)

Автор Alexandroid, 21 мар 2023, 21:25

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

Alexandroid

Доброго времени суток. Изучаю сейчас курс по программированию 1C. При выполнении домашнего задания наткнулся на ошибку (хотя проверку на синтаксис ошибок написанный код проходит). Проблема именно во время отладки (запуска) конфигурации при попытке провести торговые документы Реализации товаров появляется данная ошибка. Когда писали этот курс всё проходило без проблем, но сейчас, когда платформа обновлялась с годами, видимо правило (метод) написания изменился, сам не пойму в чём дело. Уже пытался искать ответ по интернету и поиску форума, не нашёл.
1С:Предприятие 8.3, учебная версия (8.3.22.1709).

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

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

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

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

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

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

Если НЕ РезультатЗапроса.Пустой() Тогда

Отказ = Истина;

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

Сообщить("В документе "+Ссылка+" образовались отрицательные остатки");

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить("По номенклатуре "+ВыборкаДетальныеЗаписи.Номенклатура+" остаток "+ВыборкаДетальныеЗаписи.Количество);
КонецЦикла;

КонецЕсли;

КонецЕсли;

Если Отказ Тогда
Возврат;
КонецЕсли;

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

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

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

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

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

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

Для каждого Движение Из Движения.ОстаткиТоваров Цикл

Если Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура Тогда

Движение.Сумма = Движение.Количество * ВыборкаДетальныеЗаписи.Сумма/ВыборкаДетальныеЗаписи.Количество;

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

КонецЕсли;

КонецЦикла;

КонецЦикла;


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

Реквизит Выручка был создан в регистре накопления Продажи. Я прикреплю файл с Информационной базой, надеюсь это не нарушает правил форума.

С уважением, Александр.


Rettro

Alexandroid, Проверь движения реализации по регистру "ОстаткиТоваров", скорее всего там нет реквизита "Выручка".

Alexandroid

Rettro, Благодарю за решение, дублирование реквизита помогло решить ошибку (только понять не могу, для чего так было необходимо сделать).
У меня возник вопрос, в регистрах накопления "Продажи" и "ОстаткиТоваров" я создал "ФормыСписка", чтобы в режиме отладки 1С:Предприятие в "функциях для технического специалиста" регистры накопления Продаж и Остатки товаров не отображался реквизит "Выручка" (был скрыт). Можно так делать? И будет ли он учитываться при расчётах выручки в дальнейшем без видимости?

Kvark5d

Alexandroid,
1.судя по второму запросу:
Цитата: Alexandroid от 21 мар 2023, 21:25Запрос.Текст = "ВЫБРАТЬ | ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура, | ОстаткиТоваровОстатки.КоличествоОстаток КАК Количество, | ОстаткиТоваровОстатки.СуммаОстаток КАК Сумма

у регистра ОстаткиТоваров уже есть реквизит для суммы (Сумма)
А значит не надо было добавлять реквизит выручка в этот регистр,а в строке:
Цитата: Alexandroid от 21 мар 2023, 21:25Движение.Выручка = ТекСтрокаТовары.Сумма;
заменить Выручка на Сумма
т.е. Движение.Сумма= ТекСтрокаТовары.Сумма;

2. На созданной форме списка просто удалить не нужные колонки - и они не будут отображаться.
Причем видимость колонки никак не влияет на ее использование при расчетах.

Alexandroid

Kvark5d, Изменил как предложили, ошибка тоже пропала. А разве если не писать движение Выручка в таком случае, я не объявляю эту переменную реквизита, что она вообще есть? Посмотрел схему компановки данных отчёта "ЗакупкиТоваров" – Сумма действительно считается реквизитом создаваемой при отчёте.

Я только первый месяц в направлении 1C. Механизмы встроенного языка, языка запросов, языка выражений СКД (определённых условий) — путаюсь ещё в них. Только когда сейчас я начал углубляться в теорию этой платформы (для работы в этом направлении) осознал, что система 1С:Предприятие ничем не уступает другим языкам программирования, по своему хороша и познавательна.

Kvark5d

Alexandroid, Вот эти два предложения вообще не понятны:
Цитата: Alexandroid от 23 мар 2023, 22:57А разве если не писать движение Выручка в таком случае, я не объявляю эту переменную реквизита, что она вообще есть?

"Движение.Выручка" это в контексте попытка обратиться к измерению (ресурсу) Выручка регистра Остатки. Но у регистра его нет. Измерения, ресурсы регистров строго описаны в конфигурации и не могут быть изменены, добавлены, удалены программно. По сути это попытка получить колонку таблицы, которой там нет.
Цитата: Alexandroid от 23 мар 2023, 22:57Посмотрел схему компановки данных отчёта "ЗакупкиТоваров" – Сумма действительно считается реквизитом создаваемой при отчёте.
Отчет ничего не создает, он просто выводит данные.

Теги:

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

Рейтинг@Mail.ru

Поиск