Алгоритм проверки ГТД

10.11.15

Учетные задачи - Операции по ВЭД

Алгоритм для автоматической проверки номеров грузовых таможенных деклараций.

Скачать исходный код

Наименование Файл Версия Размер
Проверка ГТД
.epf 15,72Kb
38
.epf 1.0 15,72Kb 38 Скачать

Возникла проблема, что в базу попадают некорректные номера ГТД. Частично выявились грехи поставщиков, частично операторы вносили с ошибками. Пришлось подробно разобраться, т.к. на просторах интернета ничего подходящего не нашел. И родился данный код, для автоматической проверки. Во вложении обработка для анализа корректности данных в программе.

&НаСервере
Функция ВыполнитьПроверкуГТДНаСервере(СтрокаГТД)
	
	
	Ответ = новый Структура("Успех,Текст");
	
	ОбрабатываемаяСтрокаГТД1 = "";
	
	если ТипЗнч(СтрокаГТД) = Тип("СправочникСсылка.НомераГТД") тогда
		ОбрабатываемаяСтрокаГТД1 = СтрокаГТД.Код;
	иначеесли ТипЗнч(СтрокаГТД) = Тип("СправочникОбъект.НомераГТД") тогда
		ОбрабатываемаяСтрокаГТД1 = СтрокаГТД.Код;
	иначеесли ТипЗнч(СтрокаГТД) = Тип("Строка") тогда
		ОбрабатываемаяСтрокаГТД1 = СтрокаГТД;
	конецесли;
	
	
	//////первый блок    (код таможенного подразделения)   (4)     ТипЗнч
	
	Проверка10 = Найти(ОбрабатываемаяСтрокаГТД1,"/");  
	
	Если Проверка10 = 0 тогда /// не нашли слэш
		Ответ.Успех = Ложь;
		Ответ.Текст = "10: Нет слэшей в ГТД";
		возврат Ответ;
	КонецЕсли;
	ПорядковыйНомерСлэша1 = Проверка10;
	
	КодТаможенногоПодразделения = Лев(ОбрабатываемаяСтрокаГТД1,ПорядковыйНомерСлэша1-1);
	
	// номера таможенных подразделений есть в интернете, например: http://ved.customs.ru/index2.php?option=com_listnsi&view=sinnsi&url_id=V_KTAM 	
	Проверка11 = 0;
	попытка
		Проверка11 = Число(КодТаможенногоПодразделения);  
	исключение
		/// не число
		Ответ.Успех = Ложь;
		Ответ.Текст = "11: Код таможенного подразделения не числовой";
		возврат Ответ;	
	конецпопытки;
	
	Проверка12 = ?(Проверка11 >= 10000000 ИЛИ Проверка11 <= 100000 ,ложь,истина);
	// если растаможка в РФ то 8 знаков, если в странах таможенного союза, то 5 знаков
										                  
	если Проверка12 тогда
		Ответ.Успех = Ложь;
		Ответ.Текст = "12: Код таможенного подразделения не попадает в диапазон допустимых значений";
		возврат Ответ;
	конецесли;
	
	Проверка13 = СтрДлина(СокрЛП(КодТаможенногоПодразделения));
	если не (Проверка13 = 8 или Проверка13 = 5) тогда  	
		// не соответствует длина
		Ответ.Успех = Ложь;
		Ответ.Текст = "13: Длина кода таможенного подразделения отличается от 8 и 5";
		возврат Ответ;
	конецесли;
	
	
	//////второй блок   (дата выдачи)  (5)
	
	ОбрабатываемаяСтрокаГТД2 = Прав(ОбрабатываемаяСтрокаГТД1,СтрДлина(ОбрабатываемаяСтрокаГТД1) - ПорядковыйНомерСлэша1);
	
	
	Проверка20 = Найти(ОбрабатываемаяСтрокаГТД2,"/");  
	
	Если Проверка20 = 0 тогда /// не нашли слэш
		Ответ.Успех = Ложь;
		Ответ.Текст = "20: Нет второго слэша в ГТД";
		возврат Ответ;
	КонецЕсли;
	ПорядковыйНомерСлэша2 = Проверка20;
	
	ДатаПринятияГТД = СокрЛП(Лев(ОбрабатываемаяСтрокаГТД2,ПорядковыйНомерСлэша2-1));
	
	Проверка21 = 0;
	попытка
		Проверка21 = Число(ДатаПринятияГТД);
	исключение
		/// не число
		Ответ.Успех = Ложь;
		Ответ.Текст = "21: Дата содежит нецифровые символы";
		возврат Ответ;	
	конецпопытки;
	
	Проверка22 = СтрДлина(СокрЛП(ДатаПринятияГТД));
	если Проверка22 <> 6 тогда
		// не соответствует длина
		Ответ.Успех = Ложь;
		Ответ.Текст = "22: Неверный формат даты";
		возврат Ответ;
	конецесли;
	
	ДатаДД = Лев(ДатаПринятияГТД,2);
	ДатаММ = Сред(ДатаПринятияГТД,3,2);
	ДатаГГ = Прав(ДатаПринятияГТД,2);
	
	Попытка
		Проверка23 = Число(ДатаДД);
		если Проверка23 = 0 или Проверка23 > 31 тогда
			Ответ.Успех = Ложь;
			Ответ.Текст = "23: Неверный формат дня даты ГТД";
			возврат Ответ;
		конецесли;
		
		Проверка24 = Число(ДатаММ);
		если Проверка24 = 0 или Проверка24 > 12 тогда
			Ответ.Успех = Ложь;
			Ответ.Текст = "24: Неверный формат месяца даты ГТД";
			возврат Ответ;
		конецесли;
				
	исключение
		Ответ.Успех = Ложь;
		Ответ.Текст = "25: Ошибка распознования даты ГТД";
		возврат Ответ;		
	конецпопытки;
	
	//////третий блок   (порядковый номер ГТД)  (6) 
	
	ОбрабатываемаяСтрокаГТД3 = Прав(ОбрабатываемаяСтрокаГТД2,СтрДлина(ОбрабатываемаяСтрокаГТД2)-ПорядковыйНомерСлэша2);
	
	// если есть слеш, то выдергиваем номер гтд и отдельно номер товара
	
	ОбрабатываемаяСтрокаГТД4 = ""; //номер товара
	ПорядковыйНомерСлэша3 = 0; 
	НомерГТД = "";
	
	Проверка30 = Найти(ОбрабатываемаяСтрокаГТД3,"/"); 	
	
	Если Проверка30 <> 0 тогда /// нашли слэш, значит будет еще номер товара
		ПорядковыйНомерСлэша3 = Проверка30;
		ОбрабатываемаяСтрокаГТД4 = СокрЛП(Прав(ОбрабатываемаяСтрокаГТД3,СтрДлина(ОбрабатываемаяСтрокаГТД3)-ПорядковыйНомерСлэша3));
		НомерГТД = Лев(ОбрабатываемаяСтрокаГТД3,ПорядковыйНомерСлэша3-1);
	Иначе
		НомерГТД = СокрЛП(ОбрабатываемаяСтрокаГТД3)
	КонецЕсли;
	
	Проверка31 = СтрДлина(НомерГТД);
	Если Проверка31 <> 7 тогда
		Ответ.Успех = Ложь;
		Ответ.Текст = "31: Неверная длина номера ГТД (не 7)";
		возврат Ответ;	
	конецесли;
	
	// проверяем наличие "п" (предварительная), а после нее цифры	 
	Проверка32 = Лев(НомерГТД,1);
	ПрипискаП = "";
	если Проверка32 = "П" или Проверка32 = "п" тогда   // признак того, что ГТД предварительная
		НомерГТД = Прав(НомерГТД, СтрДлина(НомерГТД)-1);
		ПрипискаП = ". Наличие предварительного номера учтено";
	конецесли;
	
	Проверка33 = 0;
	попытка
		Проверка33 = Число(НомерГТД);
	исключение
		/// не число
		Ответ.Успех = Ложь;
		Ответ.Текст = "33: Номер ГТД содержит нецифровые символы" + ПрипискаП;
		возврат Ответ;	
	конецпопытки; 	
	
	// если номер товара не пустой, тогда проверяем, что он числовой
	
	если ОбрабатываемаяСтрокаГТД4 <> "" тогда
		
		Проверка34 = 0;
		попытка
			Проверка34 = Число(ОбрабатываемаяСтрокаГТД4);
		исключение
			/// не число
			Ответ.Успех = Ложь;
			Ответ.Текст = "34: Номер товара содержит нецифровые символы";
			возврат Ответ;	
		конецпопытки;	
		
		Проверка35 = Проверка34;
		Если Проверка35 = 0 или Проверка34 > 1000 тогда
			// по формату не более 1000
			Ответ.Успех = Ложь;
			Ответ.Текст = "35: Номер товара превышает допустимое значение(1000)";
			возврат Ответ;	
		конецесли;
	конецесли;
	
	Ответ.Успех = Истина;
	Ответ.Текст = "99: Проверка ГТД пройдена успешно";
	возврат Ответ;		
	
