2010
19
июля
Реестр цен для покупателя в 1С Предприятие 7.7
Автор статьи: admin | Просмотров: 362 | Комментариев: 6
Все чаще фирмы, работающие с сетями сталкиваются с такой ситуацией, когда сети требуют неизменность цен на протяжении действия договора. Иными словами при заключении договора с сетями, подписывается так же документ, под названием «Реестр цен«, в котором прописаны все цены, на все поставляемые товары и они должны быть неизменными.
Однако фирма работает в основном на определенной наценке, то есть если поднял цены поставщик товара, то автоматически поднимается цена реализации. После подписания реестра цен такой принцип перестает работать. Как можно зафиксировать цены на конкретные товары для конкретного покупателя?
Можно, конечно, использовать для реализации механизма базовые типы цен, но дело в том, что если покупателей – сетей много, то это превращается в гемморой.
Я для этой цели в одной организации придумал и ввел специальный механизм для ввода, контроля реестровых цен.
Как зафиксировать цены в 1С
Я долго думать не стал, заморачиваясь с подключением внешних файлов – база 1С у клиента и так пахана перепахана.
Ввел новый документ, обозвал его «Реестр Цен» (обозвать можно как угодно, мне зведы подсказали, что назвать надо именно так).
Документ имеет реквизиты:
Контрагент - это для какого контрагента устанавливаются цены.
ВеныВклНДС - чтобы обозначить принцип расчета НДС для этого контрагента
А также реквизиты табличной части:
Номенклатура - товар, на который будет установлена цена
Ед - единица измерения товара (номенклатуры)
Цена - совственно цена, которая прописана в бумажном документе Реестр цен, прилагаемому к договору.
Документ не проводится и имеет смысл справочника, то есть используется только для хранения справочных данных.
Также ввел ограничение на сохранение документа только на 01 января, чтобы в последствие не болго искать документ по всей базе.
Далее создаем необходимое количество документов «Особые цены«, по количеству контрагентов с фиксированными ценами и оператор заполняет их номенклатурой и ценами. Также можно в документе дописать дополнительные процедуры для облегчения жизни оператора, например заполнить номенклатурой по определенным признакам, работать с единицами измерений и т.д. Здесь уже надо исходить из реалий конкретной фирмы.
Выставляем реестровые цены в реализации
Далее все просто. В документе «Реализация» можно приделать кнопку которая будет «вытаскивать» цены из документа «Особые цены«, а можно и полностью автоматизировать работу оператора, чтобы он даже и не думал о том, что у данного контрагента фиксированные цены.
В моем случае клиент захотел кнопку, на которую я повесил процедуру
Процедура УстановитьСпецЦены()
ДокЦен = СоздатьОбъект("Документ.ОсобыеЦены");
ДокЦен.ВыбратьДокументы(НачГода(ТекущаяДата()),НачГода(ТекущаяДата()));
Пока ДокЦен.ПолучитьДокумент() = 1 Цикл
Если ДокЦен.Контрагент <> Контрагент Тогда
Продолжить;
КонецЕсли;
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
Найдено =0;
ДокЦен.ВыбратьСтроки();
Пока ДокЦен.ПолучитьСтроку() = 1 Цикл
Если Номенклатура = ДокЦен.Номенклатура Тогда
Цена = ДокЦен.Цена;
глПересчетТаблЧасти(Контекст,"Цена");
Найдено = 1;
КонецЕсли;
КонецЦикла;
Если Найдено <> 1 Тогда
Сообщить("Внимание!!! Для номенклатуры "+Номенклатура+" нет цены");
КонецЕсли;
КонецЦикла;
КонецЦикла;
Вот в общем то и все.



августа 6, 2010 at 22:57
У меня к тебе кстати вопрос.
Когда «Ожидание захвата журнала транзакций».
Ты не в курсе можно ли как-нибудь выяснить кто захватил транзакцию?
августа 6, 2010 at 22:44
Ну с помеченными на удаление документами – согласен. по уму надо добавить 3 строчки.
С запросом тоже согласен. В этом конкретном примере наименований товаров было менее 100, и контарентов с реестровыми ценами – менее 10, поэтому в принципе не критично.
А вообще запросы рулят конечно. Гораздо быстрее можно получить необходимые данные.
августа 6, 2010 at 17:39
Плюс у тебя обрабатываются помеченные на удаление документы, что тоже не всегда логично.
августа 6, 2010 at 17:37
Примерно так:Процедура УстановитьСпецЦены() Запрос = СоздатьОбъект(«Запрос»); ДатаЗапроса = НачГода(ТекущаяДата(); ТекстЗапроса = » |Период с ДатаЗапроса по ДатаЗапроса; |Обрабатывать НеПомеченныеНаУдаление; |КонтрагентРеестр = Документ.ОсобыеЦены.Контрагент; |Товар = Документ.ОсобыеЦены.Номенклатура; |ЦенаТовара = Документ.ОсобыеЦены.Цена; |Группировка Товар; |Условие (КонтрагентРеестр = Контрагент);»; Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Сообщить(«Не удалось выполнить запрос»,»!!!»); Возврат; КонецЕсли; ВыбратьСтроки(); Пока ПолучитьСтроку() = 1 Цикл Если Запрос.Получить(Номенклатура) = 1 Тогда Цена = Запрос.ЦенаТовара; глПересчетТаблЧасти(Контекст,»Цена»); Иначе Сообщить(«Внимание!!! Для номенклатуры «+Номенклатура+» нет цены»); КонецЕсли; КонецЦикла;КонецПроцедуры
августа 6, 2010 at 17:28
Тем более стразу можно получить таблицу с ценами и не бегать по строкам документа… Короче Запрос форева
августа 6, 2010 at 17:27
Я бы рекомендовал делать выборку документов не через ВыбратьДокументы, а через запрос.Для большого количества документов это будет работать значительно быстрее.