|
Форматирование вида отчета
|
|||
---|---|---|---|
#18+
Приветствую! Мне необходима помощь в решении задачки, а точнее понять концепцию, как решать такие типовые вещи. Периодически возникает ситуация: есть два столбца, первый столбец - коды товаров (могут повторяться), второй столбец - коды элементов (не могут повторяться), фактически их комбинация формирует составной ключ из двух полей. Чтобы привести отчет к необходимому виду, мне приходится сравнивать коды товаров, запоминать последний товар, потом сравнивать его с товаром + 1, если товар не равен другому, то делаем одно, если равен, то делаем другое. Приходится заводить много промежуточных переменных, отсчитывать строки и ловить блох. Никак не могу понять правильно ли я делаю. На данный момент ситуация такая: 1. Есть Excel файл (во вложении). 2. На Листе1 представлен первоначальный вид (1 столбец - код товара, 2 столбец - описание, 3 - какие-то атрибуты товара) 3. На Листе2 представлен конечный вид, как бы я хотел видеть отчет. 4. Сделал так: в коллекцию считал уникальные коды товаров, в массив считал весь диапазон данных. Беру один элемент из коллекции и начинаю его искать в массиве, как только нашел, печатаю, определяю последнюю заполненную строку и продолжаю цикл дальше. Но возникла проблема, при таком подходе не могу выводить пару код товара - описание товара. Всегда при таком роде задач возникают у меня трудности, где необходимо сравнивать два стоящих рядом элемента. Excel файл во вложении. Если будет необходимо, приложу файл с моим неполным решением. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2014, 01:02 |
|
Форматирование вида отчета
|
|||
---|---|---|---|
#18+
Сам файл ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2014, 01:03 |
|
Форматирование вида отчета
|
|||
---|---|---|---|
#18+
Я не увидел у вас в примере, где находятсяendurance...второй столбец - коды элементов (не могут повторяться)... А так - чем вам не угодили сводные? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2014, 01:36 |
|
Форматирование вида отчета
|
|||
---|---|---|---|
#18+
AndreTMЯ не увидел у вас в примере, где находятсяendurance...второй столбец - коды элементов (не могут повторяться)... А так - чем вам не угодили сводные? В моем примере, коды элементов - это третий столбец. Сводная таблица не подходит, поскольку мне нужно обрабатывать это кодом VBA, после выгрузки в Excel. На обновление данных макрос автоматически срабатывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2014, 09:33 |
|
Форматирование вида отчета
|
|||
---|---|---|---|
#18+
То есть вам надо сделать "это" самописным алгоритмом, и никак иначе? А то, что сводную можно удалить/добавить кодом, а потом использовать её данные в отчёте - это ничего? И вообще, есть ещё =ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ() А то, что "это" можно проделать, например, запросами, через ADO... или, может, сразу выгрузить так, как надо? Ну или более подробно опишите, что именно у вас вызывает трудности реализации. Или пример рисуйте с бОльшим количеством разнообразных (и реальных, чего уж там) данных. А то вот по примеру вашему как раз непонятно, что вызывает затруднения :) И да, как вы получаете исходные данные? что за "выгрузка"? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2014, 09:48 |
|
Форматирование вида отчета
|
|||
---|---|---|---|
#18+
И самописным возникнут проблемы в таком предсталении данных и результатов 0004300000864 Кольцо с сапфиром+бриллиант 16.0 7 0004300005364 Кольцо с сапфиром+бриллиант 16.0 8 коды разные, а втаблице на странице 2 они в одной группе 0004300005364 такого кода нет вообще с том авторкак бы я хотел видеть отчет Чёрная бухгалтерия? авторпри таком подходе не могу выводить пару код товара - описание товара А что в Item словаря? не описание разве? авторгде необходимо сравнивать два стоящих рядом элемента То есть пару код-описание? Коды могут повторяться? Тогда в ключ словаря код & "|" & описание ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2014, 10:39 |
|
Форматирование вида отчета
|
|||
---|---|---|---|
#18+
Если по кодам. Макрос ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2014, 11:11 |
|
Форматирование вида отчета
|
|||
---|---|---|---|
#18+
alex77755, авторИ самописным возникнут проблемы в таком предсталении данных и результатов 0004300000864 Кольцо с сапфиром+бриллиант 16.0 7 0004300005364 Кольцо с сапфиром+бриллиант 16.0 8 коды разные, а втаблице на странице 2 они в одной группе 0004300005364 такого кода нет вообще с том Мой косяк, опечатался при составлении тестового файла. (Во вложении поправил) авторавторкак бы я хотел видеть отчет Чёрная бухгалтерия? Есть определенный стандарт для отчетности, при составлении запроса к ХД иногда не получается достичь желаемого вида отчета, поэтому приходится обрабатывать макросами. авторавторпри таком подходе не могу выводить пару код товара - описание товара А что в Item словаря? не описание разве? В Item словаря у меня уникальные коды товаров. Хотелось бы добавить еще туда описание соответствующих кодов товаров. Потому что потом коды товаров идут в один столбец, соответствующее описание идет в соседний столбец. Но словарь это не массив, я же не смогу записать туда код и его описание, а потом по отдельности вытащить сначала код, а потом описание. Поэтому сделал так: сколлектил уникальные коды товаров в словарь, сформировал второй массив, в котором собрал пару код товара - описание. И далее начинаю сравнивать значения в массиве "код товара - описание" с исходным массивом, в котором у меня хранится весь диапазон данных. В итоге у меня получилось: один цикл собирает значения в словарь, следующие два ищут совпадение для формирования массива "код товара-описание", следующие два сопоставляют конечный результат включая атрибуты. Возможно ли пройти все это за один цикл? Просто считать данные в массив и сравнивая два рядом стоящих элемента как-то выводить результат? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2014, 11:42 |
|
Форматирование вида отчета
|
|||
---|---|---|---|
#18+
alex77755, сейчас иду по шагам ваш макрос, у меня возникли вопросы, можете, пожалуйста, объяснить что происходит в строчках: For R = 1 To UBound(RD) SL(RD(R, 1)) = RD(R, 2) ' не очень понимаю вот эту конструкцию Next и .Cells(R, 1) = " ' " & (E) ' и тут не понимаю .Cells(R, 2) = SL(E) Как так получается, что в первом случае у нас код материала отображается, а во втором случае - описание??? Ведь в словаре хранится только код товара? Или где можно почитать об этом, знаю только о методах Exists, Add, Count и т.д. с помощью них только все делал. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2014, 12:21 |
|
Форматирование вида отчета
|
|||
---|---|---|---|
#18+
SL(RD(R, 1)) = RD(R, 2) назначение ключу словаря RD(R, 1) (из массива первая колонка) значения Item = RD(R, 2) (из массива вторая колонка с описанием) For Each E In SL.Keys перебираем все ключи словаря .Cells(R, 1) = " ' " & (E) назначаем в первую колонку значение кода равное значению ключу (я считал, что код в первой колонке ) .Cells(R, 2) = SL(E) назначаем описание из Item словаря .Cells(R, 2) = тут уже из массива вытаскиваем значение третьей колонки ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2014, 12:34 |
|
Форматирование вида отчета
|
|||
---|---|---|---|
#18+
почитать с примерами словарь-коллекция ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2014, 12:35 |
|
Форматирование вида отчета
|
|||
---|---|---|---|
#18+
SL(RD(R, 1)) = RD(R, 2) в классическом варианте записывается так SL.Item(RD(R, 1)) = RD(R, 2) так назначается. если ключа такого не было RD(R, 1), то он создастся и ему присвоится значение = RD(R, 2) или как в примере это было бы SL.Add RD(R, 1), RD(R, 2) но тогда если такой ключ уже имеется, то будет ошибка, которую надо перехватывать If Not SL.Exists(RD(R, 1)) Then SL.Add RD(R, 1), RD(R, 2) Мне нравится первы вариант. Ну перезапишется лишний раз... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2014, 12:43 |
|
Форматирование вида отчета
|
|||
---|---|---|---|
#18+
alex77755, спасибо, как всегда выручили! Совсем забыл про Item, там же и могу хранить описание. За файл отдельное спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2014, 12:46 |
|
Форматирование вида отчета
|
|||
---|---|---|---|
#18+
авторВедь в словаре хранится только код товара В словаре хранятся пары ключ-значение. Ключ уникален ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2014, 12:46 |
|
Форматирование вида отчета
|
|||
---|---|---|---|
#18+
alex77755, спасибо, как всегда выручили! Совсем забыл про Item, там же и могу хранить описание. За файл отдельное спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2014, 12:53 |
|
Форматирование вида отчета
|
|||
---|---|---|---|
#18+
авторавтор Ведь в словаре хранится только код товара В словаре хранятся пары ключ-значение. Ключ уникален Точно! Тогда мой вариант урезается по одному циклу. Еще раз спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2014, 12:59 |
|
Форматирование вида отчета
|
|||
---|---|---|---|
#18+
AndreTMТо есть вам надо сделать "это" самописным алгоритмом, и никак иначе? А то, что сводную можно удалить/добавить кодом, а потом использовать её данные в отчёте - это ничего? И вообще, есть ещё =ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ() А то, что "это" можно проделать, например, запросами, через ADO... или, может, сразу выгрузить так, как надо? Ну или более подробно опишите, что именно у вас вызывает трудности реализации. Или пример рисуйте с бОльшим количеством разнообразных (и реальных, чего уж там) данных. А то вот по примеру вашему как раз непонятно, что вызывает затруднения :) И да, как вы получаете исходные данные? что за "выгрузка"? Да, сделать необходимо было только макросом. Вид сводной таблицы не подходит по стандарту внешних видов отчетности. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2014, 17:44 |
|
|
start [/forum/topic.php?fid=60&msg=38758628&tid=2156198]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
390ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 20ms |
total: | 500ms |
0 / 0 |