Консультация № 189879
13.10.2016, 15:08
0.00 руб.
0 12 1
Здравствуйте! У меня возникли сложности с таким вопросом:
MS Excel 2010. Есть файл заказа товаров(Лист1) с основными столбцами формата "поставщик/артикул/наименование товара/количество/цена прихода/дата прихода/номер документа".
Задача формировать автоматически сводную накладную о приходе товара на определенную дату, которая указывается в отдельной ячейке(Лист2), т.е. нужно подготовить таблицу на отдельном листе(Лист2) с позициями товара, пришедшего после определенной даты (от такого-то числа и позднее по настоящее время) формата "артикул/наименование товара/количество". Спасибо.

Обсуждение

давно
Модератор
137394
1850
13.10.2016, 16:41
общий
13.10.2016, 16:55
Адресаты:
Уважаемый a.panin! Громадная просьба заархивировать пример Вашей таблицы (лист 1 и для примера хоть пару строк на лист 2) и прикрепить полученный файл к посту в минифоруме Вашего вопроса, чтобы можно было предметно обсуждать Вашу проблему. Хорошо заданный вопрос- это половина ответа. Не уверен, что кто-то захочет угадывать, что бы Вы хотели конкретно получить
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Посетитель
400594
6
13.10.2016, 17:31
общий
[q=137394][/q]

Прошу прощения, исправляюсь.

Во вложении файл, пояснения к нему:
1. В файле два листа: Лист "Общий заказ" и лист "Лист прихода"
2. В "общем заказе" заказанные позиции, при внесении номера счета в ячейку "номер счета" автоматически окрашиваются желтым.
3. В "общем заказе" пришедшие на склад позиции при вбивании в ячейку "№ ТН" автоматически закрашиваются зеленым (для визуального упрощения понимания что пришло, а что нет), а в ячейку "Дата поступления на склад" автоматически заполняется дата заполнения № ТН в формате дд.мм.гггг чч:мм:сс
Все остальные данные заполняются вручную.

Задача:
Необходимо раз в неделю (пятница) формировать приход товара за неделю в "Листе прихода" и рассылать такой отчет менеджерам отдельным файлом. Условия формирования - сравнивать дату, указанную a шапке "листа прихода" (колонка F1, адрес неизменный) с данными в колонке "Дата поступления на склад". И всё, что пришло в эту дату и предыдущие 6 дней (календарная неделя), переносить в таблицу "листа прихода" согласно указанных там колонок (т.к. менеджерам должна быть представлена информация лишь в ограниченном виде).
Прикрепленные файлы:
6aee6a817cd2fa0ad728d293f91b897d.rar
давно
Модератор
137394
1850
13.10.2016, 20:51
общий
14.10.2016, 08:40
подготовить таблицу на отдельном листе(Лист2) с позициями товара, пришедшего после определенной даты (от такого-то числа и позднее по настоящее время)
И всё, что пришло в эту дату и предыдущие 6 дней (календарная неделя), переносить в таблицу "листа прихода"
Вам не кажется, что Вы противоречите сами себе?
В общем заказе не вижу ед. измерения, а в листе прихода она есть
Всем менеджерам рассылаются одинаковые таблицы или они фильтруются по какому-то полю?
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Посетитель
400594
6
14.10.2016, 09:02
общий
14.10.2016, 09:07
Согласен, фразы противоречивые, но как Вы замечали ранее "Хорошо заданный вопрос- это половина ответа". Потому при формировании своей "задачи" в последнем варианте задумался о том, как же будет более логично и правильно (что до этого казалось очевидным).
Единицы измерения - скорее рудимент старого вида файла, в "общем заказе" столбец (H) скрыт (его просто не заполняем, но удалять пока не хотим ,возможно будет в нём необходимость), потому по факту в "в листе прихода" этот столбец не заполняется, но трансляция информации из соответствующей ей ячейки в "общем заказе" (H) нужна (на самом деле, если посмотреть наименования столбоцов на листе "общий заказ", то там будут пропуски (скрытые столбцы), где есть в т.ч. и "ед.изм.").
Таблицы рассылаются всем одинаковые, откуда каждый менеджер сам выбирает для себя нужную информацию по первой колонке "листа прихода" (ВИП), это своеобразный номер конкретной сделки с клиентом. Суть - проинформировать менеджеров о том, что конкретная позиция товара пришла на склад и готова к выдаче, соответственно остальные, если таковые имеются, еще не пришли. Так же, дополнительно ниже отчета, я вручную формирую список ожидаемых к приходу в ближайшее время позиций. Автоматизировть это пока не представляю возможным, ввиду разных сроков прихода товара и не всегда заказанные позиции могут прийти в ближайшую неделю.
давно
Модератор
137394
1850
14.10.2016, 14:32
общий
это ответ
Здравствуйте, a.panin!
Вот вариант решения: за основу взята Ваша таблица и в неё добавлен макрос.
Возможно, макрос понадобится подкорректировать: Вид-Макрос-OutForm-Изменить. Вот фрагмент кода для пояснения:
Код:
    ListIn = "Общий заказ"
