powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Форматирование вида отчета
17 сообщений из 17, страница 1 из 1
Форматирование вида отчета
    #38758273
endurance
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую!

Мне необходима помощь в решении задачки, а точнее понять концепцию, как решать такие типовые вещи.
Периодически возникает ситуация: есть два столбца, первый столбец - коды товаров (могут повторяться), второй столбец - коды элементов (не могут повторяться), фактически их комбинация формирует составной ключ из двух полей. Чтобы привести отчет к необходимому виду, мне приходится сравнивать коды товаров, запоминать последний товар, потом сравнивать его с товаром + 1, если товар не равен другому, то делаем одно, если равен, то делаем другое. Приходится заводить много промежуточных переменных, отсчитывать строки и ловить блох. Никак не могу понять правильно ли я делаю.

На данный момент ситуация такая:
1. Есть Excel файл (во вложении).
2. На Листе1 представлен первоначальный вид (1 столбец - код товара, 2 столбец - описание, 3 - какие-то атрибуты товара)
3. На Листе2 представлен конечный вид, как бы я хотел видеть отчет.
4. Сделал так: в коллекцию считал уникальные коды товаров, в массив считал весь диапазон данных. Беру один элемент из коллекции и начинаю его искать в массиве, как только нашел, печатаю, определяю последнюю заполненную строку и продолжаю цикл дальше. Но возникла проблема, при таком подходе не могу выводить пару код товара - описание товара.

Всегда при таком роде задач возникают у меня трудности, где необходимо сравнивать два стоящих рядом элемента.

Excel файл во вложении. Если будет необходимо, приложу файл с моим неполным решением.
...
Рейтинг: 0 / 0
Форматирование вида отчета
    #38758275
endurance
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сам файл
...
Рейтинг: 0 / 0
Форматирование вида отчета
    #38758284
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не увидел у вас в примере, где находятсяendurance...второй столбец - коды элементов (не могут повторяться)...
А так - чем вам не угодили сводные?
...
Рейтинг: 0 / 0
Форматирование вида отчета
    #38758417
endurance
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTMЯ не увидел у вас в примере, где находятсяendurance...второй столбец - коды элементов (не могут повторяться)...
А так - чем вам не угодили сводные?

В моем примере, коды элементов - это третий столбец.

Сводная таблица не подходит, поскольку мне нужно обрабатывать это кодом VBA, после выгрузки в Excel. На обновление данных макрос автоматически срабатывает.
...
Рейтинг: 0 / 0
Форматирование вида отчета
    #38758441
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть вам надо сделать "это" самописным алгоритмом, и никак иначе?

А то, что сводную можно удалить/добавить кодом, а потом использовать её данные в отчёте - это ничего? И вообще, есть ещё =ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ() А то, что "это" можно проделать, например, запросами, через ADO... или, может, сразу выгрузить так, как надо?

Ну или более подробно опишите, что именно у вас вызывает трудности реализации. Или пример рисуйте с бОльшим количеством разнообразных (и реальных, чего уж там) данных. А то вот по примеру вашему как раз непонятно, что вызывает затруднения :)
И да, как вы получаете исходные данные? что за "выгрузка"?
...
Рейтинг: 0 / 0
Форматирование вида отчета
    #38758521
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И самописным возникнут проблемы в таком предсталении данных и результатов
0004300000864 Кольцо с сапфиром+бриллиант 16.0 7
0004300005364 Кольцо с сапфиром+бриллиант 16.0 8
коды разные, а втаблице на странице 2 они в одной группе
0004300005364 такого кода нет вообще с том
авторкак бы я хотел видеть отчет
Чёрная бухгалтерия?
авторпри таком подходе не могу выводить пару код товара - описание товара
А что в Item словаря? не описание разве?
авторгде необходимо сравнивать два стоящих рядом элемента
То есть пару код-описание?
Коды могут повторяться?
Тогда в ключ словаря код & "|" & описание
...
Рейтинг: 0 / 0
Форматирование вида отчета
    #38758573
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если по кодам. Макрос
...
Рейтинг: 0 / 0
Форматирование вида отчета
    #38758628
