Продажа определенного товара только по розничной цене.

1. Самоделкин 2 07.12.14 18:53 Сейчас в теме
ТиС 9.2
Т.к. некоторые товары на нашей фирме периодически пропадают у поставщиков на неопределенное время, возникла задача запретить продавать такие товары по оптовым ценам.
Делаю на форме номенклатуры окошко для ввода числа, добавляю реквизит-число (к примеру, МинОстОпт), а вот что дальше с этим делать не знаю.
Предполагаю, что можно реализовать это двумя способами:
1. При выборе контрагента, проверять установленный у него Тип Цен (кроме закупочной и розничной) и в Подборе Товара уменьшать видимое количество товара на фирме и складе, у которого установлен МинОстОпт, на это МинОстОпт.
Например: остаток товара на складе и фирме равен 5, МинОстОпт установлен 2; в Подборе Товара видим на складе и фирме, что остаток этого товара равен 3.
2. Все тоже самое, что и п.1 только, количество товара не меняется, а идет замена любого Типа Цен, кроме закупочной и розничной) на розничную.
Например: количество товара на фирме и складе остается прежним 5 шт, а вот цена вместо 3 руб.(как в опте) устанавливается равной 5 руб.(как в рознице).
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
4. vcv 89 08.12.14 08:12 Сейчас в теме
(3) Самоделкин, Ну что-ж, удачи.
Мелкий советик: В глобальнике есть функция глВернутьЦену. Когда в конфигурации что-то либо хочет получить цену, вызывает эту функцию или обёртку над ней глПолучитьЦену. В самом начале глВернутьЦену определяется тип цены, из которого реально будут браться цены
НужныйТипЦен	= ?(ПустоеЗначение(Рассчетная) = 1, ТипЦены, ТипЦены.БазовыйТипЦен);

Можно в этом месте вставить определение наличного остатка и, если он меньше указанного в номенклатуре, брать другой тип цен. Только обязательно проверить работу обработок ФормированиеЦен и ОбновлениеЦенИзДокумента. При их работе проверка остатка и подмена типа цен не должна делаться. Можно передавать дополнительный параметр в функцию, показывающий, нужен или нет контроль наличного остатка.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. vcv 89 07.12.14 19:58 Сейчас в теме
Для приличной реализации варианта 1, лучше пригласить специалиста. Сам, уже извини, на мой взгляд не потянешь.
Можно воспользоваться вариантом два даже без программирования. Просто ставить в оптовый прайс розничную цену. Цену можно ставить штатной обработкой "Формирование цен", отбирая товары с остатком ниже минимального.
3. Самоделкин 2 07.12.14 20:05 Сейчас в теме
(2) vcv, в прайсе, сделать не большая проблема.
Я все-таки попробую реализовать п.1.
4. vcv 89 08.12.14 08:12 Сейчас в теме
(3) Самоделкин, Ну что-ж, удачи.
Мелкий советик: В глобальнике есть функция глВернутьЦену. Когда в конфигурации что-то либо хочет получить цену, вызывает эту функцию или обёртку над ней глПолучитьЦену. В самом начале глВернутьЦену определяется тип цены, из которого реально будут браться цены
НужныйТипЦен	= ?(ПустоеЗначение(Рассчетная) = 1, ТипЦены, ТипЦены.БазовыйТипЦен);