ListOut = "Лист прихода"

ColIn = Array("A", "E", "F", "G", "H", "P") 'Из каких колонок берём данные
ColOut = Array("A", "E", "F", "G", "H", "P") ' В какие колонки помещаем

RowIn1 = 7 ' C какой строки начинаем просмотр исходных данных
ColTek = "B" ' В какои колонке смотрим исходные даты
RowOut1 = 3 ' В какую строку начинаем помещать найденные данные

DateOut1 = "F1" ' Клетка в ListOut с начальной датой для отбора из ListIn
DeltaOut = -6 ' Диапазон выбора в днях от начальной даты

Прежде всего, Вы увидите, что заданы имена листов Вашей книги - если в книге они изменятся, поменяйте макрос.
Далее - описаны массив исходных колонок и колонок на выходе, куда Вы переносите данные. Их число должно совпадать. В Вашем частном случае имена исходных и колонок на выходе совпадают.
Далее, определите, с какой строки в таблице начинается просмотр данных. Я написал 7, как у Вас в таблице: у Вас это шапка и какие-то пустые строки
Далее всё понятно из описания, обращу внимание, что диапазон дат может отсчитываться как вперёд от заданной в шапке листа даты, так и назад (со знаком -) на указанное кол-во дней. Здесь, как Вы требовали, сделано -6.
Как пользоваться: задать на листе "Лист прихода" дату, далее Вид-Макрос-OutForm-Выполнить. При этом создастся отдельно новая книга с листом "Лист прихода", куда выберутся нужные данные. Вы вольны сохранить её с любым именем в любое место. Исходная книга при этом никак не меняется, в том числе и "Лист прихода" - он используется как шаблон, поэтому его ничем заполнять нельзя.


