Нужно разобраться как печатать отчет с повторениями

alexx09
Дата: 19.01.2016 08:47:02
Проблема такая, мне нужно распечатать ценники на каждый товар.
Пример: данные в таблице

Компьютер ı3 - 0.5Tb - цена 100р. - 5 шт.
Компьютер ı5 - 1Tb - цена 200р. - 5 шт.

мне нужно чтоб он распечатал 10 этикеток с ценой и характеристиками на все компютеры
а у меня получается только 2 этикетки(( (тоесть печатается каждая строка только 1 раз)

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

Товаров очень много так что писать для каждого товара по несколько строк это очень проблематично

Есть какойнибудь выход? желательно не сложный
MrShin
Дата: 19.01.2016 09:40:01
Можно, например, заменить запрос на нечто подобное:

SELECT * FROM Labels AS L LEFT JOIN (SELECT counter FROM numbers)  AS n ON L.quantity >= n.counter


Здесь numbers - таблица с колонокой counter с последовательными числами от 1 и до максимально возможного количества экземпляров. В принципе можно с небольшими изменениями использовать любую таблицу, гарантировано содержащую строк больше, чем максимальное количество экземпляров, но я предпочитаю специальную таблицу, в которрую добавляю записи автоматом по необходимости перед генерацией строк. Также наличие колонки с последовательными числами упрощает и ускоряет основной запрос.
alexx09
Дата: 19.01.2016 12:48:01
у меня таблица, вывожу через отчеты, в запросах и в ВБА я не мастер(((
Хотел найти более простой способ решения этой проблемы
Вобще все таблицы с данными у меня в Экселе, думал что через аксес у меня получится печатать ценники, а нет((
MrShin
Дата: 19.01.2016 13:16:58
Так в чем проблема посмотреть на базу, найти максимальное количество и руками сделать таблицу с номерами с запасом? VBA тут не нужен
А в самом отчете заменить RecordSource с таблицы на мой запрос, где заментить Labels на актуальную таблицу. Редактировать запрос, правда, придется руками в текстовом виде, т.к. сравнения, отличного от "=" в джоинах визуальный конструктор не понимает. Как вариант можно заменить временно ">=" на "=", отредактировать в визуальном конструкторе, а потом перейти в SQL и поменять оператор.

Ну а если нужен код для генерации, можно взять такой вот, заменив опять же Labels и Quantity на актуальные:

Public Function GenerateNumbers()
Dim lngMaxQty As Long
Dim lngMaxNumber As Long
Dim rst As Recordset
Dim i As Integer

lngMaxQty = Nz(DMax("Quantity", "Labels", 0)
lngMaxNumber = Nz(DMax("Counter", "Numbers"), 0)

If lngMaxQtyMsrmnt <= lngMaxNumber Then
    Exit Function
End If

Set rst = CurrentDb.OpenRecordset("Numbers")

For i = 1 To lngMaxQty - lngMaxNumber
    rst.AddNew
    rst.Update
Next

rst.Close
Set rst = Nothing
End Function
Панург
Дата: 19.01.2016 14:25:57
alexx09, смотри, есть два варианта
1. С запросом Digits, например - Формирование отчета
2. Программно в отчёте создавать повторы - NextRecord


Ищи, тут есть всё