Интерфейс редактирования нескольких прайс-листов

Приемы и подходы, обмен опытом

Модераторы: Screw, larin

Ответить
АлександерK
заказчик
Сообщения: 89
Зарегистрирован: Ср, 19/09/2007 08:48
Имя Фамилия: Александр Киселев
Откуда: Красный Октябрь ОАО ДОК
Контактная информация:

Интерфейс редактирования нескольких прайс-листов

Сообщение АлександерK »

Здравствуйте.

Возникла необходимость написать интерфейс редактирования цен из нескольких прайс-листов, суть такова:
1.Количество прайс-листов изначально не известно, они должны добавляться динамически пользователем по нажатию кнопки
2.Не обязательно чтобы интерфейс был динамическим и применял внесенные изменения в соответствующие прайс-листы сразу после редактирования. Можно статичный брауз с Наименованием МЦ, Баркодом, и колонками цен из выбранных прайс-листов и отдельной кнопкой "Обновить цены"

Может быть кто-то сталкивался с подобной задачкой?

Примерный внешний вид интерфейса редактирования на картинке:
Вложения
PricesEditor.JPG
PricesEditor.JPG (24.2 КБ) 13505 просмотров
vadim
топ-софт
Сообщения: 197
Зарегистрирован: Чт, 06/09/2007 17:38
Имя Фамилия: Вадим Володько
Откуда: ТопСофт
Контактная информация:

Сообщение vadim »

Хотелось бы уточнить несколько моментов:
1) сколько всего прайс-листов?
2) по сколько примерно в них номенклатурных позиций?
3) коррелируют ли цены между прайс-листами?

Как Вы уже наверняка догадались по вопросам, несмотря на то, что такая постановка задачи вполне имеет право на жизнь, вполне вероятно, что стоящую перед организацией задачу можно решить иными, более эффективными способами (особенно в том случае, если ответ на 3й вопрос утвердительный), а именно:
- формируем базовый прайс-лист (например, крупнооптовый)
- на базе него формируем ряд прайс-листов с нужеными уровнями наценок: 5%, 10%, 20%, 50%, округляя цены в каждом при необходимости.
АлександерK
заказчик
Сообщения: 89
Зарегистрирован: Ср, 19/09/2007 08:48
Имя Фамилия: Александр Киселев
Откуда: Красный Октябрь ОАО ДОК
Контактная информация:

Сообщение АлександерK »

Здравствуйте, Вадим.

1.Прайс-листов как минимум 6, но не факт что нет еще тех, о которых я не знаю.
2.Номенклатура варьируется в пределах в 2000 - 2500 наименований
3.Базовой цены, от которой происходит наценка, нет. К этому я сейчас все хочу подвести, потому что то, как работают сейчас - это "убийство".
И даже при том, что будет базовая цена четкой корреляции не будет, т.к. будут всевозможные акции, распродажи и т.д., цены (наценку/скидку) которых не спрогнозировать сейчас.

Еще хочу добавить, что данным интерфейсом хотели "убить 2х зайцев":
1.создать универсальный редактор цен в выбранных прайс-листах
2.получать, на основании данных этого интерфейса, удобный отчет со всеми возможностями его обработки в ms excel
vadim
топ-софт
Сообщения: 197
Зарегистрирован: Чт, 06/09/2007 17:38
Имя Фамилия: Вадим Володько
Откуда: ТопСофт
Контактная информация:

Сообщение vadim »

В принципе, реализовать такое несложно.
Вы хотите заказать эту работу нам или написать самостоятельно?

Если самостоятельно - с какими именно сложностями столкнулись?
Пока не начали? Для начала рекомендую максимально уточнить/детализировать постановку.
Как минимум, зафиксировать, что все прайс-листы должны быть только одного типа (например, рублевые) и т.п. Затем - заводите таблицу в памяти с записью, к оторой достаточно места для хранения информации по матценностям и ценам из всех прайсов (а также ссылок на позиции). Запрашиваете множественный выбор прайс-листов. Накачиваете из него данную таблицу в памяти. При отображении светите измененные поля (где значение в памяти подредактировано и отличается от значения в базе) другим цветом. Включаете/отключаете требуемое количество столбцов в browse (по количеству прайс-листов). По нажатию кнопки собственно обновляете значения в таблицах БД из таблицы в памяти. Делаете печать в нужном Вам виде... Думаю, за пару недель вполне можно обкатать и сделать требуемый вариант. Опять же, имея в начале четкую постановку, что хотите сделать. 8-)
АлександерK
заказчик
Сообщения: 89
Зарегистрирован: Ср, 19/09/2007 08:48
Имя Фамилия: Александр Киселев
Откуда: Красный Октябрь ОАО ДОК
Контактная информация:

Сообщение АлександерK »

1.Писать хотим сами, благо что сотрудник в должности программиста "Галактики" есть ;-)

2.Постановка задачи уточнена и детализирована, и в части "одинаковости" прайс-листов и требуемых от интерфейса операций

3.Начали сами писать, возник вопрос: как "на лету" (после выбора нескольких прайс-листов) создать таблицу в памяти с необходимым количеством колонок с ценами?
Ведь количество выбранных прайс-листов заранее не известно.

