Страницы: 1
RSS
Автоматизация переноса данных из одного файла в другой, Прошу помочь
 
Доброго времени суток.

Прошу помощи.
Есть экселевский файл счет-фактуры (донор), генерируемый базой 1С. Нужно было автоматизировать перенос данных в экселевский же файл "сопроводительная накладная". Так как заполняю не только я, а ITшников просить автоматизировать - пустая трата времени, решил размять мозг, вспомнить молодость, автоматизировать процесс. И вот, уткнулся в проблему, не обойти.

Так как этой задачей (заполнение сопроводительной накладной данными из счет-фактуры) я занимаюсь попеременно со сменщиком, а он слабее меня в экселе, решил по возможности упростить процесс, чтобы сменщик мог повторить и нигде не напортачить:
Открыть файл "сопроводительная накладная" - Меню - Данные - Получить данные - Из файла - Из книги. Выбрать донора, энтер, данные донора импортируются в виде странички Лист1.
Со всем справился, только не получается полностью автоматизировать перенос перечня товаров, так как в табличке счет-фактуры есть разрывы страниц (4 строки), которые никак не получается победить так чтобы эти разрывы не переносились в сопроводиловку.

P.S.
1. У меня Офис 365, у сменщика Офис 2010
2. Перечень товаров разной длины, разрывы также не всегда с одной и той же строки начинаются. В остальном структура таблицы счет-фактуры - стабильна.
3. В файле "сопроводительная накладная" 5 допстраниц, на случай если счет-фактура с длинным перечнем товара окажется.
4. Пока не придумал, как сделать так, чтобы ссылки на страничку донора не "сломались", когда буду заменять донора на следующего.
5. Если есть вариант упростить автоматизацию - буду благодарен за подсказку принципа дейстий, с ссылкой на топик.
Изменено: niyazaly - 26.07.2020 00:23:04
 
От какой ответственности Вы отказываетесь?
Цитата
Дисклеймер — это письменный отказ от ответственности за возможные неправомерные последствия того или иного поступка. Само слово дисклеймер (disclaimer) пришло из английского языка, где английский глагол «to claim» переводится как «предъявлять претензии», а приставка «dis» означает отрицание.
 
:D  Неправильно выбранный термин. Ниотчего я не отказываюсь. Щас поправлю.
 
Цитата
niyazaly написал:
У меня Офис 365, у сменщика Офис 2010
- в 2010 не работает формула массива в листе 1 от D37 и ниже:
Код
=_xlfn.IFS(Лист1!B46<>0;СМЕЩ(Лист1!B46;4;0;1;1);Лист1!B46="Наименование реализуемых товаров (работ, услуг)";СМЕЩ(Лист1!B46;3;0;1;1);Лист1!B46=2;СМЕЩ(Лист1!B46;1;0;1;1))


http://prntscr.com/tooer6
Изменено: Hugo - 26.07.2020 11:09:40
 
Уточню запрос:

Есть список товара на Лист1 (b26:b300). Нужно этот список перенести в столбец D листов 0,1...5. Проблема - в списке товаров есть разрывы страниц на 4 строчки. Нужно чтобы без ручных операций формула переноса товара сама находила этот разрыв и не учитывала его (перепрыгивала). Причем разрывы нестабильны. То на пару строк ниже, то на пару строк выше от накладной к накладной.

Мое предположение:
1. Адрес первого переносимого товара стабилен. Следовательно, в ячейке-получателе можно указать прямой адрес этого первого товара.
2. Следующие ячейки к заполнению (ради унификации) должны содержать формулу следующего характера - если адрес из предыдущая ячейка +1 равно "", то адрес из предыдущей ячейки +5. Тут еще нужно учесть, что массив товаров конечен, а при достижении конца массива, без указания ограничения - получится зацикливание, потому что дальше будут только пустые ячейки. Поэтому работать надо с массивом, чтобы была конечность операций.
3. Отсюда проблема - я не знаю, какие комбинации функций использовать. Отдельно СМЕЩ, ПОИСКПОЗ и т.д. - могу, а вместе + какая-то нехватающая функция - просто голову сломал.
 
