|
РегистрыНакопление.СвободныеОстатки | ☑ | ||
---|---|---|---|---|
0
asrv12
30.08.12
✎
12:37
|
Доброго времени суток! Может кто сталкивался. Проблема такова: Есть заявка покупателя который резервирует товар в РЕГИСТРЕ резервы. А реализация списывает товар в РИГИСТРЕ СвободныеОстатки. И так я сделал так, чтоб при проведении реализацию, проверял свободные остатки, ну естетственно с учетом РЕЗЕРВЫ. Допустим Ручка на свободныеОстатки 10 шт.
Создаем заявку и резервируем 6 шт. Реализация списываем 6 шт. проводим и отказ 2 шт недостаточно на складе! А вот когда Реализация вводится на основании заявки тогда проводится. Тут реализация списывает из резерва и из СвободныеОстатки Вот мой пример: Процедура ПроведениеУчитоваяРезерв(Отказ, Режим) // Очистим движения. Движения.СвободныеОстатки.Записать(); Движения.СвободныеОстатки.Записывать = Истина; //В случае нехватки товара на остатке Проведение = ЛОЖЬ и сообщим пользователю Блокировка = Новый БлокировкаДанных; ЭлБлок = Блокировка.Добавить("РегистрНакопления.СвободныеОстатки"); ЭлБлок.УстановитьЗначение("Склад",Склад); ЭлБлок.ИсточникДанных = Товары.Выгрузить(,"Номенклатура"); ЭлБлок.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура"); ЭлБлок.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РеализацияТоваровТовары.Номенклатура, | СУММА(РеализацияТоваровТовары.Количество) КАК Количество, | РеализацияТоваровТовары.Номенклатура.Артикул КАК Артикул, | РеализацияТоваровТовары.Единица.Наименование |ПОМЕСТИТЬ ВТ_Товары |ИЗ | Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары |ГДЕ | РеализацияТоваровТовары.Ссылка = &Ссылка | И РеализацияТоваровТовары.Номенклатура.ВидНоменклатуры <> &ВидНоменклатуры | |СГРУППИРОВАТЬ ПО | РеализацияТоваровТовары.Номенклатура, | РеализацияТоваровТовары.Номенклатура.Артикул, | РеализацияТоваровТовары.Единица.Наименование |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_Товары.Номенклатура КАК Номенклатура, | ВТ_Товары.Количество КАК Количество, | ЕСТЬNULL(СвободныеОстаткиОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(РезервыТоваровОстатки.КоличествоОстаток, 0) КАК КолвоНаСкладеОстаток, | ВТ_Товары.Номенклатура.Артикул КАК Артикул, | ВТ_Товары.ЕдиницаНаименование КАК ЕдиницаНаименование |ИЗ | ВТ_Товары КАК ВТ_Товары | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки( | &Период, | Склад = &Склад | И Номенклатура В | (ВЫБРАТЬ | ВТ_Товары.Номенклатура | ИЗ | ВТ_Товары КАК ВТ_Товары)) КАК СвободныеОстаткиОстатки | ПО ВТ_Товары.Номенклатура = СвободныеОстаткиОстатки.Номенклатура | И ВТ_Товары.ЕдиницаНаименование = СвободныеОстаткиОстатки.Номенклатура.БазоваяЕдиницаИзмерения.Наименование | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РезервыТоваров.Остатки( | &ПериодР, | Склад = &СкладР | И Номенклатура В | (ВЫБРАТЬ | ВТ_Товары.Номенклатура | ИЗ | ВТ_Товары КАК ВТ_Товары)) КАК РезервыТоваровОстатки | ПО ВТ_Товары.Номенклатура = РезервыТоваровОстатки.Номенклатура |ИТОГИ | МАКСИМУМ(Количество), | СУММА(КолвоНаСкладеОстаток) |ПО | Номенклатура, | ЕдиницаНаименование"; Запрос.УстановитьПараметр("СкладР", Склад); Запрос.УстановитьПараметр("Склад", Склад); Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("ВидНоменклатуры", Перечисления.ТипыНоменклатуры.Товар); Если Режим = РежимПроведенияДокумента.Оперативный Тогда Запрос.УстановитьПараметр("Период", Дата); Запрос.УстановитьПараметр("ПериодР", Дата); Иначе Запрос.УстановитьПараметр("Период", МоментВремени()); Запрос.УстановитьПараметр("ПериодР", МоментВремени()); КонецЕсли; Результат = Запрос.Выполнить(); ВыборкаИтогов = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Для Каждого ТекСтрокаТовары Из Товары Цикл КонецЦикла; Пока ВыборкаИтогов.Следующий() Цикл Если ВыборкаИтогов.Количество > ВыборкаИтогов.КолвоНаСкладеОстаток Тогда Нехватка = ВыборкаИтогов.Количество - ВыборкаИтогов.КолвоНаСкладеОстаток; Сообщить("На складе "+Склад.Наименование+ ", товар: "+ВыборкаИтогов.Номенклатура+ " арт.: " +ВыборкаИтогов.Артикул+ " осталось "+ВыборкаИтогов.КолвоНаСкладеОстаток+" "+ТекСтрокаТовары.Единица.Наименование+"." " требуемая кол. "+ВыборкаИтогов.Количество+" "+ТекСтрокаТовары.Единица.Наименование+"."); Отказ = Истина; КонецЕсли; КонецЦикла; //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА КонецПроцедуры Процедура ПроведениеБезУчетаРезерв(Отказ, Режим) // Очистим движения. Движения.СвободныеОстатки.Записать(); Движения.СвободныеОстатки.Записывать = Истина; //В случае нехватки товара на остатке Проведение = ЛОЖЬ и сообщим пользователю Блокировка = Новый БлокировкаДанных; ЭлБлок = Блокировка.Добавить("РегистрНакопления.СвободныеОстатки"); ЭлБлок.УстановитьЗначение("Склад",Склад); ЭлБлок.ИсточникДанных = Товары.Выгрузить(,"Номенклатура"); ЭлБлок.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура"); ЭлБлок.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РеализацияТоваровТовары.Номенклатура, | СУММА(РеализацияТоваровТовары.Количество) КАК Количество, | РеализацияТоваровТовары.Номенклатура.Артикул КАК Артикул, | РеализацияТоваровТовары.Единица.Наименование |ПОМЕСТИТЬ ВТ_Товары |ИЗ | Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары |ГДЕ | РеализацияТоваровТовары.Ссылка = &Ссылка | И РеализацияТоваровТовары.Номенклатура.ВидНоменклатуры <> &ВидНоменклатуры | |СГРУППИРОВАТЬ ПО | РеализацияТоваровТовары.Номенклатура, | РеализацияТоваровТовары.Номенклатура.Артикул, | РеализацияТоваровТовары.Единица.Наименование |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_Товары.Номенклатура КАК Номенклатура, | ВТ_Товары.Количество КАК Количество, | ЕСТЬNULL(СвободныеОстаткиОстатки.КоличествоОстаток, 0) КАК КолвоНаСкладеОстаток, | ВТ_Товары.Номенклатура.Артикул КАК Артикул, | ВТ_Товары.ЕдиницаНаименование КАК ЕдиницаНаименование |ИЗ | ВТ_Товары КАК ВТ_Товары | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки( | &Период, | Склад = &Склад | И Номенклатура В | (ВЫБРАТЬ | ВТ_Товары.Номенклатура | ИЗ | ВТ_Товары КАК ВТ_Товары)) КАК СвободныеОстаткиОстатки | ПО ВТ_Товары.Номенклатура = СвободныеОстаткиОстатки.Номенклатура | И ВТ_Товары.ЕдиницаНаименование = СвободныеОстаткиОстатки.Номенклатура.БазоваяЕдиницаИзмерения.Наименование |ИТОГИ | МАКСИМУМ(Количество), | СУММА(КолвоНаСкладеОстаток) |ПО | Номенклатура, | ЕдиницаНаименование"; Запрос.УстановитьПараметр("Склад", Склад); Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("ВидНоменклатуры", Перечисления.ТипыНоменклатуры.Товар); Если Режим = РежимПроведенияДокумента.Оперативный Тогда Запрос.УстановитьПараметр("Период", Дата); Иначе Запрос.УстановитьПараметр("Период", МоментВремени()); КонецЕсли; Результат = Запрос.Выполнить(); ВыборкаИтогов = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Для Каждого ТекСтрокаТовары Из Товары Цикл КонецЦикла; Пока ВыборкаИтогов.Следующий() Цикл Если ВыборкаИтогов.Количество > ВыборкаИтогов.КолвоНаСкладеОстаток Тогда Нехватка = ВыборкаИтогов.Количество - ВыборкаИтогов.КолвоНаСкладеОстаток; Сообщить("На складе "+Склад.Наименование+ ", товар: "+ВыборкаИтогов.Номенклатура+ " арт.: " +ВыборкаИтогов.Артикул+ " осталось "+ВыборкаИтогов.КолвоНаСкладеОстаток+" "+ТекСтрокаТовары.Единица.Наименование+"." " требуемая кол. "+ВыборкаИтогов.Количество+" "+ТекСтрокаТовары.Единица.Наименование+"."); Отказ = Истина; КонецЕсли; КонецЦикла; КонецПроцедуры Процедура ОбработкаПроведения(Отказ, Режим) //Если документ введен на основание заявки тогда не проверяет остаток по наличии //и не формирует движение на складах, так как заявка формировал движение Если ЗначениеЗаполнено(ЭтотОбъект.Произвольный) Тогда Движения.СвободныеОстатки.Записывать = Истина; ПроведениеБезУчетаРезерв(Отказ, Режим); Движения.СвободныеОстатки.Записывать = Истина; Для Каждого ТекСтрокаТовары Из Товары Цикл Движение = Движения.СвободныеОстатки.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Организация = Организация; Движение.Склад = Склад; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Количество = ТекСтрокаТовары.Количество; КонецЦикла; Движения.РезервыТоваров.Записывать = Истина; Для Каждого ТекСтрокаТовары Из Товары Цикл Движение = Движения.РезервыТоваров.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Организация = Организация; Движение.Склад = Склад; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Количество = ТекСтрокаТовары.Количество; КонецЦикла; Иначе Движения.СвободныеОстатки.Записывать = Истина; ПроведениеУчитоваяРезерв(Отказ, Режим); Движения.СвободныеОстатки.Записывать = Истина; Для Каждого ТекСтрокаТовары Из Товары Цикл Движение = Движения.СвободныеОстатки.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Организация = Организация; Движение.Склад = Склад; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Количество = ТекСтрокаТовары.Количество; КонецЦикла; КонецЕсли; // регистр ОстаткиТоваров Расход Движения.ОстаткиТоваров.Записывать = Истина; Для Каждого ТекСтрокаТовары Из Товары Цикл Движение = Движения.ОстаткиТоваров.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Организация = Организация; Движение.Склад = Склад; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Количество = ТекСтрокаТовары.Количество; КонецЦикла; // регистр ПродажиТоваров Движения.ПродажиТоваров.Записывать = Истина; Для Каждого ТекСтрокаТовары Из Товары Цикл Движение = Движения.ПродажиТоваров.Добавить(); Движение.Период = Дата; Движение.Организация = Организация; Движение.Склад = Склад; Движение.Покупатель = Контрагент; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Количество = ТекСтрокаТовары.Количество; Движение.Сумма = ТекСтрокаТовары.Сумма; КонецЦикла; //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры Есть какой нибудь более по проще способ? Пожалуйста помогите! |
|||
1
del123
30.08.12
✎
12:41
|
Таки уже определитесь РЕГИСТРЕ ИЛИ РИГИСТРЕ)
А типовые средства не работают? |
|||
2
asrv12
30.08.12
✎
12:45
|
В типовом при проведении реализацию не учитывает резерв
|
|||
3
asrv12
30.08.12
✎
12:48
|
Извините опчатка РЕГИСТРЫ
|
|||
4
pessok
30.08.12
✎
12:49
|
(2) ЧТО?
|
|||
5
acsent
30.08.12
✎
12:49
|
(0) >>А вот когда Реализация вводится на основании заявки тогда проводится
Абсолютно логично |
|||
6
pessok
30.08.12
✎
12:49
|
+(4) человек, перед тем как писать очередную нетленку, изучи таки механизм полностью
|
|||
7
shuhard
30.08.12
✎
12:52
|
(2)[В типовом при проведении реализацию не учитывает резерв]
брехня топик в топку |
|||
8
pessok
30.08.12
✎
12:54
|
(7) плюсцую
|
|||
9
asrv12
30.08.12
✎
13:07
|
pessok
Я смотрю, ты такой умный! |
|||
10
hhhh
30.08.12
✎
14:30
|
(9) У вас 10 ручек на складе. Один чел пришел и отложил себе 6 ручек (зарезервировал). Пришел второй чел и захотел тоже 6 ручек. Программа ему говорит, 4 ручки только осталось. 2-х ручек не хватает.
А когда приходит первый чел, он спокойно выписывает себе реализацию, и забирает свои шесть ручек, которые он резервировал. Программа работает абсолютно правильно. Не парьте нам мозг. |
|||
11
eklmn
гуру
30.08.12
✎
14:35
|
(10) он сначала поламал, теперь героически пытаеться "сделать"
|
|||
12
del123
30.08.12
✎
14:44
|
(11) тоже чтоли так начать делать.. А то иной раз скучно так становится...
|
|||
13
chelentano
30.08.12
✎
14:56
|
(2) насколько я знаю, в типовом нет регистра СвободныеОстатки
|
|||
14
mikecool
30.08.12
✎
14:58
|
(13) как нет? его можно использовать, а можно не использовать
|
|||
15
pessok
30.08.12
✎
14:59
|
(13) есть. в настройках выбираешь - узать или нет
|
|||
16
chelentano
30.08.12
✎
15:00
|
(14),(15) это что за конфигурация такая?
|
|||
17
mikecool
30.08.12
✎
15:02
|
(16) я видел в упп
|
|||
18
del123
30.08.12
✎
15:03
|
(16) в комплексной тоже присутствует)
|
|||
19
chelentano
30.08.12
✎
15:05
|
(17),(18) о как, спасибо, буду в курсе хоть :)
|
|||
20
pessok
30.08.12
✎
15:08
|
(19) да и в УТ вроде есть
|
|||
21
pessok
30.08.12
✎
15:08
|
+(20) а не, нету
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |