Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
15 дек 2024, 04:50

При создании обработки на выгрузку данных в Эксель не удается сделать фильтр по дате.

Автор Я_Сергей, 10 авг 2022, 12:07

0 Пользователей и 1 гость просматривают эту тему.

Я_Сергей

Всем привет!
Платформа 8.2.13... Обычные формы.
Есть такая проблема, с 1С я на вы, а с Excel тем более, но потребовалось создать внешний отчет для 1С с выгрузкой в Excel для руководства.
Условия: создать файл на нескольких листах. В них выгружаются данные из 1С с указанием даты операций в 1С. Основное условие, чтобы при добавлении информации в Эксель, оставалось видно, только информация по свежим датам. Иногда отчет делается за несколько дней(в понедельник)
Может, я плохо умею пользоваться поисковиком, но я не смог найти метод создания автофильтра по условию с типом дата, а тем более когда нужно отфильтровать по нескольким датам.

Прочитал справочник VBA для Office (Метод Range.AutoFilter (Excel)) и написал такой код:

УсловиеФильтра = Новый Массив;
ТекЛист.Range(ТекЛист.Cells(1,1),ТекЛист.Cells(АктивнаяСтрока,ВсегоКолонок)).AutoFilter();
ТекЛист.Range(ТекЛист.Cells(1,1),ТекЛист.Cells(АктивнаяСтрока,ВсегоКолонок)).AutoFilter();
УсловиеФильтраВычерков.Добавить(2);
УсловиеФильтраВычерков.Добавить(Формат(Дата(2022,03,03),"ДФ=М/д/гггг"));
ТекЛист.Range(ТекЛист.Cells(1,1),ТекЛист.Cells(АктивнаяСтрока-1,ВсегоКолонок)).AutoFilter(1,,7,УсловиеФильтра);

Не работает.
Текст ошибки:
Цитировать{Форма.Форма.Форма(226)}: Ошибка при вызове метода контекста (AutoFilter)
ТекЛист.Range(ТекЛист.Cells(1,1),ТекЛист.Cells(АктивнаяСтрока,ВсегоКолонок)).AutoFilter();
по причине:
Неизвестная ошибка

В Excel запуск Макроса делал. Оттуда такой формат даты взял.

Помогите решить проблему!

P.S. Руководство хочет только распечатать(без манипуляций с фильтрами, т.к. совсем никак с работой на компьютере(странно, но такие еще остались)) и идти к своему руководству.

LexaK

Я_Сергей,
ЦитироватьРуководство хочет только распечатать
Так и печатайте сразу из 1С!!!
(ну что за дикость такая, долбиться с Екселем, что бы просто распечатать из него)
если помогло нажмите: Спасибо!

Я_Сергей

Цитата: LexaK от 10 авг 2022, 12:41Я_Сергей,
ЦитироватьРуководство хочет только распечатать
Так и печатайте сразу из 1С!!!
(ну что за дикость такая, долбиться с Екселем, что бы просто распечатать из него)

Я бы с радостью! Но Руководитель "хотят" отчет в формате Эксель на общем ресурсе(в 1С он принципиально не заходит). Он его периодически просматривает детально, но оперативно ему, якобы, заморачиваться и нажимать другие кнопки, кроме Ctrl+P, некогда.
Проблема в том, что раньше я сам вел этот отчет, но сейчас, руководитель распорядился вести отчет кладовщикам, а тем нереально объяснить, как форматировать строку в дату(я делаю замену точки на точку после вставки данных из 1С в Эксель). Кладовщики- "Бабушки- божий одуванчик".
Поэтому я и начал дорабатывать отчет, чтобы он сам выгружал данные в Эксель.

Я_Сергей

Я_Сергей, Не сразу заметил, что вставил неправильный текст ошибки. Правильный:
Цитировать{Форма.Форма.Форма(226)}: Ошибка при вызове метода контекста (AutoFilter)
ТекЛист.Range(ТекЛист.Cells(1,1),ТекЛист.Cells(АктивнаяСтрока,ВсегоКолонок)).AutoFilter(1,,7,УсловиеФильтра);
по причине:
Неизвестная ошибка
Т.е. ругается на последнюю строку кода. А как стер содержание скобок сам не знаю.
Да, и вместо тега в стартовом сообщении была функция встроенного языка- Формат.

LexaK

Я_Сергей,
Цитировать(в 1С он принципиально не заходит).
а вариант, сделать регламентное задание, которое, по расписанию, будет формировать и отправлять отчет начальникам,
не предлагать?

есть другой интересный подход, с другого края, в Екселе сделайте кнопку, Обновить данные
в макросе этой кнопки, соединяетесь с 1С, запросом получаете нужные данные и размещаете их на листах,
там же в макросе настраиваете и нужны фильтры/отборы (это гораздо проще в макросе сделать)
если помогло нажмите: Спасибо!

Я_Сергей

LexaK, Я просто более опытный пользователь программы, чем все остальные в компании. 1С осваиваю по форумам, т.к. руководство отказалось от поддержки разработчиков ПО. В VBA я точно не смогу ничего "накодить", т.к. не понимаю ни принципов написания кода, ни английского языка.
Я хоть как то осваиваю 1С, потому что на русском написано. И не претендую на звание программиста. Просто нужно решить задачу.
И, да, доступа к внесению изменений в конфигурацию у меня нет. Только внешние обработки.
Нужно решение для реализации в 1С с помощью внешней обработки.

Я_Сергей


antoneus

Ну проще фильтровать в 1С и в 1С же разбивать по листам и средствами 1С сохранять в Excel, не заморачиваясь с com-объектами (см. ПакетОтображаемыхДокументов).

Я_Сергей

antoneus, Версия платформы не поддерживает ПакетОтображаемыхДокументов.
Так что, не подходит.Уже находил в интернете такую рекомендацию.

Я_Сергей

Попробую уточнить.
Синтаксис нужной процедуры в VBA(взято с сайта мелкомягких).
Worksheets("Sheet1").ListObjects("Table1").Range.AutoFilter _
 Field:=1, _
 Criteria2:=Array(1, "1/31/2019", 1, "2/28/2019")
Так вот, как я полагаю, основная проблема передать в процедуру на сторону Эксель Вот такую конструкцию:
Criteria2:=Array(1, "1/31/2019", 1, "2/28/2019") четвертым параметром, т.к. в четвертом параметре задается фильтр по дате с указанием периода фильтрации, причем через Array, где первое значение- это тип периода, второе- дата из периода(в примере фильтр на весь месяц январь и февраль).
Сделал вывод потому что, пока я не пытаюсь использовать четвертый параметр, все работает.
Может быть, нужно во что-то упаковать данный код? Ну, или как-то по другому передать этот параметр?
Может так понятнее, основной посыл темы?

Похожие темы (5)

Рейтинг@Mail.ru

Поиск