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

Как настроить проверку отрицательных остатков?

Автор onegreyonewhite, 10 фев 2012, 08:59

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

onegreyonewhite

Цитата: Dethmontt от 12 фев 2012, 03:02
Делай запрос конструктором, а не копируй с других сайтов.
У тебя в конфигурации нету документа "ПРОДАЖА".!!!
Ээээ... Как бЭ ты не прав :) Он, документ, есть :) Ещё как есть :) Я в нём и проверяю перед проведением по регистрам количество товара :)

onegreyonewhite

Цитата: Dethmontt от 12 фев 2012, 03:04
Сначала отдели мух от котлет. Посмотри где вообще хранятся эти остатки. Подумай как проверить на определенную дату количество определенной номенклатуры в БД. (типовыми средствами)

И ты таки опять молодец! :) И ещё раз тебе "спасибо". Ты классно навёл на мысль о реализации такой не трудной операции.

Вот как я сделал (и это работает):

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


Сделал в общей обработке РаботаСоСправочниками функцию возвращающую значение количества по каждому товару:

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

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

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

Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
Количество = Выборка.Количество;
КонецЦикла;
Возврат Количество;
конецФункции


Ещё раз спасибо Dethmontt

Dethmontt

Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

cska-fanat-kz

чувствую, ща пополню ряды неадекватов...

2 onegreyonewhite!!

никому не показывайте самый последний ваш код!
проверка остатков в корне не верна!

1. Запрос в цикле у 1Сников - это вещь пострашнее Ктулху!
2. Условие на склад и товар к таблице остатков накладывается в ВИРТУАЛЬНЫХ параметрах и никак иначе!

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

onegreyonewhite

Цитата: cska-fanat-kz от 13 фев 2012, 12:25
чувствую, ща пополню ряды неадекватов...

Да вроде не буйный и всё по делу :)

Цитировать
никому не показывайте самый последний ваш код!
проверка остатков в корне не верна!

1. Запрос в цикле у 1Сников - это вещь пострашнее Ктулху!
2. Условие на склад и товар к таблице остатков накладывается в ВИРТУАЛЬНЫХ параметрах и никак иначе!

ваш код будет работать ооочень медленно!

Ну так я иных способов не нашёл пока. Если можете пояснить наглядно, буду оч признателен.
Просто мне ещё надо будет примерно то же проделать с $$$ частью, а на виртуальных примерах без каких-либо пояснений что значит та или иная переменная разобраться в принципе нереально, я так считаю.

cska-fanat-kz

Цитата: onegreyonewhite от 13 фев 2012, 15:15
Да вроде не буйный и всё по делу :)

ну слава Богу! можно выдохнуть и жить дальше... )))

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

Михаил Сергеевич

Новый принци:

сначало пишуться движения, потом проверяется регистр на отрицательные суммы, если такие есть значит отказ = истина...
новый контроль остатков сделан для того чтобы блокировка на таблицу в транзакции висела как можно меньше...

Dethmontt

Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

cska-fanat-kz

Цитата: Dethmontt от 14 фев 2012, 09:55
cska-fanat-kz, тебе на мисту надо))) Шучу...


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

Теги:

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

Рейтинг@Mail.ru

Поиск