Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Язык М. Раскрытие (автоматически) вложенных таблиц всех уровней (из файлов xml).
 
Привет! С помощью дипсика создали код на М, который раскрывает все сложенные таблицы из загруженных из папки файлов  xml. Код работает но очень долго. При тестировании были несколько ошибок, который ДипСик успешно поправил. Нет ли у кого-то, друзья, какого-нибудь более изящного, но главное, менее затратного варианта? просто файлов всего 20+, а когда будет 200 даже не представляю как оно должно будет работать.
В последней строке кода (FinalResult = IterativeExpand(Source, 1, 12)) 12 - это максимальное количество циклов, которое можно изменять, но вручную.
Код
(tbl as table) =>
let
    Source = tbl,
    
    // Функция для очистки имен столбцов
    CleanColumnName = (name) =>
        let
            // Заменяем проблемные символы на подчеркивания
            Cleaned = Text.Replace(name, ":", "_"),
            Cleaned2 = Text.Replace(Cleaned, "/", "_"),
            Cleaned3 = Text.Replace(Cleaned2, ".", "_"),
            Cleaned4 = Text.Replace(Cleaned3, "-", "_"),
            Cleaned5 = Text.Replace(Cleaned4, " ", "_")
        in
            Cleaned5,
    
    // Функция для проверки наличия табличных столбцов
    HasTableColumns = (inputTable) =>
        let
            ColumnNames = Table.ColumnNames(inputTable),
            HasTables = List.AnyTrue(List.Transform(ColumnNames, each 
                let 
                    firstValueRaw = try Table.FirstValue(Table.SelectColumns(inputTable, _)) otherwise null,
                    // Заменяем пустые строки на null
                    firstValue = if firstValueRaw = "" then null else firstValueRaw
                in 
                    firstValue <> null and Value.Is(firstValue, type table)))
        in
            HasTables,
    
    // Функция для преобразования пустых строк в null в табличных столбцах
    ReplaceEmptyStrings = (inputTable) =>
        let
            ColumnNames = Table.ColumnNames(inputTable),
            // Находим столбцы, которые могут содержать таблицы
            PotentialTableColumns = List.Select(ColumnNames, each 
                let 
                    firstValueRaw = try Table.FirstValue(Table.SelectColumns(inputTable, _)) otherwise null,
                    firstValue = if firstValueRaw = "" then null else firstValueRaw
                in 
                    firstValue <> null and Value.Is(firstValue, type table)),
            
            // Заменяем пустые строки на null в этих столбцах
            ResultTable = List.Accumulate(
                PotentialTableColumns,
                inputTable,
                (state, column) =>
                    Table.TransformColumns(state, {{
                        column, 
                        each if _ = "" then null else _,
                        type any
                    }})
            )
        in
            ResultTable,
    
    // Функция для раскрытия всех табличных столбцов за один проход
    ExpandAllTables = (inputTable) =>
        let
            // Сначала заменяем пустые строки на null
            CleanedTable = ReplaceEmptyStrings(inputTable),
            
            // Находим все табличные столбцы
            ColumnNames = Table.ColumnNames(CleanedTable),
            TableColumns = List.Select(ColumnNames, each 
                let 
                    firstValueRaw = try Table.FirstValue(Table.SelectColumns(CleanedTable, _)) otherwise null,
                    // Заменяем пустые строки на null
                    firstValue = if firstValueRaw = "" then null else firstValueRaw
                in 
                    firstValue <> null and Value.Is(firstValue, type table)),
            
            // Раскрываем все табличные столбцы за один проход
            ExpandedTable = List.Accumulate(
                TableColumns,
                CleanedTable,
                (state, column) =>
                    let
                        SampleValueRaw = try Table.FirstValue(Table.SelectColumns(state, column)) otherwise null,
                        // Заменяем пустые строки на null
                        SampleValue = if SampleValueRaw = "" then null else SampleValueRaw,
                        IsTableValue = SampleValue <> null and Value.Is(SampleValue, type table),
                        ResultTable = if not IsTableValue then
                            state
                        else
                            let
                                NestedColumns = Table.ColumnNames(SampleValue),
                                CleanedNestedColumns = List.Transform(NestedColumns, each CleanColumnName(_)),
                                PrefixedColumns = List.Transform(CleanedNestedColumns, each CleanColumnName(column) & "_" & _),
                                Expanded = Table.ExpandTableColumn(state, column, NestedColumns, PrefixedColumns)
                            in
                                Expanded
                    in
                        ResultTable
            )
        in
            ExpandedTable,
    
    // Итеративный процесс раскрытия таблиц с проверкой завершения
    IterativeExpand = (inputTable, iteration, maxIterations) =>
        let
            // Проверяем, есть ли еще табличные столбцы
            HasTables = HasTableColumns(inputTable),
            // Проверяем, не достигли ли мы максимального количества итераций
            ShouldContinue = HasTables and iteration < maxIterations,
            Result = if not ShouldContinue then
                inputTable
            else
                let
                    Expanded = ExpandAllTables(inputTable),
                    NextIteration = @IterativeExpand(Expanded, iteration + 1, maxIterations)
                in
                    NextIteration
        in
            Result,
    
    // Запускаем процесс с максимальным количеством итераций = 10
    FinalResult = IterativeExpand(Source, 1, 12)
