Сортировка базы данных простыми формулами

Автор Himtree, 27 декабря 2012, 17:24

0 Пользователи и 1 гость просматривают эту тему.

Himtree

Добрый день! Всех с предновогодним настроением!
Продолжаю "мучать" OpenOffice. Задача следующая (целый день уже ломаю голову бестолку): Есть ДАННЫЕ в таблице 3*20 (В первом столбце - название продукта, Во втором - кол-во, в третьем - наименование поставщика) Особенность: названия продуктов в таблице никогда не будут повторяться, а вот поставщики могут меняться и у различных продуктов может быть один и тот же поставщик.
НАДО получить отдельно стоящие таблицы - по кол-ву поставщиков. В каждой таблице должен быть указан только тот товар, который будет идти от этого поставщика.

Пример исходных данных и того каким должен быть результат - во вложении.
Буду благодарен если подскажите хотя бы направление мысли.
Макросы не предлагать.

[вложение удалено Администратором]

Ivanych

А для каких целей делается? Сводная таблица с фильтром по поставщикам точно не катит?

VlhOwn

Вы должны понимать, что электронная таблица - вещь статическая, и формулы описывают не вычисления, а соотношения между отдельными ячейками. Т.е. если в B1 находится формула =A1*2, то это описывает тот факт, что значение в ячейке B1 вдвое превышает значение в ячейке A1. Некоторое исключение из этого составляют итерационные вычисления, но это тоже не "вычисления в чистом виде".
Поэтому, применительно к вашей задаче, без использования макросов получить из исходной таблицы новые (меньшие!) таблицы с отфильтрованными строками Вам, скорее всего, не удастся.
Ваша задача идеально решается с помощью баз данных.

Hasim

Вот такой вариант с использованием вспомогательных столбцов F, G, H, J, которые можно скрыть.
Все таблицы делать не стал, лень было.
Можно для начала обойтись одной, и просто подставлять в ячейку L2 нужного поставщика.
А ниже появятся его товары и их количество.
(Можно, конечно, и размножить эту одну таблицу (со вспомогательными столбцами) для всех поставщиков.)




[вложение удалено Администратором]

Himtree

Hasim, Вроде бы как раз ТО что надо! СПАСИБО!

Himtree

Цитата: Hasim от 28 декабря 2012, 01:53Вот такой вариант с использованием вспомогательных столбцов F, G, H, J, которые можно скрыть.
Все таблицы делать не стал, лень было.
Можно для начала обойтись одной, и просто подставлять в ячейку L2 нужного поставщика.
А ниже появятся его товары и их количество.
(Можно, конечно, и размножить эту одну таблицу (со вспомогательными столбцами) для всех поставщиков.)
И всё таки не совсем то, что хотелось.
Хотелось, что бы таблицы выборки по каждому поставщику строились автоматом, т.е к примеру если будет 4 различных поставщика - результатом были бы построены 4 таблицы идущие друг за другом, если поставщиков - 7, то соответственно 7 таблиц. Понимаю, что в любом случае будет некий предел кол-ва поставщиков для которых форма будет работать корректно (а принципе лимита в 10-12 поставщиков было бы достаточно)
А результат который получается в вашем решении, думаю можно достичь более легким описанием (см.вложение) т.е. формулами попроще.

[вложение удалено Администратором]

Himtree

Цитата: Ivanych от 27 декабря 2012, 17:17А для каких целей делается? Сводная таблица с фильтром по поставщикам точно не катит?
Стандартная фильтрация не подойдёт! Поясню: к сформированным данным в файле будут обращаться несколько сотрудников и каждый со своего ПК (на одном стоит Excel, на втором отключены макросы, на третьем OO предыдущей версии и т.д., не говоря о том что кто то умеет выставлять фильтр, а кто то нет)
Поэтому вывод конечного результата должен быть построен на максимально простых (в меру компактности) формулах и без макросов.

Himtree

#7
Цитата: VlhOwn от 27 декабря 2012, 17:44Вы должны понимать, что электронная таблица - вещь статическая, и формулы описывают не вычисления, а соотношения между отдельными ячейками. Т.е. если в B1 находится формула =A1*2, то это описывает тот факт, что значение в ячейке B1 вдвое превышает значение в ячейке A1. Некоторое исключение из этого составляют итерационные вычисления, но это тоже не "вычисления в чистом виде".
Поэтому, применительно к вашей задаче, без использования макросов получить из исходной таблицы новые (меньшие!) таблицы с отфильтрованными строками Вам, скорее всего, не удастся.
Ваша задача идеально решается с помощью баз данных.
Понимаю. Поэтому и не жду решения в одну формулу. Прекрасно понимаю, и уверен на 99%, что придётся выполнять построение через вспомагательную(ые) таблицы. Но хотелось бы сделать это максимально компактно и приближенно к нужному результату.

Himtree

Хорошо! А если разбить вопрос по этапам и решить для начала первую задачку:
ЕСТЬ список поставщиков:
1 ОДС
2 КИТ
3 ОДС
4 РемМаш
5 Интер
С помощью каких функций можно вычислисть кол-во различных поставщиков в фиксированном списке (в данонм случае 5 пунктов) т.е. для данного списка ответом будет 4.
А для вот такого списка:
1 ОДС
2 КИТ
3 ОДС
4 КИТ
5 ОДС
Ответом должно стать 2.

Hasim

В вашем подходе к заполнению Таблицы 1 есть принципиальная ошибка.
Нельзя при внесении каждой новой записи снова вручную вписывать поставщика.
Это чревато возможностью грамматической ошибки.
По-правильному должен быть список поставщиков, из которого и выбирается нужный поставщик при заполнении очередной строки в Таблице 1.

Ivanych

Хорошо, скажите, каким из требований не удовлетворяет решение из приложенного файла?
Вообще, задача на БД. Типичная.

[вложение удалено Администратором]

Hasim

Цитата: Himtree от 28 декабря 2012, 09:42Хорошо! А если разбить вопрос по этапам и решить для начала первую задачку:
Вот такое решение в ячейке F6.

[вложение удалено Администратором]

Himtree

Цитата: Hasim от 28 декабря 2012, 10:14По-правильному должен быть список поставщиков, из которого и выбирается нужный поставщик при заполнении очередной строки в Таблице 1.
Согласен!
Я имел ввиду, что если мы такимобразом решаем задачу - то достаточно и одной таблицы и уже в неё подставлять поочерёдно каждого поставщика, через список (как вы предложили) дабы исключить грамматические ошибки. Однако если размножить таблицы по числу поставщиков - то наименование поставщика всё равно в каждую таблицу нужно вставлять в ручную. (как в вашем, так и в моём варианте).

Himtree

Цитата: Ivanych от 28 декабря 2012, 11:35Хорошо, скажите, каким из требований не удовлетворяет решение из приложенного файла?
Вообще, задача на БД. Типичная.
Наличием фильтра. Файл может быть открыт в OO версии отличной от моей, в MS Excel, на ПК, где отключены фильтры (макросы блокируются антивирусом) и т.д. и у меня нет уверенности, что построение/отображение данных будет корректным.

Himtree

Цитата: Hasim от 28 декабря 2012, 12:07Цитата: Himtree от Сегодня в 09:42
Хорошо! А если разбить вопрос по этапам и решить для начала первую задачку:
Вот такое решение в ячейке F6.
Всё гениальное просто =) спасибо.
На базе этого, теперь я понял как сделать дальше. Сегодня-завтра выложу результат, поймёте к чему я стремился.