Можно в этом месте вставить определение наличного остатка и, если он меньше указанного в номенклатуре, брать другой тип цен. Только обязательно проверить работу обработок ФормированиеЦен и ОбновлениеЦенИзДокумента. При их работе проверка остатка и подмена типа цен не должна делаться. Можно передавать дополнительный параметр в функцию, показывающий, нужен или нет контроль наличного остатка.
5. Самоделкин 2 08.12.14 10:32 Сейчас в теме
(4) vcv, СПАСИБО, за совет! Будет время, буду пробовать.
Странно, вознаграждение было 2$m вчера, сегодня уже 1$m.
6. Самоделкин 2 09.12.14 22:34 Сейчас в теме
(4) vcv,решил сделать немного по другому, т.к. не разобрался как определить ТипЦены, это сделал в Глоб.модуле:
// Получим остаток.
		Если ПустоеЗначение(Склад) = 0 Тогда
			Если ТипЗначенияСтр(ФирмаДляОстатковТМЦ) = "Справочник" Тогда  // нужны сводные остатки только по одной фирме 
				Если Номенклатура.МинОстОпт <> 0 Тогда
				ОстатокНаСкладе = ОстаткиТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,Номенклатура,Склад,,"Количество") - Номенклатура.МинОстОпт;  
				ОстатокПоФирме  = ОстаткиТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,Номенклатура,,,"Количество") - Номенклатура.МинОстОпт;       
				Иначе                                     
				ОстатокНаСкладе = ОстаткиТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,Номенклатура,Склад,,"Количество"); 
				ОстатокПоФирме  = ОстаткиТМЦ.СводныйОстаток(ФирмаДляОстатковТМЦ,Номенклатура,,,"Количество"); 
				КонецЕсли;
Показать

работает правильно, но как это связать с контрагентом?
7. l_user 10.12.14 06:22 Сейчас в теме
(6) Самоделкин,
но как это связать с контрагентом?

Если вы уже стали исправлять глобальный модуль, то можно попробовать изменить количество параметров процедуры "глПолучитьОстаткиНоменклатуры".
Например сейчас:
Процедура глПолучитьОстаткиНоменклатуры(ФирмаДляОстатковТМЦ, Номенклатура, Единица, ОстаткиТМЦ, ОстатокНаСкладе, ОстатокПоФирме, Склад, 
	                                    РезервыТМЦ = 0, УчитыватьРезерв = 0, Договор = 0, Заявка = 0) Экспорт

У вас может быть
Процедура глПолучитьОстаткиНоменклатуры(ФирмаДляОстатковТМЦ, Номенклатура, Единица, ОстаткиТМЦ, ОстатокНаСкладе, ОстатокПоФирме, Склад, 
	                                    РезервыТМЦ = 0, УчитыватьРезерв = 0, Договор = 0, Заявка = 0, ПараметрКонтрагента=0) Экспорт
.
В коде процедуры разбирать тип значения параметра "ПараметрКонтрагента": если это не число, то выполнять нужные вам действия, если число, то должно работать по стандартной схеме.
Затем исправить вызов процедуры "глПолучитьОстаткиНоменклатуры" в тех местах, где вам нужно.
Обратите внимание, что это только пример реализации.
10. Самоделкин 2 10.12.14 10:43 Сейчас в теме
8. vcv 89 10.12.14 10:03 Сейчас в теме
(6) Самоделкин, Я видимо не врубился в исходную задачу. Зачем связывать с контрагентом? Есть дефицитный товар, на остатки которого нужно автоматически увеличить цену. Например, вместо оптовой цены продавать по розничной.
Предполагаю такое решение:
- В справочнике типов цен добавляем реквизит ТипЦенДефицитныхОстатков типа "Справочник.ТипыЦен".
- В справочнике номенклатуры реквизит МинОстОпт (взят из (1)) для хранения границы остатка, ниже которой нужно продавать по другой цене.
- Функцию глВернутьЦену меняем примерно следующим образом, вставляя изменения после строки
НужныйТипЦен    = ?(ПустоеЗначение(Рассчетная) = 1, ТипЦены, ТипЦены.БазовыйТипЦен);

