Всем доброго дня!
Прошу подсказать как можно запретить проведение заказа покупателя если товара нет в наличии в свободном остатке(например товар зарезервирован)?
Сейчас приходится делать резерв и просматривать все строки, сделался ли на них резерв, а если строк более 300 то это очень напрягает, мы не размещаем товары в заказы поставщикам, продаем только со склада.
Хотелось бы если товара нет в свободном остатке, заказ не проводился и писалась бы ошибка, как это раньше делалось в 1с 7.7 когда проводишь реализацию.
Буду рад любым советам, может быть тема уже поднималась, но я не нашел, если есть такая то дайте ссылку.
p.s. хотелось бы все решить стандартным методом, но если нельзя можно и программно.
(1) Kutnor, конфа какая? в КА помнится была галочка, что учитывать резерв при остатках или как то еще, вот с этой галочкой, заказ сделать было нельзя если товара нет свободного.
Так из быстрых решений вот такие: описать функцию перед проведением, которая будет по строкам проверять заполненность колонки "Размещение". Если там склад, то все хорошо, если нет - скидываем отказ в истину и сообщаем пользователю. Код там простой будет.
Так же можно сделать вот такую штуку: запретить пользователям вводить строки в заказ через табличную часть. Оставить только подбор, в котором устанавливать вид подбора "По остаткам". Но конечно же вариант первый.
(10) x_under, второй вариант отпадает так как мы товар вводим в основном через сканер, а что не по сканеру то через подбор.
Решили ввести автоматизацию и "на тебе" столько проблем. Раньше все делали через подбор.
Неужели нет путей проще, казалось бы элементарная вещь. А если ковырять код, то может сделать заказ покупателя также как и реализацию, чтобы при проведении выдавал ошибку.
x_under можешь твой первый совет написать что и куда вставлять, я не программист, с кодом у меня беда, делал много чего, но с помощь подсказок.
Сам я код точно не придумаю. Спасибо!
сказки не рассказывай, заказ при отсутствии свободных остатков, указании размещения на складе в оперативном режиме не проводиться
Проведение документа "Заказ покупателя 00000000001 от 20.06.2014 11:05:10":
Свободного остатка МРА-РС-32 на складе База недостаточно.
Не хватает 98 шт; Остаток 2 шт; Требуется 100 шт
(14) shuhard, ну так никто не говорил о том, что размещение заполнено. А руками его заполнять смысла нет. Так что заказ проводится при отсутствии остатков. Ваши замечания неконстурктивны для решения задачи.
(16) Kutnor, действительно, если используете сканер подбор отпадает. Тогда непонятно как вы сканируете товар которого нет? =)
Сделайте так:
- в настройках пользователей отключите авторазмещение (Т. о. заполняться будут только склад при наличии товара)
- Пусть пользователи после сканирования товара в заказ нажимают кнопку "Заполнить и провести". При этом система предложит зарезервировать товар. Пусть соглашаются. (Т. о. программа заполнит размещение - склад, если товар есть или оставит пустым, если его нет)
- Дальше в модуле объекта документа "Заказ покупателя" найдите процедуру "ПроверитьЗаполнениеТабличнойЧастиТовары" и добавьте туда вот такой код:
Процедура ПроверитьЗаполнениеТабличнойЧастиТовары(ТаблицаПоТоварам, СтруктураШапкиДокумента, Отказ, Заголовок)
ИмяТабличнойЧасти = "Товары";
// Укажем, что надо проверить:
СтруктураОбязательныхПолей =
Новый Структура("Номенклатура, Количество, Сумма");
УправлениеЗапасами.КорректировкаСтруктурыОбязательныхПолей(ЭтотОбъект, ИмяТабличнойЧасти, СтруктураШапкиДокумента.ВидСклада, СтруктураОбязательныхПолей);
Если УчитыватьНДС Тогда
СтруктураОбязательныхПолей.Вставить("СтавкаНДС");
КонецЕсли;
//////////////////////////////////////////////////////
// ВОТ ТОТ САМЫЙ КОД ПРОВЕРКИ
СтруктураОбязательныхПолей.Вставить("Размещение");
//
ЗаполнениеДокументов.ПроверитьЗаполнениеТабличнойЧасти(ЭтотОбъект, "Товары", СтруктураОбязательныхПолей, Отказ, Заголовок);
// Здесь услуг быть не должно.
УправлениеЗапасами.ПроверитьЧтоНетУслуг(ЭтотОбъект, "Товары", ТаблицаПоТоварам, Отказ, Заголовок);
// Здесь наборов-пакетов быть не должно.
УправлениеЗапасами.ПроверитьЧтоНетНаборов(ЭтотОбъект, "Товары", ТаблицаПоТоварам, Отказ, Заголовок);
// Здесь не должно быть размещений по НТТ
УправлениеЗапасами.ПроверитьЧтоСкладНеНТТ(ЭтотОбъект, "Товары", ТаблицаПоТоварам, Отказ, Заголовок);
КонецПроцедуры // ПроверитьЗаполнениеТабличнойЧастиТовары()
Показать
Т. о. заказ с пустым размещением просто не будет проводиться
(17) x_under, товар может быть зарезервирован, но не собран, т.к. оплаты еще нет. На склад придет покупатель из Москвы и возьмет этот зарезервированный товар, как узнать что он зарезервирован? Если бы в заказе покупателя при проведении писалось что данный товар зарезервирован, то проблем бы не было.
Ваш код попозже попробую, shuhard говорит что можно стандартным способом, пусть покажет как.
Все таки лишний раз ковырять тоже не хорошо.
p.s. 1)в настройках пользователя авторазмещение давно отключил.
2)пользователи уже после сканирования товара в заказ нажимают кнопку "Заполнить и провести", только это очень напрягает, потому что есть 2 минуса:
а) если заказ прошедшим числом то это поле неактивно
б) каждый раз если что то добавляем или убавляем нужно снова нажимать эту кнопку "Заполнить и провести"
(19) Kutnor, Если зарезервированный товар для клиента в свободном доступе, то проблема будет объяснить клиенту, что он этот товар купить не может, т. к. в реализацию товар отсутствующий в свободном остатке, при не заполоненном поле "Размещение" не попадет. Как вариант для прямых клиентов сканирование присоединить не к заказу, а к реализации.
(19) Kutnor, поясните задачу. ВЫ и сами путаетесь и нас путаете. Вам необходимо, чтобы зарезервированный товар нельзя было продать, или вы хотите видеть, что он в резерве? Вы заполняете заказы сканируя в них товар? Как это? Зачем?
(27) x_under, мне необходимо чтобы зарезервированный товар не проводился еще раз в заказе покупателя, чтобы когда кладовщики делают заказ покупателя им выбивала надпись как тут.
Да мы сканируем в заказы покупателя. Это не правильно разве? У нас есть сканер и есть ТСД с программой Cleverence В этой программе нельзя начинать делать реализацию, только заказ, а потом реализацию на его основании. Функция называется отпуск товара.
Я уже сам запутался как нужно, раньше мы делали реализации и никакого учета вообще не вели. А теперь нужно вести учет.
(29) Kutnor, как вариант - можно в форму, функции СШКНоменклатура, вроде - это прямое сканирование в документ, и ОбработкаПодбора() - добавить проверку остатков
(17) x_under, у меня стоит такая же задача. Сделал как вы говорите, но 1С ведет себя странно. Если количество больше, чем на складе, то она ставит максимум доступного, ставит размещение Склад, а то чего не хватает добавляет второй строчкой с пустым размещением и размещяет заказ. Можно как-то сделать, чтобы насильно присваивался Склад и сообщал, что недостаточно товара, а не дробил строки?
(47) coolvic, только доработкой. Иначе система дробит строки, что является стандартным поведением.
Можно сделать настройку, чтобы при добавлении строки в размещение падал склад из шапки документа и все
(14) shuhard, только что допер о чем ты писал, ты размещение указываешь в ручном режиме, то есть для каждого товара нужно клацать несколько раз и ставить насильно склад. Тогда такое сообщение вылазит, а у нас в каждом документе около 200 позиций и каждый делать в ручном режиме не вариант. Мы проводим размещение автоматически через кнопку подбор и заполнение и вот после этого мне не указывает что какое то поле не заполнено, все таки x_under был прав и нужно дописывать модуль.
(38) Kutnor, ну а то =)
Есть еще один вариант: если у вас в заказе всегда один склад, то можно сделать обработку заполнения ТЧ, которая просто проставит склад из шапки в размещение, и тогда при проведении будет проверка остатка (база останется типовой), ну или можно сделать заполнение размещения просто при добавлении строки.
(39) x_under, извини не могу ответить в сообщениях, стартмани не осталось))
Про обработку с самостоятельным заполнением поля размещение я подумаю. Напиши на всякий случай сюда: info@kutnor.ru чтобы у меня твоя почта была. В паблике писать не хорошо.
P.S.
твой код из 17 не подходит, я все вставил куда нужно, но документ все равно проводится, поле размещение пустое.
Может я что то не так делаю, может кто объяснит как правильно резервировать товар до оплаты покупателю, заказ покупателя работает как то хреново, почему если товара нет в наличии он проводится? Где логика? Может нужно где то отменить размещение заказа поставщику и тогда будет только резервирование. Хотя бы сделать так, чтобы при проведении писалось что этого товара нет, а сейчас и этого нет.
(15) shuhard, ну подсказал бы, мил человек!
Пойди купи, прочитай...
Книжку я и скачать могу, проблему нужно решить сейчас, а книжку я еще месяц читать буду.
Если знаешь подскажи, я для этого тему создал, чтобы подсказывали.
Если выше описанные галочки, не стоят, то проводиться может только при условии, что графа "Размещение" не заполнена. Автоматически заполнить графу и провести можно используя кнопку "Заполнить и провести". В параметрах авторезервирования установить галку "Автоматическое резервирование", Автоматическое размещение - галку убрать. В стратегии авторезервирования по заказам выбрать: "Сначала по складам потом в заказах поставщика".
(18) Vakhmistrova, В стратегии авторезервирования по заказам выбрать: "Сначала по складам потом в заказах поставщика" я поставил.
Галочка Разрешение на превышение остатков по складу и организации не стоит.
У пользователя в настройках авторезервирования установлена галка "Автоматическое резервирование", Автоматическое размещение - галка не установлена.(по умолчанию)
Создаю заказ, пробиваю товар которого нету, жму заполнить и провести, графа "Размещение" естественно не заполнена. Документ проводится. Что не так?
(21) TMV, а в (14) написали что все решается стандартными средствами, я например думаю что можно все решить стандартными средствами, может где то галочка не стоит. Ну не может быть такая казалось бы элементарная вещь не быть в УТ 10.3
(24) AlexShap, а какая разница? сейчас вот попробовал роль менеджер по закупкам, результат такой же.
Мне кто нибудь скажет, у кого нибудь в УТ 10.3 стандартной конфе это работает? Или нужно дописывать?
Товарищ shuhard утверждает что работает, только не говорит как, другие уверяют что нужно дописывать.
42.
МимохожийОднако
14224.06.14 09:43 Сейчас в теме
(41) Kutnor, тогда я не понял про полные права в (25). Чтобы добраться до истины, запусти пошагово отладчик под этим пользователем и увидишь в каком месте проходишь мимо запрета.
(44) МимохожийОднако, я не нервничаю, я благодарен каждому кто тут тратит свое время на помощь, пусть даже не всегда полезную.
как уже писали выше весь ответ мне дали уже в 17, я это уже понял,стандарными средствами никак не заставить размещение проверять или ставить склад автоматом, код уже переписал, сейчас проверю.
Нет у меня не много не так, как на твоих скринах.
Параметры учета так стоят, в остальном есть расхождения, скрины прилагаю.
Да и все равно если даже просто делать заказ покупателя через подбор заказа, менеджер может не заметить что товар закончился (в резерве) и пробить его, а система никак ему не подскажет что он сделал глупость, должно же при проведении выходить хоть что то...
В типовой УТ10 - контроль остатков в заказе производится, если:
1) Документ проводится оперативно - убираем условие в модуле документа
2) Только по тем строкам, где указано размещение (склад или заказ поставщику) - запрещаем проведение с незаполненным полем Размещение (уже говорили)
3) У пользователя не установлено дополнительное право , что-то вроде "Разрешить отрицательные остатки". Это оставляем, просто убираем у тех, кому "не положено"
(36) SGordon1, размещение заполняем автоматически, строк в ТЧ очень много, бывает и 200 и больше, все их просмотреть заполнились ли они или нет очень сложно, иногда я сам даже листая пропускаю строку, нужно чтобы писалось где то что строка не заполнена. Сейчас если поле не заполнено все равно проводит документ и ничего не пишет. То есть как я понял из всего выше сказанного, нужно дописать конфу, стандартынм методом никак не настроить. По сути мне нужно 2 вещи:
1) убрать вообще размещение, у нас только резервирование
2) не проводить документ с пустым полем размещение.
p.s. Мне еще очень хочется услышать кто как работает.
У нас Оптовый склад, продаем как через интернет, так и на складе.
Допустим пришел заказ через интернет, менеджер его внес в заказ покупателя через подбор, зарезервировал и сделал на его основании счет покупателю, правильно? Если покупатель счет оплатил то уже на основании заказа делаем реализацию и отгружаем товар. А если покупатель просит внести изменения? у нас это очень часто бывает, в основном бывает нужно добавить, но иногда и убрать. Как быть? Переделывать заказ и счет? Или создавать документ коррекция заказа, но счет все равно придется переделывать. Не хочется переделывать 2 документа, так как бывает что очень много переделывать, остается удалить старый счет и сделать новый? тоже не вариант, будет большой разброс номеров в счетах. Раньше в 7.7 была такая хорошая вещь, непотвержденная заявка там вроде и резерв был и счет делали, 2 в одном.
А если заказ не через интернет, если покупатель приехал и отобрал товары, как ему считать? тут же реализацию делать, без всяких заказов покупателя? Или заказ покупателя все равно нужен?