Вопросов по раскраске/подсветке и выводу на печать не должно быть...
vadim
топ-софт
Сообщения: 197
Зарегистрирован: Чт, 06/09/2007 17:38
Имя Фамилия: Вадим Володько
Откуда: ТопСофт
Контактная информация:

Сообщение vadim »

создать таблицу в памяти "на лету" с произвольным числом полей вряд ли возможно на прикладном уровне

лучше всего заложиться с запасом, например на 20 прайсов:

Код: Выделить всё

table struct tMemPrice
(
  Nrec: comp,
  cMC: comp,
  Name: s200,
  BarKod: s20,
  Price: array [1..20] of tSumma,
  cPrice: array [1..20] of comp
)
если же точно известно, что зарезервированных впрок 20 ссылок и сумм не хватит, можно попробовать создать не одну, а 2 таблицы в памяти:

Код: Выделить всё

table struct tMemMC // перечень номенклатурных позиций каталога МЦ:
  nrec: comp
  cMC: comp
  Name: s200 
  BarKod: s20

table struct tMemPrice // цены позиций по каждому из прайс-листов
  num: long
  cMemMC: comp
  cPrices: comp  // ссылка на позицию прайс-листа, в которой хранится оригинальная цена и которую возможно придется обновлять
  Price: tSumma
но для отоборажения полученной структуры все равно придется жестко описать конечное число синонимов таблицы tMemPrice либо изобретать какой-либо иной способ отображения при помощи иных промежуточных таблиц
АлександерK
заказчик
Сообщения: 89
Зарегистрирован: Ср, 19/09/2007 08:48
Имя Фамилия: Александр Киселев
Откуда: Красный Октябрь ОАО ДОК
Контактная информация:

Сообщение АлександерK »

Собственно и хотелось узнать на счет того, вообще реально ли создать "на лету" таблицу. Теперь все гораздо понятнее. Спасибо большое.
vadim
топ-софт
Сообщения: 197
Зарегистрирован: Чт, 06/09/2007 17:38
Имя Фамилия: Вадим Володько
Откуда: ТопСофт
Контактная информация:

Сообщение vadim »

Как только что-нибудь сделаете, покажете, что получилось? интересно... :)
Аватара пользователя
Screw
топ-софт
Сообщения: 73
Зарегистрирован: Пт, 14/09/2007 22:54
Имя Фамилия: Виталий Корзюк
Откуда: ТопСофт
Контактная информация:

Сообщение Screw »

Вопрос динамического создания нужного количества столбцов в браузе можно решить с помощью функций Конфигуратора. А оный брауз сделать безтабличным, что позволит устранить зависимость от ТП с ее статической структурой. Иными словами, нужно реализовать брауз на массиве записей, который можно описать приблизительно так:

Код: Выделить всё

type
  TPrice = record
    Price: tSumma;
    cPrice: comp;
  end;

  TMc = record
    Nrec: comp; 
    Name: s200, 
    BarKod: s20
    PriceList: array [1] of TPrice;
  end;

  TMcArray = array [1] of TMc; 
  ...
Все упомянутые в описаниях типов массивы считаются динамическими.
vadim
топ-софт
Сообщения: 197
Зарегистрирован: Чт, 06/09/2007 17:38
Имя Фамилия: Вадим Володько
Откуда: ТопСофт
Контактная информация:

Сообщение vadim »

хм, не сталкивался
первый же вопрос: легко ли организовать сортировки и быстрый поиск на бестабличном browse по массиву? ;-)
Аватара пользователя
Screw
топ-софт
Сообщения: 73
Зарегистрирован: Пт, 14/09/2007 22:54
Имя Фамилия: Виталий Корзюк
Откуда: ТопСофт
Контактная информация:

Сообщение Screw »

Сортировка, понятно, только вручную. То есть, либо отсортировать исходные данные должным образом, а затем последовательно выгрузить их в массив, либо реализовать алгоритмы сортировки при вставке. Быстрый поиск реализуется в прикладном коде с помощью обработчика события cmDoFind.
АлександерK
заказчик
Сообщения: 89
Зарегистрирован: Ср, 19/09/2007 08:48
Имя Фамилия: Александр Киселев
Откуда: Красный Октябрь ОАО ДОК
Контактная информация:

Сообщение АлександерK »

Спасибо за еще один вариант решения задачки ;-)
Screw писал(а):Вопрос динамического создания нужного количества столбцов в браузе можно решить с помощью функций Конфигуратора. А оный брауз сделать безтабличным, что позволит устранить зависимость от ТП с ее статической структурой. Иными словами, нужно реализовать брауз на массиве записей, который можно описать приблизительно так:

Код: Выделить всё

type
  TPrice = record
    Price: tSumma;
    cPrice: comp;
  end;

  TMc = record
    Nrec: comp; 
    Name: s200, 
    BarKod: s20
    PriceList: array [1] of TPrice;
  end;

  TMcArray = array [1] of TMc; 
  ...
Все упомянутые в описаниях типов массивы считаются динамическими.
Ответить