Я бы не мучился и написал одну свою UDF, там нет особых проблем. Как параметр можно указать какое по счёту значение возвращать. Ну типа как ВПР2() делает.
Изменено: Hugo - 26.07.2020 22:40:08
 
Всем спасибо. Похоже я просто дозрел до решения. ЭТОТ вопрос решен.

Появился новый вопрос. Как уже писалось выше - есть шаблон, который нужно автоматически заполнять. И есть файлы-доноры инфы. Я использовал метод "Данные - Получить данные - из файла - из книги", чтобы получить доступ к таблице-донору инфы. Но этот метод плох тем, что все ссылки ориентируются на "Лист1", куда таблица автоматически попадает. Но, в случае выбора следующей таблицы-донора - туши свет, все ссылки привязаны к Лист1, а новая табличка - это Лист2-Лист100. Значит, мне на 5 страницах нужно массово корректировать ссылки...

Что можно сделать? Как настроить шаблон таким образом, чтобы в шаблоне в одной ячейке или кнопкой открыть ссылку на нужный файл-донор, а шаблон сам взял все нужное, без импорта таблички в Лист1?

Update. Гугл не дает пока ясных ответов, так как нет ясного вопроса :( Получается следующее - раз мне нужно, чтобы файл-донор не открывать, то нужен абсолютный путь к файлу-донору. А для этого мне нужно в шаблоне сделать кнопку, нажатие которой приводит к следующему:
1. Открывается окно "Открыть"
2. Находим на диске файл-донор - выбираем - энтер. Файл-донор найден, его абсолютный адрес - зафиксирован и указан в определенной ячейке шаблона.
3. Каким-то образом (я пока не понял каким) все ссылки на всех страницах шаблона получают искомый абсолютный адрес файла-донора из указанной ячейки шаблона...

Бррр... Сам путаюсь...
Изменено: niyazaly - 27.07.2020 00:25:25
 
Так моя UDF может тянуть данные прямо из исходных фактур, и даже не открывая файл. только тогда диапазон нужно задавать не столбцы целиком, а например вот так:
Код
=tovari('C:\Users\Igor\Downloads\[Счет-фактура № 310000178625 от 23.07.2020 (1) — копия.xlsx]TDSheet'!$A$1:$B$1000;СТРОКА())

Т.е. сразу в шаблоне и тянете на каждую страницу по 30 строк из фактуры.
А ставить их можно макросом - дать ему имя файла, остальное пускай сам делает. Хотя если макрос - то можно сразу и заменить на значения, будет легче.
Изменено: Hugo - 26.07.2020 23:55:19
 
Цитата
Hugo написал:
wnloads\[Счет-фактура № 310000178625 от 23.07.2020 (1) — копия.xlsx]TDSheet'!$A$1:$B$1000;СТРОКА())
Спасибо, но... У вас абсолютный адрес прописывается - раз. А что делать, если изменится адрес файла-донора и шаблона? И два - наличие этого пресловутого Лист1 уже - дело лишнее, так еще вы добавочно страничку сгенерили... А задача передо мной стоит - упростить процедуру до одного действия - в шаблоне откыть (макросом, скриптом или как?) файл-донор, энтер и всё. Скрипт, получив абсолютный адрес файла-донора, прописывает его в какой-нибудь ячейке шаблона (в непечатаемом виде - хоть цвет текста ячейки равный цвету ячейки). А уже все ссылки в шаблоне (6 страниц по 560 ячеек с сылками) берут и юзают этот абсолютный адрес.

Только как это сделать?...


Апдейт.

Переиначиваю требуемый результат: "Никаких многочисленных копи-пастов и ручной работы. Дается одна ссылка, к примеру – в графе «счет-фактура» (но это неточно). После этого, все задействованные ячейки автоматом берут свою часть данных из указанного источника. Остается вручную проставить номер накладной и дату"

Изменено: niyazaly - 27.07.2020 01:04:49
 
Так я о том и говорю - сразу в шаблон и писать.
См.скрин http://prntscr.com/toxodt
А страницу я сделал просто чтоб показать что UDF работает.
Изменено: Hugo - 27.07.2020 00:49:55 (добавил скрин)
 
А брать адрес в непечатном виде функции могут только используя ДВССЫЛ(), но вот с закрытыми файлами это не работает. Поэтому я и предлагал брать это значение макросом и ставить его в формулу.
P.S. СТРОКА()-53 лучше заменить на ссылку на порядковый номер в первом столбце, но тогда этот номер нужно генерить иначе, а то сейчас получается циклическая ссылка.
Изменено: Hugo - 27.07.2020 00:56:19
 
А у меня вот что получилось...

Прошу прокомментировать - не слишком ли навертел? С одной стороны - работает. С другой - ссылки намертво привязаны к Лист1. И при попытке обработки уже следующего файла-донора окажется необходимым в каждой из 6 страниц (от 0 до 5) делать Ctrl+H. А потом убирать неактуальный ЛистХ. Что по условиям задач - лишние телодвижения, которых пытаемся избежать.
Цитата
...написал одну свою UD.
Прошу простить, но я не догоняю - что такое UDF, как ее обновлять в случае изменения файла-донора и т.д.

Апдейт
Прочитал про UDF, но все равно не понял, как менять содержимое...
Цитата
Hugo написал:
Так я о том и говорю - сразу в шаблон и писать.См.скрин  http://prntscr.com/toxodt А страницу я сделал просто чтоб показать что UDF работает.
Логика неясна. Поправьте, если ошибаюсь.
1. Запускаем UDF, в нем меняем файл-донор
2. Запускаем сопроводительную (шаблон). Шаблон автоматом из открытого UDF файла тянет нужные данные.

Я правильно понял?
Изменено: vikttur - 28.07.2020 13:37:28
 
Нет.
Код пользовательской функции может быть в любом открытом и доступном файле, но лучше когда в надстройке или этом файле.
Далее использовать как любую обычную функцию.
А чтоб в параметре указать путь к нужному файлу - это или руками, или макросом, если тот файл закрыт. Если открыт - можно ДВССЫЛ() привлечь.
P.S. вот скрин без лишнего файла, код в надстройке: http://prntscr.com/toyaq9
Изменено: Hugo - 30.07.2020 13:27:25
 
Цитата
Hugo написал:
Нет.Код пользовательской функции может быть в любом открытом и доступном файле, но лучше когда в надстройке или этом файле.
К сожалению, я не догоняю. Просто не было в практике подобных кейсов, поэтому - не догоняю. Если вам не сложно - еще раз, для чайников, пошагово. Даже лучше - дать направление, ясное, чтобы сам головой поработал. Какие процедуры использовать и почему именно их. А там погуглю. Напомню, поставленная мне самому себе задача - в самом шаблоне (в одной выбранной ячейке) менять источник данных (они стандартные по форме, но разные по наполнению). А дальше формулы в соответствующих ячейках шаблона сами берут данные из известных им ячеек источника. При этом:
1. Автоматическое заполнение ячеек вроде-бы победил, но пока - только при импорте таблички из источника в шаблон отдельным листом.
2. Желательно обойтись без импорта таблички.
3. Желательно чтобы изменение источника данных было максимально визуально-естественным - типа "Открыть файл" -> "выбрать файл" -> "Энтер".
4. Нужна подсказка по "вытягиванию" абсолютного адреса источника и подстановки его в формулах ячеек.
5. Power Query не установлен, комп рабочий, без доступа к настройкам :(
Изменено: niyazaly - 02.08.2020 13:54:57
 
Так я детали уже и не помню :)
Если хотите путь к источнику менять как описали в п.3 - то это тогда всю работу (или формирование формул в ячейках) нужно делать макросм.
Т.к. как аргумент путь использовать нельзя, ДВССЫЛ которая это позволяет не работает с закрытыми книгами (почему кстати? недоработка...), а если книга открыта то вроде как уже и нет смысла во всём этом...
Т.е. п.4 не реализуем формулами.
 
Цитата
Hugo написал:
Если хотите путь к источнику менять как описали в п.3 - то это тогда всю работу (или формирование формул в ячейках) нужно делать макросм
Незадача   :(  А по макросу не подскажете генеральное направление? Вехи, так-скать?


Или - может, мне нужно переформулировать вопрос? Давайте попробуем. Нужен способ в произвольной ячейке указать абсолютный адрес выбранного файла. Либо - способ поиска на жестком диске и установления абсолютного адреса по введенному в ячейку названию файла.
Страницы: 1
Наверх