Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 ноя 2022, 14:03

Поле объекта не обнаружено (Сумма) при проведении документа Реализации

Автор НикNik, 11 июн 2022, 19:31

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

НикNik

Всем доброго времени суток. При проведении документа РЕАЛИЗАЦИИ выходит следующая ошибка "Поле объекта не обнаружено (Сумма)". В модуле данного документа реквизит СУММА есть (прилагаю скрин). Подскажите пожалуйста, почему при записи в регистр накопления ОстакиТовара программа не видит реквизит СУММА из документа РЕАЛИЗАЦИИ.

 
Никогда не поздно учиться...

alexandr_ll

НикNik, Приведите всю процедуру проведения. Делайте это не снимком экрана, а скопируйте текст процедуры и вставьте его как код 1С.

НикNik

Спасибо, что подсказали, вот:

//Получаем метод списания себестоимости
МетодСписанияСебестоимости = УчетнаяПолитика.МетодСписанияСебестоимости(Дата);


Если МетодСписанияСебестоимости = Неопределено Тогда 

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не указан метод списания себестоимости в учетной политике";
Сообщение.Сообщить();

Отказ = Истина;
Возврат;

КонецЕсли; 

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

//Взводим флажок
Движения.ОстаткиТоваров.Записывать = Истина;

//Блокировка данных
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиТоваров");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = Товары;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
Блокировка.Заблокировать();

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

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

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

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

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

Если ВыборкаНоменклатура.Количество > ВыборкаНоменклатура.КоличествоОстаток Тогда 

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

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = СтрШаблон("Недостаточно товара %1 в количестве %2",
ВыборкаНоменклатура.НоменклатураПредставление,
ВыборкаНоменклатура.Количество - ВыборкаНоменклатура.КоличествоОстаток);
Сообщение.Сообщить();

КонецЕсли;

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

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

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

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

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

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

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

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

Если КоличествоСписать <= 0 Тогда
Прервать;
КонецЕсли;
 
КонецЦикла; 

КонецЦикла;


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

//Регистр Продажи
Движения.Продажи.Записывать = Истина;

СписаннаяСебестоимость = 0;

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

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

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

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

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

СписаннаяСебестоимость = СписаннаяСебестоимость + Движение.СуммаПоступления;


КонецЕсли;

КонецЦикла;

КонецЦикла;

Никогда не поздно учиться...

alexandr_ll

НикNik, У вас в запросе по документам Реализация не задан параметр Сумма, только Номенклатура и Количество. Когда приводите текст модуля, оформляйте его как код 1С (Кнопка "1С")

НикNik

alexandr_ll, разве СУММУ нельзя вытащить из табличной части документа РЕАЛИЗАЦИИ в регистр накопления, так же, как ПАРТИЯ и НОМЕНКЛАТУРА с помощью ВыборкаДетальныеЗаписи ? Наверное нельзя, из-за того, что ПАРТИЯ и НОМЕНКЛАТУРА это ссылки, а сумма - это число, я правильно думаю?
Никогда не поздно учиться...

alexandr_ll

НикNik, Параметр Номенклатура есть в запросе по документам Реализации
   "ВЫБРАТЬ
   |   РеализацияТоваровТовары.Номенклатура КАК Номенклатура,

Партия не является реквизитом документа, этот параметр получаете из запроса по остаткам
   |   ОстаткиТоваровОстатки.Партия КАК ПартияА вот параметру Сумма взяться неоткуда, и неважно число он или ссылка.

НикNik

alexandr_ll, спасибо вам за ответ. Ошибка больше не выскакивает.

//Получаем метод списания себестоимости
МетодСписанияСебестоимости = УчетнаяПолитика.МетодСписанияСебестоимости(Дата);


Если МетодСписанияСебестоимости = Неопределено Тогда 

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не указан метод списания себестоимости в учетной политике";
Сообщение.Сообщить();

Отказ = Истина;
Возврат;

КонецЕсли; 

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

//Взводим флажок
Движения.ОстаткиТоваров.Записывать = Истина;

//Блокировка данных
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиТоваров");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = Товары;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
Блокировка.Заблокировать();

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

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

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

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

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

Если ВыборкаНоменклатура.Количество > ВыборкаНоменклатура.КоличествоОстаток Тогда 

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

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = СтрШаблон("Недостаточно товара %1 в количестве %2",
ВыборкаНоменклатура.НоменклатураПредставление,
ВыборкаНоменклатура.Количество - ВыборкаНоменклатура.КоличествоОстаток);
Сообщение.Сообщить();

КонецЕсли;

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

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

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

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

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

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

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

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

Если КоличествоСписать <= 0 Тогда
Прервать;
КонецЕсли;
 
КонецЦикла; 

КонецЦикла;


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

//Регистр Продажи
Движения.Продажи.Записывать = Истина;

СписаннаяСебестоимость = 0;

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

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

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

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

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

СписаннаяСебестоимость = СписаннаяСебестоимость + Движение.СуммаПоступления;


КонецЕсли;

КонецЦикла;

КонецЦикла; 
Никогда не поздно учиться...

Теги:

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

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

Поиск