Вот за что я люблю нашу украинскую налоговую, так это за то что благодаря ее стараниям без работы никогда не останусь. То крестики на нолики поменяют, то заставят писать каждый символ в отдельную ячейку(хотя софт самой налоговой этого не умеет), то таблицы в отчетной форме местами поменяют. А самое главное делают все это задним числом, в результате чего на вопрос клиентов на когда надо получаю стандартный ответ "на вчера".
Вот на днях опять разродились разъяснениями.
Суть истории.
В течении десятилетия налоговая принимала накладные с произвольно заполненным адресом. Ну программа естественно выгружала адрес в том формате который требуется статотчетностью нацбанка, ФАТФом, фондом гарантирования вкладов физлиц. Зато теперь налоговая ввела новый формат адреса
Было: Донецкая обл,Шахтерский район,86200,с. Маринка,ул. Университетская,д. 10,кв. 1,Украина
Стало: Университетская, 10, 1, маринка, шахтерский, Донецкая, 86200
Казалось бы, а вот из-за сего нововведения фирме могут отказать в возмещении налога на добавленную стоимость и "мягко наклонить" при помощи штрафа.
Естественно ради одной налоговой менять формат хранения адреса в базе никто не будет. Надо переконверчивать адрес "налету" (в смысле побороть полет мысли налоговиков).
Для данного переформатирования был написан небольшой метод
private string formaterAddress(string address)
{
string[] wholeAdress = address.Split(',');
string taxAddress = "";
if (wholeAdress.Length >= 8)
taxAddress = String.Format("{0}, {1}, {2}, {3}, {4}, {5}, {6}",
wholeAdress[4].Trim(), //0-Улица
wholeAdress[5].Trim(), //1-Дом
wholeAdress[6].Trim(), //2-Офис
wholeAdress[3].Trim(),//3-місто (населений пункт),
wholeAdress[1].Trim(),//4-район (якщо населений пункт не є райцентром),
wholeAdress[0].Trim(),//5-область (якщо місто не є обласним центром),
wholeAdress[2].Trim()//6-поштовий індекс.
);
else
taxAddress = address;
return taxAddress;
}
{
string[] wholeAdress = address.Split(',');
string taxAddress = "";
if (wholeAdress.Length >= 8)
taxAddress = String.Format("{0}, {1}, {2}, {3}, {4}, {5}, {6}",
wholeAdress[4].Trim(), //0-Улица
wholeAdress[5].Trim(), //1-Дом
wholeAdress[6].Trim(), //2-Офис
wholeAdress[3].Trim(),//3-місто (населений пункт),
wholeAdress[1].Trim(),//4-район (якщо населений пункт не є райцентром),
wholeAdress[0].Trim(),//5-область (якщо місто не є обласним центром),
wholeAdress[2].Trim()//6-поштовий індекс.
);
else
taxAddress = address;
return taxAddress;
}
Ну а потом еще на закуску сделал перекодировку номера телефона, т.к. теперь в номере под страхом расстрела пользователей не должно быть пробелов, кавычек, чёрточек
Было: +3 8(044) 9-205-926
Стало: 0449205926
Реализация метода ниже
private string formaterPhone(string phone)
{
phone = phone.Replace("+", "");
phone = phone.Replace(" ", "");
phone = phone.Replace("(", "");
phone = phone.Replace(")", "");
phone = phone.Replace("-", "");
phone = phone.Replace(",", "");
phone = phone.Replace(".", "");
phone = phone.Replace(";", "");
if (phone.Length < 10)
return phone;
else
return phone.Substring(phone.Length-10);
}
{
phone = phone.Replace("+", "");
phone = phone.Replace(" ", "");
phone = phone.Replace("(", "");
phone = phone.Replace(")", "");
phone = phone.Replace("-", "");
phone = phone.Replace(",", "");
phone = phone.Replace(".", "");
phone = phone.Replace(";", "");
if (phone.Length < 10)
return phone;
else
return phone.Substring(phone.Length-10);
}
Насчет форматирования номера - можно еще вот так:
ОтветитьУдалитьprivate static readonly Regex _regex = new Regex(@"\D", RegexOptions.Compiled);
private static string FormatPhoneNumber(string value)
{
Contract.Requires(null != value);
Contract.Ensures(null != Contract.Result());
var result = _regex.Replace(value, string.Empty);
if (result.Length > 10)
result = result.Substring(result.Length - 10);
return result;
}
Плюс: отсекается все, что не цифра.
Минус: скорость обработки раза в 2 больше.
Вариант.
ОтветитьУдалитьНо бухгалтера сказали что им лучше увидеть и исправить ошибки в виде букв в номере телефона самим, чем когда это увидят во время проверки.