endurance
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex77755,
авторИ самописным возникнут проблемы в таком предсталении данных и результатов
0004300000864 Кольцо с сапфиром+бриллиант 16.0 7
0004300005364 Кольцо с сапфиром+бриллиант 16.0 8
коды разные, а втаблице на странице 2 они в одной группе
0004300005364 такого кода нет вообще с том
Мой косяк, опечатался при составлении тестового файла. (Во вложении поправил)

авторавторкак бы я хотел видеть отчет
Чёрная бухгалтерия?
Есть определенный стандарт для отчетности, при составлении запроса к ХД иногда не получается достичь желаемого вида отчета, поэтому приходится обрабатывать макросами.
авторавторпри таком подходе не могу выводить пару код товара - описание товара

А что в Item словаря? не описание разве?
В Item словаря у меня уникальные коды товаров. Хотелось бы добавить еще туда описание соответствующих кодов товаров. Потому что потом коды товаров идут в один столбец, соответствующее описание идет в соседний столбец. Но словарь это не массив, я же не смогу записать туда код и его описание, а потом по отдельности вытащить сначала код, а потом описание.

Поэтому сделал так: сколлектил уникальные коды товаров в словарь, сформировал второй массив, в котором собрал пару код товара - описание. И далее начинаю сравнивать значения в массиве "код товара - описание" с исходным массивом, в котором у меня хранится весь диапазон данных.

В итоге у меня получилось: один цикл собирает значения в словарь, следующие два ищут совпадение для формирования массива "код товара-описание", следующие два сопоставляют конечный результат включая атрибуты. Возможно ли пройти все это за один цикл? Просто считать данные в массив и сравнивая два рядом стоящих элемента как-то выводить результат?
...
Рейтинг: 0 / 0
Форматирование вида отчета
    #38758680
endurance
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 и т.д. с помощью них только все делал.
...
Рейтинг: 0 / 0
Форматирование вида отчета
    #38758710
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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) = тут уже из массива вытаскиваем значение третьей колонки
...
Рейтинг: 0 / 0
Форматирование вида отчета
    #38758716
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почитать с примерами словарь-коллекция
...
Рейтинг: 0 / 0
Форматирование вида отчета
    #38758738
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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)

Мне нравится первы вариант. Ну перезапишется лишний раз...
...
Рейтинг: 0 / 0
Форматирование вида отчета
    #38758745
endurance
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex77755, спасибо, как всегда выручили! Совсем забыл про Item, там же и могу хранить описание.
За файл отдельное спасибо!
...
Рейтинг: 0 / 0
Форматирование вида отчета
    #38758747
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВедь в словаре хранится только код товара
В словаре хранятся пары ключ-значение.
Ключ уникален
...
Рейтинг: 0 / 0
Форматирование вида отчета
    #38758762
endurance
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex77755, спасибо, как всегда выручили! Совсем забыл про Item, там же и могу хранить описание.
За файл отдельное спасибо!
...
Рейтинг: 0 / 0
Форматирование вида отчета
    #38758773
endurance
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторавтор
Ведь в словаре хранится только код товара

В словаре хранятся пары ключ-значение.
Ключ уникален

Точно! Тогда мой вариант урезается по одному циклу. Еще раз спасибо!
...
Рейтинг: 0 / 0
Форматирование вида отчета
    #38759234
endurance
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTMТо есть вам надо сделать "это" самописным алгоритмом, и никак иначе?

А то, что сводную можно удалить/добавить кодом, а потом использовать её данные в отчёте - это ничего? И вообще, есть ещё =ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ() А то, что "это" можно проделать, например, запросами, через ADO... или, может, сразу выгрузить так, как надо?

Ну или более подробно опишите, что именно у вас вызывает трудности реализации. Или пример рисуйте с бОльшим количеством разнообразных (и реальных, чего уж там) данных. А то вот по примеру вашему как раз непонятно, что вызывает затруднения :)
И да, как вы получаете исходные данные? что за "выгрузка"?

Да, сделать необходимо было только макросом.
Вид сводной таблицы не подходит по стандарту внешних видов отчетности.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Форматирование вида отчета
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]