From 0212726b06b074c735c1eaebbde74666741fbaf3 Mon Sep 17 00:00:00 2001 From: madeliri Date: Mon, 13 Apr 2026 19:58:17 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B1=D0=BE=D0=BB=D0=B5=D0=B5=20=D1=8F?= =?UTF-8?q?=D0=B2=D0=BD=D1=8B=D0=B9=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20(=D0=B4=D0=B0?= =?UTF-8?q?=D1=82=D1=8B,=20=D1=87=D0=B8=D1=81=D0=BB=D0=B0,=20=D0=B2=D1=81?= =?UTF-8?q?=D0=B5=20=D0=BE=D1=81=D1=82=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B5?= =?UTF-8?q?=20-=20=D1=82=D0=B5=D0=BA=D1=81=D1=82)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.R | 15 ++++++++++----- modules/db.R | 5 +++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/app.R b/app.R index 7cc9f5c..f045a6e 100644 --- a/app.R +++ b/app.R @@ -868,6 +868,7 @@ server <- function(input, output, session) { date_columns <- subset(scheme, form_type == "date", form_id, drop = TRUE) number_columns <- subset(scheme, form_type == "number", form_id, drop = TRUE) + other_cols <- which(colnames(df) %in% c(date_columns, number_columns)) df <- df |> dplyr::mutate( @@ -875,9 +876,10 @@ server <- function(input, output, session) { dplyr::across(tidyselect::all_of({{date_columns}}), as.Date), # числа - к единому формату десятичных значений dplyr::across(tidyselect::all_of({{number_columns}}), ~ gsub("\\.", "," , .x)), + dplyr::across(tidyselect::all_of({{other_cols}}), as.character) ) |> # очистка от пустых ключей - dplyr::filter(!is.na(main_key)) + dplyr::filter(!is.na(mhcs()$get_main_key_id)) df } @@ -1044,6 +1046,7 @@ server <- function(input, output, session) { # столбцы в таблицы и схема df_to_schema_compare <- setdiff(colnames(df), unique(scheme$form_id)) + df_to_schema_compare <- df_to_schema_compare[df_to_schema_compare != main_key_id] schema_to_df_compare <- setdiff(unique(scheme$form_id), colnames(df)) if (length(df_to_schema_compare) > 0 ) { @@ -1054,8 +1057,8 @@ server <- function(input, output, session) { if (length(schema_to_df_compare) > 0 ) { message <- glue::glue("столбцы в таблице '{table_name}' не соответсвуют схеме") - cli::cli_warn(c(message, paste("- ", schema_to_df_compare))) showNotification(message, type = "error") + cli::cli_warn(c(message, paste("- ", schema_to_df_compare))) return() } @@ -1067,8 +1070,9 @@ server <- function(input, output, session) { df <- openxlsx2::read_xlsx(wb, table_name) scheme <- mhcs()$get_scheme_with_values_forms(table_name) - date_columns <- subset(scheme, form_type == "date", form_id, drop = TRUE) + date_columns <- subset(scheme, form_type == "date", form_id, drop = TRUE) number_columns <- subset(scheme, form_type == "number", form_id, drop = TRUE) + other_cols <- which(colnames(df) %in% c(date_columns, number_columns)) # функция для преобразование числовых значений и сохранения "NA" num_converter <- function(old_col) { @@ -1086,8 +1090,9 @@ server <- function(input, output, session) { df <- df |> dplyr::mutate( # даты - к единому формату - dplyr::across(tidyselect::all_of({{date_columns}}), \(x) purrr::map_chr(x, db$excel_to_db_dates_converter)), + dplyr::across(tidyselect::all_of({{date_columns}}), \(x) purrr::map_chr(x, db$excel_to_db_dates_converter)), dplyr::across(tidyselect::all_of({{number_columns}}), num_converter), + dplyr::across(tidyselect::all_of({{other_cols}}), as.character) ) |> select(all_of(unique(c(main_key_id, scheme$form_id)))) @@ -1115,7 +1120,7 @@ server <- function(input, output, session) { # очистка от пустых ключей df <- df |> - dplyr::filter(!is.na(main_key)) + dplyr::filter(!is.na({{main_key_id}})) DBI::dbWriteTable( con, diff --git a/modules/db.R b/modules/db.R index d9300b3..98a84b2 100644 --- a/modules/db.R +++ b/modules/db.R @@ -191,6 +191,7 @@ write_df_to_db = function( date_columns <- subset(scheme, form_type == "date", form_id, drop = TRUE) number_columns <- subset(scheme, form_type == "number", form_id, drop = TRUE) + other_cols <- which(colnames(df) %in% c(date_columns, number_columns)) df <- df |> dplyr::mutate( @@ -198,7 +199,11 @@ write_df_to_db = function( dplyr::across(tidyselect::all_of({{date_columns}}), \(x) purrr::map_chr(x, excel_to_db_dates_converter)), # числа - к единому формату десятичных значений dplyr::across(tidyselect::all_of({{number_columns}}), ~ gsub("\\.", "," , .x)), + dplyr::across(tidyselect::all_of({{other_cols}}), as.character), ) + + df |> + dplyr::glimpse() if (table_name == "main") { del_query <- glue::glue("DELETE FROM main WHERE {main_key_id} = '{main_key_value}'")