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

Ошибка в запросе

Автор Абылайхан, 30 мар 2015, 07:42

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

Абылайхан

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

Делаю следущий запрос на проверку есть ли Товары с отрицательным остатком если провести документ с количеством товара большим чем имеется в Остатках, но получаю пустой результат. Почему?
ВЫБРАТЬ
РеализацияТоваровТовары.Номенклатура
ПОМЕСТИТЬ СписокНоменклатуры
ИЗ
Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
ГДЕ
РеализацияТоваровТовары.Ссылка = &Ссылка
;

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

cska-fanat-kz

а движения документа перед запросом записываете в базу?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Абылайхан

Цитата: cska-fanat-kz от 30 мар 2015, 08:38
а движения документа перед запросом записываете в базу?

да, записываю.

k_aleks80

Параметры запроса (Период, Склад), при заполнении в коде корректные?

cska-fanat-kz

надо отлаживать. на первый взгляд в самом запросе - все правильно.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Абылайхан

Цитата: k_aleks80 от 30 мар 2015, 09:50
Параметры запроса (Период, Склад), при заполнении в коде корректные?

Да, вроде правильно.


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

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

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

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

Запрос.УстановитьПараметр("Период", Новый Граница(МоментВремени(), ВидГраницы.Включая));
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("Ссылка", Ссылка);

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

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

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

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


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

КонецЕсли;


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

blackmoon89

Смею предположить, что обработка проведения проходит в одной транзакции, по этому данных в момент запроса еще нет.
Запустите запрос позже обработки проведения и посмотрите результат.

Это всего лишь предположение, утвердительно сказать не могу, книжек мало читала:)

cska-fanat-kz

движения вы записываете только по регистру Продажи.
а где движения по ОстаткиНоменклатуры??
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

vitasw

Фиерично! Вы записываете набор "Продажи", а запрос строите по "ОстаткиНоменклатуры". Где запись движений по остаткам?

Абылайхан

Цитата: cska-fanat-kz от 30 мар 2015, 11:02
движения вы записываете только по регистру Продажи.
а где движения по ОстаткиНоменклатуры??

Вот блин. Спасибо большое, добавил все работает)

Теги:

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

Рейтинг@Mail.ru

Поиск