Страницы: 1
RSS
Чистка данных через Power query, задача привести выгруженные данные из 1С в Power query к единому значению
 

Подскажите, есть задача привести выгруженные данные из 1С в Power query.

Есть выгрузка из 1С с номерами заказов.

Изначально выглядит так (это кастомизированный отчет, созданный с нуля):

 

№БП-753 от 09.04.26

 

№БП-1022 от 13.05.26

 

№БП-1015 от 12.05.26

нужны только номера заказов, чтоб были идентичный со стандартными журналами 1С.  

должно выглядеть так:

 
БП-000753
 
БП-000964
 
БП-001064

После обработки выглядит так:

 

БП-1064

 

БП-683

 

БП-691

 

БП-693

Как мы видим, не хватает разное количество нулей в середине номеров.

Задача, чтоб добавлялась не хватающее кол-во нулей, максимальный цифр 6. Соответственно, если цифр уже 6, то ничего добавлять не надо.  

Может есть решение через условный столбец?

Интернет излазить, задачу решить не смог.

Образец файла в приложение

№ заказа 1С.xlsx (18.48 КБ)

Всем спасибо!

 
Здравствуйте! IMO, как вариант )  
pq
Изменено: Ma_Ri - 27.05.2026 14:53:51
Ma_Ri ≠ Мария
 
oops
Изменено: draginoid - 27.05.2026 16:02:39 (error)
 
Можете просто формулой
на листе таблица2
Код
=ЛЕВСИМВ([@[№ заказа .1]];ПОИСК("-";[@[№ заказа .1]]))&ТЕКСТ(ПСТР([@[№ заказа .1]];ПОИСК("-";[@[№ заказа .1]])+1;99);"000000")

на листе Лист1
Код
=ЛЕВСИМВ(ЛЕВСИМВ([@[№ заказа ]];ПОИСК(" ";[@[№ заказа ]]));ПОИСК("-";ЛЕВСИМВ([@[№ заказа ]];ПОИСК(" ";[@[№ заказа ]]))))&ТЕКСТ(ПСТР(ЛЕВСИМВ([@[№ заказа ]];ПОИСК(" ";[@[№ заказа ]]));ПОИСК("-";ЛЕВСИМВ([@[№ заказа ]];ПОИСК(" ";[@[№ заказа ]])))+1;99);"000000")
Изменено: Msi2102 - 27.05.2026 16:15:11
 
Цитата
написал:
Можете просто формулойна листе таблица2
Ma_Ri выше  уже дала решение, как исправить код, чтобы результат был нужный сразу. Я тоже сначала не заметил :)
 
Цитата
draginoid написал:
Ma_Ri выше  уже дала решение, как исправить код, чтобы результат был нужный сразу. Я тоже сначала не заметил
И что, пусть будет несколько решений, может кому-то пригодится  :D
 
Ma_Ri, Мария,

спасибо! все работает.
 
Мария, добрый день!
Спасибо вам за ответ, все работает.

подскажите пожалуйста, как внедрить ваш код в мой запрос.
Изначально поле в моём запросе, которое надо преобразовать "Заказ поставщику", после преобразований "№ Заказа.2".
Я неопытный пользователь, пользуюсь только стандартными инструментами PQ.
Всю голову сломал.
Ваш код:
1
2
3
4
5
6
7
let
  f=(x)=>((lst)=>{lst{0} & "-" & Text.PadStart(Text.Trim(lst{1}),6,"0"),Value.FromText(lst{2})})
          (Splitter.SplitTextByEachDelimiter({"-","от" })(x)),
  from = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
  to=Table.SplitColumn(from,"№ заказа ", f, {"№ заказа","Дата"})
in
  to
