gifts2017

Регистрация цен номенклатуры поступлением

Опубликовал Андрей Уткаев (AndrewUtkaev) в раздел Программирование - Практика программирования

Часто менеджеры ленятся делать "Установку цен номенклатуры" на основании документа поступления. Решить вопрос поможет приведенная процедура.

Чтобы цены регистрировались автоматически, нужно немного подкорректировать конфигурацию - добавить в список возможных движений документа "Поступление товаров и услуг" регистр сведений "ЦеныНоменклатуры".

Также необходимо добавить подписку на событие (ОбработкаПроведения) и экспортную процедуру в общий модуль. Приведу текст процедуры:

Процедура УстановкаЦенПоступлением(Источник, Отказ, РежимПроведения) Экспорт
    НаборДвижений = Источник.Движения.ЦеныНоменклатуры;
    ТипЦен = ?(ТипЗнч(Источник.ТипЦен) = Тип("СправочникСсылка.ТипыЦенНоменклатурыКонтрагентов"),Источник.ТипЦен.ТипЦеныНоменклатуры,Неопределено);
    Если ЗначениеЗаполнено(ТипЦен) Тогда
        Если НЕ ТипЦен.Рассчитывается Тогда
            Запрос = Новый Запрос;
            Запрос.Текст = "ВЫБРАТЬ
                           |    ЕСТЬNULL(ВложенныйЗапрос.КоличествоЗаписейЦен, 0) КАК Уникальность,
                           |    &ТипЦен,
                           |    Товары.Номенклатура,
                           |    Товары.ЕдиницаИзмерения,
                           |    Товары.ХарактеристикаНоменклатуры,
                           |    Товары.Цена
                           |ПОМЕСТИТЬ ТаблицаЦен
                           |ИЗ
                           |    (ВЫБРАТЬ РАЗЛИЧНЫЕ
                           |        УникальныеТовары.Номенклатура КАК Номенклатура,
                           |        УникальныеТовары.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
                           |        УникальныеТовары.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                           |        УникальныеТовары.Цена КАК Цена
                           |    ИЗ
                           |        (ВЫБРАТЬ РАЗЛИЧНЫЕ
                           |            Товары.Номенклатура КАК Номенклатура,
                           |            Товары.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
                           |            Товары.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                           |            МАКСИМУМ(Товары.Цена) КАК Цена
                           |        ИЗ
                           |            Документ.ПоступлениеТоваровУслуг.Товары КАК Товары
                           |        ГДЕ
                           |            Товары.Ссылка = &Ссылка
                           |
                           |        СГРУППИРОВАТЬ ПО
                           |            Товары.Номенклатура,
                           |            Товары.ЕдиницаИзмерения,
                           |            Товары.ХарактеристикаНоменклатуры) КАК УникальныеТовары) КАК Товары
                           |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                           |            КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Товары.Ссылка) КАК КоличествоЗаписейЦен,
                           |            Товары.Номенклатура КАК Номенклатура,
                           |            ЦеныНоменклатуры.ТипЦен КАК ТипЦен
                           |        ИЗ
                           |            Документ.ПоступлениеТоваровУслуг.Товары КАК Товары
                           |                ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
                           |                ПО Товары.Номенклатура = ЦеныНоменклатуры.Номенклатура
                           |        ГДЕ
                           |            ЦеныНоменклатуры.Период МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаЦен, ДЕНЬ) И КОНЕЦПЕРИОДА(&ДатаЦен, ДЕНЬ)
                           |            И Товары.Ссылка = &Ссылка
                           |            И ЦеныНоменклатуры.ТипЦен = &ТипЦен
                           |            И ЦеныНоменклатуры.Регистратор <> &Ссылка
                           |
                           |        СГРУППИРОВАТЬ ПО
                           |            Товары.Номенклатура,
                           |            ЦеныНоменклатуры.ТипЦен) КАК ВложенныйЗапрос
                           |        ПО Товары.Номенклатура = ВложенныйЗапрос.Номенклатура
                           |;
                           |
                           |////////////////////////////////////////////////////////////////////////////////
                           |ВЫБРАТЬ
                           |    ТаблицаЦен.Уникальность,
                           |    ТаблицаЦен.ТипЦен,
                           |    ТаблицаЦен.Номенклатура КАК Номенклатура,
                           |    ТаблицаЦен.ЕдиницаИзмерения,
                           |    ТаблицаЦен.ХарактеристикаНоменклатуры,
                           |    ТаблицаЦен.Цена
                           |ИЗ
                           |    ТаблицаЦен КАК ТаблицаЦен
                           |ГДЕ
                           |    ТаблицаЦен.Уникальность = 0";
            Запрос.УстановитьПараметр("Ссылка", Источник.Ссылка);    //Документ ссылка: Поступление товаров и услуг
            Запрос.УстановитьПараметр("ДатаЦен",    Источник.МоментВремени().Дата);
            Запрос.УстановитьПараметр("ТипЦен", ТипЦен);
            ТаблицаДвижений = Запрос.Выполнить().Выгрузить();
            ТаблицаДвижений.Колонки.Добавить("Период");
            ТаблицаДвижений.Колонки.Добавить("Активность");
            НаборДвижений.мПериод          = Источник.Дата;


            НаборДвижений.мТаблицаДвижений = ТаблицаДвижений;
            Если НЕ ТаблицаДвижений.Количество() = 0 Тогда
                Источник.Движения.ЦеныНоменклатуры.ВыполнитьДвижения();
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Процедура учитывает такие моменты:

  • В документе поступления несколько строчек одной номенклатуры (выбирается максимальная цена) 
  • Учитывается уникальность регистра сведений "ЦеныНоменклатуры"  в течение дня

 Основное условие - необходимо указывать Тип цен номенклатуры контрагента в поступлении, в свою очередь, чтобы в типе цен контрагента была указана ссылка на тип цен номенклатуры