Прикрепленные файлы:
125583293a998e33c08c9d4bb1f6e8c394af4d19.rar
5
Ого! Спасибо Вам огромное, всё работает. Отдельное спасибо за пояснения "для дураков", очень помогли. <br>Если честно, думал обойдусь какой-нибудь простенькой формулой.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Модератор
137394
1850
17.10.2016, 17:31
общий
думал обойдусь какой-нибудь простенькой формулой
Можно и формулой: перенести все данные (включая данные и из незаполненных строк) формулой на соседний лист, при этом колонка с датой должна обязательно присутствовать и должна отображаться. Далее, на колонку с датой ставим фильтр. Далее делаем фильтр по дате - "между" и отбираем нужные данные. После этого печатаем этот лист, выбрав принтер Microsoft XPS Document Writer, который устанавливается при установке MS Office 2010, который спросит у Вас имя XPS-файла, в который сохранится изображение документа. Это некое подобие PDF файла, и его радость в том, что изменить его нельзя, что для рассылки информационного документа может оказаться очень полезным.
Недостаток этого решения: "полосатость" Вашей таблицы на выходе не будет соблюдена.
Прикрепляю файл с примером, где на "Лист прихода (2)" реализована эта идея.
При этом кол-во строк с формулами на листе должно быть не менее заполненных строк в исходном листе.
У меня в примере 2562 строки.
Фильтр надо организовывать после того, как сформированы строки с формулами.
В примере я поубивал все лишние столбцы, чтобы таблица отрабатывала быстрее.
Похоже, в этом способе чуть больше ручной возни - надо фильтр указывать.
Кстати, и в предыдущем решении с макросом "Лист прихода" должен содержать достаточное число нормально отформатированных строк. И, кстати, тоже можно рассылать не xlsm-файл, а XPS. Просмотрщики XPS-файлов есть и для Windows, и для Android, так что можно рассылать его куда угодно.
Прикрепленные файлы:
36424359e8b44629a30bb8cedb1d6e58.rar
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Посетитель
400594
6
18.10.2016, 09:13
общий
Цитата: Megaloman
Можно и формулой:


Спасибо, приму к сведению. Но первый способ действительно более изящный, мне он в полной мере подходит. Еще раз спасибо!
давно
Посетитель
400594
6
20.10.2016, 11:10
общий
Цитата: Megaloman
Вот вариант решения: за основу взята Ваша таблица и в неё добавлен макрос.


В процессе работы столкнулся с проблемой:
(Сразу оговорюсь, в коде указан был не тот столбец для отслеживания даты, нужен был "R" - исправил). При переборе дат по строкам столбца R макрос отслеживает только до первой пустой ячейки, далее перебор прекращается. Однако в "общем заказе" бывает так, что товар приходит не четко по списку, а некоторые позиции задерживаются, соответственно некоторые ячейки могут быть временно пустыми.
Можно с этим что-то сделать?
давно
Модератор
137394
1850
20.10.2016, 15:26
общий
Адресаты:
Можно. А какой столбец обязательно должен быть заполнен, надо ведь как-то ловить конец данных, или, хотя бы, ограничить число пустых ячеек, после которого можно считать, что данные кончились.
Сразу оговорюсь, в коде указан был не тот столбец для отслеживания даты, нужен был "R" - исправил
Воспринял с чувством глубокого удовлетворения - значит код сделал достаточно легко настраиваемым.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Посетитель
400594
6
20.10.2016, 15:39
общий
Цитата: Megaloman
Можно. А какой столбец обязательно должен быть заполнен, надо ведь как-то ловить конец данных, или, хотя бы, ограничить число пустых ячеек, после которого можно считать, что данные кончились.


Основным и обязательным является столбец F "Наименование". Можно отслеживать конец данных, а на мой взгляд корректнее будет говорить о "наличии данных" именно по этой колонке. Т.е. если там отсутствует что либо (любой символ), то и заказа как бы нет, а потому строку в целом можно условно считать пустой, что будет являться признаком окончания массива. Я же, в последствии, буду учитывать тот факт, что разрывов в таблице быть не должно.
давно
Модератор
137394
1850
20.10.2016, 21:26
общий
Адресаты:
Вот обещанное. В таблице возможны пустые строки (точнее, пустые клетки вподряд в столбце с обязательными данными), но не более заданного ограничения.
Прикрепленные файлы:
b54facd612a3621fae793b4060802208.rar
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Посетитель
400594
6
21.10.2016, 15:53
общий
Цитата: Megaloman
Вот обещанное. В таблице возможны пустые строки (точнее, пустые клетки вподряд в столбце с обязательными данными), но не более заданного ограничения.


Спасибо ОГРОМНОЕ!!! Всё работает, уже перенес в основной файл заказа. Вы мне помогли сэкономить рабочее время. :)
Форма ответа