ЭСЧФ Беларусь

1. Slypower 2 19.04.16 12:44 Сейчас в теме
Всем привет. Не секрет, в Беларуси с 1 июля 2016 должна подаваться ЭСЧФ. Кто-нибудь уже работает с ней? Ведь там, вроде, уже 60 компаний Беларуси работает в тестовом режиме.
Сделал я по инструкциям, что на их сайте, но столько вопросов к их информации осталось.

Очень много полезного нам дали разработчики. Внимательно читайте их документацию в eInvVat, которую скачиваете, а так же примерами для 1С служат bat файлы из папки eInvVat\simpleapp\vbs\src\. Не поленитесь и посетить их сайт vat.gov.by. На основании этих знаний все пишут обработки. Если что не понятно, то можно прибегнуть к данной теме.
Важные и полезные ссылки на сайты и на сообщения темы.

Ссылки на сайт портала

Обработки с данной темы

Полезные сообщения темы

Коды процедур для 1С

Вопрос-Ответ

Дополняется со временем
KatrinNight; Pavl0; kar911; Золушка 007; iZhenius; xav; svilsa; Mustard; Gluk_1C; jeniks; 1v7; BotMan4; OSA3; MaskO_rimi; Ni4ka; Igor Igorevich; osharov_d; shiko; merlin1975; cssnavi; Krasowskiy; YegorK; KhomDV; +23
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
174. Gladkov_Anton 06.05.16 23:08 Сейчас в теме
(157) pasha_2001, публикацию смотрели?
Там есть картинки к публикации. Посмотрите на них - должно быть понятно.
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5470. Slypower 2 05.12.16 14:54 Сейчас в теме
(5468) При отгрузке товара по ТТН-1 обязательное заполнение грузоотправитель и грузополучатель. Если по ТН-2, то не обязательно. Это регулируется кодом дока: 603 и 602 соответственно. Так что отгружайте по ТН-2 и все)
+
5471. millik 05.12.16 15:00 Сейчас в теме
(5470)
Вы хотели написать "указывайте" ТН-2?)
+
5474. Slypower 2 05.12.16 15:18 Сейчас в теме
(5471) нет, отгружайте) Если вы будете отгружать по ТТН, а указывать ТН, то могут вам звонить и просить перевыставить их, т.к. не правильно выставили.
+
5476. millik 05.12.16 15:24 Сейчас в теме
(5474)
Вы немного не поняли)
Те что что мы выставляем адресно и так всё нормально проходит и там всё указывается как в действительности. А вот те, что без НДС, которые выставляем "в никуда", ругаются, если указывать ТТН-1 и не указывать получателя.

ПС
Посовещались с главбухом, решили пока обманывать портал, указывая не тот тип бланка. Всё равно эти ЭСЧФ никому не попадают, и никто ругаться не будет. В теории)
+
5478. Slypower 2 05.12.16 15:27 Сейчас в теме
(5476) без УНП - это физ лицам? Никто физ. лицам никогда не отгружает по ТТН, только по ТН, т.к. ТТН подразумевает забирать товар на авто, т.е. должны быть данные о водителе даже. Может ваши бухи не правильно ведут 1С?
+
5482. millik 05.12.16 15:47 Сейчас в теме
(5478)
Нет, юрлицам. Звонили покупатели и жаловались, что мы им выставляем ЭСЧФ без НДС, хотя имеем право не указывать получателя. И, собственно, просили не указывать, чтобы уменьшить объем входящих ЭСЧФ.
Да и у нас не одно юрлицо, а группа компаний, с большим ТО внутри. И наши "внутренние" бухи от разных юрлиц тоже ноют, что очень много входящих ЭСЧФ, а "безНДСные" составляют добрую половину от общего количества. К тому же они очень криво распределяются по первичным документам.

В консультанте есть разъяснения минфина по этому поводу, согласно которому "...Поскольку осуществляется реализация другим организациям, ...., товаров освобожденных от налога на добавленную стоимость в соответствии со ст. 94 НК, то белорусским организациям следуют создавать электронный счет-фактуру и направлять его на Портал без необходимости его выставления покупателю продукции."

Вот и получается, что если не заполнять разделы Покупатель и Грузополучатель, и при этом в документах указанно что-то отличное от ТТН-1 (ТН-2, Электронная ТТН-1, Электронная ТН-2), то портал пропускает без вопросов.
Но у нас основная отгрузка идет пока через ТТН-1 (хотя перебираемся на ЭДО потиху). И тут встает выбор, либо всё равно выставлять ЭСЧФ без НДС адресно, либо указывать левый тип документа (например, менять ТТН-1 на ТН-2). Главный главбух решил менять тип документа, всё равно выставляется "в никуда".
+
5489. AlenkaZu 05.12.16 19:51 Сейчас в теме
(5482) А система не пропускает, если не указать УНП покупателя в 3 разделе, но указать грузополуателя в 4ом?

Вообще этот замут с указанием ТТН или ТН подразумевает, что система автоматически сможет проверить, покупала ли наша организация такие БСО и дадут лишний повод для проверки при указании недостоверных сведений.
+
5459. Igor Igorevich 05.12.16 11:57 Сейчас в теме
Ранее думал, что портал vat.gov.by - это детище МНС, и они арендуют дата-центр у beCloud.
Но оказалось не все так просто: походу портал принадлежит beCloud (СООО «Белорусские облачные технологии»), а МНС там тоже пользователи, только с другими правами.
Вот ссылки: http://becloud.by/contacts/, http://www.velcom.by/ru/private/services/35568.htm, неясностей и сбоев быть не должно.

Руководитель проекта - Кунцевич Антон Александрович, СООО «Белорусские облачные технологии».

А все это организовано в рамках Указа ПРЕЗИДЕНТА РЕСПУБЛИКИ БЕЛАРУСЬ 23 января 2014 г. № 46 "Об использовании государственными органами и иными государственными организациями телекоммуникационных технологий"

Это частично объясняет, почему выбор упал на СУБД Cassandra.
+
5460. Igor Igorevich 05.12.16 12:35 Сейчас в теме
(5459) В обозримом будущем работать с порталом можно будет и в Linux:
Разработчики обещают пользователям со временем возможность взаимодействовать с Порталом, работая не только с Windows, но и, например, с Linux. На вопрос: «Когда?», отвечают: «В обозримом будущем». И приводят аргументы такому решению: использование в работе бесплатных операционных систем является общемировым трендом, который beCloud не намерен игнорировать. Со своей стороны можно добавить: такая возможность была бы интересной, вероятно, малому бизнесу, индивидуальным предпринимателям, у которых нет возможности приобретать дорогостоящее программное обеспечение. Да и подключение к системе электронных счетов-фактур должно быть, в конце концов, максимально простым и удобным.
http://www.baif.by/stati/elektronnye-scheta-faktury-po-nds-logika-tehnikov-nalogovikov-i-ekspeditorov/

А это означает, что и Авест будет работать под Linux.
Я думаю это очень хорошие перспективы!
+
5490. selus 05.12.16 20:52 Сейчас в теме
(5459)
почему выбор упал на СУБД Cassandra


Честно не понял а где в выложенных Вами материалах упоминание о Кассандре.

Возмутило !
Александр ТКАЧЕВ: - Я вижу, что главное направление – автоматизация учета, автоматизация работы с порталом. И только в результате автоматизации можно прийти к решению всех трудных вопросов, которые возникают у бухгалтеров. Другого пути, наверное, нет, и налогоплательщики будут вынуждены пойти на автоматизацию учетного процесса и работы с порталом.

О какой автоматизации они бредят если из пяти функций портала три приходится выполнять вручную ибо автоматически ЗАПРЕЩЕНО! Сверка данных фактически отсутствует несмотря на попытки ее сделать!
sassashok; dragonga; +2
5491. Igor Igorevich 06.12.16 08:27 Сейчас в теме
(5490)
Честно не понял а где в выложенных Вами материалах упоминание о Кассандре.

Прочитайте пост (3900), я просто думал что в МНС работают продвинутые разработчики, но потом понял, что это не их заслуга.

И все проблемы мне кажется не в разработке, а что криво было написано тех.задание. Т.е. кто писал, еще сам не представлял как должен работать портал.
Понял это из общения с разработчиками EPAM, которые пишут системы аналогичного уровня, только не для Беларуси.

По поводу языка написания, наиболее вероятные предположения, что это C#.
+
5469. osharov_d 05.12.16 14:43 Сейчас в теме
Коллеги, кто-нибудь в курсе грозит ли чем-то в данный момент выставление "лишних" ЭСЧФ ? Еще не вникал какие масштабы, но много документов на портал повторно ушло. Вручную сидеть и аннулировать - это как минимум пи***ц (
+
5472. Xershi 1479 05.12.16 15:05 Сейчас в теме
(5469) если порожняк закинули, придется их вручную все равно аннулировать. Функционал только на портале.
У нас такое пока возможно если в реализации изменили контрагента. Остальные случае уже закрыл!
+
5473. osharov_d 05.12.16 15:16 Сейчас в теме
(5472) А если их там, теоретически, тысячи 2 лишних окажется? )
+
5475. osharov_d 05.12.16 15:18 Сейчас в теме
(5473) Не могу найти где, но по симптомам в каких-то случаях транзакция в 1С не записывается, а данные при этом на портал уходят ... вроде везде проверки стоят (
+
5480. Igor Igorevich 05.12.16 15:41 Сейчас в теме
(5475) По видимому проблема не с повторной отправкой, а с повторным созданием ЭСЧФ к одному и тому же основанию.
Если одну и ту же ЭСЧФ выгрузить на портал 5 раз, то портал примет только один раз. Такое у меня было: выгружал-выгружал, а портал не принимает и не принимает, проверил - ЭСЧФ с данным номером уже выгрузилась на портал, а в 1с отметка о выгрузке не поставилась.
+
5481. Slypower 2 05.12.16 15:44 Сейчас в теме
(5480) все зависит от того, у кого как настроена ЭСЧФ. У меня, если не стоит в доке эсчф, то на этот док я могу выставить хоть млн эсчф, все пойдет. Номер ЭСЧФ у меня плавающий
+
5483. osharov_d 05.12.16 16:08 Сейчас в теме
(5481) Примерно так. Несколько ЭСЧФ к одной отгрузке. Номер динамически формируется самой 1С при сохранении документа в базу.
+
5477. millik 05.12.16 15:27 Сейчас в теме
(5472)
(5473)
(5469)
А что, удаленное аннулирование через веб-сервис не прикрутили ещё?
+
5484. osharov_d 05.12.16 16:09 Сейчас в теме
(5477) Если вы мне скажете что да и это будет правдой - то куча проблем решится )
+
5485. millik 05.12.16 16:17 Сейчас в теме
(5484)
Это я сам спрашиваю)
+
5479. Igor Igorevich 05.12.16 15:30 Сейчас в теме
(5469) Нам Водоканал частенько выставляет повторные ЭСЧФ, одну подписываем, а остальные нет, бухгалтерия просит остальные аннулировать, но они с июля так и висят неаннулированные. Есть предположение, что тоже много выставили повторных и нет возможности аннулировать вручную.

Думаю, что если от многих пользователей поступит заявка на возможность аннулирования ЭСЧФ через сервис, то должны доработать портал и компоненту.
+
5486. Slypower 2 05.12.16 16:26 Сейчас в теме
Вот и мы столкнулись с ситуацией, когда выставили эсчф нам, указали наш унп, но название и адрес юр. лица совсем другое
ответ:

Добрый день, уважаемый пользователь!

Отправитель неверно заполнил ЭСЧФ. Обратитесь к нему.
+
5492. Xershi 1479 06.12.16 09:24 Сейчас в теме
Задал вопрос в ТП:
Закончил разбираться с правилами заполнения.
Решил заодно взяться за обязательные поля.
У нас часто возникала проблема:
Обязательность заполнения-17 Наименование товаров (работ, услуг), имущественных прав (roster)<name>
Тут вопросов нет, напишу проверку.
1. Блок:
Обязательность заполнения-5 6.1. Взаимозависимое лицо
Обязательность заполнения-6 6.2. Резидент оффшорной зоны
Обязательность заполнения-7 6.3. Сделка с товарами по перечню, определяемому Правительством Республики Беларусь, в соответствии с подпунктом. 1.3 пункта 1 статьи 301 НК;
Обязательность заполнения-8 6.4.Организация, включенная в перечень крупных плательщиков
Обязательность заполнения-13 15.1. Взаимозависимое лицо
Обязательность заполнения-14 15.2. Резидент оффшорной зоны
Обязательность заполнения-15 15.3. Сделка с товарами по перечню, определяемому Правительством Республики Беларусь, в соответствии с подпунктом. 1.3 пункта 1 статьи 301 налогового кодекса;
Обязательность заполнения-16 15.4.Организация, включенная в перечень крупных плательщиков
Они принимают значение булево и поэтому всегда заполнены текстом, но ложь это не заполненное значение. Или тут речь, чтобы в хмл был текст у полей?
2. Блок:
Обязательность заполнения-9 8 или 17. УНП поставщика / получателя (sender)
Обязательность заполнения-10 9 или 18. Наименование поставщика / получателя (sender)
Обязательность заполнения-11 10 или 19. Юридический адрес поставщика / получателя (sender)
В ряде случаем эти реквизиты пустые и я даже не заполняю их в хмл, в чем тогда обязательность?
3. Блок:
Обязательность заполнения-18 Стоимость товаров (roster)
Обязательность заполнения-19 НДС ставка (roster)
Обязательность заполнения-20 НДС ставка (roster)
Обязательность заполнения-21 НДС сумма (roster)
Обязательность заполнения-22 Стоимость товаров с учетом НДС (roster)
Обязательность заполнения-23 Всего по счету. Стоимость товаров (работ, услуг), имущественных прав без НДС
Обязательность заполнения-24 Всего по счету. Сумма акциза
Обязательность заполнения-25 Всего по счету. Сумма НДС
Обязательность заполнения-26 Всего по счету. Стоимость товаров (работ, услуг), имущественных прав с учетом НДС
Многие реквизиты = 0, в хмл они есть, но ноль это тоже не заполненное значение. Т.е. обязательность это просто наличие в хмл такого реквизита с 0?
Показать
+
5493. Slypower 2 06.12.16 09:52 Сейчас в теме
5494. Xershi 1479 06.12.16 09:53 Сейчас в теме
(5493) да у них за прошлый день 1000 тикетов налетала, когда отвечать будут))
+
5495. Xershi 1479 06.12.16 10:32 Сейчас в теме
Вопрос:
Правило-37 Если заполнен один из реквизитов документа: тип, или номер, или дата, то остальные (тип, номер и дата) – обязательны для заполнения

Под типом что имеется в виду?
Код условия поставки? 601, 602 и тд?


Ответ:
Если заполнен один из реквизитов документа: ВИД документа, или номер, или дата, то остальные (вид документа, номер и дата) – обязательны для заполнения.
Вид документа указывается из справочника. Справочник Видов документов можно посмотреть в разделе Справочники-Системные справочники- Виды документов. Например, код вида документа 602- ТН-2.


Выходит у них ошибка в мануале. А то сегодня пришлось править это правило из-за не стыковки актов.
+
5496. serg77s 06.12.16 11:10 Сейчас в теме
Добрый день кто сталкивался с такой ошибкой на Server 2003

C:\Program Files\Avest\EInvVatService\simpleapp\vbs>signAndUploadDir.bat

C:\Program Files\Avest\EInvVatService\simpleapp\vbs>call env.bat
ЭСЧФ simpleapp.signAndUploadDir. Версия 1.2.15
Версия компонента EInvVatService 1.2.15.48
Авторизация успешна
Подключение к https://ws.vat.gov.by:443/InvoicesWS/services/InvoicesPort
Ошибка подключения: Параметры функции заданы неверно. (Код 0xE82A0129)

+
5497. Xershi 1479 06.12.16 11:43 Сейчас в теме
(5496) увы через бат файлы не работаем, если в мануале нет, пишите в ТП, авест.
+
5502. serg77s 06.12.16 14:45 Сейчас в теме
(5497) Так при подключении 1с 7.7 тоже выводит только без кода ошибки
Адрес портала в константе верный

