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

10.11.15

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Проверка ГТД
.epf 15,72Kb ver:1.0
38
38 Скачать (1 SM) Купить за 1 850 руб.

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

&НаСервере
Функция ВыполнитьПроверкуГТДНаСервере(СтрокаГТД)
	
	
	Ответ = новый Структура("Успех,Текст");
	
	ОбрабатываемаяСтрокаГТД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С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

СКАЧАЙТЕ И ПОПРОБУЙТЕ БЕСПЛАТНО! Данная обработка расширяет функционал типовой конфигурации «1С:Бухгалтерия предприятия» и позволяет осуществлять автоматическое заполнение ГТД в документах «Реализация товаров и услуг», «Списание товаров», «Отчет о розничных продажах», «Отчет комиссионера (агента) о продажах», «Требование-накладная», «Возврат товаров от покупателя», «Комплектация номенклатуры», «Безвозмездная передача», «Отчет производства за смену». Обработка предназначена для работы в конфигурации «1С:Бухгалтерия предприятия 8, редакция 3.0» Есть версия обработки оптимизированная для работы в 1CFresh

9600 руб.

19.06.2012    139936    271    81    

228

Операции по ВЭД Файловый обмен (TXT, XML, DBF), FTP Программист Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Бухгалтерский учет Платные (руб)

Федеральная таможенная служба России давно поддерживает унифицированный формат электронных документов для обмена с информационными системами предприятий. xmlns="urn:customs.ru:Information:ExchangeDocuments:". Структура, утвержденная комиссией Таможенного союза. Осталось только сделать загрузку в 1С из этого формата. На выходе - два документа ГТД по импорту и Поступление (акты, накладные)

4000 руб.

09.08.2016    83384    309    375    

70

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

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

21.05.2024    26659    dimanich70    83    

149

Универсальные функции Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    4617    4    John_d    11    

57

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

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    27923    atdonya    25    

58

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

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

30.11.2023    6211    ke.92@mail.ru    17    

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

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

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