Мой зарос:
let
  Источник = Excel.CurrentWorkbook(){[Name="Платежи_2026"]}[Content],
  #"Удаленные столбцы" = Table.RemoveColumns(Источник,{"Сумма ПКЗ 15 дней", "Сумма ПКЗ 30 дней", "Сумма ПКЗ 45 дней", "Сумма ПКЗ 60дней", "Сумма ПКЗ 75 дней", "№ п\п", "ПКЗ дней", "Сумма ОПКЗ"}),
  #"Строки с примененным фильтром" = Table.SelectRows(#"Удаленные столбцы", each ([Сумма ОКЗ] <> null)),
  #"Заполнение вниз" = Table.FillDown(#"Строки с примененным фильтром",{"Поставщик"}),
  #"Строки с примененным фильтром1" = Table.SelectRows(#"Заполнение вниз", each ([Заказ поставщику] <> null)),
  #"Измененный тип" = Table.TransformColumnTypes(#"Строки с примененным фильтром1",{{"Ближайшая дата оплаты", type date}, {"Поставщик", type text}, {"Количество дней до", Int64.Type}, {"Сумма", type number}, {"Валюта", type text}, {"Столбец1", type number}, {"Столбец2", Int64.Type}, {"Сумма ОКЗ", type number}}),
  #"Переименованные столбцы" = Table.RenameColumns(#"Измененный тип",{{"Столбец1", "Курс"}, {"Столбец2", "Номинал валют"}}),
  #"Дублированный столбец" = Table.DuplicateColumn(#"Переименованные столбцы", "Ближайшая дата оплаты", "Копия Ближайшая дата оплаты"),
  #"Переименованные столбцы1" = Table.RenameColumns(#"Дублированный столбец",{{"Копия Ближайшая дата оплаты", "№ недели"}}),
  #"Переупорядоченные столбцы" = Table.ReorderColumns(#"Переименованные столбцы1",{"Поставщик", "Ближайшая дата оплаты", "№ недели", "Заказ поставщику", "Документ поступления", "Количество дней до", "Сумма", "Валюта", "Курс", "Номинал валют", "Сумма ОКЗ"}),
  #"Вставлено: неделя года" = Table.AddColumn(#"Переупорядоченные столбцы", "Неделя года", each Date.WeekOfYear([#"№ недели"]), Int64.Type),
  #"Переупорядоченные столбцы1" = Table.ReorderColumns(#"Вставлено: неделя года",{"Поставщик", "Ближайшая дата оплаты", "№ недели", "Неделя года", "Заказ поставщику", "Документ поступления", "Количество дней до", "Сумма", "Валюта", "Курс", "Номинал валют", "Сумма ОКЗ"}),
  #"Удаленные столбцы1" = Table.RemoveColumns(#"Переупорядоченные столбцы1",{"№ недели"}),
  #"Разделить столбец по разделителю" = Table.SplitColumn(#"Удаленные столбцы1", "Заказ поставщику", Splitter.SplitTextByDelimiter("от", QuoteStyle.Csv), {"№ Заказа", "Дата заказа"}),
  #"Измененный тип1" = Table.TransformColumnTypes(#"Разделить столбец по разделителю",{{"№ Заказа", type text}, {"Дата заказа", type date}}),
  #"Разделить столбец по разделителю1" = Table.SplitColumn(#"Измененный тип1", "№ Заказа", Splitter.SplitTextByDelimiter("№", QuoteStyle.Csv), {"№ Заказа.1", "№ Заказа.2"}),
  #"Измененный тип2" = Table.TransformColumnTypes(#"Разделить столбец по разделителю1",{{"№ Заказа.1", type text}, {"№ Заказа.2", type text}}),
  #"Удаленные столбцы2" = Table.RemoveColumns(#"Измененный тип2",{"№ Заказа.1"})
 
in
  #"Удаленные столбцы2"
 