Авторизация успешна
Ошибка подключения: Параметры функции заданы неверно.
+
5503. Slypower 2 06.12.16 14:53 Сейчас в теме
(5502) тогда дело в EInvVatService. Возможно требует новую версию, возможно не срабатывает на конкретном пользователе
+
5504. Xershi 1479 06.12.16 15:07 Сейчас в теме
(5502) я реализовывал кнопку вывода версии компоненты. Сделай себе такую, тогда сверимся какая компонента работает!
+
5527. Xershi 1479 08.12.16 08:53 Сейчас в теме
Для начала вам сюда (5504)
+
5498. Xershi 1479 06.12.16 11:45 Сейчас в теме
Вот вышла процедура проверки обязательных полей, для меня самое главное было номенклатура пустая:
Процедура ПроверкаОбязательныхПолей(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	//Обязательное - 1
	Если Не ЗначениеЗаполнено(СтруктураДанных.НомерЭСЧФ) Тогда
		
		ТекстОшибки = "Поле ""Номер ЭСЧФ <number>"" должно быть заполнено!";
		Отказ = Истина;
		
	//Обязательное - 2
	ИначеЕсли Не ЗначениеЗаполнено(СтруктураДанных.ТипЭСЧФ) Тогда
			
		ТекстОшибки = "Поле ""Тип ЭСЧФ <documentType>"" должно быть заполнено!";
		Отказ = Истина;
		
	//Обязательное - 3
	ИначеЕсли Не ЗначениеЗаполнено(СтруктураДанных.ДатаСовершенияОперации) Тогда
			
		ТекстОшибки = "Поле ""Дата совершения операции <dateTransaction>"" должно быть заполнено!";
		Отказ = Истина;
				
	//Обязательное - 4
	ИначеЕсли Не ЗначениеЗаполнено(СтруктураДанных.СтатусПоставщика) Тогда
			
		ТекстОшибки = "Поле ""Статус поставщика <providerStatus>"" должно быть заполнено!";
		Отказ = Истина;
				
	//Обязательное - 5-8 и 13-16 и 18-26 всегда заполнены в хмл
	//Обязательное - 9-11 пустые теги могут быть, проверка не возможна
	//Обязательное - 12
	ИначеЕсли Не ЗначениеЗаполнено(СтруктураДанных.СтатусПолучателя) Тогда
			
		ТекстОшибки = "Поле ""Статус получателя <recipientStatus>"" должно быть заполнено!";
		Отказ = Истина;
		
	//Обязательное - 17				
	Иначе
		
		Для Каждого Строка Из СтруктураДанных.ТаблицаДанных Цикл
			
			Если Не ЗначениеЗаполнено(Строка.НоменклатураСтр) Тогда
			
				ТекстОшибки = "Поле ""Наименование товаров (работ, услуг), имущественных прав (roster) <name>"" должно быть заполнено!";
				Отказ = Истина;
				Прервать;
				
			КонецЕсли;
		
		КонецЦикла;
	
	КонецЕсли;
	
КонецПроцедуры 
Показать

СтруктураДанных это хмл представленная в виде структуры данных с типами 1С.
+
5499. Xershi 1479 06.12.16 13:07 Сейчас в теме
Правило 56 и 57 не нужно реализовывать, это делается только на портале.
+
5500. Xershi 1479 06.12.16 13:26 Сейчас в теме
Поясните по 11 и 12 реквизиту во входящих, какие там могут быть типы данных входящая или исходящая?
В исходящих в ТП сказали 11 и 12 - входящие.
+
5501. Xershi 1479 06.12.16 14:44 Сейчас в теме
(5500) похоже во входящей 11 и 12 это тоже входящие, но как я понял они доступны только отправителю, у нас их не будет!
Ответ ТП:
Они доступны только отправителю


Выходит, там нужно реквизит строкой прописать! А у меня ссылки были...
+
5507. Xershi 1479 07.12.16 08:37 Сейчас в теме
Вывод: по правилу 49 и 58 они имеют ошибки будут дорабатываться, реализовать в полной мере нельзя.
Доработка управления вычетами и аннулирования через компоненту будет обсуждаться в 2017 году и возможно будет доступно после очередного обновления!
Переписка, где всплыли косяки по правилам!
pas38; +1
5510. Xershi 1479 07.12.16 09:09 Сейчас в теме
(5507) ТП ответила официально по этим правилам:
Рекомендуем подождать, возможно будут изменения в правилах.
+
5508. Xershi 1479 07.12.16 08:58 Сейчас в теме
Кому интересно разбирайте правила все 59:
#Область ПроверкаЗаполненияПолей

//Правило-1 
//	Если тип ЭСЧФ – Дополнительный (со ссылкой на ЭСЧФ) или Исправленный, то
//	поле «К ЭСЧФ» обязательно для заполнения.
//Правило-1.1
//	Дата совершения дополнительного ЭСЧФ не должна быть меньше (раньше) даты
//	совершения исходного (исправленного) ЭСЧФ.
//
Процедура ПроверкаЗаполненияПолейПравило1(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если СтруктураДанных.ТипЭСЧФ = Перечисления.КодыТиповСчетовФактур_Локализация.Дополнительный ИЛИ
		СтруктураДанных.ТипЭСЧФ = Перечисления.КодыТиповСчетовФактур_Локализация.Исправленный Тогда
		
		//Поле 5 должно быть заполнено
		Если ЗначениеЗаполнено(СтруктураДанных.ИсходныйЭСЧФ) Тогда
			
			//Поле 5.1 не должно быть меньше даты совершения исходного (исправленного) ЭСЧФ
			Если СтруктураДанных.ДатаСовершенияОперации < Документ.ДатаСовершенияОперации Тогда 
				
				ТекстОшибки = "Поле 3. Дата совершения операции не должно быть меньше даты совершения исходного (исправленного) ЭСЧФ!";
				Отказ = Истина;
			
			КонецЕсли;
				
		Иначе
			
			ТекстОшибки = "Поле 5. Исходный ЭСЧФ не заполнено!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры 

//Правило-2
//	При заполнении поля «К ЭСЧФ», можно ввести только номер Исходного или Исправленного ЭСЧФ.
//
Процедура ПроверкаЗаполненияПолейПравило2(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	//Поле 5 должно быть заполнено
	Если ЗначениеЗаполнено(СтруктураДанных.ИсходныйЭСЧФ) Тогда 
	
		Если Не (Документ.ИсходныйЭСЧФ.ТипЭСЧФ = Перечисления.КодыТиповСчетовФактур_Локализация.Исходный ИЛИ
			Документ.ИсходныйЭСЧФ.ТипЭСЧФ = Перечисления.КодыТиповСчетовФактур_Локализация.Исправленный) Тогда
			
			ТекстОшибки = "В поле 5. Исходный ЭСЧФ можно ввести только номер Исходного или Исправленного ЭСЧФ!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-3
//	ЭСЧФ, номер которого прописывается в поле 5. "К ЭСЧФ" должен быть со статусом
//  «Выставлен» или «Выставлен. Подписан получателем».
//Правило-3.1 
//	У родительского и дочерних ЭСЧФ должен быть один составитель (sender).
//
Процедура ПроверкаЗаполненияПолейПравило3(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	//Поле 5 должно быть заполнено
	Если ЗначениеЗаполнено(СтруктураДанных.ИсходныйЭСЧФ) Тогда 
		
		СтатусНаПортале = "";
		
		Запрос = Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ
		               |	СостоянияЭД.ДействияСоСтороныДругогоУчастника КАК СтатусНаПортале 
		               |ИЗ
		               |	РегистрСведений.СостоянияЭД КАК СостоянияЭД
		               |ГДЕ
		               |	СостоянияЭД.СсылкаНаОбъект = &СсылкаНаОбъект";
		
		Запрос.УстановитьПараметр("СсылкаНаОбъект", Документ.ИсходныйЭСЧФ);
		
		РезультатЗапроса = Запрос.Выполнить();
		
		Выборка = РезультатЗапроса.Выбрать();
		
		Пока Выборка.Следующий() Цикл
			СтатусНаПортале = Выборка.СтатусНаПортале;
		КонецЦикла;
	
		Если СтатусНаПортале = "Выставлен" ИЛИ СтатусНаПортале = "Выставлен. Подписан получателем" Тогда
			
			Если Документ.Организация <> Документ.ИсходныйЭСЧФ.Организация Тогда
				
				ТекстОшибки = "У родительского и дочерних ЭСЧФ должна быть одна организация!";
				Отказ = Истина;			
				
			КонецЕсли;						
			
		Иначе
			
			ТекстОшибки = "ЭСЧФ в поле 5. Исходный ЭСЧФ должна быть со статусом «Выставлен» или «Выставлен. Подписан получателем»!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-4
//	Если тип ЭСЧФ – Исправленный, то поле «дата аннулирования» обязательно для заполнения.
//
Процедура ПроверкаЗаполненияПолейПравило4(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если СтруктураДанных.ТипЭСЧФ = Перечисления.КодыТиповСчетовФактур_Локализация.Исправленный Тогда 
		
		Если Не ЗначениеЗаполнено(СтруктураДанных.ДатаАннулирования) Тогда
			
			ТекстОшибки = "Поле 5.1. Дата аннулирования обязательно для заполнения!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-5-удалено
//	Дата аннулирования у исправленного может быть либо равна дате совершения Исходного
//	(предыдущего Исправленного), либо дате совершения исправленного
//Правило-5.1
//	Дата аннулирования не должна быть меньше даты совершения одного ЭСЧФ
//
Процедура ПроверкаЗаполненияПолейПравило5(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если СтруктураДанных.ТипЭСЧФ = Перечисления.КодыТиповСчетовФактур_Локализация.Исправленный Тогда
		
		Если СтруктураДанных.ДатаАннулирования < СтруктураДанных.ДатаСовершенияОперации Тогда 
			
			ТекстОшибки = "Дата аннулирования не должна быть меньше даты совершения операции!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-6
//	Статус поставщика зависит от статуса получателя (смотрите таблицу соответствия).
//
Процедура ПроверкаЗаполненияПолейПравило6(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	//Продавец
	Если СтруктураДанных.СтатусПоставщика = "SELLER" Тогда 
		
		//Покупатель / Потребитель / Комиссионер
		Если Не (СтруктураДанных.СтатусПолучателя = "CUSTOMER" ИЛИ
			СтруктураДанных.СтатусПолучателя = "CONSUMER" ИЛИ
			СтруктураДанных.СтатусПолучателя = "COMMISSIONAIRE") Тогда
			
			ТекстОшибки = "Статус поставщика не удовлетворяет статусу получателя!";
			Отказ = Истина;
			
		КонецЕсли;
		
	//Комитент
	ИначеЕсли СтруктураДанных.СтатусПоставщика = "CONSIGNOR" Тогда
		
		//Комиссионер
		Если Не СтруктураДанных.СтатусПолучателя = "COMMISSIONAIRE" Тогда
			
			ТекстОшибки = "Статус поставщика не удовлетворяет статусу получателя!";
			Отказ = Истина;
			
		КонецЕсли;
		
	//Комиссионер
	ИначеЕсли СтруктураДанных.СтатусПоставщика = "COMMISSIONAIRE" Тогда
		
		//Покупатель / Потребитель / Комитент / Комиссионер
		Если Не (СтруктураДанных.СтатусПолучателя = "CUSTOMER" ИЛИ
			СтруктураДанных.СтатусПолучателя = "CONSUMER" ИЛИ
			СтруктураДанных.СтатусПолучателя = "CONSIGNOR" ИЛИ
			СтруктураДанных.СтатусПолучателя = "COMMISSIONAIRE") Тогда
			
			ТекстОшибки = "Статус поставщика не удовлетворяет статусу получателя!";
			Отказ = Истина;
			
		КонецЕсли;
		
	//Плательщик, передающий налоговые вычеты
	ИначеЕсли СтруктураДанных.СтатусПоставщика = "TAX_DEDUCTION_PAYER" Тогда
		
		//Покупатель, получающий налоговые вычеты
		Если Не СтруктураДанных.СтатусПолучателя = "TAX_DEDUCTION_RECIPIENT" Тогда
			
			ТекстОшибки = "Статус поставщика не удовлетворяет статусу получателя!";
			Отказ = Истина;
			
		КонецЕсли;
		
	//Доверительный управляющий
	ИначеЕсли СтруктураДанных.СтатусПоставщика = "TRUSTEE" Тогда
		
		//Покупатель
		Если Не СтруктураДанных.СтатусПолучателя = "CUSTOMER" Тогда
			
			ТекстОшибки = "Статус поставщика не удовлетворяет статусу получателя!";
			Отказ = Истина;
			
		КонецЕсли;
		
	//Иностранная организация
	ИначеЕсли СтруктураДанных.СтатусПоставщика = "FOREIGN_ORGANIZATION" Тогда
		
		//Покупатель / Покупатель объектов у иностранной организации
		Если Не (СтруктураДанных.СтатусПолучателя = "CUSTOMER" ИЛИ
			СтруктураДанных.СтатусПолучателя = "FOREIGN_ORGANIZATION_BUYER") Тогда
			
			ТекстОшибки = "Статус поставщика не удовлетворяет статусу получателя!";
			Отказ = Истина;
			
		КонецЕсли;
		
	//Посредник	
	ИначеЕсли СтруктураДанных.СтатусПоставщика = "AGENT" Тогда
		
		//Потребитель
		Если Не СтруктураДанных.СтатусПолучателя = "CONSUMER" Тогда
			
			ТекстОшибки = "Статус поставщика не удовлетворяет статусу получателя!";
			Отказ = Истина;
			
		КонецЕсли;
		
	//Заказчик (застройщик)	
	ИначеЕсли СтруктураДанных.СтатусПоставщика = "DEVELOPER" Тогда
		
		//Потребитель
		Если Не СтруктураДанных.СтатусПолучателя = "CONSUMER" Тогда
			
			ТекстОшибки = "Статус поставщика не удовлетворяет статусу получателя!";
			Отказ = Истина;
			
		КонецЕсли;
		
	//Плательщик, передающий обороты по реализации	
	ИначеЕсли СтруктураДанных.СтатусПоставщика = "TURNOVERS_ON_SALE_PAYER" Тогда
		
		//Плательщик, получающий обороты по реализации
		Если Не СтруктураДанных.СтатусПолучателя = "TURNOVERS_ON_SALE_RECIPIENT" Тогда
			
			ТекстОшибки = "Статус поставщика не удовлетворяет статусу получателя!";
			Отказ = Истина;
			
		КонецЕсли;
		
	Иначе
		
		ТекстОшибки = "Статус поставщика не удовлетворяет статусу получателя!";
		Отказ = Истина;
			
	КонецЕсли;

КонецПроцедуры

//Правило-7
//	Если субъект хозяйствования, составляющий ЭСЧФ, является получателем, то поля ЭСЧФ
//	6.1, 6.2, 6.3, 6.4 должны принимать значение false
//
Процедура ПроверкаЗаполненияПолейПравило7(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если Документ.Получатель = Документ.Организация.Контрагент Тогда 
		
		Если СтруктураДанных.ПоставщикПризнакВзаимозависимогоЛица ИЛИ
			СтруктураДанных.ПоставщикПризнакКрупногоПлательщика ИЛИ
			СтруктураДанных.ПоставщикПризнакСделкиСРезидентомОффшорнойЗоны ИЛИ
			СтруктураДанных.ПоставщикПризнакСделкиСТоварамиПоПеречню Тогда
			
			ТекстОшибки = "Поля ЭСЧФ 6.1, 6.2, 6.3, 6.4 должны принимать значение false!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-8
//	Если указан признак взаимозависимого лица у продавца или получателя, 
//	то поля «код ТНВЭД ЕАЭС» (от 4 до 10 цифр) или «код ОКЭД» (5 цифр)
//	являются обязательными для заполнения для всех строк.
//
Процедура ПроверкаЗаполненияПолейПравило8(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если СтруктураДанных.ПоставщикПризнакВзаимозависимогоЛица ИЛИ
		СтруктураДанных.ПолучательПризнакВзаимозависимогоЛица Тогда 
		
		ЕстьОшибка = Ложь;
		
		Для Каждого Строка Из СтруктураДанных.ТаблицаДанных Цикл
			
			Если Не (ЗначениеЗаполнено(Строка.ТНВЭД) ИЛИ ЗначениеЗаполнено(Строка.ОКЭД)) Тогда				
				ЕстьОшибка = Истина;
				Прервать;                                                                     
			КонецЕсли;
			
		КонецЦикла;
		
		Если ЕстьОшибка Тогда
			
			ТекстОшибки = "«код ТНВЭД ЕАЭС» (от 4 до 10 цифр) или «код ОКЭД» (5 цифр) являются обязательными для заполнения для всех строк!";
			Отказ = Истина;
			
		КонецЕсли;		
		
	КонецЕсли;

КонецПроцедуры

//Правило-9
//	Если статус поставщика – «иностранная организация», то страной поставщика не
//	может быть Республика Беларусь
//
Процедура ПроверкаЗаполненияПолейПравило9(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	//Иностранная организация
	Если СтруктураДанных.СтатусПоставщика = "FOREIGN_ORGANIZATION" Тогда 
		
		Если СтруктураДанных.КодСтраныПоставщика = "112" Тогда
			
			ТекстОшибки = "Статус поставщика – «иностранная организация», тогда страной поставщика не может быть Республика Беларусь!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-10
//	Если пользователь указал статус любой, кроме «иностранная организация», то УНП поставщика
//	должен соответствовать УНП субъекта хозяйствования, составляющего ЭСЧФ (элемент sender).
//
Процедура ПроверкаЗаполненияПолейПравило10(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	//Иностранная организация
	Если Не СтруктураДанных.СтатусПоставщика = "FOREIGN_ORGANIZATION" Тогда 
		
		Если СтруктураДанных.УНППоставщика <> Документ.Организация.ИНН Тогда
			
			ТекстОшибки = "УНП поставщика должен соответствовать УНП субъекта хозяйствования, составляющего ЭСЧФ (элемент sender)!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-11
//	В разделе поставщика или получателя должен быть указан УНП, отраженный в
//	элементе sender (субъект хозяйствования, составляющий ЭСЧФ).
//
Процедура ПроверкаЗаполненияПолейПравило11(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если СтруктураДанных.УНППоставщика <> Документ.Организация.ИНН И СтруктураДанных.УНППолучателя <> Документ.Организация.ИНН Тогда 
		
		ТекстОшибки = "В разделе поставщика или получателя должен быть указан УНП, отраженный в элементе sender (субъект хозяйствования, составляющий ЭСЧФ)!";
		Отказ = Истина;
		
	КонецЕсли;

КонецПроцедуры

//Правило-12
//	 УНП продавца и получателя не должны быть одинаковыми в одном ЭСЧФ.
//
Процедура ПроверкаЗаполненияПолейПравило12(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если СтруктураДанных.УНППоставщика = СтруктураДанных.УНППолучателя Тогда 
		
		ТекстОшибки = "УНП продавца и получателя не должны быть одинаковыми в одном ЭСЧФ!";
		Отказ = Истина;
		
	КонецЕсли;

КонецПроцедуры

//Правило-13
//	Если поле УНП для которого проставлена страна Беларусь не пустое, то УНП должен
//	существовать в реестре налогоплательщиков.
//Правило-13-1
//	Название организации обязательно, если указана страна Беларусь и поле УНП не пустое
//
Процедура ПроверкаЗаполненияПолейПравило13(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	МассивПроверкиУНП = Новый Массив;
	
	Если СтруктураДанных.КодСтраныПоставщика = "112" Тогда
		Если ЗначениеЗаполнено(СтруктураДанных.УНППоставщика) Тогда
			//Правило-13-1
			Если Не ЗначениеЗаполнено(СтруктураДанных.ИмяПоставщика) Тогда
				ТекстОшибки = "Название организации обязательно, если указана страна Беларусь и поле УНП не пустое!";
				Отказ = Истина;				
				Возврат;
			КонецЕсли;				
			МассивПроверкиУНП.Добавить(СтруктураДанных.УНППоставщика);
		КонецЕсли;		
	КонецЕсли;
	
	Если СтруктураДанных.КодСтраныПолучателя = "112" Тогда
		Если ЗначениеЗаполнено(СтруктураДанных.УНППолучателя) Тогда
			//Правило-13-1
			Если Не ЗначениеЗаполнено(СтруктураДанных.ИмяПолучателя) Тогда
				ТекстОшибки = "Название организации обязательно, если указана страна Беларусь и поле УНП не пустое!";
				Отказ = Истина;				
				Возврат;
			КонецЕсли;				
			МассивПроверкиУНП.Добавить(СтруктураДанных.УНППолучателя);
		КонецЕсли;		
	КонецЕсли;
	
	Для Каждого Строка Из СтруктураДанных.Грузоотправитель Цикл 		
		Если Строка.КодСтраныГрузоотправитель = "112" Тогда
			Если ЗначениеЗаполнено(Строка.УНПГрузоотправитель) Тогда
				МассивПроверкиУНП.Добавить(Строка.УНПГрузоотправитель);
			КонецЕсли;		
		КонецЕсли; 		
	КонецЦикла;
	
	Для Каждого Строка Из СтруктураДанных.Грузополучатель Цикл  		
		Если Строка.КодСтраныГрузополучатель = "112" Тогда
			Если ЗначениеЗаполнено(Строка.УНПГрузополучатель) Тогда
				МассивПроверкиУНП.Добавить(Строка.УНПГрузополучатель);
			КонецЕсли;		
		КонецЕсли; 		
	КонецЦикла;
	
	Для Каждого СтрокаУНП Из МассивПроверкиУНП Цикл
		
		СтатусПроверки = Справочники.Контрагенты.ПроверкаНалогоплательщика(СтрокаУНП);
		
		Если СтатусПроверки = Ложь Тогда
			
			ТекстОшибки = "Если поле УНП для которого проставлена страна Беларусь не пустое, то УНП должен существовать в реестре налогоплательщиков!";
			Отказ = Истина;
			Прервать;
			
		ИначеЕсли СтатусПроверки = Неопределено Тогда
			
			ТекстОшибки = "Не удалось проверить существование УНП в реестре налогоплательщиков! Повторите проверку.";
			Отказ = Истина;
			Прервать;
			
		КонецЕсли;		
		
	КонецЦикла;
	
КонецПроцедуры

//Правило-14
//	Если заполнено поле «номер» или «дата» в пунктах 14, 21, то поля «дата» и «номер»
//	обязательны для заполнения для одних и тех же пунктов.
//
Процедура ПроверкаЗаполненияПолейПравило14(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если ЗначениеЗаполнено(СтруктураДанных.ПоставщикНомерЗаявленияОВвозеТоваров) ИЛИ 
		ЗначениеЗаполнено(СтруктураДанных.ПоставщикДатаЗаявленияОВвозеТоваров) Тогда 
		
		Если Не (ЗначениеЗаполнено(СтруктураДанных.ПоставщикНомерЗаявленияОВвозеТоваров) И
			ЗначениеЗаполнено(СтруктураДанных.ПоставщикДатаЗаявленияОВвозеТоваров)) Тогда
			
			ТекстОшибки = "Если заполнено поле «номер» или «дата» в пунктах 14, 21, то поля «дата» и «номер» обязательны для заполнения для одних и тех же пунктов!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;
	
	Если ЗначениеЗаполнено(СтруктураДанных.ПолучательНомерЗаявленияОВвозеТоваров) ИЛИ 
		ЗначениеЗаполнено(СтруктураДанных.ПолучательДатаЗаявленияОВвозеТоваров) Тогда 
		
		Если Не (ЗначениеЗаполнено(СтруктураДанных.ПолучательНомерЗаявленияОВвозеТоваров) И
			ЗначениеЗаполнено(СтруктураДанных.ПолучательДатаЗаявленияОВвозеТоваров)) Тогда
			
			ТекстОшибки = "Если заполнено поле «номер» или «дата» в пунктах 14, 21, то поля «дата» и «номер» обязательны для заполнения для одних и тех же пунктов!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-15-удалено
//	Поля 11. «Номер ЭСЧФ комитента» (номер и дата) и поле 12. «Номер ЭСЧФ продавца»
//	(номер и дата) являются взаимоисключающими друг друга, т.е. если заполнено, например,
//	поле 11, то поле 12 должно оставаться пустым.
//Правило-15.1 
//	ЭСЧФ, указанный в 11. «Номер ЭСЧФ комитента» или 12. «Номер ЭСЧФ продавца» и ЭСЧФ, 
//	в котором указывается номер комитента или номер продавца, должны отправляться
//	на Портал разными поставщиками, т. е. УНП в таких ЭСЧФ в полях sender должны отличаться.
//
Процедура ПроверкаЗаполненияПолейПравило15(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если Документ.Организация.Контрагент = Документ.НомерСчетаКомитента.Поставщик ИЛИ
		Документ.Организация.Контрагент = Документ.НомерСчетаПродавца.Поставщик Тогда	
	
		ТекстОшибки = "ЭСЧФ, указанный в 11. «Номер ЭСЧФ комитента» или 12. «Номер ЭСЧФ продавца» и ЭСЧФ, в котором указывается номер комитента или номер продавца, должны отправляться на Портал разными поставщиками, т. е. УНП в таких ЭСЧФ в полях sender должны отличаться!";
		Отказ = Истина;
		
	КонецЕсли;

КонецПроцедуры

//Правило-16
//	Поле 11. «Номер ЭСЧФ комитента» доступно для заполнения, если в поле статус поставщика
//	проставлено значение «комиссионер», а в поле статус получателя – «покупатель». 
//
Процедура ПроверкаЗаполненияПолейПравило16(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если ЗначениеЗаполнено(СтруктураДанных.НомерСчетаКомитента) Тогда 
		
		//Комиссионер и Покупатель
		Если Не (СтруктураДанных.СтатусПоставщика = "COMMISSIONAIRE" И СтруктураДанных.СтатусПолучателя = "CUSTOMER") Тогда
			
			ТекстОшибки = "Поле 11. «Номер ЭСЧФ комитента» доступно для заполнения, если в поле статус поставщика проставлено значение «комиссионер», а в поле статус получателя – «покупатель»!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-17
//	Если в полях статусов поставщика - получателя проставлены значения «комиссионер» – «покупатель»,
//	поле 11. «Номер ЭСЧФ комитента» – обязательно для заполнения
//
Процедура ПроверкаЗаполненияПолейПравило17(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	//Комиссионер и Покупатель
	Если СтруктураДанных.СтатусПоставщика = "COMMISSIONAIRE" И СтруктураДанных.СтатусПолучателя = "CUSTOMER" Тогда
		
		Если Не ЗначениеЗаполнено(СтруктураДанных.НомерСчетаКомитента) Тогда		
			
			ТекстОшибки = "Если в полях статусов поставщика - получателя проставлены значения «комиссионер» – «покупатель»,	поле 11. «Номер ЭСЧФ комитента» – обязательно для заполнения!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-18
//	В поле 11. «Номер ЭСЧФ комитента» должен быть указан номер ЭСЧФ, в котором текущий
//	субъект хозяйствования указан как получатель.
//
Процедура ПроверкаЗаполненияПолейПравило18(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если ЗначениеЗаполнено(СтруктураДанных.НомерСчетаКомитента) Тогда 
		
		Если СтруктураДанных.УНППоставщика <> Документ.НомерСчетаКомитента.Получатель.ИНН Тогда
			
			ТекстОшибки = "В поле 11. «Номер ЭСЧФ комитента» должен быть указан номер ЭСЧФ, в котором текущий субъект хозяйствования указан как получатель!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-19
//	Если в полях статусов поставщика-получателя проставлены: «комиссионер» –
//	«комитент», «посредник» – «потребитель», то 12. «Номер ЭСЧФ продавца», 
//	13.	«Регистрационный номер выпуска товаров» или 
//	14. «Реквизиты заявления о ввозе товаров и уплате косвенных налогов» – 
//	один из реквизитов обязателен для заполнения.
//Правило-19.1
//	Если в полях статусов поставщика-получателя проставлены: «комиссионер» –
//	«комиссионер», то 11. Номер ЭСЧФ комитента, 12. «Номер ЭСЧФ продавца», 
//	13. «Регистрационный номер выпуска товаров» или 
//	14. «Реквизиты заявления о ввозе товаров и уплате косвенных налогов» –
//	одно из полей обязательно для заполнения.
//
Процедура ПроверкаЗаполненияПолейПравило19(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	//Комиссионер и Комитент / Посредник и Потребитель 
	Если СтруктураДанных.СтатусПоставщика = "COMMISSIONAIRE" И СтруктураДанных.СтатусПолучателя = "CONSIGNOR" ИЛИ
		СтруктураДанных.СтатусПоставщика = "AGENT" И СтруктураДанных.СтатусПолучателя = "CONSUMER" Тогда
		
		Если Не ЗначениеЗаполнено(СтруктураДанных.НомерСчетаПродавца) И
			Не ЗначениеЗаполнено(СтруктураДанных.ПоставщикРегистрационныйНомерВыпускаТоваров) ИЛИ
			Не (ЗначениеЗаполнено(СтруктураДанных.ПоставщикНомерЗаявленияОВвозеТоваров) И
			ЗначениеЗаполнено(СтруктураДанных.ПоставщикДатаЗаявленияОВвозеТоваров)) Тогда
			
			ТекстОшибки = "Правило-19 не выполнено! См. правила заполнения полей.";
			Отказ = Истина;
			
		КонецЕсли;
		
	//Комиссионер и Комиссионер 
	ИначеЕсли СтруктураДанных.СтатусПоставщика = "COMMISSIONAIRE" И СтруктураДанных.СтатусПолучателя = "COMMISSIONAIRE" Тогда
		
		Если Не ЗначениеЗаполнено(СтруктураДанных.НомерСчетаПродавца) И
			Не ЗначениеЗаполнено(СтруктураДанных.ПоставщикРегистрационныйНомерВыпускаТоваров) ИЛИ
			Не (ЗначениеЗаполнено(СтруктураДанных.ПоставщикНомерЗаявленияОВвозеТоваров) И
			ЗначениеЗаполнено(СтруктураДанных.ПоставщикДатаЗаявленияОВвозеТоваров)) Тогда
			
			ТекстОшибки = "Правило-19.1 не выполнено! См. правила заполнения полей.";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-20
//	Поле 12. «Номер ЭСЧФ продавца» доступно для заполнения, если в поле статус
//	поставщика проставлено значение «комиссионер» – «комитент», «посредник» – «потребитель»
//	или «заказчик (застройщик)» – «потребитель»
//
Процедура ПроверкаЗаполненияПолейПравило20(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	//Комиссионер и Комитент / Посредник и Потребитель / Заказчик (застройщик) и Потребитель 
	Если СтруктураДанных.СтатусПоставщика = "COMMISSIONAIRE" И СтруктураДанных.СтатусПолучателя = "CONSIGNOR" ИЛИ
		СтруктураДанных.СтатусПоставщика = "AGENT" И СтруктураДанных.СтатусПолучателя = "CONSUMER" ИЛИ
		СтруктураДанных.СтатусПоставщика = "DEVELOPER" И СтруктураДанных.СтатусПолучателя = "CONSUMER" Тогда
		
		Если ЗначениеЗаполнено(СтруктураДанных.НомерСчетаПродавца) Тогда
			
			ТекстОшибки = "Поле 12. «Номер ЭСЧФ продавца» доступно для заполнения, если в поле статус поставщика проставлено значение «комиссионер» – «комитент», «посредник» – «потребитель» или «заказчик (застройщик)» – «потребитель»!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-21
//	В поле 12. «Номер ЭСЧФ продавца» можно указать номер ЭСЧФ, в котором текущий
//	субъект хозяйствования указан как получатель.
//
Процедура ПроверкаЗаполненияПолейПравило21(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если ЗначениеЗаполнено(СтруктураДанных.НомерСчетаПродавца) Тогда 
		
		Если Документ.НомерСчетаПродавца.Получатель <> Документ.Организация.Контрагент Тогда
			
			ТекстОшибки = "В поле 12. «Номер ЭСЧФ продавца» можно указать номер ЭСЧФ, в котором текущий субъект хозяйствования указан как получатель!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-22
//	Поле 13. Регистрационный номер выпуска товаров доступно для заполнения, если 
//	1) В поле статусов поставщика – получателя проставлены: 
//	«комиссионер» – «комитент», «посредник» – «потребитель», «заказчик(застройщик)» – «потребитель» 
//	вне зависимости от значений в полях «код страны».
//	2) При статусах «продавец» – «покупатель»:
//	2.1) в строке 7. «Код страны поставщика» должна быть указана Республика Беларусь, а
//	в строке 16. «Код страны получателя» – код страны, не входящей в страны ЕАЭС; 
//	или 2.2) в строке 16. «Код страны получателя» указывается код страны,
//	входящей в страны ЕАЭС (и не Республика Беларусь), а в строке 26. «Код страны грузополучателя» - код
//	страны, не входящей в страны ЕАЭС.
//Правило-22.1 
//	Если в полях статусов поставщика-получателя проставлены «продавец» - «покупатель» и при этом, 
//	указана страна покупателя любая кроме Республики Беларусь, а также, хотя бы для одной строки
//	заполнен 3.1. Код ТН ВЭД и 8. Ставка НДС равна 0%, то строка 13 "Регистрационный номер выпуска товаров"
//	или 14. "Реквизиты заявления о ввозе товаров и уплате косвенных налогов" обязательны для заполнения.
//
Процедура ПроверкаЗаполненияПолейПравило22(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если ЗначениеЗаполнено(СтруктураДанных.ПоставщикРегистрационныйНомерВыпускаТоваров) Тогда
		//Правило 22		
		//22 п. 1) Комиссионер и Комитент / Посредник и Потребитель / Заказчик (застройщик) и Потребитель 
		Если СтруктураДанных.СтатусПоставщика = "COMMISSIONAIRE" И СтруктураДанных.СтатусПолучателя = "CONSIGNOR" ИЛИ
			СтруктураДанных.СтатусПоставщика = "AGENT" И СтруктураДанных.СтатусПолучателя = "CONSUMER" ИЛИ
			СтруктураДанных.СтатусПоставщика = "DEVELOPER" И СтруктураДанных.СтатусПолучателя = "CONSUMER" Тогда 		
			
		//22 п. 2) Продавец и Покупатель  	
		ИначеЕсли СтруктураДанных.СтатусПоставщика = "SELLER" И СтруктураДанных.СтатусПолучателя = "CUSTOMER" Тогда
			
			//22 п. 2.1 и п.2.2
			ТипГрузополучатель = 1;
			
			Для Каждого Строка Из Документ.Грузополучатель Цикл 				
				
				ТипГрузополучатель = Документы.ЭлектронныйСчетФактура.ПолучитьТипКонтрагента(Строка.Грузополучатель);
				
				Если ТипГрузополучатель = 3 Тогда  					
					Прервать;  					
				КонецЕсли;
				
			КонецЦикла;  			
			
			ТипПолучателя = Документы.ЭлектронныйСчетФактура.ПолучитьТипКонтрагента(Документ.Получатель);  			
			
			Если СтруктураДанных.КодСтраныПоставщика = "112" И ТипПолучателя = 3 ИЛИ 
				ТипПолучателя = 2 И СтруктураДанных.КодСтраныПолучателя <> "112" И ТипГрузополучатель = 3 Тогда 				
				
			Иначе
				
				ТекстОшибки = "Поле 13. Регистрационный номер выпуска товаров не доступно для заполнения!";
				Отказ = Истина; 
			
			КонецЕсли;
			
		Иначе
			
			ТекстОшибки = "Поле 13. Регистрационный номер выпуска товаров не доступно для заполнения!";
			Отказ = Истина; 
					
		КонецЕсли;
		
	КонецЕсли;

	//Продавец и Покупатель
	Если СтруктураДанных.СтатусПоставщика = "SELLER" И СтруктураДанных.СтатусПолучателя = "CUSTOMER" Тогда
		
		//22.1
		ЗаданКодТНВЭД = Ложь;
		СтавкаНоль = Ложь;
		Для Каждого Строка Из СтруктураДанных.ТаблицаДанных Цикл			
			
			Если ЗначениеЗаполнено(Строка.ТНВЭД) Тогда
				ЗаданКодТНВЭД = Истина;
				Если СтавкаНоль Тогда
					Прервать;
				КонецЕсли;
			КонецЕсли;
			
			Если Строка.СтавкаНДС = 0 Тогда
				СтавкаНоль = Истина;
				Если ЗаданКодТНВЭД Тогда
					Прервать;
				КонецЕсли;				
			КонецЕсли;
			
		КонецЦикла;
		
		//Правило-22.1 
		Если СтруктураДанных.КодСтраныПолучателя <> "112" И ЗаданКодТНВЭД И СтавкаНоль Тогда
			
			Если Не (ЗначениеЗаполнено(СтруктураДанных.ПоставщикРегистрационныйНомерВыпускаТоваров) ИЛИ
				ЗначениеЗаполнено(СтруктураДанных.ПоставщикНомерЗаявленияОВвозеТоваров) ИЛИ
				ЗначениеЗаполнено(СтруктураДанных.ПоставщикДатаЗаявленияОВвозеТоваров)) Тогда
				
				ТекстОшибки = "13 ""Регистрационный номер выпуска товаров"" или 14. ""Реквизиты заявления о ввозе товаров и уплате косвенных налогов"" обязательны для заполнения!";
				Отказ = Истина; 
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-23
//	Если заполнено поле 13 «Регистрационный номер выпуска товаров» и статус поставщика
//	– "Продавец", а получателя – "Покупатель", то даты из полей ЭСЧФ 13.1 и 13.2 тоже
//	обязательны для заполнения.
//Правило-23.1
//	Если заполнены поля 13.1 "Дата выпуска товара" и 13.2 "Дата разрешения на убытие товаров",
//	то поле 13 «Регистрационный номер выпуска товаров» - обязательное для заполнения.
//
Процедура ПроверкаЗаполненияПолейПравило23(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	//Продавец и Покупатель
	Если ЗначениеЗаполнено(СтруктураДанных.ПоставщикРегистрационныйНомерВыпускаТоваров) И 	
		СтруктураДанных.СтатусПоставщика = "SELLER" И СтруктураДанных.СтатусПолучателя = "CUSTOMER" Тогда 
		
		Если Не (ЗначениеЗаполнено(СтруктураДанных.ПоставщикДатаВыпускаТоваров) И 
			ЗначениеЗаполнено(СтруктураДанных.ПоставщикДатаРазрешенияНаУбытиеТоваров)) Тогда
			
			ТекстОшибки = "Если заполнено поле 13 «Регистрационный номер выпуска товаров» и статус поставщика – ""Продавец"", а получателя – ""Покупатель"", то даты из полей ЭСЧФ 13.1 и 13.2 тоже обязательны для заполнения!";
			Отказ = Истина;
			
		КонецЕсли;
		
	//Правило-23.1	
	ИначеЕсли ЗначениеЗаполнено(СтруктураДанных.ПоставщикДатаВыпускаТоваров) И 
		ЗначениеЗаполнено(СтруктураДанных.ПоставщикДатаРазрешенияНаУбытиеТоваров) Тогда
		
		Если Не ЗначениеЗаполнено(СтруктураДанных.ПоставщикРегистрационныйНомерВыпускаТоваров) Тогда
			
			ТекстОшибки = "Если заполнены поля 13.1 ""Дата выпуска товара"" и 13.2 ""Дата разрешения на убытие товаров"", то поле 13 «Регистрационный номер выпуска товаров» - обязательное для заполнения!";
			Отказ = Истина;
			
		КонецЕсли;
				
	КонецЕсли;

КонецПроцедуры

//Правило-24-удалено
//	Поля 13. «Реквизиты деклараций на товары», 14. «Реквизиты заявления о ввозе
//	товаров и уплате косвенных налогов», 20. «Регистрационный номер выпуска товаров», 21.
//	«Реквизиты заявления о ввозе товаров и уплате косвенных налогов» являются
//	взаимоисключающими друг друга. Т.е., если заполнено поле, например, 21. «Реквизиты
//	заявления о ввозе товаров и уплате косвенных налогов», то поля под номерами 13,14, и 20
//	должны оставаться пустыми.
//
Процедура ПроверкаЗаполненияПолейПравило24(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли;	
	
КонецПроцедуры

//Правило-25
//	Поле 14. «Реквизиты заявления о ввозе товаров и уплате косвенных налогов» доступно для заполнения, если: 
//	1) в поле статусов поставщика – получателя проставлены: «комиссионер» – «комитент»,
//	«посредник» – «потребитель», «заказчик (застройщик)» – «потребитель» вне зависимости от значений
//	в полях «код страны»;
//	2) При статусах «продавец» – «покупатель»:
//	2.1) «код страны поставщика» – Республика Беларусь, а в строке 16 «код страны получателя»
//	указана страна, входящая в страны ЕАЭС (и не Республика Беларусь);
//	2.2) покупатель – плательщик из стран, не входящих в страны ЕАЭС (и не Республики Беларусь),
//	а грузополучатель – плательщик, являющийся резидентом страны из ЕАЭС (и не из Республики Беларусь).
//
Процедура ПроверкаЗаполненияПолейПравило25(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если ЗначениеЗаполнено(СтруктураДанных.ПоставщикНомерЗаявленияОВвозеТоваров) ИЛИ 
		ЗначениеЗаполнено(СтруктураДанных.ПоставщикДатаЗаявленияОВвозеТоваров) Тогда
		
		ТипПолучателя = Документы.ЭлектронныйСчетФактура.ПолучитьТипКонтрагента(Документ.Получатель);
		
		ГрузополучательЕАЭС = Ложь;
		
		Для Каждого Строка Из СтруктураДанных.Грузополучатель Цикл
			
			ТипГрузополучателя = Документы.ЭлектронныйСчетФактура.ПолучитьТипКонтрагента(Документ.Грузополучатель[СтруктураДанных.Грузополучатель.Индекс(Строка)].Грузополучатель);
			
			Если Строка.КодСтраныГрузополучатель <> "112" И ТипГрузополучателя = 2 Тогда
				ГрузополучательЕАЭС = Истина;
				Прервать;				
			КонецЕсли;
			
		КонецЦикла; 		
		
		//Комиссионер и Комитент / Посредник и Потребитель / Заказчик (застройщик) и Потребитель 
		Если СтруктураДанных.СтатусПоставщика = "COMMISSIONAIRE" И СтруктураДанных.СтатусПолучателя = "CONSIGNOR" ИЛИ
			СтруктураДанных.СтатусПоставщика = "AGENT" И СтруктураДанных.СтатусПолучателя = "CONSUMER" ИЛИ
			СтруктураДанных.СтатусПоставщика = "DEVELOPER" И СтруктураДанных.СтатусПолучателя = "CONSUMER" Тогда
						
		//Продавец и Покупатель	
		ИначеЕсли СтруктураДанных.СтатусПоставщика = "SELLER" И СтруктураДанных.СтатусПолучателя = "CUSTOMER" Тогда   	
			
			Если СтруктураДанных.КодСтраныПоставщика = "112" И СтруктураДанных.КодСтраныПолучателя <> "112" И ТипПолучателя = 2 Тогда 				
				
			ИначеЕсли ТипПолучателя = 3 И ГрузополучательЕАЭС Тогда
				
			Иначе
				
				ТекстОшибки = "Поле 14. «Реквизиты заявления о ввозе товаров и уплате косвенных налогов» не доступно для заполнения!";
				Отказ = Истина;			
				
			КонецЕсли;
			
		Иначе
			
			ТекстОшибки = "Поле 14. «Реквизиты заявления о ввозе товаров и уплате косвенных налогов» не доступно для заполнения!";
			Отказ = Истина;
						
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-26
//	Если субъект хозяйствования, составляющий ЭСЧФ, является поставщиком, то поля
//	15.1, 15.2, 15.3, 15.4 должны принимать значение false.
//
Процедура ПроверкаЗаполненияПолейПравило26(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если Документ.Поставщик = Документ.Организация.Контрагент Тогда 
		
		Если СтруктураДанных.ПолучательПризнакВзаимозависимогоЛица ИЛИ
			СтруктураДанных.ПолучательПризнакКрупногоПлательщика ИЛИ
			СтруктураДанных.ПолучательПризнакСделкиСРезидентомОффшорнойЗоны ИЛИ
			СтруктураДанных.ПолучательПризнакСделкиСТоварамиПоПеречню Тогда
			
			ТекстОшибки = "Поля ЭСЧФ 15.1, 15.2, 15.3, 15.4 должны принимать значение false!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-27
//	Если субъект хозяйствования, составляющий ЭСЧФ, указал статус поставщика –
//	«иностранная организация», то УНП получателя должен соответствовать УНП 
//	субъекта хозяйствования, составляющего ЭСЧФ (элемент sender).
//
Процедура ПроверкаЗаполненияПолейПравило27(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	//Иностранная организация
	Если СтруктураДанных.СтатусПоставщика = "FOREIGN_ORGANIZATION" Тогда 
		
		Если СтруктураДанных.УНППолучателя <> Документ.Организация.Контрагент.ИНН Тогда
			
			ТекстОшибки = "Если субъект хозяйствования, составляющий ЭСЧФ, указал статус поставщика – «иностранная организация», то УНП получателя должен соответствовать УНП субъекта хозяйствования, составляющего ЭСЧФ (элемент sender)!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-28-удалено
//	Нет описания
//
Процедура ПроверкаЗаполненияПолейПравило28(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли;	
	
КонецПроцедуры

//Правило-29
//	Поле 20. «Регистрационный номер выпуска товаров» или 21. «Реквизиты заявления о
//	ввозе товаров и уплате косвенных налогов» обязательно для заполнения, если у поставщика 
//	проставлен статус «Иностранная организация», а у получателя статус «Покупатель».
//
Процедура ПроверкаЗаполненияПолейПравило29(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	//Иностранная организация и Покупатель
	Если СтруктураДанных.СтатусПоставщика = "FOREIGN_ORGANIZATION" И
		СтруктураДанных.СтатусПолучателя = "CUSTOMER" Тогда 
		
		Если Не (ЗначениеЗаполнено(СтруктураДанных.ПолучательРегистрационныйНомерВыпускаТоваров) ИЛИ
			ЗначениеЗаполнено(СтруктураДанных.ПолучательНомерЗаявленияОВвозеТоваров) ИЛИ
			ЗначениеЗаполнено(СтруктураДанных.ПолучательДатаЗаявленияОВвозеТоваров)) Тогда
			
			ТекстОшибки = "Поле 20. «Регистрационный номер выпуска товаров» или 21. «Реквизиты заявления о ввозе товаров и уплате косвенных налогов» обязательно для заполнения, если у поставщика проставлен статус «Иностранная организация», а у получателя статус «Покупатель»!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-30
//	Поле 20. Регистрационный номер выпуска товаров доступно для заполнения, если поставщик – 
//	иностранная организация (субъект хозяйствования страны, не входящей в ЕАЭС или 
//	страна не указана),	а получатель – субъект хозяйствования Республики Беларусь, а также, 
//	когда продавец – субъект хозяйствования страны, входящей в ЕАЭС (но не Беларусь),
//	а грузоотправитель – плательщик из стран, не входящих в ЕАЭС.
//
Процедура ПроверкаЗаполненияПолейПравило30(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если ЗначениеЗаполнено(СтруктураДанных.ПолучательРегистрационныйНомерВыпускаТоваров) Тогда 
		
		ТипПоставщика = Документы.ЭлектронныйСчетФактура.ПолучитьТипКонтрагента(Документ.Поставщик);
		ТипПолучателя = Документы.ЭлектронныйСчетФактура.ПолучитьТипКонтрагента(Документ.Получатель);
		ТипГрузоотправитель = 1;
			
		Для Каждого Строка Из Документ.Грузоотправитель Цикл 				
			
			ТипГрузоотправитель = Документы.ЭлектронныйСчетФактура.ПолучитьТипКонтрагента(Строка.Грузоотправитель);
			
			Если ТипГрузоотправитель = 3 Тогда  					
				Прервать;  					
			КонецЕсли;
			
		КонецЦикла;
			
		Если (Не ЗначениеЗаполнено(СтруктураДанных.КодСтраныПоставщика) ИЛИ ТипПоставщика = 3) И
			(СтруктураДанных.КодСтраныПолучателя = "112" ИЛИ 
			СтруктураДанных.КодСтраныПолучателя <> "112" И ТипПолучателя = 2 И ТипГрузоотправитель = 3) Тогда
			
		Иначе
			
			ТекстОшибки = "Поле 20. Регистрационный номер выпуска товаров не доступно для заполнения!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-31
//	Поле 21.Реквизиты заявления о ввозе товаров и уплате косвенных налогов и
//	21.1. Дата ввоза товара доступно для заполнения, если поставщик – 
//	иностранная организация (субъект хозяйствования страны, входящей в ЕАЭС или 
//	страна не указана), а получатель – субъект хозяйствования Республики Беларусь, 
//	а также, когда продавец - субъект хозяйствования страны, не входящей в ЕАЭС, 
//	а грузоотправитель – субъект хозяйствования страны, входящей в ЕАЭС (не Беларусь).
//
Процедура ПроверкаЗаполненияПолейПравило31(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если ЗначениеЗаполнено(СтруктураДанных.ПолучательНомерЗаявленияОВвозеТоваров) ИЛИ 
		ЗначениеЗаполнено(СтруктураДанных.ПолучательДатаЗаявленияОВвозеТоваров) ИЛИ 
		ЗначениеЗаполнено(СтруктураДанных.ПолучательДатаВвозаТоваров) Тогда 
		
		ТипПоставщика = Документы.ЭлектронныйСчетФактура.ПолучитьТипКонтрагента(Документ.Поставщик);
		ТипПолучателя = Документы.ЭлектронныйСчетФактура.ПолучитьТипКонтрагента(Документ.Получатель);
		
		ГрузоотправительЕАЭС = Ложь;
			
		Для Каждого Строка Из Документ.Грузоотправитель Цикл 				
			
			ТипГрузоотправитель = Документы.ЭлектронныйСчетФактура.ПолучитьТипКонтрагента(Строка.Грузоотправитель);
			
			Если ТипГрузоотправитель = 3 Тогда  					
				Прервать;  					
			КонецЕсли;
			
		КонецЦикла;
		
		ГрузоотправительЕАЭС = Ложь;
		
		Для Каждого Строка Из СтруктураДанных.Грузоотправитель Цикл
			
			ТипГрузоотправителя = Документы.ЭлектронныйСчетФактура.ПолучитьТипКонтрагента(Документ.Грузоотправитель[СтруктураДанных.Грузоотправитель.Индекс(Строка)].Грузоотправитель);
			
			Если Строка.КодСтраныГрузоотправитель <> "112" И ТипГрузоотправителя = 2 Тогда
				ГрузоотправительЕАЭС = Истина;
				Прервать;				
			КонецЕсли;
			
		КонецЦикла;	
		
		Если (Не ЗначениеЗаполнено(СтруктураДанных.КодСтраныПоставщика) ИЛИ ТипПоставщика = 2) И
			(СтруктураДанных.КодСтраныПолучателя = "112" ИЛИ 
			ТипПолучателя = 3 И ГрузоотправительЕАЭС) Тогда
			
		Иначе
			
			ТекстОшибки = "Поле 21.Реквизиты заявления о ввозе товаров и уплате косвенных налогов и 21.1. Дата ввоза товара не доступно для заполнения!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-32
//	Если заполнено поле 21 (номер или дата), то поле 21.1 – обязательно для заполнения.
//
Процедура ПроверкаЗаполненияПолейПравило32(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если ЗначениеЗаполнено(СтруктураДанных.ПолучательНомерЗаявленияОВвозеТоваров) ИЛИ 
		ЗначениеЗаполнено(СтруктураДанных.ПолучательДатаЗаявленияОВвозеТоваров) Тогда 
		
		Если Не ЗначениеЗаполнено(СтруктураДанных.ПолучательДатаВвозаТоваров) Тогда
			
			ТекстОшибки = "Если заполнено поле 21 (номер или дата), то поле 21.1 – обязательно для заполнения!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-33
//	Если пользователь указал ТТН-1 в разделе 30.«Условия поставки», то в разделах
//	грузоотправитель и грузополучатель должен быть заполнены все поля
//
Процедура ПроверкаЗаполненияПолейПравило33(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	ЕстьТТН1 = Ложь;
	
	Для Каждого Строка Из СтруктураДанных.ДокументыБСО Цикл
		
		Если Строка.КодДокументаУсловияПоставкиБСО = "603" Тогда
			ЕстьТТН1 = Истина;
			Прервать;			
		КонецЕсли;		
		
	КонецЦикла;
	
	Если ЕстьТТН1 Тогда 
		
		Если СтруктураДанных.Грузоотправитель.Количество() > 0 И СтруктураДанных.Грузополучатель.Количество() > 0 Тогда  
			
			НеЗаполненыВсеПоля = Ложь;
			
			Для Каждого Строка Из СтруктураДанных.Грузоотправитель Цикл
				
				Если Не (ЗначениеЗаполнено(Строка.АдресГрузоотправитель) И ЗначениеЗаполнено(Строка.ИмяГрузоотправитель) И
					ЗначениеЗаполнено(Строка.КодСтраныГрузоотправитель) И ЗначениеЗаполнено(Строка.УНПГрузоотправитель)) Тогда
					НеЗаполненыВсеПоля = Истина;
					Прервать;
				КонецЕсли;
				
			КонецЦикла;
			
			Если Не НеЗаполненыВсеПоля Тогда 
				
				Для Каждого Строка Из СтруктураДанных.Грузополучатель Цикл
					
					Если Не (ЗначениеЗаполнено(Строка.АдресГрузополучатель) И ЗначениеЗаполнено(Строка.ИмяГрузополучатель) И
						ЗначениеЗаполнено(Строка.КодСтраныГрузополучатель) И ЗначениеЗаполнено(Строка.УНПГрузополучатель)) Тогда
						НеЗаполненыВсеПоля = Истина;
						Прервать;
					КонецЕсли;
					
				КонецЦикла;
				
			КонецЕсли;		
			
			Если НеЗаполненыВсеПоля Тогда
				
				ТекстОшибки = "В разделах грузоотправитель и грузополучатель должны быть заполнены все поля!";
				Отказ = Истина;
				
			КонецЕсли;
			
		Иначе
			
			ТекстОшибки = "В разделах грузоотправитель и грузополучатель должны быть заполнены все поля!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-34-удалено
//	Если пользователь указал информацию в строках 14 «Реквизиты заявления о ввозе
//	товаров и уплате косвенных налогов» или 21 «Реквизиты заявления о ввозе товаров и
//	уплате косвенных налогов», то даты всех указанных документов, указанных в строке 30
//	(условия поставки) должны совпадать.
//
Процедура ПроверкаЗаполненияПолейПравило34(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
КонецПроцедуры

//Правило-35
//	Если пользователь указал грузоотправителя или грузополучателя (любой из реквизитов),
//	то должны быть указан хотя бы один из документов «условия поставки» (вид документа, дата и номер).
//
Процедура ПроверкаЗаполненияПолейПравило35(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если СтруктураДанных.Грузоотправитель.Количество() > 0 ИЛИ СтруктураДанных.Грузополучатель.Количество() > 0  Тогда 
		
		Если СтруктураДанных.ДокументыБСО.Количество() < 1 Тогда
			
			ТекстОшибки = "Если пользователь указал грузоотправителя или грузополучателя (любой из реквизитов), то должны быть указан хотя бы один из документов «условия поставки» (вид документа, дата и номер)!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

//Правило-36-удалено
//	Если заполнены данные документа (тип, или номер, или дата), то данные (номер и
//	дата) договора (контракта) обязательны для заполнения.
//
Процедура ПроверкаЗаполненияПолейПравило36(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
КонецПроцедуры

//Правило-37
//	Если заполнен один из реквизитов документа: тип, или номер, или дата, то
//	остальные (тип, номер и дата) – обязательны для заполнения
//
Процедура ПроверкаЗаполненияПолейПравило37(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Для Каждого Строка Из СтруктураДанных.ДокументыБСО Цикл
		
		Если ЗначениеЗаполнено(Строка.КодДокументаУсловияПоставкиБСО) ИЛИ ЗначениеЗаполнено(Строка.НомерБСО) ИЛИ
			ЗначениеЗаполнено(Строка.ДатаДокументаБСО) Тогда 
			
			Если Не (ЗначениеЗаполнено(Строка.КодДокументаУсловияПоставкиБСО) И ЗначениеЗаполнено(Строка.НомерБСО) И
				ЗначениеЗаполнено(Строка.ДатаДокументаБСО)) Тогда
				
				ТекстОшибки = "Поля 30. документы, подтверждающие поставку тип, номер и дата – обязательны для заполнения!";
				Отказ = Истина;
				Прервать;
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЦикла;

КонецПроцедуры

//Правило-38
//	Если пользователь указал документ ТТН-1 или ТН-2 как документы, подтверждающие поставку товара,
//	то поля вид документа, дата, код типа бланка, серия и номер – обязательны для заполнения
//
Процедура ПроверкаЗаполненияПолейПравило38(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Для Каждого Строка Из СтруктураДанных.ДокументыБСО Цикл
		
		Если Строка.КодДокументаУсловияПоставкиБСО = "602" ИЛИ Строка.КодДокументаУсловияПоставкиБСО = "603" Тогда 
			
			Если Не (ЗначениеЗаполнено(Строка.ВидДокументаБСО) И ЗначениеЗаполнено(Строка.ДатаДокументаБСО) И
				ЗначениеЗаполнено(Строка.КодТипаБланкаБСО) И ЗначениеЗаполнено(Строка.СерияБСО) И ЗначениеЗаполнено(Строка.НомерБСО)) Тогда
				  
				ТекстОшибки = "Поля 30. документы, подтверждающие поставку вид документа, дата, код типа бланка, серия и номер – обязательны для заполнения!";
				Отказ = Истина;
				Прервать;
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЦикла;

КонецПроцедуры

//Правило-39-удалено
//	Если пользователь указал "В том числе сумма акциза", то поле «код ТН ВЭД ЕАЭС»
//	– обязательно для заполнения для строки (10 цифр).
//
Процедура ПроверкаЗаполненияПолейПравило39(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 

КонецПроцедуры

//Правило-40
//	Поле 3.1. «ТН ВЭД ЕАЭС» и поле 3.2. «ОКЭД» являются взаимоисключающими друг друга. 
//	Т.е. если заполнено, например, поле 3.1, то поле 3.2 должно оставаться пустым.
//
Процедура ПроверкаЗаполненияПолейПравило40(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Для Каждого Строка Из СтруктураДанных.ТаблицаДанных Цикл
		
		Если ЗначениеЗаполнено(Строка.ТНВЭД) И ЗначениеЗаполнено(Строка.ОКЭД) Тогда
			
			ТекстОшибки = "Поле 3.1. «ТН ВЭД ЕАЭС» и поле 3.2. «ОКЭД» являются взаимоисключающими друг друга!";
			Отказ = Истина;
			Прервать;
			
		КонецЕсли;
		
	КонецЦикла;

КонецПроцедуры

//Правило-41
//	Если указаны статусы поставщика-получателя "Иностранная организация"-"Покупатель", 
//	при этом, пользователь указывает ставку НДС 10% фиксированной ставки, то должен быть
//	указан 10-значный код 3.1. «код ТН ВЭД ЕАЭС» из перечня кодов
//	Указа Президента Республики Беларусь от 21 июня 2007 г. 
//	№287 "О налогообложении продовольственных товаров и товаров для детей".
//Правило-41.1 
//	Если статусы поставщика-получателя "Иностранная организация" – "Покупатель" и
//	в товарной строке указана 8. "В том числе сумма акциза", то должен быть указан
//	10-значный код 3.1. «код ТН ВЭД ЕАЭС».
//Правило-41.2 
//	Если заполнены поля 13 "Регистрационный номер выпуска товаров" или 
//	14 "Реквизиты заявления о ввозе товаров и уплате косвенных налогов", 
//	в товарной строке указана 8. "В том числе сумма акциза", то для этой товарной строки 
//	должен быть указан код 3.1. «код ТН ВЭД ЕАЭС» (10 цифр).
//Правило-41.3 
//	Если статусы поставщика-получателя "Иностранная организация" – "Покупатель",
//	в товарной строке не указана 8. "В том числе сумма акциза", а также 
//	фиксированная ставка НДС не равна 10%, то должен быть указан 
//	код 3.1. «код ТН ВЭД ЕАЭС» (от 4 до 10 цифр).
//
Процедура ПроверкаЗаполненияПолейПравило41(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	//Иностранная организация и Покупатель
	Если СтруктураДанных.СтатусПоставщика = "FOREIGN_ORGANIZATION" И СтруктураДанных.СтатусПолучателя = "CUSTOMER" Тогда  		
		
		Для Каждого Строка Из СтруктураДанных.ТаблицаДанных Цикл
			
			//41
			Если Строка.СтавкаНДС = "10" И Не ЗначениеЗаполнено(Строка.ТНВЭД) Тогда
				
				ТекстОшибки = "Для товарной строки должен быть указан код 3.1. «код ТН ВЭД ЕАЭС» (10 цифр)!";
				Отказ = Истина;
				Прервать;
				
			//41.1
			ИначеЕсли ЗначениеЗаполнено(Строка.Акциз) И Не ЗначениеЗаполнено(Строка.ТНВЭД) Тогда
				
				ТекстОшибки = "Для товарной строки должен быть указан код 3.1. «код ТН ВЭД ЕАЭС» (10 цифр)!";
				Отказ = Истина;
				Прервать;
				
			//41.3
			ИначеЕсли Не ЗначениеЗаполнено(Строка.Акциз) И Строка.СтавкаНДС <> "10" И Не ЗначениеЗаполнено(Строка.ТНВЭД) Тогда
				
				ТекстОшибки = "Для товарной строки должен быть указан код 3.1. «код ТН ВЭД ЕАЭС» (10 цифр)!";
				Отказ = Истина;
				Прервать;
							
			КонецЕсли;
			
		КонецЦикла; 
				
	КонецЕсли;

	//41.2
	Если ЗначениеЗаполнено(СтруктураДанных.ПоставщикРегистрационныйНомерВыпускаТоваров) ИЛИ
		ЗначениеЗаполнено(СтруктураДанных.ПоставщикНомерЗаявленияОВвозеТоваров) ИЛИ
		ЗначениеЗаполнено(СтруктураДанных.ПоставщикДатаЗаявленияОВвозеТоваров) Тогда
		
		Для Каждого Строка Из СтруктураДанных.ТаблицаДанных Цикл
			
			Если ЗначениеЗаполнено(Строка.Акциз) И Не ЗначениеЗаполнено(Строка.ТНВЭД) Тогда
				
				ТекстОшибки = "Для товарной строки должен быть указан код 3.1. «код ТН ВЭД ЕАЭС» (10 цифр)!";
				Отказ = Истина;
				Прервать;			
				
			КонецЕсли;
			
		КонецЦикла;  
		
	КонецЕсли;
	
КонецПроцедуры

//Правило-42-удалено
//	Если указана ставка НДС 10% и «код ТН ВЭД ЕАЭС», то «код ТН ВЭД ЕАЭС»
//	должен быть в перечне кодов Указа Президента Республики Беларусь от 21 июня 2007 г.
//	№287 "О налогообложении продовольственных товаров и товаров для детей".
//
Процедура ПроверкаЗаполненияПолейПравило42(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
КонецПроцедуры

//Правило-43-удалено
//	Если заполнены поля 13 или 14 и в атрибуте sender указан УНП поставщика (т.е.
//	отправитель является поставщиком в данном ЭСЧФ), то для данной ЭСЧФ для всех
//	товарных позиций должен быть указан ТН ВЭД ЕАЭС» (от 4 до 10 цифр).   
//
Процедура ПроверкаЗаполненияПолейПравило43(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 

КонецПроцедуры

//Правило-44
//	Если заполнены поля 13."Регистрационный номер выпуска товаров" или 
//	14 "Реквизиты заявления о ввозе товаров и уплате косвенных налогов" 
//	и статусы поставщика – получателя соответственно равны «продавец» – «покупатель», 
//	«посредник» – «потребитель», «заказчик (застройщик)» – «потребитель», 
//	то для данного ЭСЧФ для всех товарных позиций должен быть указан «ТН ВЭД ЕАЭС» (от 4 до 10 цифр).
//
Процедура ПроверкаЗаполненияПолейПравило44(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	//Продавец и Покупатель / Посредник и Потребитель / Заказчик (застройщик) и Потребитель 
	Если (ЗначениеЗаполнено(СтруктураДанных.ПоставщикРегистрационныйНомерВыпускаТоваров) ИЛИ
		ЗначениеЗаполнено(СтруктураДанных.ПоставщикНомерЗаявленияОВвозеТоваров) ИЛИ
		ЗначениеЗаполнено(СтруктураДанных.ПоставщикДатаЗаявленияОВвозеТоваров)) И
		(СтруктураДанных.СтатусПоставщика = "SELLER" И СтруктураДанных.СтатусПолучателя = "CUSTOMER" ИЛИ
		СтруктураДанных.СтатусПоставщика = "AGENT" И СтруктураДанных.СтатусПолучателя = "CONSUMER" ИЛИ
		СтруктураДанных.СтатусПоставщика = "DEVELOPER" И СтруктураДанных.СтатусПолучателя = "CONSUMER") Тогда  		
		
		Для Каждого Строка Из СтруктураДанных.ТаблицаДанных Цикл
			
			Если Не (ЗначениеЗаполнено(Строка.ТНВЭД) ИЛИ ЗначениеЗаполнено(Строка.ОКЭД)) Тогда
				
				ТекстОшибки = "Для всех товарных позиций должен быть указан «ТН ВЭД ЕАЭС» (от 4 до 10 цифр)!";
				Отказ = Истина;
				Прервать;			
				
			КонецЕсли;
			
		КонецЦикла;

	КонецЕсли;

КонецПроцедуры

//Правило-45-удалено
//	Если заполнены поля 20 или 21 и статусы поставщика – получателя соответственно
//	равны «иностранная организация» - «покупатель», то для данной ЭСЧФ для всех товарных
//	позиций должен быть указан ТН ВЭД ЕАЭС» (от 4 до 10 цифр).
//
Процедура ПроверкаЗаполненияПолейПравило45(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
КонецПроцедуры

//Правило-46
//	6. Цена (тариф) за единицу товара (работы, услуги) имущественных прав без учета НДС
//	в Разделе 12 не должна быть отрицательной.
//
Процедура ПроверкаЗаполненияПолейПравило46(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Для Каждого Строка Из СтруктураДанных.ТаблицаДанных Цикл
		
		Если Строка.Цена < 0 Тогда 
			
			ТекстОшибки = "6. Цена (тариф) за единицу товара (работы, услуги) имущественных прав без учета НДС в Разделе 12 не должна быть отрицательной!";
			Отказ = Истина;
			Прервать;
			
		КонецЕсли;
		
	КонецЦикла;

КонецПроцедуры

//Правило-47
//	В разделе 6, в поле 10. «НДС сумма» и в поле 8. «В том числе сумма акциза» числа
//	должны быть одного знака (если они есть).
//	Например, если НДС сумма по данной позиции положительная, то и сумма акцизы
//	должна быть положительной.
//
Процедура ПроверкаЗаполненияПолейПравило47(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Для Каждого Строка Из СтруктураДанных.ТаблицаДанных Цикл
		
		СуммаНДС = Строка.СуммаНДС;
		СуммаАкциз = Строка.Акциз;
		
		Если ЗначениеЗаполнено(СуммаНДС) И ЗначениеЗаполнено(СуммаАкциз) Тогда 
			
			Если СуммаНДС > 0 И СуммаАкциз < 0 ИЛИ СуммаНДС < 0 И СуммаАкциз > 0 Тогда
				
				ТекстОшибки = "В разделе 6, в поле 10. «НДС сумма» и в поле 8. «В том числе сумма акциза» числа	должны быть одного знака (если они есть)!";
				Отказ = Истина;
				Прервать;
				
			КонецЕсли;
		
		КонецЕсли;
		
	КонецЦикла;

КонецПроцедуры

//Правило-48
//	Если пользователь указал ставку НДС 0% или "без НДС", то в поле "НДС сумма" должен прописываться 0.
//
Процедура ПроверкаЗаполненияПолейПравило48(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Для Каждого Строка Из СтруктураДанных.ТаблицаДанных Цикл
		
		Если Строка.ТипСтавки = "ZERO" ИЛИ Строка.ТипСтавки = "NO_VAT" Тогда 
			
			Если Строка.СуммаНДС <> 0 Тогда
				
				ТекстОшибки = "Если пользователь указал ставку НДС ""0"" или ""без НДС"", то в поле ""НДС сумма"" должен прописываться 0!";
				Отказ = Истина;
				Прервать;
				
			КонецЕсли;
		
		КонецЕсли;
		
	КонецЦикла;

КонецПроцедуры

//Правило-49
//	Общая сумма всех НДС перевыставляемых не должна превышать суммы входящего НДС, 
//	на который он ссылается в пунктах 11. «Номер ЭСЧФ комитента» или 
//	продавца 12. «Номер ЭСЧФ продавца»
//	Иначе, ЭСЧФ будет отклонен
//
//	ЭСЧФ, указанный в поле 11 или 12, должен обладать следующими показателями:
//	1. Тип должен быть исходный, исправленный или дополнительный без ссылки на ЭСЧФ;
//	2. Статус (в том числе его дополнительных) должен быть "Выставлен. Подписан получателем"
//	или "Выставлен. Начато аннулирование";
//	3. Перевыставляемыми суммами НДС считаются только значения из граф "Сумма НДС" строк, 
//	для которых применен признак "Не подлежит вычету" (в текущем ЭСЧФ и всех дополнительных к нему).
//
//	ЭСЧФ, который ссылается в 11 или 12 поле, должен обладать следующими показателями:
//	1. Тип должен быть исходный, исправленный или дополнительный без ссылки на ЭСЧФ;
//	2. Статус (в том числе его дополнительных) должен быть "Выставлен", "Выставлен.Подписан получателем"
//	или "Выставлен.Начато аннулирование";
//	3. Перевыставляемыми суммами НДС считаются только значения из граф "Всего по счету Сумма НДС" для всех ЭСЧФ,
//	которые ссылаются на одну и тоже ЭСЧФ, и их дополнительных.
//
//	Таким образом, система отклоняет выставление ЭСЧФ в следующих случаях:
//	1. Когда перевыставляемая сумма НДС из ЭСЧФ (или его дополнительного), который
//	ссылается в 11 или 12 поле, в случае выставления, будет превышать
//	Перевыставляемую сумму НДС из ЭСЧФ, указанного в поле 11 или 12;
//	2. Когда к ЭСЧФ, указанному в поле 11 или 12, составляется (подается) дополнительный ЭСЧФ
//	с минусовыми показателями, которые в случае выставления этого ЭСЧФ, вызовет превышение
//	уже перевыставленной суммы НДС над входящим с учетом дополнительных.
//	3. Когда у ЭСЧФ, указанному в поле 11 или 12, получатель попытается поменять
//	признак "Не подлежит вычету" примененный к строкам, что вызовет превышение 
//	уже перевыставленной суммы НДС над входящим с учетом дополнительных.
//
Процедура ПроверкаЗаполненияПолейПравило49(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	
	//Ждем пока доработаю правило и компоненту, на текущий момент не реализуемо через 1С!
	//11
	Если ЗначениеЗаполнено(СтруктураДанных.НомерСчетаКомитента) Тогда
		
		ТекстОшибки = "Правило 49 в разработке!";
		Отказ = Истина;
		
		//Если Документ.НомерСчетаКомитента.ТипЭСЧФ = Перечисления.КодыТиповСчетовФактур_Локализация.Исходный ИЛИ
		//	Документ.НомерСчетаКомитента.ТипЭСЧФ = Перечисления.КодыТиповСчетовФактур_Локализация.Исправленный ИЛИ
		//	Документ.НомерСчетаКомитента.ТипЭСЧФ = Перечисления.КодыТиповСчетовФактур_Локализация.ДополнительныйБезСсылки Тогда
		//	
		//	//Статус (в том числе его дополнительных) должен быть "Выставлен. Подписан получателем" или "Выставлен. Начато аннулирование"
		//	Если Не Документ.НомерСчетаКомитента.СтатусАннулирован Тогда
		//		
		//	Иначе
		//		
		//		ТекстОшибки = "В поле 11 статус (в том числе его дополнительных) должен быть ""Выставлен. Подписан получателем"" или ""Выставлен. Начато аннулирование""!";
		//		Отказ = Истина;				
		//		
		//	КонецЕсли;
		//	
		//Иначе
		//	
		//	ТекстОшибки = "В поле 11 тип должен быть исходный, исправленный или дополнительный без ссылки на ЭСЧФ!";
		//	Отказ = Истина;	
		//	
		//КонецЕсли;
		
	//12
	ИначеЕсли ЗначениеЗаполнено(СтруктураДанных.НомерСчетаПродавца) Тогда
		
		ТекстОшибки = "Правило 49 в разработке!";
		Отказ = Истина;
		
		//Если Документ.НомерСчетаПродавца.ТипЭСЧФ = Перечисления.КодыТиповСчетовФактур_Локализация.Исходный ИЛИ
		//	Документ.НомерСчетаПродавца.ТипЭСЧФ = Перечисления.КодыТиповСчетовФактур_Локализация.Исправленный ИЛИ
		//	Документ.НомерСчетаПродавца.ТипЭСЧФ = Перечисления.КодыТиповСчетовФактур_Локализация.ДополнительныйБезСсылки Тогда
		//	
		//	//Статус (в том числе его дополнительных) должен быть "Выставлен. Подписан получателем" или "Выставлен. Начато аннулирование"
		//	Если Не Документ.НомерСчетаКомитента.СтатусАннулирован Тогда
		//		
		//	Иначе
		//		
		//		ТекстОшибки = "В поле 12 статус (в том числе его дополнительных) должен быть ""Выставлен. Подписан получателем"" или ""Выставлен. Начато аннулирование""!";
		//		Отказ = Истина;				
		//		
		//	КонецЕсли;
		//				
		//Иначе
		//	
		//	ТекстОшибки = "В поле 12 тип должен быть исходный, исправленный или дополнительный без ссылки на ЭСЧФ!";
		//	Отказ = Истина;	
		//	
		//КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

//Правило-50
//	Сумма, указанная в графе 8. «В том числе сумма акциза» должна быть не больше
//	суммы, указанной в графе 7. «Стоимость товаров» (по модулю).
//
Процедура ПроверкаЗаполненияПолейПравило50(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Для Каждого Строка Из СтруктураДанных.ТаблицаДанных Цикл
		
		Если Строка.Сумма >= 0 Тогда 
			
			Если Строка.Акциз < 0 ИЛИ Строка.Сумма < Строка.Акциз Тогда
			
				ТекстОшибки = "Сумма, указанная в графе 8. «В том числе сумма акциза» должна быть не больше суммы, указанной в графе 7. «Стоимость товаров» (по модулю)!";
				Отказ = Истина;
				Прервать;
			
			КонецЕсли;
			
		Иначе
			
			Если Строка.Акциз > 0 ИЛИ Строка.Сумма > Строка.Акциз Тогда
				
				ТекстОшибки = "Сумма, указанная в графе 8. «В том числе сумма акциза» должна быть не больше суммы, указанной в графе 7. «Стоимость товаров» (по модулю)!";
				Отказ = Истина;
				Прервать;
				
			КонецЕсли;
		
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

//Правило-51-удалено
//	Если заполнены поля 20. «Регистрационный номер выпуска товаров» или 21.
//	«Реквизиты заявления о ввозе товаров и уплате косвенных налогов», то в шестом разделе
//	для всех строк товара в графе 12 (дополнительные данные) должен быть указан "Ввозной НДС".
//
Процедура ПроверкаЗаполненияПолейПравило51(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 

КонецПроцедуры

//Правило-52
//	Если пользователь указал статус поставщика – "иностранная организация", а статус
//	получателя – "Покупатель", то в разделе 6, графе 12 должен быть указан "Ввозной НДС" 
//	– для всех товарных позиций 
//
Процедура ПроверкаЗаполненияПолейПравило52(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	//Иностранная организация и Покупатель 
	Если СтруктураДанных.СтатусПоставщика = "FOREIGN_ORGANIZATION" И СтруктураДанных.СтатусПолучателя = "CUSTOMER" Тогда  		
		
		Для Каждого Строка Из СтруктураДанных.ТаблицаДанных Цикл
			
			Если Не Строка.ДополнительныеДанные = "IMPORT_VAT" Тогда
				
				ТекстОшибки = "В разделе 6, графе 12 должен быть указан ""Ввозной НДС"" – для всех товарных позиций!";
				Отказ = Истина;
				Прервать;			
				
			КонецЕсли;
			
		КонецЦикла;

	КонецЕсли; 

КонецПроцедуры

#КонецОбласти

Показать
jeniks; +1
5509. Xershi 1479 07.12.16 09:02 Сейчас в теме
В предыдущий пост влезло только 52 правила, остальное ниже:
#Область ПроверкаЗаполненияПолейПосле52

//Правило-53
//	Если в ЭСЧФ указан любой статус поставщика, кроме "Иностранная организация", 
//	и для товарной строки указана ставка НДС "Без НДС", то для этой строки в графе 12 
//	должен быть указан один из признаков: «Вычет в полном объеме»,
//	«Освобождение от НДС» или «Реализация за пределами РБ».
//Правило-53.1 
//	Если в ЭСЧФ указан статус поставщика "Иностранная организация" и для товарной
//	строки указана ставка НДС "Без НДС", то для этой строки в графе 12 должен быть указан
//	признак «Освобождение от НДС».
//
Процедура ПроверкаЗаполненияПолейПравило53(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	//53.1 Иностранная организация
	Если СтруктураДанных.СтатусПоставщика = "FOREIGN_ORGANIZATION" Тогда 
		
		Для Каждого Строка Из СтруктураДанных.ТаблицаДанных Цикл
			
			//Без НДС и Освобождение от НДС
			Если Строка.ТипСтавки = "NO_VAT" И Строка.ДополнительныеДанные <> "VAT_EXEMPTION" Тогда 
				
				ТекстОшибки = "В графе 12 должен быть указан признак «Освобождение от НДС»!";
				Отказ = Истина;
				Прервать;
				
			КонецЕсли;
			
		КонецЦикла; 
		
	Иначе
		
		Для Каждого Строка Из СтруктураДанных.ТаблицаДанных Цикл
			
			//Без НДС и Вычет в полном объеме или Освобождение от НДС или Реализация за пределами РБ
			Если Строка.ТипСтавки = "NO_VAT" И (Строка.ДополнительныеДанные <> "DEDUCTION_IN_FULL" ИЛИ
				Строка.ДополнительныеДанные <> "VAT_EXEMPTION" ИЛИ Строка.ДополнительныеДанные <> "OUTSIDE_RB") Тогда 
				
				ТекстОшибки = "В графе 12 должен быть указан один из признаков: «Вычет в полном объеме», «Освобождение от НДС» или «Реализация за пределами РБ»!";
				Отказ = Истина;
				Прервать;
				
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЕсли;

КонецПроцедуры

//Правило-54
//	Количество товара, суммы и стоимости, указанные в 6 разделе Исходного или
//	Исправленного ЭСЧФ, не должны быть отрицательными.
//
Процедура ПроверкаЗаполненияПолейПравило54(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если СтруктураДанных.ТипЭСЧФ = Перечисления.КодыТиповСчетовФактур_Локализация.Исходный ИЛИ
		СтруктураДанных.ТипЭСЧФ = Перечисления.КодыТиповСчетовФактур_Локализация.Исправленный Тогда 
		
		Для Каждого Строка Из СтруктураДанных.ТаблицаДанных Цикл
			
			Количество = Строка.Количество;
			Сумма = Строка.Сумма;
			Всего = Строка.Всего;
			
			Если Количество < 0 ИЛИ Сумма < 0 ИЛИ Всего < 0 Тогда 
				
				ТекстОшибки = "Количество товара, суммы и стоимости, указанные в 6 разделе Исходного или Исправленного ЭСЧФ, не должны быть отрицательными!";
				Отказ = Истина;
				Прервать;
				
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЕсли;

КонецПроцедуры

//Правило-55
//	Значения столбцов "Стоимость товаров, работ, услуг, имущественных прав без НДС",
//	"В том числе сумма акциза", "НДС сумма", "Стоимость товаров, работ, услуг,
//	имущественных прав с учетом НДС" строки «Всего по счету» должны соответствовать
//	сумме значений соответствующих столбцов по всем товарным строкам.
//
Процедура ПроверкаЗаполненияПолейПравило55(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если СтруктураДанных.ТаблицаДанных.Итог("Акциз") <> СтруктураДанных.СуммаАкциза ИЛИ
		СтруктураДанных.ТаблицаДанных.Итог("Всего") <> СтруктураДанных.СуммаДокумента ИЛИ 
		СтруктураДанных.ТаблицаДанных.Итог("Сумма") <> СтруктураДанных.СуммаДокументаБезНДС ИЛИ
		СтруктураДанных.ТаблицаДанных.Итог("СуммаНДС") <> СтруктураДанных.СуммаДокументаНДС Тогда 
		
		ТекстОшибки = "Значения столбцов ""Стоимость товаров, работ, услуг, имущественных прав без НДС"", ""В том числе сумма акциза"", ""НДС сумма"", ""Стоимость товаров, работ, услуг, имущественных прав с учетом НДС"" строки «Всего по счету» должны соответствовать сумме значений соответствующих столбцов по всем товарным строкам!";
		Отказ = Истина;
		
	КонецЕсли;

КонецПроцедуры

//Правило-56
//	Получатель может подписать исправленный со статусом "На согласовании" только тогда,
//	когда в БД нет неаннулированных ЭСЧФ, в которых в 11 или 12 поле указан номер из 5
//	поля данного исправленного ЭСЧФ со статусом "На согласовании"
//
Процедура ПроверкаЗаполненияПолейПравило56(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	//Проверка возможна только на портале

КонецПроцедуры

//Правило-57
//	Получатель не может дать согласие на аннулирование ЭСЧФ, если к данному ЭСЧФ
//	есть исправленный "на согласовании". При подписании получателем исправленного ЭСЧФ,
//	исходный ЭСЧФ должен быть аннулирован автоматически.
//
Процедура ПроверкаЗаполненияПолейПравило57(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	//Проверка возможна только на портале
	
КонецПроцедуры

//Правило-58
//	При перевыставлении позволять ссылаться на ЭСЧФ продавца, когда составитель
//	текущего ЭСЧФ и ЭСЧФ продавца - с/х с одним и тем же УНП. Данный УНП в ЭСЧФ продавца
//	должен быть получателем со статусом «Покупатель объектов у иностранной организации».
//
Процедура ПроверкаЗаполненияПолейПравило58(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	//Ждем пока доработаю правило и компоненту, на текущий момент не реализуемо через 1С!
	Если ЗначениеЗаполнено(СтруктураДанных.НомерСчетаКомитента) ИЛИ
		ЗначениеЗаполнено(СтруктураДанных.НомерСчетаПродавца) Тогда

		ТекстОшибки = "Правило 50 в разработке!";
		Отказ = Истина;
		
	КонецЕсли;
		
КонецПроцедуры

//Правило-59
//	Если заполнен реквизит 6.1 Взаимозависимое лицо и реквизит 16. Код страны получателя - РБ,
//	то реквизит 17. УНП получателя обязательно для заполнения
//
Процедура ПроверкаЗаполненияПолейПравило59(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	Если СтруктураДанных.ПоставщикПризнакВзаимозависимогоЛица И СтруктураДанных.КодСтраныПолучателя = "112" Тогда 
		
		Если Не ЗначениеЗаполнено(СтруктураДанных.УНППолучателя) Тогда
			
			ТекстОшибки = "Реквизит 17. УНП получателя обязателен для заполнения!";
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

#КонецОбласти
Показать


Структура данных это отформатированный ХМЛ в виде структуры в типах 1С, а Документ это ссылка на ЭСЧФ в базе.
+
5511. Xershi 1479 07.12.16 09:57 Сейчас в теме
Ошибка №6
Что делать, если вам отправили не тот код единицы измерения!
+
5512. Slypower 2 07.12.16 10:07 Сейчас в теме
(5511) судя по ответам разарабов на вопрос, что делать, если вам не правильно выставили эсчф или с ошибкой: "скажите поставщику, а мы что, мы ниче, мы не виноваты, не наш косяк"
+
5513. Xershi 1479 07.12.16 10:44 Сейчас в теме
(5512) Задал дополнительный вопрос:
С этим случаем разберемся, но бывают еще ситуации, когда отправляют всякий мусор:
«000» или код, которого нет в классификаторе, что в таких ситуациях делать?
Будет ли дополнительное правило для единиц измерения, чтобы шлак не попадал на портал?

Ответ:
К сожалению, мы не можем контролировать информацию которую заполняют организации в ЭЧСФ.
Единицы измерения не является критичным элементом, в отличие, к примеру, от типа сопроводительного документа. Правило скорее всего дорабатываться не будет. При задании кода 000, единицы измерения не заполнятся.
+
5514. AlenkaZu 07.12.16 11:35 Сейчас в теме
(5513) единица измерения не обязательный реквизит, на вычет НДС никак не влияет.
Ну и что мешает использовать Формат(ЕДИНИЦАИЗМЕРЕНИЯИЗЭСЧФ, "Ч(0)3") для получения из числа 6 строку "006"?
+
5515. Slypower 2 07.12.16 11:37 Сейчас в теме
(5514) вот как донести это до всех программистов в РБ? Нам-то ничего не мешает, но люди нам шлют. А вдруг это даже сам портал так делает?
+
5516. AlenkaZu 07.12.16 11:43 Сейчас в теме
(5515) зачем доносить что-то до программистов? Вы получили ЭСЧФ с "6". Если Вам это супер-мега-важно, преобразуйте его в "006" для своего буха. В чем именно необходимость доставать поставщика? Необязательным полем. :)
sassashok; +1
5517. Slypower 2 07.12.16 11:50 Сейчас в теме
(5516) Вообще, проблемы нужно решать от корня, а не на вершине
Xershi; Gluk_1C; +2
5520. AlenkaZu 07.12.16 14:54 Сейчас в теме
(5517) "от корня" - это именно на портале. Если эти коды единиц измерения устраивают заказчика (МНС), то не вижу никакой проблемы.

sassashok; +1
5521. Slypower 2 07.12.16 15:08 Сейчас в теме
(5520) знаете, наименование и адрес юр лица тоже не проверяется с УНП, нам так и выставили хз абы как. Получается, нам тоже глаза на это закрыть и поставить на постоянку все свое? Простите, но может вы из числа разработчиков?
+
5522. Igor Igorevich 07.12.16 15:16 Сейчас в теме
(5521) На этом форуме 99% - это разработчики, у бухгалтеров свои форумы.
+
5523. Slypower 2 07.12.16 15:20 Сейчас в теме
(5522) я про разработчиков портала))))
+
5525. AlenkaZu 07.12.16 19:57 Сейчас в теме
(5521) по поводу наименования и юр. адреса тети из МНС порекомендовали сделать так, чтобы данные о контрагентах брались из ЕГР (кто-то тут выкладывал же обработку). И да - если прилетело не то - "звоните поставщикам" их ответ был. В любом случае, от бардака в учетных системах никак себя не застрахуешь, человеческий фактор никто не отменял. Еще в мае насчет юр.адреса в МНС отвечали, что это не важно и бывает, что и в ЕГР его нет или он не верный.
+
5524. Xershi 1479 07.12.16 15:25 Сейчас в теме
(5520) вы сообщение перечитайте, они как раз это сделали для совместимости, но их рекомендация: делать тег с нулями "006"!
Потому что так по стандарту!
+
5518. keyn5565` 18 07.12.16 13:33 Сейчас в теме
(5516)
А разве с таким кодом "6" пройдет проверку?
+
5519. Xershi 1479 07.12.16 14:01 Сейчас в теме
(5518) они же написали, туда можно писать любой парожняк. Но фишка в том что на портале они оставили возможность видеть метр когда и "6" и "006". А вот если бы был метр только когда "006" это другой разговор был бы.


(5516) написать код не проблема, просто есть стандарт, а если не по стандарту, то исправьте раз не соблюдаете.
+
5544. osharov_d 09.12.16 09:24 Сейчас в теме
(5519) Стандарт стандартом, но иногда проще у себя исправить. И быстрее и нервы целей будут :) Вообще-то по "стандарту" допускается вообще группировать позиции и в этом случае о единице измерения вообще речи может не идти ...
+
5545. Xershi 1479 09.12.16 09:49 Сейчас в теме
(5544) под словом "стандарт" речь идет о международном классификаторе единиц, а не о портале!
+
5526. user599431_pvv911 07.12.16 23:53 Сейчас в теме
Возникла интересная ситуация, кто сталкивался
Выгружаю из 7.7 на портал

Ошибка при проверке XML: Class not registered, ClassID: {88D96A07-F192-11D4-A65F-0040963251E5} Документ ХХХ не соответствует требуемой схеме xsd

Причем руками он грузится, сверяю потом выгруженное с портала - нет отличий. Только дата транзакции да разрядность (копейки .00, .0000)
Схемы свежие (у других работают такие же), элнват свежий
+
5528. Slypower 2 08.12.16 09:31 Сейчас в теме
(5526) вот и уберите дату транзакции, делайте без нее. И еще, после загрузки на портал, проверьте статус данного ЭСЧФ, он вернет ваш ошибку, что не так в вашем файле
Gluk_1C; +1
5576. user599431_pvv911 12.12.16 22:43 Сейчас в теме
(5528) Я и выгружаю без даты. Это портал так выгружает
Аналогичное работает у многих без проблем
ТП посоветовала попробовать выгрузить батником
+
5529. koiEugene 08.12.16 13:09 Сейчас в теме
свойство «since» класса «StatusInfo» возвращает дату выставления ЭСЧФ.
Можно ли каким либо образом получать дату подписания вх.ЭСЧФ. или попросту дату присвоения статуса "Выставлен.Подписан получателем" - да/нет??
Кто как получает дату подписания??
+
5530. Xershi 1479 08.12.16 13:36 Сейчас в теме
(5529)
Процедура ПроверкаПодписей(EVatService, InvVatXml, ДатаПодписи = Неопределено, ТекстОшибки, Отказ, КоличествоЗагруженныхСОшибками = 0)
	
	Попытка
		
		InvVatNumber = InvVatXml.Document.GetXmlNodeValue("issuance/general/number");
		
		signCount = InvVatXml.GetSignCount;
		
		Если signCount = 0 Тогда
			ТекстОшибки = Нстр("ru='В документе № '") + Строка(InvVatNumber) + Нстр("ru=' не содержится ЭЦП'");
			Отказ = Истина;
			Возврат;
		КонецЕсли;
		
		Для i = 0 По signCount - 1 Цикл
			
			//OID — идентификатор требуемого атрибута подписи
			//2.5.4.3 — общее имя (CommonName);
			//2.5.4.10 — наименование организации (organizationName);
			//2.5.4.11 — подразделение организации (organizationalUnitName);
			//2.5.4.7 — населенный пункт (localityName);
			//2.5.4.8 — область(stateOrProvinceName);
			//2.5.4.9 — улица (streetAddress);
			//2.5.4.4  — фамилия ответственного лица (surname);
			//2.5.4.41 — имя отвественного лица (name).
			//Возможно получение и других атрибутов из сертификата подписавшего
			OID = "2.5.4.3";
			АтрибутПодписиСтрока = InvVatXml.GetSignProperty(i, OID, 0);
			
			res = InvVatXml.VerifySign(i, 0);
			Если res <> 0 Тогда
				ТекстОшибки = ?(ТекстОшибки = "", "", ТекстОшибки + Символы.ПС) + Нстр("ru='В документе № ") +  Строка(InvVatNumber) + Нстр("ru=' ошибка проверки подписи!'");
				КоличествоЗагруженныхСОшибками = КоличествоЗагруженныхСОшибками + 1;
			//	Отказ = Истина;
			//	Возврат;
			//Иначе
			//	ДатаПодписи = InvVatXml.GetSignProperty(i, "SIGNDATE", 0);
			КонецЕсли;
			
			ДатаПодписи = InvVatXml.GetSignProperty(i, "SIGNDATE", 0);
			
		КонецЦикла;
		
	Исключение
		ТекстОшибки = ?(ТекстОшибки = "", "", Символы.Пс) + Нстр("ru='В документе № '") + Строка(InvVatNumber) + Нстр("ru=' ошибка проверки ЭЦП'");
		Отказ = Истина;		
	КонецПопытки;	
	
КонецПроцедуры	
Показать
jeniks; +1
5531. koiEugene 08.12.16 13:56 Сейчас в теме
(5530) Спасибо!
но поясните - это мы получим все подписи на документе, или только нашу?
+
5532. Xershi 1479 08.12.16 14:04 Сейчас в теме
(5531) не разбирался. Эта процедура нужна, чтобы получить 3 реквизит в ЭСЧФ.
+
5533. Igor Igorevich 08.12.16 15:15 Сейчас в теме
(5531) Цикл выдает все подписи, имеющиеся в документе.

Это описано в документации по классу AvEDoc (Клиентское ПО ЭСЧФ НДС.Руководство программиста.docx).
+
5534. koiEugene 08.12.16 15:34 Сейчас в теме
(5533) вот только написал обработку чтобы выдавало кол-во подписей и дату подписи.
в итоге, выдаёт только что есть 1 подпись от такой-то даты(это соответствует дате подписания и выставления). Хотя на портале дата подписи(с нашей стороны - получателя) имеется(если глядеть монитор сделок). и вот как быть?
+
5535. Igor Igorevich 08.12.16 15:43 Сейчас в теме
(5534) Если речь идет про входящие, то после подписания получателем, ЭСЧФ надо еще раз скачать с портала, а не смотреть скачанную с одной подписью.

Скачал с портала вручную и переделанной процедурой из поста (5530) показало две подписи с их датой подписания. Все работает.
+
5536. koiEugene 08.12.16 15:48 Сейчас в теме
(5535) так мы ведь обращаемся к эсчф по номеру: InvVatXml = EVatService.GetEDoc(НомерЭСЧФ) и уже с ней работаем: signCount = InvVatXml.GetSignCount;... и никак не взаимодействуем с теми файлами что скачали до этого.
или всё не так? может я не понимаю чего-то, расскажите
+
5537. koiEugene 08.12.16 15:56 Сейчас в теме
(5535)
Скачал с портала вручную и переделанной процедурой из поста (5530) показало две подписи с их датой подписания. Все работает.


вы с портала качаете файл с расшерением sng. а потом загружаете из файла:
InvVatXml = EVatService.CreateEDoc;
InvVatXml.Document.LoadFromFile(ИмяФайла*.sng.xml)

и уже тогда проверяете подписи?
+
5538. Igor Igorevich 08.12.16 16:49 Сейчас в теме
(5537)
вы с портала качаете файл с расшерением sng. а потом загружаете из файла:


Еще раз проверил и оказалось не все так просто. Разбираюсь...
+
5539. Igor Igorevich 08.12.16 17:10 Сейчас в теме
(5531) Со входящими провел эксперимент заново. Скачал через GetEDoc ЭСЧФ подписанную с двух сторон и сохранил на диске. И там оказалась только одна подпись - того кто выставлял. А нашей подписи не было.

Скачал вручную xml c ЭЦП, там было уже две подписи, но формат был не совместимый с GetEDoc. Поэтому когда я в предыдущем эксперименте загружал этот файл, то переход был на пустое исключение, а затем функция ПроверкаПодписей выдавала дату, которую поставил в заглушку, а как я еще функцией возвращал эту дату, то дат оказалось две, одинаковые и не имеющие ни какого отношения к подписи документа.

ВЫВОД: На сегодняшний день не возможно через EVatService получить данные по второй подписи (подписи получателя) для входящих ЭСЧФ, а только данные подписи отправителя. Считаю, что это неправильно: организация должна получать всю информацию о выставленных ей ЭСЧФ, даже ту которую вносили ее сотрудники.

Извините, если кого предыдущим постом (5535) ввел в заблуждение.
+
5541. koiEugene 08.12.16 17:33 Сейчас в теме
(5539) а вот что мне ответила ТП: Вы сами подписываете этот документ, у Вас есть документ со второй подписью, дату подписания Вы можете брать либо из этого документа, либо получать дату в момент подписания в Вашей учётной системе.

плюс, я так понял, в примере приложения которое они так любезно предоставляют, алгоритм такой:
берут *.sng.xml -> подписывают его -> потом сохраняют файл с двумя подписями(...InvVatXml.SaveToFile( ** + ".sgn2.xml")
) -> идёт приём квитанций об успехе или нет...

и если понимать ТП, то дату подписания берём из файла "*.sgn2.xml"
+
5547. user594279_it.agroservis6 09.12.16 11:39 Сейчас в теме
(5541) Тоже поинтересовался этим вопросом в службе ТП:
... На портале хранится входящая ЭСЧФ с двумя подписями и чтобы вернуть ее через GetEDoc не составит большого труда.
Тем более что класс EDocument уже готов работать с двумя подписями.
В Клиентское ПО ЭСЧФ НДС.Руководство программиста на странице 8 описан формат e-document как имеющий несколько подписей.
Вот и встает вопрос, почему это тогда не реализовано ?


Ответ ТП:
Данный функционал на текущий момент дорабатывается, в ближайшее время он будет доступен на тестовом портале. После этого перенес на основной.

Молодцы !!! работают на благо пользователям.
+
5599. emakei 14.12.16 09:58 Сейчас в теме
(5531) возможно это будет полезно
////////////////////////////////////////////////////////////­////////////////////
//
// Процедура ПолучитьИнформациюОПодписяхДокумента
//
// Описание:
//  выполняет проверку подписей документа и формирует информацию о них (подписях)
//
// Параметры (название, тип, дифференцированное значение)
//  Документ - Connector.IEDocument - электронный документ для проверки
//  КоличествоПодписей - Число - количество подписей переданного документа
//  КоличествоВерныхПодписей - Число - количество верных подписей документа
//  ТекстОшибкиПроверкиПодписей - Строка - строка, в которую будут добавлены данные о подписях(-и) (если неопределено, то заполнен не будет)
//  Ошибки - Массив, Строка - информация об ошибках
//  ДатаПоследнейПодписи - Дата - дата последней подписи в файле
//
Процедура ПолучитьИнформациюОПодписяхДокумента( Документ, КоличествоПодписей, КоличествоВерныхПодписей, ТекстОшибкиПроверкиПодписей = Неопределено, Ошибки = Неопределено, ДатаПоследнейПодписи = Неопределено ) Экспорт

	Перем ДатаПодписания;
	
	#Если Сервер И Не ТолстыйКлиентОбычноеПриложение Тогда
		EInvVatService = ЭСЧФсерверПовтИсп.ПолучитьКомпонентыДоступаКПорталуЭСФЧ();
		Если EInvVatService = Неопределено Тогда
			Если Ошибки <> Неопределено Тогда
				ОтразитьОшибку(Ошибки, "Не удалось получить компоненту")
			КонецЕсли;
			Возврат
		КонецЕсли;
	#КонецЕсли
	
	КоличествоПодписей = Документ.GetSignCount;
	КоличествоВерныхПодписей = 0;
	
	Для й=0 По КоличествоПодписей-1 Цикл
		
		ПодписьВерна = ( Документ.VerifySign(й, 0) = 0 );
		Если ПодписьВерна Тогда
			КоличествоВерныхПодписей = КоличествоВерныхПодписей + 1;
		КонецЕсли;
		
		ДатаПодписания = Документ.GetSignProperty(й, "SIGNDATE", 0);
		
		Если ТекстОшибкиПроверкиПодписей = Неопределено Тогда
			Продолжить;
		КонецЕсли;
		
		ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "<<<<<<<<<<< SIGNATURE >>>>>>>>>>>" + Символы.ПС + Символы.ПС + "SIGNDATE - Дата подписания" + Символы.ПС + ДатаПодписания + Символы.ПС;
		ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "VerifySign - Подпись верна" + Символы.ПС + ПодписьВерна + Символы.ПС;
		Если Не ПодписьВерна Тогда
			ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "LastError - Текст ошибки" + Символы.ПС + EInvVatService.LastError + Символы.ПС;
		Иначе
			ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "LastError - Текст ошибки" + Символы.ПС + "" + Символы.ПС;
		КонецЕсли;
		Владелец = Документ.GetSignProperty(й, "2.5.4.10", 0);
		ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "2.5.4.10 - Наименование организации владельца открытого ключа" + Символы.ПС + Владелец + Символы.ПС;
		УНПорг = Документ.GetSignProperty(й, "1.2.112.1.2.1.1.1.1.2", 0);
		ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "1.2.112.1.2.1.1.1.1.2 - УНП организации" + Символы.ПС + Владелец + Символы.ПС;
		УНПорг1 = Документ.GetSignProperty(й, "1.3.6.1.4.1.12656.106.101", 0);
		ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "1.3.6.1.4.1.12656.106.101 - УНП организации" + Символы.ПС + УНПорг1 + Символы.ПС;
		УНП = Документ.GetSignProperty(й, "1.3.6.1.4.1.12656.106.104", 0);
		ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "1.3.6.1.4.1.12656.106.104 - УНП организации" + Символы.ПС + УНП + Символы.ПС;
		ОбщиеДанные = Документ.GetSignProperty(й, "2.5.4.3", 0);
		ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "2.5.4.3 - Общие данные" + Символы.ПС + ОбщиеДанные + Символы.ПС;
		Фамилия = Документ.GetSignProperty(й, "2.5.4.4", 0);
		ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "2.5.4.4 - Фамилия" + Символы.ПС + Фамилия + Символы.ПС;
		ИмяОтчество = Документ.GetSignProperty(й, "2.5.4.41", 0);
		ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "2.5.4.41 - Имя, Отчество" + Символы.ПС + ИмяОтчество + Символы.ПС;
		ДатаРождения = Документ.GetSignProperty(й, "1.3.6.1.5.5.7.9.1", 0);
		ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "1.3.6.1.5.5.7.9.1 - Дата рождения" + Символы.ПС + ДатаРождения + Символы.ПС;
		Страна = Документ.GetSignProperty(й, "2.5.4.6", 0);
		ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "2.5.4.6 - Страна" + Символы.ПС + Страна + Символы.ПС;
		Область = Документ.GetSignProperty(й, "2.5.4.8", 0);
		ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "2.5.4.8 - Область" + Символы.ПС + Область + Символы.ПС;
		НаселенныйПункт = Документ.GetSignProperty(й, "2.5.4.7", 0);
		ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "2.5.4.7 - Населенный пункт" + Символы.ПС + НаселенныйПункт + Символы.ПС;
		Адрес = Документ.GetSignProperty(й, "2.5.4.9", 0);
		ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "2.5.4.9 - Адрес" + Символы.ПС + Адрес + Символы.ПС;
		АдресЭлектроннойПочты = Документ.GetSignProperty(й, "1.2.840.113549.1.9.1", 0);
		ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "1.2.840.113549.1.9.1 - Адрес электронной почты" + Символы.ПС + АдресЭлектроннойПочты + Символы.ПС;
		МестоРаботыИДолжность = Документ.GetSignProperty(й, "1.3.6.1.4.1.12656.5.1", 0);
		ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "1.3.6.1.4.1.12656.5.1 - Место работы и должность" + Символы.ПС + МестоРаботыИДолжность + Символы.ПС;
		Подразделение = Документ.GetSignProperty(й, "2.5.4.11", 0);
		ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "2.5.4.11 - Подразделение" + Символы.ПС + Подразделение + Символы.ПС;
		Должность = Документ.GetSignProperty(й, "2.5.4.12", 0);
		ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "2.5.4.12 - Должность" + Символы.ПС + Должность + Символы.ПС;
		ДанныеДокументаУдостоверяющегоЛичность = Документ.GetSignProperty(й, "1.3.6.1.4.1.12656.5.3", 0);
		ТекстОшибкиПроверкиПодписей = ТекстОшибкиПроверкиПодписей + Символы.ПС + "1.3.6.1.4.1.12656.5.3 - Данные из документа, удостоверяющего личность" + Символы.ПС + ДанныеДокументаУдостоверяющегоЛичность + Символы.ПС;
		
	КонецЦикла;
	
	Если ДатаПоследнейПодписи <> Неопределено Тогда
		ДатаПоследнейПодписи = кДата(ДатаПодписания);
	КонецЕсли;

КонецПроцедуры //ПолучитьИнформациюОПодписяхДокумента

////////////////////////////////////////////////////////////­////////////////////
//
// Функция кДата
//
// Описание:
//	конструктор типа "Дата" по строке
//
//
// Параметры (название, тип, дифференцированное значение)
//	Значение - Строка - строка, которую необходимо привести к типу "Дата"
//
// Возвращаемое значение:
//
Функция кДата(Значение)

	лЗначение = СокрЛП(Значение);
	СтрДлина = СтрДлина(лЗначение);
	
	Если СтрДлина = 10 Тогда
		Возврат Дата(Лев(лЗначение, 4), Сред(лЗначение, 6, 2), Прав(лЗначение, 2))
	ИначеЕсли СтрДлина > 10 Тогда
		Дата = Лев(лЗначение, 10);
		Год = Число(Лев(Дата, 4));
		Месяц = Число(Сред(Дата, 6, 2));
		День = Число(Прав(Дата, 2));
		Время = Сред(лЗначение, 12, 8);
		Часы = Число(Лев(Время, 2));
		Минуты = Число(Сред(Время, 4, 2));
		Секунды = Число(Прав(Время, 2));
		ЧасовойПояс = Прав(лЗначение, 5);
		Если СтрДлина > 19 Тогда
			Возврат УниверсальноеВремя(Дата(Год, Месяц, День, Часы, Минуты, Секунды), ЧасовойПояс);
		Иначе
			Возврат Дата(Год, Месяц, День, Часы, Минуты, Секунды);
		КонецЕсли;
	Иначе
		Возврат Дата(1, 1, 1)
	КонецЕсли;

КонецФункции //кДата

Показать

keyn5565`; +1
5540. Xershi 1479 08.12.16 17:28 Сейчас в теме
Поправил 53 правило, не верно условие в конце написал:
//Правило-53
//	Если в ЭСЧФ указан любой статус поставщика, кроме "Иностранная организация", 
//	и для товарной строки указана ставка НДС "Без НДС", то для этой строки в графе 12 
//	должен быть указан один из признаков: «Вычет в полном объеме»,
//	«Освобождение от НДС» или «Реализация за пределами РБ».
//Правило-53.1 
//	Если в ЭСЧФ указан статус поставщика "Иностранная организация" и для товарной
//	строки указана ставка НДС "Без НДС", то для этой строки в графе 12 должен быть указан
//	признак «Освобождение от НДС».
//
Процедура ПроверкаЗаполненияПолейПравило53(СтруктураДанных, Документ, ТекстОшибки, Отказ);

	Если Отказ Тогда		
		Возврат;    		
	КонецЕсли; 
	
	//53.1 Иностранная организация
	Если СтруктураДанных.СтатусПоставщика = "FOREIGN_ORGANIZATION" Тогда 
		
		Для Каждого Строка Из СтруктураДанных.ТаблицаДанных Цикл
			
			//Без НДС и Освобождение от НДС
			Если Строка.ТипСтавки = "NO_VAT" И Строка.ДополнительныеДанные <> "VAT_EXEMPTION" Тогда 
				
				ТекстОшибки = "В графе 12 должен быть указан признак «Освобождение от НДС»!";
				Отказ = Истина;
				Прервать;
				
			КонецЕсли;
			
		КонецЦикла; 
		
	Иначе
		
		Для Каждого Строка Из СтруктураДанных.ТаблицаДанных Цикл
			
			//Без НДС и не Вычет в полном объеме или Освобождение от НДС или Реализация за пределами РБ
			Если Строка.ТипСтавки = "NO_VAT" И Не (Строка.ДополнительныеДанные = "DEDUCTION_IN_FULL" ИЛИ
				Строка.ДополнительныеДанные = "VAT_EXEMPTION" ИЛИ Строка.ДополнительныеДанные = "OUTSIDE_RB") Тогда 
				
				ТекстОшибки = "В графе 12 должен быть указан один из признаков: «Вычет в полном объеме», «Освобождение от НДС» или «Реализация за пределами РБ»!";
				Отказ = Истина;
				Прервать;
				
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЕсли;

КонецПроцедуры
Показать
+
5542. koiEugene 08.12.16 18:10 Сейчас в теме
Всё ребята, амнистия). Ответ ТП: Сейчас идут обновления, связанные как раз со статусами, и метод Since будет отдавать дату установки статуса "выставлен" для отправленного, или дату установки статуса "подписан получателем" после работы со входящими.

P.S. Как получать дату подписи из "*.sgn2.xml" так и не вышло.
+
5543. Xershi 1479 09.12.16 08:57 Сейчас в теме
(5542) вы ведете учет этих дат? Или какая цель получения этого реквизита?
+
5546. osharov_d 09.12.16 09:59 Сейчас в теме
(5542) Опять как всегда что-то поменяют и скажут по факту. А то что у кого-то на предыдущую схему логика работы ПО была заточена - не их проблемы ) Хоть бы как-то в новостях будущие изменения анонсировали за пару-тройку дней ...
+
5548. daraiznau 09.12.16 12:03 Сейчас в теме
Пожалуйста подскажите, как получить дату входящего ЭСЧФ, если в xml не задано поле dateIssuance. Это нужно, чтобы заполнить поля при перевыставляемого ЭСЧФ
+
5549. osharov_d 09.12.16 12:25 Сейчас в теме
(5548) Сейчас - при запросе статуса в поле Since. Но тут в (5542) изменения анонсировали вроде как.
daraiznau; +1
5550. Xershi 1479 09.12.16 13:25 Сейчас в теме
(5548) уже который раз говорили: (5530)
Наверное пора это в шапку закинуть!
+
5551. Slypower 2 09.12.16 13:31 Сейчас в теме
(5550) шапка не поможет тем, кто не умеет пользоваться литературой, которую предоставили разработчики
+
5552. Xershi 1479 09.12.16 13:45 Сейчас в теме
(5551) мне бы тогда не надо было бы копировать пост))
+
5556. daraiznau 10.12.16 13:58 Сейчас в теме
(5550) Дата подписи Счета фактуры и дата самого счета фактуры это разные даты, Дата выставления ЭСЧФ скорее всего равна Дате счета фактуры. И то может быть вариант, когда в самом файле xml заполнено поле dateIssuance например 2016-12-08, так как в учетной системе выставляющего ЭСЧФ этот счет сформировался восьмого числа, а по каким то причинам связь с порталом была девятого числа и соответственно дата выставления ЭСЧФ будет 2016-12-09, потому что портал сам ставит дату выставления по факту.
Вышла из положения свойством Since, при проверке статусов InvVatStatus.Since заполняю Дату ЭСЧФ, если она не заполнена. А (5530) это не мой случай, так как там говорится про Дату подписи ЭСЧФ.
+
5553. AlenkaZu 09.12.16 20:24 Сейчас в теме
Кто-нибудь уже обращался в ТП с вопросом, как подписать ЭСЧФ, если истек срок сертификата поставщика? Не дает подписать((
+
5555. koiEugene 09.12.16 21:07 Сейчас в теме
(5553) было такое, сказали ничем не можем помочь, подписывайте руками на портале. Вот такой последовал ответ.
+
5554. user589919_digitta 09.12.16 20:47 Сейчас в теме
Добрый день.
Сталкивался ли кто-нибудь с такой проблемой. Получаю ЭСЧФ с портала, сохраняю его

ИмяФайла_xml=КаталогИБ()+"in\xml\"+СокрЛП(InvVatNumber)+".xml";
res=InvVatXml.document.SaveToFile(ИмяФайла_xml);

ЭСЧФ сохраняется, но перед номером ставит 58 пробелов (почему не 60 или 57?). Открыть и пропарсить файл невозможно - 1с крошытся. Переименовать файл даже вручную нельзя, пишет "имена исходного и конечного файла совпадают". Однако, если я перемещу этот файл в другую папку - пробелы сами исчезают, файл нормально открывается и парсится. Кто-нибудь наведет на мысль?
+
5557. Xershi 1479 12.12.16 09:56 Сейчас в теме
Возник вопрос, как отслеживать накладные/акты, в которых ставка НДС = "Без НДС".

Кто какие ухищрения использует?
+
5560. keyn5565` 18 12.12.16 11:49 Сейчас в теме
(5557)
Возник вопрос, как отслеживать накладные/акты, в которых ставка НДС = "Без НДС".

В смысле как отслеживать?
Если ты про, визуальное отслеживание то просто выделяй строки где сумма НДС документа равна нулю.
Или ты про те накладные где вместе с товаром со ставками НДС 10,20 и т.д есть позиции со ставкой Без НДС?
+
5558. Xershi 1479 12.12.16 10:06 Сейчас в теме
Кто делал справочник ОКЭД и полностью его заполнял с нуля?
+
5559. keyn5565` 18 12.12.16 10:45 Сейчас в теме
5562. Xershi 1479 12.12.16 13:03 Сейчас в теме
5563. keyn5565` 18 12.12.16 13:14 Сейчас в теме
(5562)
Написал обработку, взял файл с портала с кодами, загрузил в созданный на кануне справочник...
+
5564. koiEugene 12.12.16 13:18 Сейчас в теме
(5563)
(5562)
Написал обработку, взял файл с портала с кодами, загрузил в созданный на кануне справочник...


Я кста тоже обработкой заполнял
+
5565. keyn5565` 18 12.12.16 13:29 Сейчас в теме
(5562) Пример кода:
Попытка		
		//Загрузка Microsoft Excel
		Состояние("Загрузка Microsoft Excel...");
		ExcelПриложение = Новый COMОбъект("Excel.Application");		
	Исключение		
		Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
		ExcelПриложение.Quit();
		Возврат;	
	КонецПопытки;
	
	Попытка
		
		///Открытие файла Microsoft Excel
		Состояние("Открытие файла Microsoft Excel...");
		ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяФайла);
		
		Состояние("Обработка файла Microsoft Excel...");
		ExcelЛист = ExcelФайл.Sheets(1);
		xlCellTypeLastCell = 11;
		ExcelПоследняяСтрока = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Row;
		ExcelПоследняяКолонка = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Column;
		Строка=1;
		Для Строка=Строка По ExcelПоследняяСтрока Цикл
			Объект = справочники.ОКЭД.СоздатьЭлемент();
                Объект.Код = ExcelЛист.Cells(Строка,"A").Value;
                Объект.Наименование= ExcelЛист.Cells(Строка,"B").Value;
                Объект.Записать();
		КонецЦикла;
		ExcelПриложение.Quit();
	исключение;
Показать
Прикрепленные файлы:
ОКЭД.xls
Excel.epf
Xershi; +1
5601. emakei 14.12.16 10:02 Сейчас в теме
(5565) у меня в публикации есть файл для загрузки с помощью универсального обмена XML. Там все коды ОКЭД с портала, а так же ТН ВЭД, и, если нужно (и есть такие справочники), данные по видам документов, а так же бланкам печатной продукции
+
5561. koiEugene 12.12.16 12:10 Сейчас в теме
Добрый день. Хочу прояснить ряд вопросов:
Ситуация 1: на портале есть 5 вх.ЭСЧФ(не подписанные). Значит получаю список, загружаю - 3 в 1с есть, остальные даже файлы не скачались. причем ошибок не выдавало.
как такую ситуацию пояснить, может кто сталкивался?

2: У одного клиента есть проблема с получением ГетЛист - получаем гетЛист на 1-е ..3..4... всё гуд всё грузит, допутим, пару дней не грузили ставим сново 1-е(ну мало ли что-то не пришло) или 4-е(с даты последней загрузки) - и всё на *.GetList(Дата) 1с-ка вылетает. а если задать дату числом 7-8 то дальше все работает. а за 4-8 так ничего и не можем получить.
что за?
+
5566. Xershi 1479 12.12.16 14:06 Сейчас в теме
Опять к нашим баранам:
Сегодня сам обнаружил, что мы не можем выставить правильно код!
Вместо строки «006» выходит число «6».
Потому что в схеме жестко прописано число:
xs:element name="units" type="xs:integer" minOccurs="0"
Также другие элементы тоже проблемные:
xs:element name="code_oced" type="xs:integer" minOccurs="0"
xs:element name="countryCode" type="xs:integer" minOccurs="0"

Ответили:
Изменений в схеме пока не планируется. Данный вопрос будем рассматривать.
Можете использовать код 6 без нулей.

+
5567. keyn5565` 18 12.12.16 14:17 Сейчас в теме
(5566)

Такая хрень была с ОКЭД, ранее я об этом писал, потом исправили но только на стороне портала, для того что бы формировало корректно номер 006 нужно напрямую в схемах поменять тип переменной с "integer" на "string"
<xs:element name="code_oced" type="xs:string" minOccurs="0"/>

Может появится проблема только на стороне портала с кодом "006", если они там не уберут преобразование к типу число то этот код все равно примет вид "6"
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот