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

Контроль остатков

Автор OverTime, 05 мая 2014, 15:20

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

OverTime

Здравствуйте!
Делал контроль остатков по Радченко, вроде бы код такой же писал только по своей теме но что то у меня не получилось.
При поступлении 1 товара я могу его списать больше чем он есть на складе
Помогите пожалуйста вот код:



Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

// Данный фрагмент построен конструктором.

// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!


// регистр ОстаткиАвтомобилей Расход

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

// регистр Продажи

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

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

МенеджерВТ = Новый МенеджерВременныхТаблиц;

Запрос = Новый Запрос;

// Укажем, какой менеджер временных таблиц использует этот запрос

Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос.Текст ="ВЫБРАТЬ
|    РасходнаяАвтомобили.Автомобиль,
|    СУММА(РасходнаяАвтомобили.Количество) КАК Количество,
|    СУММА(РасходнаяАвтомобили.Сумма) КАК Сумма
|ПОМЕСТИТЬ АвтомобилиДокумента
|ИЗ
|    Документ.Расходная.Автомобили КАК РасходнаяАвтомобили
|ГДЕ
|    РасходнаяАвтомобили.Автомобиль.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
|    РасходнаяАвтомобили.Автомобиль";

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

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




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

Если Режим = РежимПроведенияДокумента.Оперативный Тогда
// Проверить отрицательные остатки

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

Запрос3.УстановитьПараметр("МестоХранения", МестоХранения);

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

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


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




Платформа 8.3

Шитова Людмила

  Попробуйте в 3-м запросе в параметрах виртуальной таблицы ОстаткиАвтомобилей.Остатки указать первый параметр(период),например,&Дата(сейчас он у вас не указан). А потом ниже установить параметр.
  Момент = Новый Граница(МоментВремени(),ВидГраницы.Включая);
  Запрос3.УстановитьПараметр("Дата", Момент);
  Так делают в 8.2. Работает ли это в 8.3,проверить не могу,нет платформы.

cska-fanat-kz

Цитата: Шитова Людмила от 14 мая 2014, 23:48
  Попробуйте в 3-м запросе в параметрах виртуальной таблицы ОстаткиАвтомобилей.Остатки указать первый параметр(период),например,&Дата(сейчас он у вас не указан). А потом ниже установить параметр.
  Момент = Новый Граница(МоментВремени(),ВидГраницы.Включая);
  Запрос3.УстановитьПараметр("Дата", Момент);
  Так делают в 8.2. Работает ли это в 8.3,проверить не могу,нет платформы.

Если пропускаем параметр Период, то получаем актуальные остатки на текущий момент, что нам при оперативном проведении и нужно. Т.е. можно и так.

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

Шитова Людмила

Нужны остатки с учетом данных документа,а в вашем случае они не учитываются.

Besart


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

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

cska-fanat-kz

Цитата: Шитова Людмила от 15 мая 2014, 14:58
Нужны остатки с учетом данных документа,а в вашем случае они не учитываются.

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

cska-fanat-kz

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

Besart

Цитата: cska-fanat-kz от 15 мая 2014, 16:31параметр добавили, а в запросе его использовать забыли...
да, че то не доглядел,
если есть мозг у автора, то он не будет копипастить, суть в том что нужно учитывать остатки на момент времени Включая, т.е. с учетом движений текущего документа

Теги:

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

Рейтинг@Mail.ru

Поиск