КонецФункции

Вложенная обработка позволяет:

  • Проверить одну ГТД
  • Проверить все ГТД в соответствующем справочнике (есть отсечка по глубине проверки). По результату проверки ГТД выводится список встреченных ошибок и их количество.
  • Почистить справочник Страны от дублей
  • Почистить справочник ГТД от дублей и некорректных номеров.

ГТД проверка Грузовая таможенная декларация

См. также

ТСД ЕГАИС Импорт: решение для типовых и отраслевых конфигураций 1С8, автоматизирует задачи поточного сканирования, упаковки и агрегации, автоматизации складского помарочного учета алкогольной продукции на складах поставщиков за границей РФ, а также импорт

Производство готовой продукции (работ, услуг) Операции по ВЭД Обмен с ГосИС Логистика, склад и ТМЦ Платформа 1С v8.3 Конфигурации 1cv8 Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

ТСД ЕГАИС ИМПОРТ — это программно-аппаратный комплекс, состоящий из расширения (или встраиваемой в конфигурацию подсистемы) для конфигураций 1C8 и оборудования, которые обеспечивает возможности поточного сканирования марок, агрегации и упаковки на складах поставщиков алкогольной продукции за границей РФ, а также, на складах импортеров на территории РФ. Интерфейс работает как на терминале сбора данных, так и на стационарных рабочих местах.