in
    FinalResult
Изменено: Sanja - 20.09.2025 10:29:25
Спарсить с сайта zakupki.gov.ru маленькую таблицу.
 
Не могу добраться до данных с актами выполненных работ, а конкретно до их дат на данном ресурсе: https://zakupki.gov.ru/epz/contract/contractCard/process-info.html?reestrNumber=3230900477324000010 ... Тут динамическими будут только последние цифры, остальное одно и то же.
Данные находятся в каждом из раскрывающихся списков (выделено красным на скрине ПЛЕКС Скрин 1)
По сути нужны все даты из всех раскрытых списков из столбца, отмеченного красным на скрине 2. Не смог добраться до него через PQ, с макросами не дружу (но внедрить смогу надеюсь), и АПИ у них тоже кажется нет или в блоке, и я тоже с ними не дружу.

Помогите пжлст.
Быстро сверить дебет с кредитом в акте сверки взаиморасчетов
 
Добрый день! Есть два файла: первый это то, что имеем из 1С (АктДляСверки), второй то, что нужно получить (РезультатСверки). Процесс - простая сверка акта, но часто бывает, что суммы платежей и поступлений являются слагаемыми нескольких платежек или реализаций. Там где цифры равны и в практике ручной сверки, и в Excel относительно все не сложно, а вот можно ли сделать обработку (PQ или VBA), которая находила бы эти слагаемые и в дебете и в кредите и удаляла их, а оставляла только то, что является "кривым" (как раз суть сверки, - выявить расхождения, если они есть). В расчет нужно брать так же начальное входящее сальдо (в примере стоит дата, но от нее надо избавиться, чтобы универсализировать обработку, или не брать в расчет содержание текстового значения).

Прошу очень помощи!
Изменено: Sanja - 18.11.2024 09:02:49 (Изменил название темы)
Сведение двух таблиц с помощью Power Query и получение одной с динамическими датами в заголовке!
 
Добрый день! Голову сломал, прошу, помогите!

В примере две исходные таблицы и то, что должно получиться (просят всегда так сделать, постарался показать).
Таблица с датами (Лист СпрДатыНеделя) - первая дата это всегда среда, затем до вторника НО без субботы и воскресенья. Данная таблица будет постоянно меняться, но среда всегда первая. Эти даты - заголовки будущей итоговой таблицы.

Таблица с данными (лист Планинг) - суммы платежей по поставщикам, датам и столбцом "Основание" (остальные данные не важны).

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

далее подзаголовок "Наличный расчет" и все те же условия, список поставщиков, суммы по датам, но по всем значениям "Наличный расчет" столбца "Основание", далее промежуточный итого по кассе, и в конце Итого сумма по банку и кассе!

П.С. Естественно готов быть благодарным и за меньшую помощь, если будут затруднения с точным соответствием результата!

П.П.С. Перезалил файл с подтяжкой таблиц в PQ.
Изменено: МГКБ - 04.09.2024 11:49:18
Выгрузка таблицы с сайта (проблема вложенных таблиц)
 
Дорогие коллеги, добрый день!

Помогите выгрузить таблицу с сайта:
https://nsi.rosminzdrav.ru/dictionaries/1.2.643.5.1.13.13.99.2.538/passport/3.56

В каждом последующем раскрытии все больше и больше ссылок на неинформационные ячейки и таблицы.
Страницы: 1
Наверх