есть код по списанию остатка по регистпу в накладной:
как прописать параметр ПечОстатокТовара, чтобы в печатной форме накладной выходил текущий остаток?
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ТоварыОрганизацийБУ");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = Товары;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
Блокировка.Заблокировать();
МетодСписания = РегистрыСведений.МетодСписанияТоваров.ПолучитьПоследнее(Дата).МетодСписания;
Если МетодСписания.Пустая()Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не указан метод списания! Проведение не возможно";
Отказ = Истина;
Возврат;
КонецЕсли;
Средняя = МетодСписания = Перечисления.УчетнаяПолитика.Средняя;
Движения.ТоварыОрганизацийБУ.Записывать = Истина;
Движения.Продажи.Записывать=Истина;
Движения.ТоварыОрганизацийБУ.Записать();
Движения.Продажи.Записать();
Запрос = Новый Запрос("ВЫБРАТЬ
| РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
| СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество,
| СУММА(РеализацияТоваровУслугТовары.Сумма) КАК Сумма
|ПОМЕСТИТЬ ВТ
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РеализацияТоваровУслугТовары.Номенклатура
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ВТ.Номенклатура КАК Номенклатура,
| ВТ.Количество КАК КоличествоВДокументе,
| ВТ.Сумма КАК СуммаВДокументе,
| ТоварыОрганизацийБУОстатки.Партия,
| ЕСТЬNULL(ТоварыОрганизацийБУОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
| ЕСТЬNULL(ТоварыОрганизацийБУОстатки.СуммаОстаток, 0) КАК СуммаОстаток
|ИЗ
| ВТ КАК ВТ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизацийБУ.Остатки(
| &МоментВремени,
| Номенклатура В
| (ВЫБРАТЬ
| ВТ.Номенклатура
| ИЗ
| ВТ КАК ВТ)) КАК ТоварыОрганизацийБУОстатки
| ПО ВТ.Номенклатура = ТоварыОрганизацийБУОстатки.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| ТоварыОрганизацийБУОстатки.Партия.МоментВремени ВОЗР
|ИТОГИ
| МАКСИМУМ(КоличествоВДокументе),
| МАКСИМУМ(СуммаВДокументе),
| СУММА(КоличествоОстаток),
| СУММА(СуммаОстаток)
|ПО
| Номенклатура");
Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Запрос.УстановитьПараметр("Ссылка",Ссылка);
Если МетодСписания = Перечисления.УчетнаяПолитика.ЛИФО Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВОЗР", "УБЫВ"); // если лифо - сортируем по УБЫВанию
КонецЕсли;
ВыборкаНоменклатура = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаНоменклатура.Следующий() Цикл
Если НЕ ВыборкаНоменклатура.Номенклатура.Услуга и ВыборкаНоменклатура.КоличествоОстаток < ВыборкаНоменклатура.КоличествоВДокументе Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не хватает " + Строка(ВыборкаНоменклатура.КоличествоВДокументе - ВыборкаНоменклатура.КоличествоОстаток) + " единиц номенклатуры " + ВыборкаНоменклатура.Номенклатура + ". Проведение невозможно.";
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
Если Отказ Тогда
Продолжить;
КонецЕсли;
ОсталосьСписать = ВыборкаНоменклатура.КоличествоВДокументе;
ВыборкаДетЗаписи = ВыборкаНоменклатура.Выбрать();
Пока ВыборкаДетЗаписи.Следующий() И ОсталосьСписать <> 0 Цикл
Если НЕ ВыборкаДетЗаписи.Номенклатура.Услуга Тогда
КСписанию = Мин(ОсталосьСписать, ВыборкаДетЗаписи.КоличествоОстаток);
Если Средняя Тогда
СуммаСписания = ?(ВыборкаНоменклатура.КоличествоОстаток = КСписанию,
ВыборкаНоменклатура.СуммаОстаток,
ВыборкаНоменклатура.СуммаОстаток/ВыборкаНоменклатура.КоличествоОстаток * КСписанию);
Иначе
СуммаСписания = ?(ВыборкаДетЗаписи.КоличествоОстаток = КСписанию,
ВыборкаДетЗаписи.СуммаОстаток,
ВыборкаДетЗаписи.СуммаОстаток/ВыборкаДетЗаписи.КоличествоОстаток * КСписанию);
КонецЕсли;
НовоеДвижение = Движения.ТоварыОрганизацийБУ.ДобавитьРасход();
НовоеДвижение.Организация = Организация;
НовоеДвижение.Период = Дата;
НовоеДвижение.Регистратор = Ссылка;
НовоеДвижение.Количество = КСписанию;
НовоеДвижение.Номенклатура = ВыборкаДетЗаписи.Номенклатура;
Если НЕ Средняя Тогда
НовоеДвижение.Партия = ВыборкаДетЗаписи.Партия;
КонецЕсли;
НовоеДвижение.Сумма = СуммаСписания;
КонецЕсли;
НовоеДвижение = Движения.Продажи.Добавить();
НовоеДвижение.Активность = Истина;
НовоеДвижение.Период = Дата;
НовоеДвижение.Регистратор = Ссылка;
НовоеДвижение.Номенклатура = ВыборкаДетЗаписи.Номенклатура;
НовоеДвижение.Сумма = ВыборкаДетЗаписи.СуммаВДокументе;
Если НовоеДвижение.Номенклатура.Услуга Тогда
НовоеДвижение.Себестоимость = 0;
НовоеДвижение.Количество = ВыборкаНоменклатура.КоличествоВДокументе;
Иначе
НовоеДвижение.Количество = КСписанию;
НовоеДвижение.Себестоимость = СуммаСписания;
НовоеДвижение.Наценка = НовоеДвижение.Сумма - НовоеДвижение.Себестоимость;
НовоеДвижение.НаценкаПроцент = ((НовоеДвижение.Сумма / НовоеДвижение.Себестоимость) *100 ) - 100;
ОсталосьСписать = ОсталосьСписать - КСписанию;
КонецЕсли;
КонецЦикла;
Показатькак прописать параметр ПечОстатокТовара, чтобы в печатной форме накладной выходил текущий остаток?
Прикрепленные файлы:
По теме из базы знаний
- Заполнение табличной части документа "Требование-накладная" по остаткам МПЗ на складе для БП 2.0
- БП 3.0 (УФ) Заполнение требования-накладной остатками ТМЦ по складу с отборами по счетам и номенклатурам
- Заполнение требования-накладной по остаткам на складе
- Закрытие отрицательных остатков продажей товаров между собственными организациями. 1С: УНФ 1.6
- Анализ продаж и Автоматическое перемещение товаров по накладной и между складами с отбором по виду, производителю и колонками Продано и Остаток
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Вопрос напоминает детскую задачку: "Поезд из А в Б идет 2 часа. Сколько лет машинисту?".
Сначала привел модуль проведения документа. Потом вопрос: "А как изменить печать?"
Для начала найдите существующую процедуру печати. Над ней нужно думать, что добавить.
Сначала привел модуль проведения документа. Потом вопрос: "А как изменить печать?"
Для начала найдите существующую процедуру печати. Над ней нужно думать, что добавить.
пишу в процедуру печати
ругается
Пока ВыборкаСтрокТовары.Следующий() Цикл
НомерСтроки = НомерСтроки + 1;
//Остатки в Накладной
//В поиске "РегистрыНакопления Остатки"
ПечОстатокТовара = 0;
Остатки = РегистрыНакопления.ТоварыОрганизацийБУ;
Фильтр = Новый Структура;
Фильтр.Вставить("Номенклатура",ОбластьСтрокаТаблицы.Параметры.Товар);
//ТабОстатков = Остатки.Остатки(Фильтр, "Номенклатура", "Количество");
ТабОстатков = Остатки.Остатки(Фильтр,"Номенклатура", "Количество");
//Результат (Для избежания ошибки в случае пустого массива)
Если ТабОстатков.Количество()<>0 Тогда
КоличествоФакт = ТабОстатков[0].Количество;
Иначе
КоличествоФакт=0;
КонецЕсли;
ОбластьСтрокаТаблицы.Параметры.ПечОстатокТовара=КоличествоФакт;
//
ОбластьСтрокаТаблицы.Параметры.Заполнить(ВыборкаСтрокТовары);
ОбластьСтрокаТаблицы.Параметры.НомерСтроки = НомерСтроки;
ОбластьСтрокаТаблицы.Параметры.Товар = ?(ЗначениеЗаполнено(СокрЛП(ВыборкаСтрокТовары.Товар)), СокрЛП(ВыборкаСтрокТовары.Товар), ВыборкаСтрокТовары.Номенклатура);
Показатьругается
ошибка |
---|
{Документ.РеализацияТоваровУслуг.МодульМенеджера(2484)}: Ошибка при вызове метода контекста (Остатки)
ТабОстатков = Остатки.Остатки(Фильтр,"Номенклатура", "Количество"); по причине: Несоответствие типов (Параметр номер ""1"") |
(4) "Несоответствие типов (Параметр номер ""1"")"
У метода Остатки() первый параметр это "МоментВремени". И остальные "не в дугу".
ТабОстатков = РегистрыНакопления.ТоварыОрганизацийБУ(, ВыборкаСтрокТовары.Склад, ВыборкаСтрокТовары.Товар, и т.д.)
Замечания:
- правильно это делать одним запросом, до начала цикла. Извлечь все товары документа.
- За "Фильтр.Вставить("Номенклатура",ОбластьСтрокаТаблицы.Параметры.Товар)" руки оторвал бы.
У метода Остатки() первый параметр это "МоментВремени". И остальные "не в дугу".
ТабОстатков = РегистрыНакопления.ТоварыОрганизацийБУ(, ВыборкаСтрокТовары.Склад, ВыборкаСтрокТовары.Товар, и т.д.)
Замечания:
- правильно это делать одним запросом, до начала цикла. Извлечь все товары документа.
- За "Фильтр.Вставить("Номенклатура",ОбластьСтрокаТаблицы.Параметры.Товар)" руки оторвал бы.
код |
---|
Пока ВыборкаСтрокТовары.Следующий() Цикл
НомерСтроки = НомерСтроки + 1; //Остатки в Накладной ПечОстатокТовара = 0; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТоварыОрганизацийБУОстатки.Номенклатура, | ПРЕДСТАВЛЕНИЕ(ТоварыОрганизацийБУОстатки.Номенклатура), | ТоварыОрганизацийБУОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ТоварыОрганизацийБУ.Остатки КАК ТоварыОрганизацийБУОстатки"; РезультатЗапроса = Запрос.Выполнить(); Остатки = РегистрыНакопления.ТоварыОрганизацийБУ; Фильтр = Новый Структура; Фильтр.Вставить("Номенклатура",ОбластьСтрокаТаблицы.Параметры.Товар); //ТабОстатков = Остатки.Остатки(Фильтр,"Номенклатура", "Количество"); ТабОстатков = Остатки.Остатки(, ВыборкаСтрокТовары.Товар, "Номенклатура", "Количество"); Если ТабОстатков.Количество()<>0 Тогда ПечОстатокТовара = ТабОстатков[0].Количество; Иначе ПечОстатокТовара=0; КонецЕсли; //ОбластьСтрокаТаблицы.Параметры.КоличествоОстаток=КоличествоОстаток; ОбластьСтрокаТаблицы.Параметры.ПечОстатокТовара=ПечОстатокТовара; // ОбластьСтрокаТаблицы.Параметры.Заполнить(ВыборкаСтрокТовары); ОбластьСтрокаТаблицы.Параметры.НомерСтроки = НомерСтроки; ОбластьСтрокаТаблицы.Параметры.Товар = ?(ЗначениеЗаполнено(СокрЛП(ВыборкаСтрокТовары.Товар)), СокрЛП(ВыборкаСтрокТовары.Товар), ВыборкаСтрокТовары.Номенклатура); Если ВыводитьКоды Тогда ОбластьСтрокаТаблицы.Параметры.КодАртикул = ВыборкаСтрокТовары.КодАртикул; КонецЕсли; ТабДокумент.Вывести(ОбластьСтрокаТаблицы); Сумма = Сумма + ВыборкаСтрокТовары.Сумма + ?((ДанныеДокументов.УчитыватьАкциз И НЕ ДанныеДокументов.СуммаВключаетАкциз), ВыборкаСтрокТовары.СуммаАкциза, 0); СуммаНДС = СуммаНДС + ВыборкаСтрокТовары.СуммаНДС; КонецЦикла; |
{Документ.РеализацияТоваровУслуг.МодульМенеджера(2493)}: Ошибка при вызове метода контекста (Остатки)
ТабОстатков = Остатки.Остатки(, ВыборкаСтрокТовары.Товар, "Номенклатура", "Количество");
по причине:
Несоответствие типов (параметр номер '2')
при замене
ТабОстатков = Остатки.Остатки(, ВыборкаСтрокТовары.Товар, "Номенклатура", "Количество");
на
ТабОстатков = Остатки.Остатки(, ВыборкаСтрокТовары.Склад, ВыборкаСтрокТовары.Товар, "Номенклатура", "Количество");
ругань на реквизит склад
РегистрБухгалтерииМенеджер.<Имя регистра бухгалтерии> (AccountingRegisterManager.<Имя регистра бухгалтерии>)
Остатки (Balance)
Синтаксис:
Остатки(<МоментВремени>, <ВидыСубконто>, <Отбор>, <Измерения>, <Ресурсы>)
Ошибку сам найдёшь?
Остатки (Balance)
Синтаксис:
Остатки(<МоментВремени>, <ВидыСубконто>, <Отбор>, <Измерения>, <Ресурсы>)
Ошибку сам найдёшь?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот