[1mdiff --git a/common/Charts/ChartsDrawer.js b/common/Charts/ChartsDrawer.js[m
[1mindex a3b387aae1..74913c7411 100644[m
[1m--- a/common/Charts/ChartsDrawer.js[m
[1m+++ b/common/Charts/ChartsDrawer.js[m
[36m@@ -189,7 +189,9 @@[m [mCChartsDrawer.prototype =[m
 		//CHARTS[m
 		if (!chartSpace.bEmptySeries) {[m
 			for(var i in this.charts) {[m
[31m-				this.charts[i].recalculate();[m
[32m+[m				[32mif (this.charts.hasOwnProperty(i) && this.charts[i]) {[m
[32m+[m					[32mthis.charts[i].recalculate();[m
[32m+[m				[32m}[m
 			}[m
 		}[m
 [m
[36m@@ -318,7 +320,9 @@[m [mCChartsDrawer.prototype =[m
 [m
 			if (chartSpace.chart.plotArea.isForChartEx) {[m
 				for (i in t.charts) {[m
[31m-					t.charts[i].draw();[m
[32m+[m					[32mif (t.charts.hasOwnProperty(i) && t.charts[i]) {[m
[32m+[m						[32mt.charts[i].draw();[m
[32m+[m					[32m}[m
 				}[m
 			} else {[m
 				//для начала нужно отсортировать[m
[36m@@ -616,6 +620,7 @@[m [mCChartsDrawer.prototype =[m
 [m
 		if (!this.cChartSpace.bEmptySeries) {[m
 			var type = obj.getObjectType();[m
[32m+[m			[32mconsole.log(type);[m
 			switch (type) {[m
 				case AscDFH.historyitem_type_DLbl: {[m
 					pos = this._calculatePositionDlbl(obj);[m
[36m@@ -625,7 +630,7 @@[m [mCChartsDrawer.prototype =[m
 					var parentType = obj.parent ? obj.parent.getObjectType() : null;[m
 					if (parentType === AscDFH.historyitem_type_Chart) {[m
 						pos = this._calculatePositionTitle(obj);[m
[31m-					} else if (parentType === AscDFH.historyitem_type_ValAx || parentType === AscDFH.historyitem_type_CatAx || parentType === AscDFH.historyitem_type_DateAx) {[m
[32m+[m					[32m} else if (parentType === AscDFH.historyitem_type_ValAx || parentType === AscDFH.historyitem_type_CatAx || parentType === AscDFH.historyitem_type_DateAx || parentType === AscDFH.historyitem_type_Axis) {[m
 						pos = this._calculatePositionAxisTitle(obj.parent);[m
 					}[m
 					break;[m
[36m@@ -2491,13 +2496,6 @@[m [mCChartsDrawer.prototype =[m
 		valAxis.max = axisProperties.val.max;[m
 		valAxis.scale = axisProperties.val.scale.length > 0 ? axisProperties.val.scale : this._roundValues(this._getAxisValues2(valAxis, this.cChartSpace, false, false));[m
 [m
[31m-		// Exchange cross axes [m
[31m-		catAxis.crossAx = valAxis;[m
[31m-		valAxis.crossAx = catAxis;[m
[31m-[m
[31m-		// Differentiate between axes [m
[31m-		catAxis.axPos = window['AscFormat'].AX_POS_B;[m
[31m-		valAxis.axPos = window['AscFormat'].AX_POS_L;[m
 	},[m
 [m
 	_chartExSetAxisMinAndMax: function (axis, num) {[m
[36m@@ -4615,11 +4613,11 @@[m [mCChartsDrawer.prototype =[m
 		if (!this.cChartSpace || !this.calcProp) {[m
 			return null;[m
 		}[m
[31m-		var pathId = this.cChartSpace.AllocPath();[m
[31m-		var path = this.cChartSpace.GetPath(pathId);[m
[32m+[m		[32mconst pathId = this.cChartSpace.AllocPath();[m
[32m+[m		[32mconst path = this.cChartSpace.GetPath(pathId);[m
 [m
[31m-		var pathH = this.calcProp.pathH;[m
[31m-		var pathW = this.calcProp.pathW;[m
[32m+[m		[32mconst pathH = this.calcProp.pathH;[m
[32m+[m		[32mconst pathW = this.calcProp.pathW;[m
 [m
 		if (!isPxToMmConverted) {[m
 			const pxToMm = this.calcProp.pxToMM;[m
[36m@@ -5049,9 +5047,10 @@[m [mCChartsDrawer.prototype =[m
 [m
 	getVerticalGridLines: function (axis, isCatAxis) {[m
 		var gridLines, minorGridLines;[m
[32m+[m		[32mconst isForChartEx = this.cChartSpace && this.cChartSpace.chart && this.cChartSpace.chart.plotArea && this.cChartSpace.chart.plotArea.isForChartEx ? true : false;[m
 [m
 		var crossBetween = this.cChartSpace.getValAxisCrossType();[m
[31m-		if(null === crossBetween && isCatAxis) {[m
[32m+[m		[32mif(null === crossBetween && (isCatAxis || isForChartEx)) {[m
 			crossBetween = axis.crossAx ? axis.crossAx.crossBetween : null;[m
 		}[m
 [m
[36m@@ -5067,15 +5066,14 @@[m [mCChartsDrawer.prototype =[m
 		if(!axis.majorGridlines && !axis.minorGridlines) {[m
 			return;[m
 		}[m
[31m-[m
[31m-		var minorLinesCount = isCatAxis ? 2 : 5;[m
[32m+[m		[32mvar minorLinesCount = isCatAxis || isForChartEx ? 2 : 5;[m
 [m
 		var posAxis = this.calcProp.chartGutter._left / this.calcProp.pxToMM;[m
 		var stepX = points[1] ? Math.abs((points[1].pos - points[0].pos)) : (Math.abs(points[0].pos - posAxis) * 2);[m
 		var minorStep = (stepX * this.calcProp.pxToMM) / minorLinesCount;[m
 		var posX, crossDiff;[m
 [m
[31m-		if (crossBetween === AscFormat.CROSS_BETWEEN_BETWEEN && isCatAxis) {[m
[32m+[m		[32mif (crossBetween === AscFormat.CROSS_BETWEEN_BETWEEN && (isCatAxis || isForChartEx)) {[m
 			crossDiff = points[1] ? Math.abs((points[1].pos - points[0].pos) / 2) : Math.abs(points[0].pos - posAxis);[m
 		}[m
 [m
[36m@@ -5083,7 +5081,7 @@[m [mCChartsDrawer.prototype =[m
 		var path = this.cChartSpace.GetPath(pathId);[m
 		var i;[m
 		for (i = 0; i < points.length; i++) {[m
[31m-			if(isCatAxis && points[i].val < 0) {[m
[32m+[m			[32mif((isCatAxis && points[i].val < 0) && !isForChartEx) {[m
 				continue;[m
 			}[m
 [m
[36m@@ -5114,7 +5112,7 @@[m [mCChartsDrawer.prototype =[m
 		var pathIdMinor = this.cChartSpace.AllocPath();[m
 		var pathMinor = this.cChartSpace.GetPath(pathIdMinor);[m
 		for (i = 0; i < points.length; i++) {[m
[31m-			if(isCatAxis && points[i].val < 0) {[m
[32m+[m			[32mif((isCatAxis && points[i].val < 0) && !isForChartEx) {[m
 				continue;[m
 			}[m
 [m
[36m@@ -7633,7 +7631,10 @@[m [mdrawHistogramChart.prototype = {[m
 			// two different ways of storing information, object and array, therefore convert object into array[m
 			const sections = isAggregation ? Object.values(cachedData.aggregation) : cachedData.results; [m
 			if (sections) {[m
[31m-				const initialBarWidth = (this.chartProp.trueWidth)/ sections.length;[m
[32m+[m				[32m// 1 px gap for each section length[m
[32m+[m				[32mconst gapWidth = 1;[m
[32m+[m				[32m// const gapNumbers = sections.length - 1;[m
[32m+[m				[32mconst initialBarWidth = (this.chartProp.trueWidth) / sections.length;[m
 				const barWidth = (initialBarWidth / (1 + coeff));[m
 				const margin = (initialBarWidth - barWidth) / 2;[m
 [m
[36m@@ -7642,11 +7643,12 @@[m [mdrawHistogramChart.prototype = {[m
 					// aggregation object does not have field occurrence;[m
 					const val = isAggregation ? sections[i] : sections[i].occurrence;[m
 					const startY = this.cChartDrawer.getYPosition(val, valAxis, true);[m
[32m+[m					[32mconst bW = i === 0 ? barWidth : barWidth - gapWidth;[m
 					if (this.chartProp && this.chartProp.pxToMM ) {[m
 						const height = valStart - (startY * this.chartProp.pxToMM);[m
[31m-						this.paths[i] = this.cChartDrawer._calculateRect(start, valStart, barWidth, height);[m
[32m+[m						[32mthis.paths[i] = this.cChartDrawer._calculateRect(start, valStart, bW, height);[m
 					}		[m
[31m-					start += (barWidth + margin + margin);[m
[32m+[m					[32mstart += (bW + margin + margin + gapWidth);[m
 				}[m
 			}[m
 [m
[36m@@ -7817,25 +7819,52 @@[m [mdrawWaterfallChart.prototype = {[m
 			let valStart = this.cChartSpace.chart.plotArea.axId ? this.cChartSpace.chart.plotArea.axId[0].posY * this.chartProp.pxToMM : this.chartProp.trueHeight + this.chartProp.chartGutter._top;[m
 			if (AscFormat.isRealNumber(valStart)) {[m
 				const coeff = catAxis.scaling.gapWidth;[m
[31m-				const initialBarWidth = (this.chartProp.trueWidth)/ data.length;[m
[32m+[m				[32m// 1 px gap for each section length[m
[32m+[m				[32mconst gapWidth = 1;[m
[32m+[m				[32mconst gapNumbers = data.length - 1;[m
[32m+[m				[32mconst initialBarWidth = (this.chartProp.trueWidth - (gapWidth * gapNumbers))/ data.length;[m
 				const barWidth = (initialBarWidth / (1 + coeff));[m
 				const margin = (initialBarWidth - barWidth) / 2;[m
[32m+[m
 				let sum = 0;[m
[31m-				let start = (catStart + margin);[m
[32m+[m				[32mlet start = (catStart + margin);[m[41m [m
 				for (let i = 0; i < data.length; i++) {[m
 					sum += data[i].val;[m
[31m-					const startY = this.cChartDrawer.getYPosition(sum, valAxis, true) * this.chartProp.pxToMM;[m
[32m+[m					[32mconst valPos = this.cChartDrawer.getYPosition(sum, valAxis, true) * this.chartProp.pxToMM; // calc roof of the current bar[m
[32m+[m					[32mconst next = start + (barWidth + margin + gapWidth + margin); // calc end of the current barr[m
 					if (this.chartProp && this.chartProp.pxToMM ) {[m
[31m-						const height = valStart - startY;[m
[31m-						this.paths[i] = this.cChartDrawer._calculateRect(start, valStart, barWidth, height);[m
[32m+[m						[32mconst height = valStart - valPos;[m
[32m+[m						[32mthis.paths[i] = [];[m
[32m+[m						[32mthis.paths[i].push(this.cChartDrawer._calculateRect(start, valStart, barWidth, height));[m
[32m+[m						[32m//dont need last connectorLine[m
[32m+[m						[32mif (i !== data.length - 1 && margin !== 0) {[m
[32m+[m							[32mthis.paths[i].push(this._calculateConnectorLine(valPos, start + barWidth, next))[m
[32m+[m						[32m}[m
 					}[m
[31m-					valStart = startY;		[m
[31m-					start += (barWidth + margin + margin);[m
[32m+[m					[32mvalStart = valPos;	// go up in y direction[m
[32m+[m					[32mstart = next;	// go right in x direction[m
 				}[m
 			}[m
 		}[m
 	},[m
 [m
[32m+[m	[32m_calculateConnectorLine: function (y, x1, x2) {[m
[32m+[m		[32mif (!this.cChartSpace || !this.chartProp) {[m
[32m+[m			[32mreturn null;[m
[32m+[m		[32m}[m
[32m+[m		[32mconst pathId = this.cChartSpace.AllocPath();[m
[32m+[m		[32mconst path = this.cChartSpace.GetPath(pathId);[m
[32m+[m
[32m+[m		[32mconst pathH = this.chartProp.pathH;[m
[32m+[m		[32mconst pathW = this.chartProp.pathW;[m
[32m+[m		[32mconst pxToMm = this.chartProp.pxToMM;[m
[32m+[m
[32m+[m		[32mpath.moveTo((x1 / pxToMm) * pathW, (y / pxToMm)  * pathH);[m
[32m+[m		[32mpath.lnTo((x2 / pxToMm) * pathW, (y / pxToMm)  * pathH);[m
[32m+[m
[32m+[m		[32mreturn pathId;[m
[32m+[m	[32m},[m
[32m+[m
 	draw: function () {[m
 		if (!this.cChartDrawer || !this.cChartDrawer.calcProp || !this.cChartDrawer.cShapeDrawer || !this.cChartDrawer.cShapeDrawer.Graphics || !this.cChartDrawer.calcProp.chartGutter) {[m
 			return;[m
[36m@@ -7888,10 +7917,12 @@[m [mdrawWaterfallChart.prototype = {[m
 		let oSeries = series[0];[m
 		if(oSeries) {[m
 			for (let i in this.paths) {[m
[31m-				let nPtIdx = parseInt(i);[m
[31m-				let pen = oSeries.getPtPen(nPtIdx);[m
[31m-				let brush = oSeries.getPtBrush(nPtIdx);[m
[31m-				this.cChartDrawer.drawPath(this.paths[i], pen, brush);[m
[32m+[m				[32mfor (let j in this.paths[i]) {[m
[32m+[m					[32mlet nPtIdx = parseInt(i);[m
[32m+[m					[32mlet pen = (j === 0 ) ? oSeries.getPtPen(nPtIdx) : this.cChartSpace.chart.plotArea.axId[1].compiledMajorGridLines;[m
[32m+[m					[32mlet brush = oSeries.getPtBrush(nPtIdx);[m
[32m+[m					[32mthis.cChartDrawer.drawPath(this.paths[i][j], pen, brush);[m
[32m+[m				[32m}[m
 			}[m
 		}[m
 		[m
[1mdiff --git a/common/Drawings/Format/ChartEx.js b/common/Drawings/Format/ChartEx.js[m
[1mindex d89caa5d80..905898aaee 100644[m
[1m--- a/common/Drawings/Format/ChartEx.js[m
[1m+++ b/common/Drawings/Format/ChartEx.js[m
[36m@@ -268,6 +268,10 @@[m [mfunction (window, undefined) {[m
 		this.setParentToChild(pr);[m
 	};[m
 [m
[32m+[m	[32mCAxis.prototype.setAxPos = function (pos) {[m
[32m+[m		[32mthis.axPos = pos ? window['AscFormat'].AX_POS_L : window['AscFormat'].AX_POS_B;[m
[32m+[m	[32m}[m
[32m+[m
 	// AxisUnits[m
 	drawingsChangesMap[AscDFH.historyitem_AxisUnits_SetUnitsLabel] = function (oClass, value) {[m
 		oClass.unitsLabel = value;[m
[36m@@ -2946,6 +2950,10 @@[m [mfunction (window, undefined) {[m
 		}[m
 		return null;[m
 	};[m
[32m+[m	[32mCSeries.prototype.getValPts = function () {[m
[32m+[m		[32mconst numLit = this.getValLit();[m
[32m+[m		[32mreturn numLit ? numLit.pts : [];[m
[32m+[m	[32m};[m
 	CSeries.prototype.getCatLit = function (type) {[m
 		let oSeriesData = this.getData();[m
 		if(!oSeriesData) {[m
[1mdiff --git a/common/Drawings/Format/ChartSpace.js b/common/Drawings/Format/ChartSpace.js[m
[1mindex 76db98a8ac..0add210264 100644[m
[1m--- a/common/Drawings/Format/ChartSpace.js[m
[1m+++ b/common/Drawings/Format/ChartSpace.js[m
[36m@@ -4149,7 +4149,7 @@[m [mfunction(window, undefined) {[m
 		const cachedData = this.chart.plotArea.plotAreaRegion.cachedData;[m
 		const results = obtainResults(cachedData);[m
 		//seria.dataLabels.visibility optional[m
[31m-		if (seria && seria.dataLabels) {[m
[32m+[m		[32mif (cachedData && seria && seria.dataLabels) {[m
 			const default_lbl = new AscFormat.CDLbl();[m
 			const nDefaultPosition = seria.dataLabels.pos ? seria.dataLabels.pos : AscFormat.DATA_LABEL_POS_OUT_END;[m
 			default_lbl.initDefault(nDefaultPosition);[m
[36m@@ -4185,6 +4185,18 @@[m [mfunction(window, undefined) {[m
 	CChartSpace.prototype.calculateLabelsPositions = function (b_recalc_labels, b_recalc_legend) {[m
 		let layout;[m
 		let aDLbls = this.recalcInfo.dataLbls;[m
[32m+[m
[32m+[m		[32m// TODO after new succefull implementation of new type remove option here[m
[32m+[m		[32mconst isForChartEx = this.chart && this.chart.plotArea && this.chart.plotArea.isForChartEx ? true : false;[m
[32m+[m		[32mconst type = this.chart && this.chart.plotArea && this.chart.plotArea.plotAreaRegion && this.chart.plotArea.plotAreaRegion.series && this.chart.plotArea.plotAreaRegion.series[0] ? this.chart.plotArea.plotAreaRegion.series[0].layoutId : null;[m
[32m+[m		[32mif (isForChartEx && type !== AscFormat.SERIES_LAYOUT_BOX_WHISKER && !type) {[m
[32m+[m			[32mreturn ;[m
[32m+[m		[32m}[m
[32m+[m		[32mif (isForChartEx && (type === AscFormat.SERIES_LAYOUT_BOX_WHISKER || type === AscFormat.SERIES_LAYOUT_FUNNEL || type === AscFormat.SERIES_LAYOUT_PARETO_LINE || type === AscFormat.SERIES_LAYOUT_REGION_MAP || type === AscFormat.SERIES_LAYOUT_SUNBURST || type === AscFormat.SERIES_LAYOUT_TREEMAP)) {[m
[32m+[m			[32mreturn ;[m
[32m+[m		[32m}[m
[32m+[m		[32m//----------------------------------[m
[32m+[m[41m		[m
 		if (!aDLbls || aDLbls.length === 0) {[m
 			this.calculateChartExLabelsPositions();[m
 		}[m
[36m@@ -4367,7 +4379,7 @@[m [mfunction(window, undefined) {[m
 		if (!this.chart || !this.chart.plotArea) {[m
 			return [];[m
 		}[m
[31m-		if (oAxis.Id === this.chart.plotArea.axId[1].Id) {[m
[32m+[m		[32mif (this.chart.plotArea.axId.length > 1 && oAxis.Id === this.chart.plotArea.axId[1].Id) {[m
 			// for the val axis, regularly get labels[m
 			aStrings = this.getLabelsForAxis(oAxis, true);[m
 		} else {[m
[36m@@ -4736,6 +4748,7 @@[m [mfunction(window, undefined) {[m
 		if(this.chart.plotArea.layout && this.chart.plotArea.layout.layoutTarget === AscFormat.LAYOUT_TARGET_INNER) {[m
 			bWithoutLabels = true;[m
 		}[m
[32m+[m[41m		[m
 		let bCorrected = false;[m
 		let fL = oRect.x, fT = oRect.y, fR = oRect.x + oRect.w, fB = oRect.y + oRect.h;[m
 		const isChartEX = this.chart && this.chart.plotArea && this.chart.plotArea.isForChartEx ? true : false;[m
[36m@@ -4754,6 +4767,9 @@[m [mfunction(window, undefined) {[m
 				this.calculateAxisGrid(oCrossAxis, oRect);[m
 				oCalcMap[oCrossAxis.Id] = true;[m
 			}[m
[32m+[m			[32mif (!oCrossAxis) {[m
[32m+[m				[32mreturn;[m
[32m+[m			[32m}[m
 			let fCrossValue;[m
 			// posY seeks the zero position on the diagram[m
 			let posY = null;[m
[36m@@ -5143,6 +5159,16 @@[m [mfunction(window, undefined) {[m
 		this.cachedCanvas = null;[m
 		this.plotAreaRect = null;[m
 		this.bEmptySeries = this.checkEmptySeries();[m
[32m+[m		[32m// TODO after new succefull implementation of new type remove option here[m
[32m+[m		[32mconst isForChartEx = this.chart && this.chart.plotArea && this.chart.plotArea.isForChartEx ? true : false;[m
[32m+[m		[32mconst type = this.chart && this.chart.plotArea && this.chart.plotArea.plotAreaRegion && this.chart.plotArea.plotAreaRegion.series && this.chart.plotArea.plotAreaRegion.series[0] ? this.chart.plotArea.plotAreaRegion.series[0].layoutId : null;[m
[32m+[m		[32mif (isForChartEx && type !== AscFormat.SERIES_LAYOUT_BOX_WHISKER && !type) {[m
[32m+[m			[32mreturn ;[m
[32m+[m		[32m}[m
[32m+[m		[32mif (isForChartEx && (type === AscFormat.SERIES_LAYOUT_BOX_WHISKER || type === AscFormat.SERIES_LAYOUT_FUNNEL || type === AscFormat.SERIES_LAYOUT_PARETO_LINE || type === AscFormat.SERIES_LAYOUT_REGION_MAP || type === AscFormat.SERIES_LAYOUT_SUNBURST || type === AscFormat.SERIES_LAYOUT_TREEMAP)) {[m
[32m+[m			[32mreturn ;[m
[32m+[m		[32m}[m
[32m+[m		[32m//----------------------------------[m
 		if (this.chart && this.chart.plotArea) {[m
 			var oPlotArea = this.chart.plotArea;[m
 			for (i = 0; i < oPlotArea.axId.length; ++i) {[m
[36m@@ -5771,7 +5797,8 @@[m [mfunction(window, undefined) {[m
 			if (AscFormat.isRealNumber(legend.legendPos)) {[m
 				legend_pos = legend.legendPos;[m
 			}[m
[31m-			var aCharts = this.chart.plotArea.charts;[m
[32m+[m			[32mconst isChartEx = this.chart && this.chart.plotArea && this.chart.plotArea.isForChartEx ? true : false;[m
[32m+[m			[32mvar aCharts = isChartEx ? [this.chart.plotArea.plotAreaRegion] : this.chart.plotArea.charts;[m
 			var oTypedChart;[m
 			//Order series for the legend[m
 			var aOrderedSeries = [];[m
[36m@@ -5853,7 +5880,8 @@[m [mfunction(window, undefined) {[m
 						entry = legend.findLegendEntryByIndex(i);[m
 						if(entry && entry.bDelete)[m
 							continue;[m
[31m-						arr_str_labels.push(ser.getSeriesName());[m
[32m+[m						[32mconst label = ser.getSeriesName ? ser.getSeriesName() : '';[m
[32m+[m						[32marr_str_labels.push(label);[m
 					}[m
 					else {[m
 						entry = legend.findLegendEntryByIndex(i);[m
[36m@@ -5884,7 +5912,7 @@[m [mfunction(window, undefined) {[m
 [m
 					calc_entry.calcMarkerUnion = new AscFormat.CUnionMarker();[m
 					union_marker = calc_entry.calcMarkerUnion;[m
[31m-					var pts = ser.getNumPts();[m
[32m+[m					[32mvar pts = isChartEx ? ser.getValPts() : ser.getNumPts();[m
 					var nSerType = ser.getObjectType();[m
 					if(nSerType === AscDFH.historyitem_type_BarSeries ||[m
 						nSerType === AscDFH.historyitem_type_BubbleSeries ||[m
[36m@@ -6084,6 +6112,9 @@[m [mfunction(window, undefined) {[m
 			} else {[m
 				marker_size = 0.2 * max_font_size;[m
 				for (i = 0; i < calc_entryes.length; ++i) {[m
[32m+[m					[32mif (!calc_entryes[i].calcMarkerUnion || !calc_entryes[i].calcMarkerUnion.marker || !calc_entryes[i].calcMarkerUnion.marker.spPr || !calc_entryes[i].calcMarkerUnion.marker.spPr.geometry) {[m
[32m+[m						[32mcontinue;[m
[32m+[m					[32m}[m
 					calc_entryes[i].calcMarkerUnion.marker.spPr.geometry.Recalculate(marker_size, marker_size);[m
 				}[m
 				distance_to_text = marker_size * 0.7;[m
[36m@@ -8458,6 +8489,16 @@[m [mfunction(window, undefined) {[m
 		if (this.chartObj) {[m
 			this.chartObj.draw(this, graphics);[m
 		}[m
[32m+[m		[32m// TODO after new succefull implementation of new type remove option here[m
[32m+[m		[32mconst isForChartEx = this.chart && this.chart.plotArea && this.chart.plotArea.isForChartEx ? true : false;[m
[32m+[m		[32mconst type = this.chart && this.chart.plotArea && this.chart.plotArea.plotAreaRegion && this.chart.plotArea.plotAreaRegion.series && this.chart.plotArea.plotAreaRegion.series[0] ? this.chart.plotArea.plotAreaRegion.series[0].layoutId : null;[m
[32m+[m		[32mif (isForChartEx && type !== AscFormat.SERIES_LAYOUT_BOX_WHISKER && !type) {[m
[32m+[m			[32mreturn ;[m
[32m+[m		[32m}[m
[32m+[m		[32mif (isForChartEx && (type === AscFormat.SERIES_LAYOUT_BOX_WHISKER || type === AscFormat.SERIES_LAYOUT_FUNNEL || type === AscFormat.SERIES_LAYOUT_PARETO_LINE || type === AscFormat.SERIES_LAYOUT_REGION_MAP || type === AscFormat.SERIES_LAYOUT_SUNBURST || type === AscFormat.SERIES_LAYOUT_TREEMAP)) {[m
[32m+[m			[32mreturn ;[m
[32m+[m		[32m}[m
[32m+[m		[32m//----------------------------------[m
 		if (this.chart && !this.bEmptySeries) {[m
 			if (this.chart.plotArea) {[m
 				// var oChartSize = this.getChartSizes();[m
[1mdiff --git a/common/SerializeChart.js b/common/SerializeChart.js[m
[1mindex 56ddebb127..c757e73eb6 100644[m
[1m--- a/common/SerializeChart.js[m
[1m+++ b/common/SerializeChart.js[m
[36m@@ -13507,6 +13507,17 @@[m [mBinaryChartReader.prototype.ReadCT_ChartEx = function (type, length, val) {[m
         res = this.bcr.Read1(length, function (t, l) {[m
             return oThis.ReadCT_ChartExPlotArea(t, l, oNewVal);[m
         });[m
[32m+[m[32m        if (oNewVal && oNewVal.axId && Array.isArray(oNewVal.axId)) {[m
[32m+[m[32m            for (let i = 0; i < oNewVal.axId.length; i++) {[m
[32m+[m[32m                const axis = oNewVal.axId[i];[m
[32m+[m[32m                axis.setAxPos(i);[m
[32m+[m[32m            }[m
[32m+[m[32m            if (oNewVal.axId.length === 2) {[m
[32m+[m[32m                oNewVal.axId[0].crossAx = oNewVal.axId[1];[m
[32m+[m[32m                oNewVal.axId[1].crossAx = oNewVal.axId[0];[m
[32m+[m[32m                oNewVal.axId[1].crossBetween = 0;[m
[32m+[m[32m            }[m
[32m+[m[32m        }[m
         val.setPlotArea(oNewVal);[m
     }[m
     else if (c_oserct_chartExChartTITLE === type)[m