Может так?
Код
let    Источник = Excel.CurrentWorkbook(){[Name="Платежи_2026"]}[Content],
    #"Удаленные столбцы" = Table.RemoveColumns(Источник,{        "Сумма ПКЗ 15 дней","Сумма ПКЗ 30 дней","Сумма ПКЗ 45 дней",        "Сумма ПКЗ 60дней","Сумма ПКЗ 75 дней",        "№ п\п","ПКЗ дней","Сумма ОПКЗ"    }),
    #"Строки с примененным фильтром" =        Table.SelectRows(#"Удаленные столбцы", each [Сумма ОКЗ] <> null),
    #"Заполнение вниз" =        Table.FillDown(#"Строки с примененным фильтром",{"Поставщик"}),
    #"Строки с примененным фильтром1" =        Table.SelectRows(#"Заполнение вниз", each [Заказ поставщику] <> null),
    #"Измененный тип" = Table.TransformColumnTypes(#"Строки с примененным фильтром1",{        {"Ближайшая дата оплаты", type date},        {"Поставщик", type text},        {"Количество дней до", Int64.Type},        {"Сумма", type number},        {"Валюта", type text},        {"Столбец1", type number},        {"Столбец2", Int64.Type},        {"Сумма ОКЗ", type number}    }),
    #"Переименованные столбцы" =        Table.RenameColumns(#"Измененный тип",{            {"Столбец1", "Курс"},            {"Столбец2", "Номинал валют"}        }),
    #"Дублированный столбец" =        Table.DuplicateColumn(#"Переименованные столбцы",            "Ближайшая дата оплаты",            "Копия Ближайшая дата оплаты"        ),
    #"Переименованные столбцы1" =        Table.RenameColumns(#"Дублированный столбец",{            {"Копия Ближайшая дата оплаты", "№ недели"}        }),
    #"Вставлено: неделя года" =        Table.AddColumn(#"Переименованные столбцы1",            "Неделя года",            each Date.WeekOfYear([#"№ недели"]),            Int64.Type        ),
    #"Удаленные столбцы1" =        Table.RemoveColumns(#"Вставлено: неделя года",{"№ недели"}),
    #"Разделили по от" =        Table.SplitColumn(#"Удаленные столбцы1",            "Заказ поставщику",            Splitter.SplitTextByDelimiter("от", QuoteStyle.Csv),            {"№ Заказа", "Дата заказа"}        ),
    #"Trim" =        Table.TransformColumns(#"Разделили по от",{            {"№ Заказа", Text.Trim, type text},            {"Дата заказа", Text.Trim, type text}        }),
    #"Разделили по -" =        Table.SplitColumn(#"Trim",            "№ Заказа",            Splitter.SplitTextByDelimiter("-", QuoteStyle.Csv),            {"Часть1", "Часть2"}        ),
    #"Убрали №" =        Table.TransformColumns(#"Разделили по -",{            {"Часть1", each Text.Replace(_, "№", ""), type text}        }),
    #"Добавили нули" =        Table.AddColumn(#"Убрали №", "Часть2_норм",            each Text.PadStart(Text.Trim([Часть2]), 6, "0"),            type text        ),
    #"Собрали номер" =        Table.AddColumn(#"Добавили нули", "№ Заказа.2",            each Text.Trim([Часть1]) & "-" & [Часть2_норм],            type text        ),
    #"Удалили лишнее" =        Table.RemoveColumns(#"Собрали номер",{"Часть1","Часть2","Часть2_норм"}),
    #"Типы" =        Table.TransformColumnTypes(#"Удалили лишнее",{            {"Дата заказа", type date},            {"№ Заказа.2", type text}        })
in    #"Типы"
Изменено: draginoid - 28.05.2026 15:49:45
 
Всем, огромное спасибо! Все работает!  
 
Где бы этому научится!  
 
Цитата
написал:
Где бы этому научится!  
Читать матчасть :)
Я похожие вопросы задавал пол года назад.
Я еще только начинающий, кнопками :)
Изменено: draginoid - 28.05.2026 16:32:35
 
Здравствуйте! вариант (добавила удаление "№").
Код
....ВАШ КОД...
#"Удаленные столбцы1" = Table.RemoveColumns(#"Переупорядоченные столбцы1",{"№ недели"}),

    f=(x)=>((lst)=>{lst{1} & "-" & Text.PadStart(Text.Trim(lst{2}),6,"0"),Value.FromText(lst{3})})
            (Splitter.SplitTextByEachDelimiter({"№","-","от" })(x)),
    to=Table.SplitColumn(#"Удаленные столбцы1","Заказ поставщику", f, {"№ Заказа","Дата заказа"})
in
    to
С уважением, Ma_Ri, !!! Всего доброго! )
Изменено: Ma_Ri - 28.05.2026 16:48:39 (заменила в коде название столбца на "Заказ поставщику")
Ma_Ri ≠ Мария
 
Еще вариант функции:
pq
 

Или так.

Поменять на Text.Split вместо   Text.SplitAny, чтобы раделять по "-", а не каждому символу.

Код
f = (x) =>let p = Text.Split(x, "-")in {"БП-" & Text.PadStart(p{1}, 6, "0"), Date.From(p{3})}
Изменено: draginoid - 29.05.2026 08:17:32
 
Цитата
draginoid написал:
Или так.
не надо так.
Пришелец-прораб.
 
Цитата
написал:
матчасть
Скиньте ссылки на матчасть) где есть хорошие ресурсы)  
 
Цитата
написал:
Скиньте ссылки на матчасть) где есть хорошие ресурсы)  
https://www.planetaexcel.ru/techniques/24https://sponsr.ru/pq_m_buchlotnik/
https://learn.microsoft.com/en-us/powerquery-m/
https://www.dmkpress.com/catalog/computer/data/978-5-93700-310-2/
Изменено: draginoid - 29.05.2026 15:35:16
Страницы: 1
Читают тему
Наверх