См. также

Подписаться Добавить вознаграждение

Комментарии

1. Дмитрий Воробьев (matpukc) 20.11.11 20:22
Как можно не делать установку цен? Ведь все равно если цена закупа изменилась, нужно анализировать и менять розничную цену или другую, и опять же делать установку цен.
2. Андрей Уткаев (AndrewUtkaev) 20.11.11 20:27
Я не говорю, что ее совсем не нужно делать. В регистре всегда должна быть "свежая" закупочная цена, и если цены динамически рассчитываются на основе закупочной, то такой метод подойдет. Если не динамические цены - можно делать установку цен и устанавливать другие цены, кроме закупочной.
3. Александр Зубцов (iov) 21.11.11 09:57
(0)На мой взгляд несколько нюансов уже есть.
корректировка ошибочной информации как?
Групповое перепроведение что сделает?
Движения при отмене проведения куда денутся?
выбор максимальной цены? пример 1) 1 коробок - спички по 60 коп 2)1 упаковка - Спички по 55 коп 3)1 вагон - спички по 50 коп. запишется закупочная по 60 - продаем по закуп + % думаете менеджеры скажут спасибо?

Вообщем как совет - сделай еще проверок разных + добавь "вилки" изменения цен.

А вообще делаешь подписку - и там на основании вводишь документ установки цен - который просто открываешь а пользователь сам принимает решения проводить или нет.
4. Oskar Belov (darin44) 21.11.11 11:34
а под УТ10 это будет работать?
5. Андрей Уткаев (AndrewUtkaev) 21.11.11 11:39
iov пишет:
1 коробок - спички по 60 коп 2)1 упаковка - Спички по 55 коп 3)1 вагон - спички по 50 коп. запишется закупочная по 60


Единица измерения берется из табличной части, не базовая

iov пишет:
Групповое перепроведение что сделает?

Если автоматическое удаление движений отключено - нужно делать еще одну подписку. Ну у кого включено - нормально отработается и групповое и не групповое проведение.
iov пишет:
Движения при отмене проведения куда денутся?
выбор максимальной цены? пример 1) 1 коробок - спички по 60 коп 2)1 упаковка - Спички по 55 коп 3)1 вагон - спички по 50 коп. запишется закупочная по 60 - продаем по закуп + % думаете менеджеры скажут спасибо?

Не вижу проблемы - ед. изм. берется из табличной части.
6. Андрей Уткаев (AndrewUtkaev) 21.11.11 11:39
darin44 пишет:

а под УТ10 это будет работать?

Будет
7. Венер Давлетгареев (vener2004) 23.11.11 11:48
Это пример как не надо делать...
Откройте для себя подписки.
8. Андрей Уткаев (AndrewUtkaev) 23.11.11 11:50
vener2004 пишет:
ройте для себя подписки.

Больно уж туманно, что имеется ввиду?
9. Венер Давлетгареев (vener2004) 23.11.11 12:04
(3)iov уже всё написал ранее "А вообще делаешь подписку - и там на основании вводишь документ установки цен". Я только его поддерживаю.
С таким подходом вмешательства в типовую конфигурацию как у вас, после "десятой" доработки конфигурация станет необновляемой дорогообновляемой.
10. Александр Зубцов (iov) 23.11.11 12:05
(5) единицы измерения не причем я про объемы поставки.
11. Александр Зубцов (iov) 23.11.11 12:07
(0) А вообще не важно - опыт это либо разбитая голова либо крепкая и непробиваемая шишка (С) Грабли.
12. Андрей Уткаев (AndrewUtkaev) 23.11.11 12:26
(10) iov,

Ну и пусть будет полная история цен - это же хорошо. А если были приходы, в таком порядке как вы описываете, менеджер, вручную, что сделает? (тоже самое)
13. Андрей Уткаев (AndrewUtkaev) 23.11.11 12:52
(9) vener2004,

Подписка и призвана удешевить обновления или это не так? Чем эта подписка отличается от подписки с открытием устновки цен?
14. Венер Давлетгареев (vener2004) 23.11.11 13:14
Извините, я не про само использование подписок хотел сказать, сначала невнимательно прочитал публикацию. Я про "нужно немного подкорректировать конфигурацию - добавить в список возможных движений документа "Поступление товаров и услуг" регистр сведений "ЦеныНоменклатуры"", это влияет на обновление.
Зачем изменять типовой регистр, если есть типовой регистратор "Установка цен номенклатуры", в который нужно лишь передать необходимую информацию, и он сам сделает то что нужно.
15. Александр Зубцов (iov) 23.11.11 15:47
(12) все эти поступления в одном документе . и единицы одинаковые. поверьте на слово -такое бывает. и при записи соотвтственно выбирают максимальную поставку.
16. samir omarov (balabani) 24.11.11 17:57
Да Спосибо За Модул. Я не Понел как ето добавит В конфигуратор.Оброботка Приведения Не возможна Потомушто она Сама прочудура.А в Обшуй Модул куда там Много Модула и много прочедуру
18. Александр (Sedow) 06.11.14 18:55
Добрый день.
"Также необходимо добавить подписку на событие (ОбработкаПроведения)" как это сделать?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа