|
Контроль остатка | ☑ | ||
---|---|---|---|---|
0
malex18
06.09.17
✎
17:08
|
Есть подразделение и торговая точка. как сделать,если пользователь вводит в реализации количество товара(оно превышает количество на точке), ВЫВОДИЛОСЬ ДИАЛОГОВОЕ окно с вариантом ответов(Да,Нет),Если "ДА"- то проводит , нет - не проводит.
Сделал вывод сообщения на общий остаток. а как режимдиалога.данет организовать ? в модуле формы?или я не туда копаю? Процедура ОбработкаПроведения(Отказ, РежимПроведения) МетодСписания = РегистрыСведений.МетодСписанияТоваров.ПолучитьПоследнее(Дата).МетодСписания; Если МетодСписания.Пустая()Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не указан метод списания! Проведение не возможно"; Отказ = Истина; Возврат; КонецЕсли; Движения.ОстаткиНоменклатуры.Записывать = Истина; Движения.Продажи.Записывать=Истина; Движения.ОстаткиНоменклатуры.Записать(); Движения.Продажи.Записать(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Стоимость |ПОМЕСТИТЬ ВТ |ИЗ | Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры |ГДЕ | РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ.Номенклатура КАК Номенклатура, | ВТ.Количество КАК КоличествоВДокументе, | ВТ.Стоимость КАК СуммаВДокументе, | ОстаткиНоменклатурыОстатки.Партия, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СтоимостьОстаток, 0) КАК СуммаОстаток |ИЗ | ВТ КАК ВТ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки( | &МоментВремени, | Склад = &Склад | ИЛИ Склад = &Подразделение) КАК ОстаткиНоменклатурыОстатки | ПО ВТ.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура | |УПОРЯДОЧИТЬ ПО | ОстаткиНоменклатурыОстатки.Партия.МоментВремени ВОЗР |ИТОГИ | МАКСИМУМ(КоличествоВДокументе), | МАКСИМУМ(СуммаВДокументе), | СУММА(КоличествоОстаток), | СУММА(СуммаОстаток) |ПО | Номенклатура"; Запрос.УстановитьПараметр("МоментВремени", МоментВремени()); Запрос.УстановитьПараметр("Ссылка",Ссылка); Запрос.УстановитьПараметр("Склад", Подразделение); Запрос.УстановитьПараметр("Подразделение", Подразделение.Родитель); Если МетодСписания = Перечисления.УчетнаяПолитика.ЛИФО Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВОЗР", "УБЫВ"); КонецЕсли; ВыборкаНоменклатура = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНоменклатура.Следующий() Цикл Если НЕ ВыборкаНоменклатура.Номенклатура.Услуга и ВыборкаНоменклатура.КоличествоОстаток < ВыборкаНоменклатура.КоличествоВДокументе Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не хватает " + Строка(ВыборкаНоменклатура.КоличествоВДокументе - ВыборкаНоменклатура.КоличествоОстаток) + " единиц номенклатуры " + ВыборкаНоменклатура.Номенклатура + ". Проведение невозможно."; Сообщение.Сообщить(); Отказ = Истина; КонецЕсли; Если Отказ Тогда Продолжить; КонецЕсли; ОсталосьСписать = ВыборкаНоменклатура.КоличествоВДокументе; ВыборкаДетЗаписи = ВыборкаНоменклатура.Выбрать(); Пока ВыборкаДетЗаписи.Следующий() И ОсталосьСписать <> 0 Цикл Если НЕ ВыборкаДетЗаписи.Номенклатура.Услуга Тогда КСписанию = Мин(ОсталосьСписать, ВыборкаДетЗаписи.КоличествоОстаток); СуммаСписания = ?(ВыборкаДетЗаписи.КоличествоОстаток = КСписанию, ВыборкаДетЗаписи.СуммаОстаток, ВыборкаДетЗаписи.СуммаОстаток / ВыборкаДетЗаписи.КоличествоОстаток * КСписанию); НовоеДвижение = Движения.ОстаткиНоменклатуры.ДобавитьРасход(); НовоеДвижение.Период = Дата; НовоеДвижение.Регистратор = Ссылка; НовоеДвижение.Количество = КСписанию; НовоеДвижение.Номенклатура = ВыборкаДетЗаписи.Номенклатура; НовоеДвижение.Партия = ВыборкаДетЗаписи.Партия; НовоеДвижение.Склад = Подразделение; Если ВыборкаДетЗаписи.КоличествоОстаток > ОсталосьСписать Тогда НовоеДвижение.Склад = Подразделение.Родитель; КонецЕсли; НовоеДвижение.Стоимость = СуммаСписания; КонецЕсли; НовоеДвижение = Движения.Продажи.Добавить(); НовоеДвижение.Активность = Истина; НовоеДвижение.Период = Дата; НовоеДвижение.Регистратор = Ссылка; НовоеДвижение.Номенклатура = ВыборкаДетЗаписи.Номенклатура; НовоеДвижение.Сумма = ВыборкаДетЗаписи.СуммаВДокументе; Если НовоеДвижение.Номенклатура.Услуга Тогда НовоеДвижение.Количество = ВыборкаНоменклатура.КоличествоВДокументе; Иначе НовоеДвижение.Количество = КСписанию; ОсталосьСписать = ОсталосьСписать - КСписанию; КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры |
|||
1
Beduin
06.09.17
✎
17:10
|
(0) В ОбработкеПроведения это делать крайне не рекомендуется
|
|||
2
malex18
06.09.17
✎
17:18
|
Так это и не сработает же в обработке проведения.в модуле формы надо писать? и там на клинете-сервере создавать.да?
на кленте режим диалогвого окна а на сервере остатки получать на точке,складе? или как? |
|||
3
lodger
06.09.17
✎
17:18
|
1) задавать вопросы из ОбработкаПроведения = г..нокод.
2) для этого есть Отказ = Истина, все остальное реализуется реквизитами, параметрами, сообщениями ошибок. 3) 2 раза трясти регистр на остатки тоже так себе архитектурное решение. (если вы решите посчитать влезаете в остаток или нет перед проведением). |
|||
4
Ненавижу 1С
гуру
06.09.17
✎
17:21
|
а смысл? все эти вопросы сводятся к тому, что пользователь будет не думая постоянно жать "ДА"
|
|||
5
lodger
06.09.17
✎
17:23
|
(4) я видел еще лучше. вешается таймаут и выбирается ответ по дефолту...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |