Пример решения практической задачи. В отделе брака уценяли товар по схеме – списание, оприходование, переоценка на магазины. Занимало много времени, попросили автоматизировать.
Отдел брака работает в УТ. Товары продаются в Рознице. Налажен двухсторонний обмен УТ-Розница. Новые объекты добавлять нежелательно, т.к. тогда придется дорабатывать схему обмена.
Товары с недостатками уценяются практически в два раза.
Есть серийный товар, он учитывается на характеристиках номенклатуры, т.к. в Рознице поддерживаются только характеристики, а не серии. Есть несерийный товар. После уценки несерийному товару присваивается внутренний штрих-код и такая же серия, чтобы можно было продавать его по цене, отличающейся от нормального товара.
При уценке серии товара присваивается дополнительное свойство Уценка = истина, чтобы можно было отделить при анализе уцененный товар от обычного.
Товар списывается, затем приходуется, затем переоценивается на тот магазин, куда его хотят отправить.
Все это проделывается вручную. Нужно автоматизировать, т.к. объемы уценки растут.
Создана внешняя обработка табличной части документов. Ее можно прописать в любой документ, например перемещение или инвентаризация.
Обработка имеет вид:
При открытии в обработку переносятся все товары и характеристики из исходного документа. Работа ведется со штучным количеством, поэтому предполагается что количество всегда равно единице и не выводится.
При нажатии на кнопку «Розн. цены» в колонку «Цена розничная мин» и «Цена розничная макс» выводятся розничные цены на выбранных на закладке «Настройки» магазинов, т.к. цены могут различаться. Если максимальная цена равна минимальной, она заменяется прочерком. Если цены не равны, они выделяются жирным шрифтом.
При нажатии на кнопку «Закуп. цены» в колонку «Цена закуп» вносится последняя закупочная цена, чтобы можно было отслеживать себестоимость поставки.
В колонку «Цена розн. новая» нужно внести новые цены по каждой позиции. Они могут отличаться в зависимости от качества уцененного товара.
Вся работа ведется с выделенными строками.
Кнопка «Создать характеристики» для выделенных строк обрабатывает характеристики:
Для товаров, у которых нет характеристик, нужно распечатать штрих-кода. Кнопка «Выделить товары, где ШК с префиксом» выделяет такие товары. Кнопка «Напечатать ШК» передает штрихкода в обработку печати ШК:
При нажатии кнопки «Создать документы» по выделенным позициям создаются три документа – списание, оприходование и переоценка.
При нажатии кнопки «Внести в документ» можно внести товары и характеристики обратно в документ, если это требуется.
Раньше использовалась схема, когда нужно было сделать переоценку на тот магазин, куда отправлялся товар. Это усложняло работу отдела брака. Они должны были не только делать перемещения, но еще и не забыть сделать переоценку.
Соответственно, было решено сделать доработку, чтобы цены назначались на некий виртуальный магазин, названный «Общие цены». Это облегчило работу по уценке. Соответственно, товар можно перемещать на любую точку без необходимости переоценки на точке.
К статье прикладывается рабочая обработка для того, чтобы можно было понять интерфейсное решение. Кроме того, выложены некоторые использованные в модуле функции.
Код доработки процедуры по получению цены номенклатуры в рознице:
Функция ПолучитьЦенуНоменклатурыВРознице(ДатаПараметр = Неопределено, МагазинСклад, Номенклатура, ХарактеристикаНоменклатуры = Неопределено, ЕдиницаИзмерения = Неопределено) Экспорт
//Осипов
//Общие цены только по товарам с характеристикой... //для тестов: 357918046745024 - обыная, 357918046854842 - уценка
Если МагазинСклад <> Справочники.Магазины.ОбщиеЦены И ЗначениеЗаполнено(ХарактеристикаНоменклатуры) Тогда
НоваяПолученнаяЦена = ПолучитьЦенуНоменклатурыВРознице(ДатаПараметр, Справочники.Магазины.ОбщиеЦены, Номенклатура, ХарактеристикаНоменклатуры, ЕдиницаИзмерения);
Если ЗначениеЗаполнено(НоваяПолученнаяЦена) Тогда
ПолученнаяЦена = НоваяПолученнаяЦена;
КонецЕсли;
КонецЕсли;
Возврат ПолученнаяЦена;
КонецФункции
Код доработки плана обмена розницы:
Процедура УбратьИзРегистраДанныеНеНужныеДляПереносаПоМагазину(ЭлементДанных)
ТекущееРешение = (ЭтотОбъект.Магазины.Найти(ТекущийМагазин, "Магазин") <> Неопределено);
//Осипов для общих цен - всегда выгружаем...
ТекущееРешение = ТекущееРешение ИЛИ ТекущийМагазин = Справочники.Магазины.ОбщиеЦены;
КонецПроцедуры