НужныйТипЦен    = ?(ПустоеЗначение(Рассчетная) = 1, ТипЦены, ТипЦены.БазовыйТипЦен);
ТипЦенДефицитныхОстатков = НужныйТипЦен.ТипЦенДефицитныхОстатков;
Если ПустоеЗначение(ТипЦенДефицитныхОстатков) = 0 Тогда
  Если ПустоеЗначение(Номенклатура.МинОстОпт) = 0 Тогда
    времРегистры = СоздатьОбъект("Регистры");
    времОстаткиТМЦ = времРегистры.ОстаткиТМЦ;
    времОстаткиТМЦ.УстановитьЗначениеФильтра("Номенклатура",Номенклатура);
    Если ДатаЦен < ПолучитьДатуТА() Тогда
      времОстаткиТМЦ.ВременныйРасчет();
      времОстаткиТМЦ.РассчитатьРегистрыПо(ДатаЦен);
    КонецЕсли;
    ОстатокНоменклатуры = времОстаткиТМЦ.СводныйОстаток(,,,,"Количество");
    Если ОстатокНоменклатуры <= Номенклатура.МинОстОпт Тогда
      НужныйТипЦен = ТипЦенДефицитныхОстатков;
    КонецЕсли;
  КонецЕсли;
КонецЕсли;
Показать
9. vcv 89 10.12.14 10:06 Сейчас в теме
Дополнительно к (8). Так может подойти только если у вас учет дефицитных товаров в целом по всем возможным фирмам. Если имеется несколько фирм и нужно учитывать остаток отдельно по фирме документа, тогда нужно передавать в функцию параметром, например, контекст документа.
И не забудь допилить для корректной работы обработок, помянутых в (4).
11. Самоделкин 2 10.12.14 10:57 Сейчас в теме
(8) vcv, нет, Вы все правильно поняли - это я уже начал мудрить.
Не догадался до дополнительно реквизита в справочнике цен.
Вообще-то, страшновато менять что-то в Глоб.модуле - это все-равно, что, если плохо разбираешься в двигателях авто, залезть туда и что-то переделать, другое дело подтянуть ремень генератора.
Вот было бы хорошо в самой реализации делать подмену, но похоже выбора у меня нет.
Спасибо, за помощь!
12. CheBurator 3122 11.12.14 02:05 Сейчас в теме
Вариант 1 -дырявый
В форме подбора незавимо от того что вы там показываете на форме -не существует запрета ввести любое количество. Так что я тупо введу заведомо больше чес вижу в форме подбора и все
13. Самоделкин 2 11.12.14 19:43 Сейчас в теме
Туплю по страшному, почему не сохраняется реквизит?
Прикрепленные файлы:
14. Кошки рулят 11.12.14 19:54 Сейчас в теме
Ужас какой!
Угробит базу (0), могу на деньги поспорить, что угробит ...
Наверное, в сложившейся критической для базы ситуации можно посоветовать использовать для этой задачи штатные возможности конфигурации - т.е. переместить эти товары на розничный склад, а с других складов не отгружать.
15. Самоделкин 2 11.12.14 20:32 Сейчас в теме
(14) Кошки рулят, чью базу, где и когда?
Нужен был бы розничный склад, он бы был.
16. vcv 89 11.12.14 20:53 Сейчас в теме
(14) Кошки рулят, Спокойно. Все учились когда-то. От таких ошибок база не пострадает.
(13) Самоделкин, Не там реквизит. Для справочника ТипыЦен включено редактирование в диалоге (второй скриншот). Соответственно размещать новые реквизиты нужно именно в форме элемента.
17. Самоделкин 2 11.12.14 21:13 Сейчас в теме
(16) vcv, спасибо, т.е. тогда каждому типа цен я смогу присвоить свою цену?
К примеру: оптовая 1 - розница, оптовая 2 - оптовая, оптовая - розница.
Или там для всех типов цен будет одна?
Просто комп отобрали, проверить нет возможности.
18. Самоделкин 2 11.12.14 21:50 Сейчас в теме
(16) vcv, Вы просто кудесник, все работает как в (17).

Еще раз, ОГРОМНОЕ СПАСИБО!!!!!!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот