Как подтянуть остатки из регистра в документ?
Доброго времени суток дамы и господа!
Есть документОснование, в котором есть позиции номенклатуры, он пишет сведения об остатках в регистр накопления(наименование, номерПартии, колличество)
Есть документ ОтгрузочнаяНакладная, создаётся на основании ДокументаОснования, суть вопроса в том, чтобы выводить актуальные остатки при создании на основании.
Скрины документов и состава регистра прилагаются.
С запросами тяжковато, сам понимаю, пока только такое выдумал:
Подскажите как гармотнее это обработать в запросе...
Есть документОснование, в котором есть позиции номенклатуры, он пишет сведения об остатках в регистр накопления(наименование, номерПартии, колличество)
Есть документ ОтгрузочнаяНакладная, создаётся на основании ДокументаОснования, суть вопроса в том, чтобы выводить актуальные остатки при создании на основании.
Скрины документов и состава регистра прилагаются.
С запросами тяжковато, сам понимаю, пока только такое выдумал:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиДокументаОснованияОстатки.ДокументОснование КАК ДокументОснование,
| ОстаткиДокументаОснованияОстатки.НомерПартии КАК НомерПартии,
| ОстаткиДокументаОснованияОстатки.Номенклатура КАК Номенклатура,
| ОстаткиДокументаОснованияОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ОтгрузочнаяНакладная.Номенклатура.(
| Наименование КАК Наименование,
| НомерПартии КАК НомерПартии
| ) КАК Номенклатура1
|ИЗ
| РегистрНакопления.ОстаткиДокументаОснования.Остатки КАК ОстаткиДокументаОснованияОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтгрузочнаяНакладная КАК ОтгрузочнаяНакладная
| ПО ОстаткиДокументаОснованияОстатки.Номенклатура = ОтгрузочнаяНакладная.Номенклатура.Наименование
| И ОстаткиДокументаОснованияОстатки.НомерПартии = ОтгрузочнаяНакладная.Номенклатура.НомерПартии";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаЗапроса = РезультатЗапроса.Выбрать();
ПоказатьПодскажите как гармотнее это обработать в запросе...
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
(19) Извиняюсь нужно подправить на ВыборкаЗапроса
У вас в функции нету возврата значения, поэтому она и не заполняет ни чего
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СтрокаТЧ = Элементы.Номенклатура.ТекущиеДанные;
СтрокаТЧ.Остаток = ПолучитьОстаткиИзРегистра(СтрокаТЧ.Наименование, СтрокаТЧ.НомерПартии, Объект.ДокументОснование);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьОстаткиИзРегистра(Дата, ДокументОснование)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиДокументаОснованияОстатки.ДокументОснование КАК ДокументОснование,
| ОстаткиДокументаОснованияОстатки.НомерПартии КАК НомерПартии,
| ОстаткиДокументаОснованияОстатки.Номенклатура КАК Номенклатура,
| ОстаткиДокументаОснованияОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ОтгрузочнаяНакладная.Наименование КАК Номенклатура1,
| ОтгрузочнаяНакладная.НомерПартии КАК НомерПартии1
|ИЗ
| РегистрНакопления.ОстаткиДокументаОснования.Остатки(&Период, ДокументОснование = &ДокументОснование) КАК ОстаткиДокументаОснованияОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтгрузочнаяНакладная.Номенклатура КАК ОтгрузочнаяНакладная
| ПО ОстаткиДокументаОснованияОстатки.Номенклатура = ОтгрузочнаяНакладная.Наименование
| И ОстаткиДокументаОснованияОстатки.НомерПартии = ОтгрузочнаяНакладная.НомерПартии";
Запрос.УстановитьПараметр("Период", Дата);
Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаЗапроса = РезультатЗапроса.Выбрать();
Если выборказапроса.Количество() = 0 Тогда
Возврат 0
Иначе
ВыборкаЗапрос.Следующий()
Возврат ВыборкаЗапроса.КоличествоОстаток
Конецесли
КонецФункции
ПоказатьУ вас в функции нету возврата значения, поэтому она и не заполняет ни чего
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
1. у таблицы остатков нужно период задать, там есть в параметрах таблицы, дату среза - и передавать в запрос, текущую дату.
2. В соединении таблиц надо условие ставить на поля одинаковых типов. Т.е. номенклатуру (ссылку) надо сравнивать с номенклатурой (ссылкой), а не с наименованием...т.к. это уже будет другой тип,(строка)
а вообще структуру регистра бы посмотреть...там что, у вас "документОснование" это реквизит регистра ?
2. В соединении таблиц надо условие ставить на поля одинаковых типов. Т.е. номенклатуру (ссылку) надо сравнивать с номенклатурой (ссылкой), а не с наименованием...т.к. это уже будет другой тип,(строка)
а вообще структуру регистра бы посмотреть...там что, у вас "документОснование" это реквизит регистра ?
(5) Потому что осатки без момента на который вы их хотите увидеть не существуют.
Даже когда вы не указываете дату при обращении к виртуальной таблице остатков, подразумевается , что вы запрашиваете на ТЕКУЩИЙ момент времени.
Но понимать то программист ДОЛЖЕН , что остатков без момента времени не бывает, то есть остатки на вчера или на 01.01.2000 00:00:00 или на 31.03.2019 23:59:59
Даже когда вы не указываете дату при обращении к виртуальной таблице остатков, подразумевается , что вы запрашиваете на ТЕКУЩИЙ момент времени.
Но понимать то программист ДОЛЖЕН , что остатков без момента времени не бывает, то есть остатки на вчера или на 01.01.2000 00:00:00 или на 31.03.2019 23:59:59
Вам в параметрах таблицы остатков необходимо добавить параметры
Далее установить эти параметры
РегистрНакопления.ОстаткиДокументаОснования.Остатки(&Период, ДокументОснование = &ДокументОснование) КАК ОстаткиДокументаОснованияОстатки
Далее установить эти параметры
Запрос.УстановитьПараметр("Период", Объект.МоментВремени());
Запрос.УстановитьПараметр("ДокументОснование", Объект.ДокументОснование);
(4) Сделал так:
ничего не возвращает...
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиДокументаОснованияОстатки.ДокументОснование КАК ДокументОснование,
| ОстаткиДокументаОснованияОстатки.НомерПартии КАК НомерПартии,
| ОстаткиДокументаОснованияОстатки.Номенклатура КАК Номенклатура,
| ОстаткиДокументаОснованияОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ОтгрузочнаяНакладная.Номенклатура.(
| Наименование КАК Наименование,
| НомерПартии КАК НомерПартии
| ) КАК Номенклатура1
|ИЗ
| РегистрНакопления.ОстаткиДокументаОснования.Остатки(&Период, ДокументОснование = &ДокументОснование) КАК ОстаткиДокументаОснованияОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтгрузочнаяНакладная КАК ОтгрузочнаяНакладная
| ПО ОстаткиДокументаОснованияОстатки.Номенклатура = ОтгрузочнаяНакладная.Номенклатура.Наименование
| И ОстаткиДокументаОснованияОстатки.НомерПартии = ОтгрузочнаяНакладная.Номенклатура.НомерПартии";
Запрос.УстановитьПараметр("Период", Объект.Дата);
Запрос.УстановитьПараметр("ДокументОснование", Объект.ДокументОснование);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаЗапроса = РезультатЗапроса.Выбрать();
Пока ВыборкаЗапроса.Следующий() Цикл
КонецЦикла;
КонецПроцедуры
Показатьничего не возвращает...
(8) вы берите не ссылку на документ в запросе / не из реквизитов документа а из табличной части
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиДокументаОснованияОстатки.ДокументОснование КАК ДокументОснование,
| ОстаткиДокументаОснованияОстатки.НомерПартии КАК НомерПартии,
| ОстаткиДокументаОснованияОстатки.Номенклатура КАК Номенклатура,
| ОстаткиДокументаОснованияОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ОтгрузочнаяНакладная.Номенклатура.Наименование КАК Номенклатура1,
| ОтгрузочнаяНакладная.Номенклатура.НомерПартии КАК НомерПартии1
|ИЗ
| РегистрНакопления.ОстаткиДокументаОснования.Остатки(&Период, ДокументОснование = &ДокументОснование) КАК ОстаткиДокументаОснованияОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтгрузочнаяНакладная.Номенклатура КАК ОтгрузочнаяНакладная
| ПО ОстаткиДокументаОснованияОстатки.Номенклатура = ОтгрузочнаяНакладная.Наименование
| И ОстаткиДокументаОснованияОстатки.НомерПартии = ОтгрузочнаяНакладная.НомерПартии";
Запрос.УстановитьПараметр("Период", Объект.Дата);
Запрос.УстановитьПараметр("ДокументОснование", Объект.ДокументОснование);
Показать
(9) может я не там всё таки помещаю код, такое ощущение что не видит значения ТЧ....
{Документ.ОтгрузочнаяНакладная.Форма.ФормаДокумента.Форма(43)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
{(6, 26)}: Поле не найдено "ОтгрузочнаяНакладная.Номенклатура.Наименование"
ОтгрузочнаяНакладная.<<?>>Номенклатура.Наименование КАК Номенклатура1,
РезультатЗапроса = Запрос.Выполнить();
по причине:
{(6, 26)}: Поле не найдено "ОтгрузочнаяНакладная.Номенклатура.Наименование"
ОтгрузочнаяНакладная.<<?>>Номенклатура.Наименование КАК Номенклатура1,
(12) блин нужно вот так написать, это я вам изначально не так написал (не обратил внимания, мы же из табличной части выборку то делаем)
Вот пробуйте - ошибки не будет
Вот пробуйте - ошибки не будет
| ОтгрузочнаяНакладная.Наименование КАК Номенклатура1,
| ОтгрузочнаяНакладная.НомерПартии КАК НомерПартии1
(15) в общем немножко переделал и разбил на процедуру и функцию...
Получил вот что:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СтрокаТЧ = Элементы.Номенклатура.ТекущиеДанные;
СтрокаТЧ.Остаток = ПолучитьОстаткиИзРегистра(СтрокаТЧ.Наименование, СтрокаТЧ.НомерПартии, Объект.ДокументОснование);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьОстаткиИзРегистра(Дата, ДокументОснование)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиДокументаОснованияОстатки.ДокументОснование КАК ДокументОснование,
| ОстаткиДокументаОснованияОстатки.НомерПартии КАК НомерПартии,
| ОстаткиДокументаОснованияОстатки.Номенклатура КАК Номенклатура,
| ОстаткиДокументаОснованияОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ОтгрузочнаяНакладная.Наименование КАК Номенклатура1,
| ОтгрузочнаяНакладная.НомерПартии КАК НомерПартии1
|ИЗ
| РегистрНакопления.ОстаткиДокументаОснования.Остатки(&Период, ДокументОснование = &ДокументОснование) КАК ОстаткиДокументаОснованияОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтгрузочнаяНакладная.Номенклатура КАК ОтгрузочнаяНакладная
| ПО ОстаткиДокументаОснованияОстатки.Номенклатура = ОтгрузочнаяНакладная.Наименование
| И ОстаткиДокументаОснованияОстатки.НомерПартии = ОтгрузочнаяНакладная.НомерПартии";
Запрос.УстановитьПараметр("Период", Дата);
Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаЗапроса = РезультатЗапроса.Выбрать();
Пока ВыборкаЗапроса.Следующий() Цикл
КонецЦикла;
КонецФункции
ПоказатьПолучил вот что:
{Документ.ОтгрузочнаяНакладная.Форма.ФормаДокумента.Форма(28,92)}: Слишком много фактических параметров (ПолучитьОстаткиИзРегистра)
СтрокаТЧ.Остаток = ПолучитьОстаткиИзРегистра(СтрокаТЧ.Наименование, СтрокаТЧ.НомерПартии, <<?>>Объект.ДокументОснование);
СтрокаТЧ.Остаток = ПолучитьОстаткиИзРегистра(СтрокаТЧ.Наименование, СтрокаТЧ.НомерПартии, <<?>>Объект.ДокументОснование);
(15) предидущая была ересь, доработал чутка, но ничего не возвращает почему-то...
Колонка Остаток всё равно не заполняется...
Колонка Остаток всё равно не заполняется...
&НаСервереБезКонтекста
Функция ПолучитьОстаткиИзРегистра(Наименование, НомерПартии, ДокументОснование,Дата)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиДокументаОснованияОстатки.ДокументОснование КАК ДокументОснование,
| ОстаткиДокументаОснованияОстатки.НомерПартии КАК НомерПартии,
| ОстаткиДокументаОснованияОстатки.Номенклатура КАК Номенклатура,
| ОстаткиДокументаОснованияОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ОтгрузочнаяНакладная.Наименование КАК Номенклатура1,
| ОтгрузочнаяНакладная.НомерПартии КАК НомерПартии1
|ИЗ
| РегистрНакопления.ОстаткиДокументаОснования.Остатки(&Период, ДокументОснование = &ДокументОснование) КАК ОстаткиДокументаОснованияОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтгрузочнаяНакладная.Номенклатура КАК ОтгрузочнаяНакладная
| ПО ОстаткиДокументаОснованияОстатки.Номенклатура = ОтгрузочнаяНакладная.Наименование
| И ОстаткиДокументаОснованияОстатки.НомерПартии = ОтгрузочнаяНакладная.НомерПартии";
Запрос.УстановитьПараметр("Номенклатура", Наименование);
Запрос.УстановитьПараметр("НомерПартии", НомерПартии);
Запрос.УстановитьПараметр("Период", Дата);
Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаЗапроса = РезультатЗапроса.Выбрать();
Пока ВыборкаЗапроса.Следующий() Цикл
КонецЦикла;
КонецФункции
Показать
(18)
{Документ.ОтгрузочнаяНакладная.Форма.ФормаДокумента.Форма(46,7)}: Переменная не определена (ВыборкаРезультата)
Если <<?>>ВыборкаРезультата.Количество() = 0 Тогда (Проверка: Сервер)
{Документ.ОтгрузочнаяНакладная.Форма.ФормаДокумента.Форма(49,1)}: Переменная не определена (ВыборкаЗапроса)
<<?>>ВыборкаЗапроса.Следующий(); (Проверка: Сервер)
{Документ.ОтгрузочнаяНакладная.Форма.ФормаДокумента.Форма(50,9)}: Переменная не определена (ВыборкаЗапроса)
Возврат <<?>>ВыборкаЗапроса.КоличествоОстаток (Проверка: Сервер)
{Документ.ОтгрузочнаяНакладная.Форма.ФормаДокумента.Форма(46,7)}: Переменная не определена (ВыборкаРезультата)
Если <<?>>ВыборкаРезультата.Количество() = 0 Тогда (Проверка: Мобильное приложение-сервер)
{Документ.ОтгрузочнаяНакладная.Форма.ФормаДокумента.Форма(49,1)}: Переменная не определена (ВыборкаЗапроса)
<<?>>ВыборкаЗапроса.Следующий(); (Проверка: Мобильное приложение-сервер)
{Документ.ОтгрузочнаяНакладная.Форма.ФормаДокумента.Форма(50,9)}: Переменная не определена (ВыборкаЗапроса)
Возврат <<?>>ВыборкаЗапроса.КоличествоОстаток (Проверка: Мобильное приложение-сервер)
Если ВыборкаРезультата.Количество() = 0 Тогда
Возврат 0
Иначе
ВыборкаЗапроса.Следующий()
Возврат ВыборкаЗапроса.КоличествоОстаток
КонецЕсли
Возврат 0
Иначе
ВыборкаЗапроса.Следующий()
Возврат ВыборкаЗапроса.КоличествоОстаток
КонецЕсли
{Документ.ОтгрузочнаяНакладная.Форма.ФормаДокумента.Форма(46,7)}: Переменная не определена (ВыборкаРезультата)
Если <<?>>ВыборкаРезультата.Количество() = 0 Тогда (Проверка: Сервер)
{Документ.ОтгрузочнаяНакладная.Форма.ФормаДокумента.Форма(49,1)}: Переменная не определена (ВыборкаЗапроса)
<<?>>ВыборкаЗапроса.Следующий(); (Проверка: Сервер)
{Документ.ОтгрузочнаяНакладная.Форма.ФормаДокумента.Форма(50,9)}: Переменная не определена (ВыборкаЗапроса)
Возврат <<?>>ВыборкаЗапроса.КоличествоОстаток (Проверка: Сервер)
{Документ.ОтгрузочнаяНакладная.Форма.ФормаДокумента.Форма(46,7)}: Переменная не определена (ВыборкаРезультата)
Если <<?>>ВыборкаРезультата.Количество() = 0 Тогда (Проверка: Мобильное приложение-сервер)
{Документ.ОтгрузочнаяНакладная.Форма.ФормаДокумента.Форма(49,1)}: Переменная не определена (ВыборкаЗапроса)
<<?>>ВыборкаЗапроса.Следующий(); (Проверка: Мобильное приложение-сервер)
{Документ.ОтгрузочнаяНакладная.Форма.ФормаДокумента.Форма(50,9)}: Переменная не определена (ВыборкаЗапроса)
Возврат <<?>>ВыборкаЗапроса.КоличествоОстаток (Проверка: Мобильное приложение-сервер)
(19) Извиняюсь нужно подправить на ВыборкаЗапроса
У вас в функции нету возврата значения, поэтому она и не заполняет ни чего
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СтрокаТЧ = Элементы.Номенклатура.ТекущиеДанные;
СтрокаТЧ.Остаток = ПолучитьОстаткиИзРегистра(СтрокаТЧ.Наименование, СтрокаТЧ.НомерПартии, Объект.ДокументОснование);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьОстаткиИзРегистра(Дата, ДокументОснование)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиДокументаОснованияОстатки.ДокументОснование КАК ДокументОснование,
| ОстаткиДокументаОснованияОстатки.НомерПартии КАК НомерПартии,
| ОстаткиДокументаОснованияОстатки.Номенклатура КАК Номенклатура,
| ОстаткиДокументаОснованияОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ОтгрузочнаяНакладная.Наименование КАК Номенклатура1,
| ОтгрузочнаяНакладная.НомерПартии КАК НомерПартии1
|ИЗ
| РегистрНакопления.ОстаткиДокументаОснования.Остатки(&Период, ДокументОснование = &ДокументОснование) КАК ОстаткиДокументаОснованияОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтгрузочнаяНакладная.Номенклатура КАК ОтгрузочнаяНакладная
| ПО ОстаткиДокументаОснованияОстатки.Номенклатура = ОтгрузочнаяНакладная.Наименование
| И ОстаткиДокументаОснованияОстатки.НомерПартии = ОтгрузочнаяНакладная.НомерПартии";
Запрос.УстановитьПараметр("Период", Дата);
Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаЗапроса = РезультатЗапроса.Выбрать();
Если выборказапроса.Количество() = 0 Тогда
Возврат 0
Иначе
ВыборкаЗапрос.Следующий()
Возврат ВыборкаЗапроса.КоличествоОстаток
Конецесли
КонецФункции
ПоказатьУ вас в функции нету возврата значения, поэтому она и не заполняет ни чего
(20)
Спасибо, вот так работает!
Правда возвращает не корректные сведения )
Для всех партий берёт один остаток
РезультатЗапроса = Запрос.Выполнить();
ВыборкаЗапроса = РезультатЗапроса.Выбрать();
Если выборказапроса.Количество() = 0 Тогда
Возврат 0
Иначе
ВыборкаЗапрос.Следующий()
Возврат ВыборкаЗапроса.КоличествоОстаток
Конецесли
КонецФункции
ВыборкаЗапроса = РезультатЗапроса.Выбрать();
Если выборказапроса.Количество() = 0 Тогда
Возврат 0
Иначе
ВыборкаЗапрос.Следующий()
Возврат ВыборкаЗапроса.КоличествоОстаток
Конецесли
КонецФункции
Спасибо, вот так работает!
&НаСервереБезКонтекста
Функция ПолучитьОстаткиИзРегистра(Наименование, НомерПартии, ДокументОснование,Дата)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиДокументаОснованияОстатки.ДокументОснование КАК ДокументОснование,
| ОстаткиДокументаОснованияОстатки.НомерПартии КАК НомерПартии,
| ОстаткиДокументаОснованияОстатки.Номенклатура КАК Номенклатура,
| ОстаткиДокументаОснованияОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ОтгрузочнаяНакладная.Наименование КАК Номенклатура1,
| ОтгрузочнаяНакладная.НомерПартии КАК НомерПартии1
|ИЗ
| РегистрНакопления.ОстаткиДокументаОснования.Остатки(&Период, ДокументОснование = &ДокументОснование) КАК ОстаткиДокументаОснованияОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтгрузочнаяНакладная.Номенклатура КАК ОтгрузочнаяНакладная
| ПО ОстаткиДокументаОснованияОстатки.Номенклатура = ОтгрузочнаяНакладная.Наименование
| И ОстаткиДокументаОснованияОстатки.НомерПартии = ОтгрузочнаяНакладная.НомерПартии";
Запрос.УстановитьПараметр("Номенклатура", Наименование);
Запрос.УстановитьПараметр("НомерПартии", НомерПартии);
Запрос.УстановитьПараметр("Период", Дата);
Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаЗапроса = РезультатЗапроса.Выбрать();
Если выборказапроса.Количество() = 0 Тогда
Возврат 0
Иначе
ВыборкаЗапроса.Следующий();
Возврат ВыборкаЗапроса.КоличествоОстаток
КонецЕсли
КонецФункции
ПоказатьПравда возвращает не корректные сведения )
Для всех партий берёт один остаток
Прикрепленные файлы:
(22) у вас потому что нету отбора по номенклатуре и партии. У вас есть только отбор по документу основания. в этом и ошибка
Дописать нужно в параметрах РегистрНакопления.ОстаткиДокументаОснования.Остатки(&Период, ДокументОснование = &ДокументОснование И Номенклатура = &Номенклатура И НомерПартии = &НомерПартии)
&НаСервереБезКонтекста
Функция ПолучитьОстаткиИзРегистра(Наименование, НомерПартии, ДокументОснование,Дата)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиДокументаОснованияОстатки.ДокументОснование КАК ДокументОснование,
| ОстаткиДокументаОснованияОстатки.НомерПартии КАК НомерПартии,
| ОстаткиДокументаОснованияОстатки.Номенклатура КАК Номенклатура,
| ОстаткиДокументаОснованияОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ОтгрузочнаяНакладная.Наименование КАК Номенклатура1,
| ОтгрузочнаяНакладная.НомерПартии КАК НомерПартии1
|ИЗ
| РегистрНакопления.ОстаткиДокументаОснования.Остатки(&Период, ДокументОснование = &ДокументОснование И Номенклатура = &Номенклатура И НомерПартии = &НомерПартии) КАК ОстаткиДокументаОснованияОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтгрузочнаяНакладная.Номенклатура КАК ОтгрузочнаяНакладная
| ПО ОстаткиДокументаОснованияОстатки.Номенклатура = ОтгрузочнаяНакладная.Наименование
| И ОстаткиДокументаОснованияОстатки.НомерПартии = ОтгрузочнаяНакладная.НомерПартии";
Запрос.УстановитьПараметр("Номенклатура", Наименование);
Запрос.УстановитьПараметр("НомерПартии", НомерПартии);
Запрос.УстановитьПараметр("Период", Дата);
Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаЗапроса = РезультатЗапроса.Выбрать();
Если выборказапроса.Количество() = 0 Тогда
Возврат 0
Иначе
ВыборкаЗапроса.Следующий();
Возврат ВыборкаЗапроса.КоличествоОстаток
КонецЕсли
КонецФункции
ПоказатьДописать нужно в параметрах РегистрНакопления.ОстаткиДокументаОснования.Остатки(&Период, ДокументОснование = &ДокументОснование И Номенклатура = &Номенклатура И НомерПартии = &НомерПартии)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот