Support CasPlan

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    <<
    Categories
    Nothing found
    Available to users:
    T
    M
    M
    E
    O
    O
    K
    Y
    D
    A
    A
    A
    V
    E
    V
    G
    K
    V
    C
    A
    N
    Y
    A
    K
    V
    S
    I
    M
    S
    E
    M
    T
    E
    G
    F
    T
    A
    D
    D
    A
    P
    R
    A
    N
    T
    Y
    I
    D
    N
    A
    T
    E
    M
    S
    M
    E
    T
    M
    D
    K
    T
    K
    D
    A
    D
    N
    K
    A
    N
    N
    A
    K
    A
    K
    O
    C
    E
    Y
    A
    A

    1218 При проверке практического задания, отображается ошибка

    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    U&K DIGITAL SOLUTION_backlog
    in progress done
    4
    9
    94
    This topic has been deleted. Only users with topic management privileges can see it.
    • aassanova
      aassanova U&K DIGITAL SOLUTION_int last edited by

      Снимок экрана 2025-09-26 084812.png@auto@ Снимок экрана 2025-09-26 084923.png@auto@

      vaxentov 1 Reply Last reply
      Reply Quote 0
      • vaxentov
        vaxentov CSP_techsupport @aassanova last edited by

        Добрый день, обращение в работе

        1 Reply Last reply
        Reply Quote 0
        • vaxentov
          vaxentov CSP_techsupport last edited by

          Отправьте пожалуйста код скрипта, после которого происходит данная ошибка

          nkim 1 Reply Last reply
          Reply Quote 0
          • nkim
            nkim CSP @vaxentov last edited by vaxentov

            om.environment.loadFromMulticube("М01.09 Привязка мультикубов", "4s")
            
            // Получение элементов фильтров карточки
            const filters = om.environment.get("cardFilters");
            
            function getNamesByLongIds(longIds) {
              let collection = om.common.entitiesInfo().getCollection(longIds);
              return collection.map(entity => {return entity.name()});
            }
            
            // Получение имен элементов в фильтре
            let longId = []
            filters.forEach(elem => {
            	longId.push(elem["entityLongId"])
            });
            const names = getNamesByLongIds(longId);
            print(names);
            
            // Чтение названий сущностей для текущих фильтров карточки
            const mc_name = om.environment.get("4s")[names[0]][names[1]]["Мультикуб"];
            const src_name = om.environment.get("4s")[names[0]][names[1]]["Куб источник"];
            const dest_name = om.environment.get("4s")[names[0]][names[1]]["Куб приемник"];
            const formula = om.environment.get("4s")[names[0]][names[1]]["Тип данных"];
            const func = om.environment.get("4s")[names[0]][names[1]]["функция"];
            
            
            const ENV = {
            	MULTICUBE_SRC: mc_name,
            	MULTICUBE_SRC_VIEW: null,
            	CUB_SRC: src_name,
            
            	MULTICUBE_DST: "М01.02 Результаты",
            	MULTICUBE_DST_VIEW: "М01.02 Результаты - скрипт",
            	CUB_DST: "Ответ к заданию",
            	JOB_INDEX: dest_name,
            	JOB_NAME: names[0],
            	FUNC: func,
            	TYPE: formula,
            }
            
            om.common.resultInfo()
                .actionsInfo()
                .makeMacrosAction('core_testing_formula')
                .appendAfter()
                .environmentInfo()
                .set('ENV', ENV);
            
            1 Reply Last reply
            Reply Quote 0
            • vaxentov
              vaxentov CSP_techsupport last edited by

              Проблема была в том, что на первую кнопку проверки был привязан 1 скрипт, в то время как он должен был вызываться в цепочке скриптов, на данный момент я исправил эту ошибку.

              aassanova 1 Reply Last reply
              Reply Quote 1
              • aassanova
                aassanova U&K DIGITAL SOLUTION_int @vaxentov last edited by

                Снимок экрана 2025-10-01 194839.png@auto@

                1 Reply Last reply
                Reply Quote 0
                • vaxentov
                  vaxentov CSP_techsupport last edited by

                  Добрый день!
                  Это не ошибка, а лог ответа скрипта, ошибок в нем нет, только информационный вывод. Если у вас проблема с тем, что система неверно проверяет выполненное задание, то прошу вас обратиться к тому кто предоставлял вам тестовую модель и подготавливал ее.

                  nzakariya 1 Reply Last reply
                  Reply Quote 0
                  • nzakariya
                    nzakariya CSP @vaxentov last edited by

                    Добрый день, ядро проверки ключей core_testing_formula обращается в ОЛТП, нужно либо сделать проброс к ОЛТП https://csp-stand.casplan.tech/oltp/mysql/ (или если это уже работает, то предоставить креды в личном сообщении мне), либо развернуть ОЛТП на данном ВС.

                    core_testing_formula:

                     const ENV = om.environment.get('ENV', null);
                     if (!ENV) {
                         throw new Error('Данные через переменное окружение переданы некорректно');
                     }
                    
                    var d = new Date();
                    
                    var cur_date = d.toLocaleDateString('ru-RU', {
                      year: 'numeric',
                      month: '2-digit',
                      day: '2-digit',
                    });
                    
                    // Чтение формулы из куба
                    const multicubesTab = om.multicubes.multicubesTab();
                    let multicubeTab = null;
                    let find_error = false;
                    let formula = null;
                    try {
                    	multicubeTab = multicubesTab.open(ENV.MULTICUBE_SRC);
                    }
                    catch {
                    	console.log(`Не найден мультикуб с формулой ${ENV.MULTICUBE_SRC}\n`);
                    	find_error = true;
                    }
                    
                    if (!find_error) {
                    	let generator = multicubeTab.cubesTab().pivot()
                    															.columnsFilter([ENV.TYPE])
                    															.create()
                    															.range(1)
                    															.generator();
                    	for (const chunk of generator) {
                    			chunk.rows().all().forEach(cube => {
                    					let cubeInfo = [];
                    					cube.cells().all().forEach(cell => {
                    							if (cell.columns().first().name() === ENV.TYPE && ENV.CUB_SRC === cube.first().name()) {
                    								formula = cell.getValue();
                    							}
                    			});
                    		});		
                    	}
                    	if (formula === null) {
                    	  throw new Error('Указанный куб в мультикубе не найден');
                    	}
                    }
                    
                    if (!find_error) {
                    	if (formula.length === 0) {
                    	  formula = "Нет формулы"
                    	}
                    	
                    	// Запись формулы в куб
                    	const multicubeTab2 = multicubesTab.open(ENV.MULTICUBE_DST);
                    	const pivot = multicubeTab2.pivot(ENV.MULTICUBE_DST_VIEW);
                    	const grid = pivot.columnsFilter(['Ответ к заданию', 'Дата ответа']).create();
                    	const generator = grid.range().generator(5000);
                    	
                    	for (let chunk of generator) {
                    			// Перебор строк
                    			chunk.rows().all().forEach(row => {
                    				const rowLabels = [];
                            row.all().forEach(labels => {
                                rowLabels.push(labels.label());
                            });
                    				row.cells().all().forEach( element => {
                    					if (ENV.JOB_NAME === rowLabels[0] && ENV.JOB_INDEX === rowLabels[1]) {
                    					  if (element.columns().first().name() === 'Ответ к заданию' ) {
                    						element.setValue(formula);
                    						}
                    					  if (element.columns().first().name() === 'Дата ответа' && formula.length > 0 ) {
                    						element.setValue(cur_date);
                    						}						
                    					}
                    					
                    				});
                    			});
                    	}
                    	console.log(`Формула из куба "${ENV.CUB_SRC}" скопирована для проверки.\n`)
                    }
                    
                    formula = formula.replace(/"/g, `\\"`);;
                    
                    const ENV2 = {
                     FUNCTION: ENV.JOB_NAME,
                     DEST: ENV.JOB_INDEX,
                     FORMULA: formula,
                     FUNC: ENV.FUNC,
                    }
                    
                    om.common.resultInfo()
                        .actionsInfo()
                        .makeMacrosAction("Проверка формулы")
                        .appendAfter()
                        .environmentInfo()
                        .set('ENV2', ENV2);
                    

                    Проверка формулы:

                     const ENV2 = om.environment.get('ENV2', null);
                     const ANS = om.variables.get('Table name').getValue();
                     const ANSS = om.variables.get('Table name 2').getValue();
                     const SST = om.variables.get('Table name 3').getValue();
                     if (!ENV2) {
                         throw new Error('Данные через переменное окружение переданы некорректно');
                     }
                    
                    const email = om.variables.get("E-mail").getValue().trim();
                    
                    const ENV = {
                        CORE: "core_export_import",
                        SHOUTER_LVL: 'INFO',
                        SHOUTER_LOGGER_LVL: 'DEBUG', 
                        SHOW_ERROR_STACK: true,
                    
                        SRC: {
                            TYPE: "MYSQL",
                            PARAMS: {
                                QUERY: {
                                    TYPE: "RAW_QUERY",
                                    PARAMS: { 
                                        PRE_QUERIES: [
                    										      `DELETE FROM I03_student_statistics WHERE студент = "${email}" AND функция_код = "${ENV2.FUNC}" AND задание = "${ENV2.DEST}"`,`INSERT INTO I03_student_statistics (студент, функция_код, задание, формула, ключ) VALUES ("${email}", "${ENV2.FUNC}", "${ENV2.DEST}", "${ENV2.FORMULA}", (SELECT ключ FROM I03_answers WHERE функция_код = "${ENV2.FUNC}" AND задание = "${ENV2.DEST}" AND формула = "${ENV2.FORMULA}"  LIMIT 1))`,
                    `INSERT INTO I03_answers_students ( функция_код, задание, formula) SELECT "${ENV2.FUNC}", "${ENV2.DEST}", "${ENV2.FORMULA}" WHERE NOT EXISTS (SELECT 1 FROM I03_answers_students WHERE функция_код = "${ENV2.FUNC}" AND задание = "${ENV2.DEST}" AND formula = "${ENV2.FORMULA}" UNION SELECT 1 FROM I03_answers WHERE функция_код = "${ENV2.FUNC}" AND задание = "${ENV2.DEST}" AND формула = "${ENV2.FORMULA}" LIMIT 1 );`
                    											],
                    										VALUE: `SELECT функция_код, задание, ключ, "Задание выполнено верно." AS description FROM I03_answers WHERE функция_код = "${ENV2.FUNC}" AND задание = "${ENV2.DEST}" AND формула = "${ENV2.FORMULA}" AND standart = 1 UNION ALL SELECT функция_код, задание, ключ, CONCAT( "Формула работает верно. Но оптимальная формула – ", ( SELECT формула FROM I03_answers WHERE функция_код = "${ENV2.FUNC}" AND задание = "${ENV2.DEST}" AND standart = 1 LIMIT 1 ), ".\n", description ) AS description FROM I03_answers WHERE функция_код = "${ENV2.FUNC}" AND задание = "${ENV2.DEST}" AND формула = "${ENV2.FORMULA}" UNION ALL SELECT функция_код, задание, "" AS ключ, CONCAT("Формула неверная.\n", description) AS description FROM I03_answers_students WHERE функция_код = "${ENV2.FUNC}" AND задание = "${ENV2.DEST}" AND formula = "${ENV2.FORMULA}" LIMIT 1;`,
                                    }
                                },
                                CONNECTION: {
                                    HOST: om.variables.get('HOST').getValue(),
                                    PORT: om.variables.get('PORT').getValue(),
                                    USER: om.variables.get('USER').getValue(),
                                    PASSWORD: om.variables.get('PASSWORD').getValue(),
                                    DB: om.variables.get('DB').getValue(),
                                },
                            }
                        },
                        DEST : {
                            TYPE : "OM_MULTICUBE", 
                            PARAMS : {
                                NAME : "М01.02 Результаты",
                                TRANSFORM : {
                                    DOWNLOAD_TRANSFORM_FILE : false,
                                    DOWNLOAD_IMPORT_REPORT_FILE : false,
                                    CHARSET  : "UTF-8", //"WINDOWS-1251",
                                    SRC_TO_DEST_COLUMN_MAP  : {
                                        "ключ":"Ключ",
                                        "description":"Результат решения",										
                                    },
                                    DIMENSIONS : {
                                        dim1 : {
                                            NAME : "Функции",
                                            SRC_COLUMN_NAME  : "функция_код",
                                            CAN_USE_IN_CLEANER : true,
                                            ON_VALUE : "AS_IS"
                                        },
                                        dim2 : {
                                            NAME : "Задания",
                                            SRC_COLUMN_NAME : "задание",
                                            CAN_USE_IN_CLEANER : false,
                                            ON_VALUE : "AS_IS"
                                        },
                                    },
                                    CUSTOM_COLUMNS : [],
                                    SRC_COLUMN_PREPARE_DATA_MAP : {}
                                },
                                CLEANER : {
                                    STATUS : false,
                                    FORMAT_FORMULA_MAP : {
                                        "No Data" : null,
                                        "Date" : `DATE("")`,
                                        "Entity" : `""`,
                                        "Time Entity" : `""`,
                                        "Version" : `""`,
                                        "Line Item Subset" : `""`,
                                        "Number" : `0`,
                                        "Boolean" : `FALSE`,
                                        "Text" : `""`
                                    }
                                }
                            }
                        }
                    };
                    
                    om.common.resultInfo()
                        .actionsInfo()
                        .makeMacrosAction(ENV.CORE)
                        .appendAfter()
                        .environmentInfo()
                        .set('ENV', ENV);     
                    
                    nzakariya 1 Reply Last reply
                    Reply Quote 0
                    • nzakariya
                      nzakariya CSP @nzakariya last edited by nzakariya

                      спасибо, теперь модель отрабатывает верно, топик можно закрывать.
                      @aassanova проверить.

                      1 Reply Last reply
                      Reply Quote 0
                      Loading More Posts
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes
                      Reply
                      • Reply as topic
                      Log in to reply
                      • First post
                        Last post