feat: единый файл Лист1+СПРАВКА, фильтры, сортировка, живой п/п
- Загрузка одного .xlsx (СПРАВКА + Лист1 в одном файле) - Рег. номера берутся из СПРАВКА автоматически, группируются по (ТН ВЭД, Страна) - Отдельный опциональный справочник кодов (CodesImportService) - Фильтры: Все / Авто / Проверить / Нет кода / Без нетто - Таблица сразу отсортирована по ТН ВЭД с живым обновлением п/п - Начальный п/п: поле в UI, автоинкремент после экспорта - Лист2: рамки, жёлтая строка при >1 рег. номере, итого по кол-ву - Лист3: ТН ВЭД в колонке B вместо константы 09035 - Красный ErrorMessage под кнопкой загрузки, удалён SpravkaFileEntry
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using ClosedXML.Excel;
|
||||
using DeclarationAutomatization.Models;
|
||||
|
||||
namespace DeclarationAutomatization.Services;
|
||||
|
||||
// Читает справочник ТН ВЭД → код декларации из внешнего xlsx-файла.
|
||||
// Ожидаемый формат: лист "новые", колонка B = ТН ВЭД, колонка C = код.
|
||||
public class CodesImportService
|
||||
{
|
||||
private const string SheetName = "новые";
|
||||
|
||||
public List<CodeLookupEntry> ReadEntries(string filePath)
|
||||
{
|
||||
using var workbook = new XLWorkbook(filePath);
|
||||
|
||||
IXLWorksheet? sheet = null;
|
||||
foreach (var ws in workbook.Worksheets)
|
||||
{
|
||||
if (ws.Name.Equals(SheetName, StringComparison.OrdinalIgnoreCase))
|
||||
{ sheet = ws; break; }
|
||||
}
|
||||
|
||||
if (sheet == null)
|
||||
throw new InvalidOperationException($"Лист '{SheetName}' не найден в файле: {filePath}");
|
||||
|
||||
var result = new List<CodeLookupEntry>();
|
||||
int lastRow = sheet.LastRowUsed()?.RowNumber() ?? 1;
|
||||
|
||||
for (int r = 1; r <= lastRow; r++)
|
||||
{
|
||||
var tnVed = sheet.Cell(r, 2).GetString().Trim();
|
||||
var code = sheet.Cell(r, 3).GetString().Trim();
|
||||
|
||||
if (tnVed.Length != 10 || string.IsNullOrWhiteSpace(code))
|
||||
continue;
|
||||
|
||||
result.Add(new CodeLookupEntry
|
||||
{
|
||||
TnVed = tnVed,
|
||||
Codes = new List<string> { code },
|
||||
});
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user