192000 руб.

11.12.2019    19809    59    0    

1

Быстрое создание наполненных коллекций

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Разберем самые частые способы создания коллекции, значения которой известны заранее. И сравним скорость их выполнения.

28.10.2019    10280    SeiOkami    69    

69

Преобразование XML в таблицу значений или иной объект 1С методом XSL преобразования

Универсальные функции Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Сразу открою интригу, напрямую прочитать XML, не содержащий объект 1С, не удастся. Статья раскрывает способы привести XML к формату, который возможно прочитать средствами платформы.

24.10.2019    25183    kraspila    33    

63

Обертка функций Excel на русском. Ускорение процесса разработки.

Загрузка и выгрузка в Excel Универсальные функции Платформа 1С v8.3 Бесплатно (free)

Устали переключаться с русского на английский и обратно при работе с таблицами Excel из 1С? Сборка наиболее необходимых функций и методов работы с Excel, обернутых в функции 1С на русском языке.

24.10.2019    9348    DmitryKotov    6    

57

Вывод QR-кода типовыми средствами.

Сканер штрих-кода Универсальные функции Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Абонемент ($m)

Вывод QR-кода типовыми средствами. На данный момент очень часто нужно вывести в печатную форму QR-код. Показываю как на примере типового кода из УТ11 это сделать. Можно использовать в любых конфигурациях с обычными формами.

1 стартмани

21.10.2019    73706    160    Емельянов Алексей    58    

56

Методика независимой системы "Подписки на события"

Универсальные функции Платформа 1С v8.3 1С:Управление производственным предприятием Бесплатно (free)

В этой небольшой статье я хочу вам предложить пошаговое описание разработки системы управления "Подписками на события" для документов. Цель разработки - возможность управления подписками в вашей конфигурации, не прибегая к программированию через конфигуратор. Думаю, будет полезно и интересно!

17.10.2019    21713    aximo    35    

75

Полезные процедуры и функции для программиста

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Все мы пишем программный код и часто используем процедуры, облегчающие его написание. Ниже приведена выборка таких полезных процедур и функций.

07.10.2019    52128    HostHost    41    

287

Документ на документ. Автоматическое создание связанных документов

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример решения простой и распространенной задачи - автоматическое создание документа на основании другого документа.

16.09.2019    24328    Infostart    36    

78
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Mr.Rm 10.11.15 11:07 Сейчас в теме
ГТД на иллюстрации хорош :)
В тесктах сообщений опечатки:
"25: Ошибка распознования даты ГТД"
"33: Номер ГТД собержит нецифровые символы"
2. Mr.Rm 10.11.15 11:10 Сейчас в теме
"В текстах" же! Кстати об опечатках...
3. ogre2007 298 10.11.15 16:22 Сейчас в теме
(2) Mr.Rm,
с моей то тройкой по русскому - это мелочи, а не ошибки :)
поправил
4. CheBurator 3119 11.11.15 01:14 Сейчас в теме
Тех кто разрабатывал формат номеров ГТД - поубивать надо.. нет чтобы дату в формате год-месяц-день - так бы красиво было при сортировке по наименованию... а так - бяка получается
5. gull22 95 18.11.15 11:21 Сейчас в теме
А что есть "глубина поиска"? На что влияет?
6. ogre2007 298 19.11.15 10:41 Сейчас в теме
(5) gull22, проверяет первые N позиций, а не все
8. gull22 95 18.10.17 13:57 Сейчас в теме
(6) Я правильно понимаю, что для проверки всех ГТД надо установить N=количество элементов справочника Номера ГТД?
7. ogre2007 298 16.12.15 11:39 Сейчас в теме
Ответ на вопрос "Зачем корректные ГТД?":
1. Чтобы потом не было проблем с вычетом НДС
2. Пресекать оборот левого товара (товара чье появление в РФ под сомнением)
Natain14; +1 Ответить
9. valchara1 11.01.19 12:28 Сейчас в теме
Проверка12 = ?(Проверка11 >= 10000000 ИЛИ Проверка11 <= 100000 ,ложь,истина);
// если растаможка в РФ то 8 знаков, если в странах таможенного союза, то 5 знаков

если Проверка12 тогда
Ответ.Успех = Ложь;
Ответ.Текст = "12: Код таможенного подразделения не попадает в диапазон допустимых значений";
возврат Ответ;
конецесли;

Не правильный код. Отрабатывает с ошибкой.
вот ГТД "05100011/031218/0199547"
Первый блок имеет 8 символов, но начинается на "0", и преобразовав его в числовое значение мы получаем 7 символов. Следовательно, числовая проверка не корректна, а правильнее будет только проверка на длину кода в 8 или 5 символов.
Оставьте свое сообщение