Как в торговле 7.7 печатать код ТНВЭД в счет-фактуре

15.11.17

Задачи пользователя - Адаптация типовых решений

В данной статье хотел поделиться опытом, как в Торговле 7.7 ( релиз 994) сделать возможность выводить код ТНВЭД в печатную форму счета-фактуры. Сразу скажу, что нужно это только тем, кто осуществляет экспорт в страны таможенного союза. Остальные могут не волноваться.

Хотел сначала выложить как md-файл, но выкладывать придется весь доработанный файл, что не есть гуд. Поэтому просто опишу что нужно сделать и как.

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

 
 В КНИГУ ДОБАВИЛИ ДВЕ НОВЫЕ ГРАФЫ

 

В КНИГУ ДОБАВИЛИ ДВЕ НОВЫЕ ГРАФЫ

Книга продаж с 1 октября 2017 года дополнена двумя новыми графами:

  • графа «3а» – «Регистрационный номер таможенной декларации». Она нужна резидентам особой экономической зоны Калининградской области, чтобы указывать в новой графе номер таможенной декларации, оформленной при выпуске товаров;
  • графа «3б» – «Код вида товара». Эта графа для организаций, которые экспортируют товары в страны ЕАЭС. Коды нужно заполнять в соответствии с единой Товарной номенклатурой внешнеэкономической деятельности Евразийского экономического союза.

Вместе с этим стоит сказать, что даже если эти графы вам не нужны (вы никак не связаны с особой экономической зоной и ввозите товары в ЕАЭС), то с 1 октября 2017 года, все равно, нужно формировать книгу продаж на новом бланке.

 

Начнем с того, где будем хранить код ТНВЭД, который выкладываем. Как и в типовой бухгалтерии Код ТНВЭД будет хранить в реквизите справочника Номенклатура. 

Начнем со справочника Классификатор ТНВЭД

Реквизиты ПолнНаименование (строка 150),ДатаНачалаПозиции (Дата),ДатаОкончанияПозиции (Дата) не являются обязательными, но удобны для загрузки классификатора с помощью обработки //infostart.ru/public/683277/

В справочнике "Номенклатура" добавим реквизит "ТНВЭД"


 

Ну и теперь пора переходить к редактированию документа "Счет-фактура выданный". Все дело в том, что в счет-фактуре выданном нет доступа к отгруженной номенклатуре. Он теряется в момент ввода счет-фактуры на основании реализация. Объясню подробнее. В табличной части счета-фактуры выданного нет реквизита Номенклатура, а вместо него есть строковый реквизит наименование. Именно содержимое этого реквизита выводится в колонку 1 (Наименование товара) счета-фактуры. 

как можно уже увидеть на картинки. Выход из положения следующий. Добавить реквизит КОДТНВЭД (строка 10).

И процедуре печати строки

	Если Постановление981 = 1 Тогда
		ТоварКодТНВЭД = "---";
	КонецЕсли;

 

вставить строки

Если Постановление981 = 1 Тогда
	ТоварКодТНВЭД = МнЧ.КодТНВЭД;
КонецЕсли;

 остается только прописать заполнение кода ТНВЭД

для этого нужно поменять процедуры 

 Процедура СоздатьСтруктуру(МнЧ)
	
	МнЧ = СоздатьОбъект("ТаблицаЗначений");
	МнЧ.НоваяКолонка("Цена",);
	МнЧ.НоваяКолонка("Сумма",);
	МнЧ.НоваяКолонка("СтавкаНДС");
	МнЧ.НоваяКолонка("СуммаНДС",);
	МнЧ.НоваяКолонка("СуммаНП",);
	МнЧ.НоваяКолонка("ВсегоСНДС",);
	МнЧ.НоваяКолонка("Номенклатура");
	МнЧ.НоваяКолонка("СтранаН");
	МнЧ.НоваяКолонка("СтранаК");
	МнЧ.НоваяКолонка("НомерГТД");
	МнЧ.НоваяКолонка("Единица"); 
	МнЧ.НоваяКолонка("ЕдиницаКод");
	МнЧ.НоваяКолонка("Количество");
	МнЧ.НоваяКолонка("АкцизЦена"); 
//добавим нашу колонку
	МнЧ.НоваяКолонка("КодТНВЭД");
	
КонецПроцедуры // СоздатьСтруктуру()
//******************************************************************************
// ПодготовитьТаблицуДокумента(ИсхТабл)
//
// Параметры:
//  Табл - подготовленная таблица
//
// Возвращаемое значение:
//  "пустую строку" - если таблица подготовлена, или строку с описанием ошибки.
//
// Описание:
//  формирует таблицу значений из табличной части документа основания
//
Функция ПодготовитьМнЧосн(МнЧ, Итоги, ФорматКоличества, РегистрУчета)
	
	Перем ТаблицаГТД;
	Перем РегПартии;
	
	ТаблицаГТД = СоздатьОбъект("ТаблицаЗначений");
	ТаблицаГТД.НоваяКолонка("Номенклатура");
	ТаблицаГТД.НоваяКолонка("СтранаПроисхождения");
	ТаблицаГТД.НоваяКолонка("ГТД");
	ТаблицаГТД.НоваяКолонка("Количество");  //в базовых единицах
	
	КолвоГТДТов = СоздатьОбъект("СписокЗначений");
	
	// Переберем все партии, которые были списаны документом - основанием. 
	// Если в партии были выбраны страна и ГТД, их следует перенести в СФ
	РегПартии = СоздатьОбъект("Регистр." + РегистрУчета);		
	РегПартии.ВыбратьДвиженияДокумента(ДокОснование);
	
	Пока РегПартии.ПолучитьДвижение() = 1 Цикл
		
		Если (РегПартии.Расход = 1) 
		и    (РегПартии.Партия.Выбран()=1)
		Тогда
			ВремСтрана 	= РегПартии.Партия.СтранаПроисхождения;
			ВремГТД		= РегПартии.Партия.ГТД;
			
			Если (ПустоеЗначение(ВремСтрана) = 0)
			 или (ПустоеЗначение(ВремГТД   ) = 0)
			Тогда
				ТаблицаГТД.НоваяСтрока();
				ТаблицаГТД.Номенклатура        = РегПартии.Номенклатура;
				ТаблицаГТД.СтранаПроисхождения = ВремСтрана;
				ТаблицаГТД.ГТД                 = ВремГТД;
				ТаблицаГТД.Количество          = РегПартии.Количество;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	СоздатьСтруктуру(МнЧ);
	
	// создадим таблицу документа
	ТаблицаОснования = СоздатьОбъект("ТаблицаЗначений");
	ДокОснование.ВыгрузитьТабличнуюЧасть(ТаблицаОснования);
	
	// теперь у нас есть таблица, в которой собраны строки документа - основания в нужной валюте
	// надо проставить ГТД
	
	ВидОсн = ДокОснование.Вид();
	
	Если ВидОсн = "ВводОстатковПокупателя" Тогда
		ТаблицаОснования.НоваяКолонка("Сумма");
		ТаблицаОснования.НоваяКолонка("Номенклатура");
	Иначе
		Если глЕстьРеквизитМнЧ("СуммаНП", ВидОсн) = 0 Тогда
			ТаблицаОснования.НоваяКолонка("СуммаНП");
			ОснСуммаВклНП = 0;
		Иначе
			ОснСуммаВклНП = ДокОснование.СуммаВклНП;
		КонецЕсли;
			
		Если глЕстьРеквизитМнЧ("СуммаНДС", ВидОсн) = 0 Тогда
			ТаблицаОснования.НоваяКолонка("СуммаНДС");
			ОснСуммаВклНДС = 0;
		Иначе
			ОснСуммаВклНДС = ДокОснование.СуммаВклНДС;
		КонецЕсли;
	КонецЕсли;
	
	Если глЕстьРеквизитШапки("КодОперации", ВидОсн) = 1 Тогда
		БратьСуммыИзУчета = глБратьСуммыИзУчета(ДатаДок, ДокОснование.КодОперации);
	Иначе
		БратьСуммыИзУчета = глБратьСуммыИзУчета(ДатаДок);
	КонецЕсли;
	
	Если БратьСуммыИзУчета = 1 Тогда
		СкорректироватьТаблицуОснования(ТаблицаОснования, ВидОсн);
	КонецЕсли;
	
	
	ИтогСумма    = 0;
	ВывелиСтроку = 0;
	
	РаспредГТД = СоздатьОбъект("ТаблицаЗначений");
	РаспредГТД.НоваяКолонка("Колво", "Число", 14, 3);
	РаспредГТД.НоваяКолонка("Страна");
	РаспредГТД.НоваяКолонка("Номер");
	
	ТаблицаОснования . ВыбратьСтроки();
	Пока ТаблицаОснования.ПолучитьСтроку()=1 Цикл
		
		Если ВидОсн = "ВводОстатковПокупателя" Тогда
			ТаблицаОснования.Сумма = ТаблицаОснования.СуммаРуб - ТаблицаОснования.СуммаНДС - ТаблицаОснования.СуммаНП;
		Иначе
			Если ОснСуммаВклНП = 1 Тогда
				ТаблицаОснования.Сумма = ТаблицаОснования.Сумма - ТаблицаОснования.СуммаНП;
			КонецЕсли;
			
			Если ОснСуммаВклНДС = 1 Тогда
				ТаблицаОснования.Сумма = ТаблицаОснования.Сумма - ТаблицаОснования.СуммаНДС;
			КонецЕсли;
		
		КонецЕсли;
		
		МнЧ.НоваяСтрока();
		
		МнЧ.СтранаН      = " ----- ";
		МнЧ.НомерГТД     = " ----- ";
		МнЧ.АкцизЦена    = " -- ";
		
		
		Если ПустоеЗначение(ТаблицаОснования.Сумма) = 1 Тогда
			МнЧ.Сумма		= " ----- ";
			МнЧ.СтавкаНДС	= " Без НДС ";
			МнЧ.СуммаНДС	= " -- ";
			МнЧ.СуммаНП		= " -- ";
			МнЧ.ВсегоСНДС	= " ----- ";
		Иначе
			МнЧ.Сумма        = глФРМ(ТаблицаОснования.Сумма);
			МнЧ.СтавкаНДС	= ?(ТаблицаОснования.СтавкаНДС = Перечисление.СтавкиНДС.безНДС, " Без НДС ", Строка(ТаблицаОснования.СтавкаНДС));
			МнЧ.СуммаНДС	= ?(ТаблицаОснования.СтавкаНДС = Перечисление.СтавкиНДС.безНДС, " -- ", глФРМ(ТаблицаОснования.СуммаНДС));
			МнЧ.СуммаНП      = глФРМ(ТаблицаОснования.СуммаНП);  
			МнЧ.ВсегоСНДС    = глФРМ(ТаблицаОснования.Сумма + ТаблицаОснования.СуммаНДС);
		КонецЕсли;
		
		Если ВидОсн = "РеализацияПрочее" Тогда
		    МнЧ.Номенклатура = ТаблицаОснования.Содержание;
			ВсегоКол         = 0;
			МнЧ.Количество   = ТаблицаОснования.Количество;
			ТекЕдиница       = "";
			
			МнЧ.Цена         = глФРМ(?(ТаблицаОснования.Количество = 0, 0, ТаблицаОснования.Сумма/ТаблицаОснования.Количество));
		ИначеЕсли ВидОсн = "ВводОстатковПокупателя" Тогда
			МнЧ.Номенклатура = ТаблицаОснования.ВидДолга;
			МнЧ.Количество   = 0;
			ТекЕдиница       = "";
			
			МнЧ.Цена         = "";
		Иначе
			МнЧ.Номенклатура = ТаблицаОснования.Номенклатура.ПолнНаименование + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(ТаблицаОснования.Номенклатура.Артикул), "");        
			//вытащим наш код ТНВЭД из реализации
			МнЧ.КодТНВЭД     = ТаблицаОснования.Номенклатура.ТНВЭД;
			МнЧ.Количество   = ТаблицаОснования.Количество;
			ТекЕдиница       = ТаблицаОснования.Единица;
			ВсегоКол 	     = ТаблицаОснования.Количество;

			МнЧ.Цена         = глФРМ(?(ТаблицаОснования.Количество = 0, 0, ТаблицаОснования.Сумма/ТаблицаОснования.Количество));
		КонецЕсли;
		
		МнЧ.Единица      = ТекЕдиница;
		
		Если (МнЧ.Количество - Цел(МнЧ.Количество)) > 0 Тогда
		    ФорматКоличества = "Ч14.3";
		КонецЕсли;
		
		Если СФНаАванс = 1 Тогда
   			МнЧ.Цена		= " ----- ";
			МнЧ.Сумма		= " ----- ";
			МнЧ.Количество  = " ----- ";
			МнЧ.Единица     = " ----- ";   
			ФорматКоличества= "С7";
			Продолжить;
		КонецЕсли; 
		
		РаспредГТД.УдалитьСтроки();
		
		НомСтр		= 0;
		ОстКолво	= ВсегоКол;
		
		Если (ВидОсн <> "РеализацияПрочее")
		   и (ВидОсн <> "ВводОстатковПокупателя")
		Тогда
			
			ТекКоэфф	= ТаблицаОснования.Коэффициент;
			ОстКолво	= ОстКолво * ТекКоэфф;

			Пока (ОстКолво > 0) 
			и    (ТаблицаГТД.НайтиЗначение(ТаблицаОснования.Номенклатура, НомСтр, "Номенклатура") <> 0)
			Цикл
				
				ТаблицаГТД.ПолучитьСтрокуПоНомеру(НомСтр);
				
				СписКолво	= Мин(ОстКолво, ТаблицаГТД.Количество);
				
				РаспредГТД.НоваяСтрока();
				РаспредГТД.Колво  = ?(ТекКоэфф = 0, СписКолво, СписКолво / ТекКоэфф);
				РаспредГТД.Номер  = ТаблицаГТД.ГТД;
				РаспредГТД.Страна = ТаблицаГТД.СтранаПроисхождения;
				
				ТаблицаГТД.Количество = ТаблицаГТД.Количество - СписКолво;
				Если ТаблицаГТД.Количество <= 0 Тогда
					// если по ГТД все списали, то удаляем строку
					ТаблицаГТД.УдалитьСтроку();
				КонецЕсли;
				
				ОстКолво = ОстКолво - СписКолво;
				НомСтр   = 0;
			КонецЦикла;
			
			Если (ОстКолво > 0)
			   и (ОстКолво < (ВсегоКол * ТекКоэфф))
			Тогда
				// только часть товара распределилась по ГТД
				РаспредГТД.НоваяСтрока();
				РаспредГТД.Колво  = ?(ТекКоэфф <> 0, ОстКолво / ТекКоэфф, ОстКолво);
				РаспредГТД.Номер  = " ----- ";
				РаспредГТД.Страна = " ----- ";
			КонецЕсли;
			
			РаспредГТД.Свернуть("Номер, Страна", "Колво");
			
			Если РаспредГТД.КоличествоСтрок() = 1 Тогда
				
				РаспредГТД.ПолучитьСтрокуПоНомеру(1);
				МнЧ.НомерГТД = РаспредГТД.Номер;
				МнЧ.СтранаН  = РаспредГТД.Страна;
			Иначе
				
				РаспредГТД.ВыбратьСтроки();
				Пока РаспредГТД.ПолучитьСтроку() = 1 Цикл
					
					МнЧ.НоваяСтрока();
					МнЧ.Номенклатура = "     в т.ч.";
					МнЧ.Цена		 = " ----- ";
					МнЧ.Сумма		 = " ----- ";
					МнЧ.СтавкаНДС	 = " -- ";
					МнЧ.СуммаНДС	 = " -- ";
					МнЧ.СуммаНП		 = " -- ";
					МнЧ.ВсегоСНДС	 = " ----- ";
					
					МнЧ.Единица     = ТекЕдиница;
					МнЧ.Количество  = РаспредГТД.Колво;
					МнЧ.НомерГТД    = РаспредГТД.Номер;
					МнЧ.СтранаН     = РаспредГТД.Страна;
					
					Если (МнЧ.Количество - Цел(МнЧ.Количество)) > 0 Тогда
					    ФорматКоличества = "Ч14.3";
					КонецЕсли;
					
				КонецЦикла;
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЦикла;// по строкам таблицы основания
	
	Если ПустоеЗначение(ФорматКоличества) = 1 Тогда
	    ФорматКоличества	= "Ч010.0";
	КонецЕсли;  
	
	Итоги = СоздатьОбъект("СписокЗначений");
		
	Если ТаблицаОснования.КоличествоСтрок() > 0 Тогда
	    Итоги.ДобавитьЗначение(ТаблицаОснования.Итог("Сумма") + ТаблицаОснования.Итог("СуммаНДС"),    "ИтогВсегоСНДС");
	//	Итоги.ДобавитьЗначение(ТаблицаОснования.Итог("Сумма")	, "ИтогСумма");
		Итоги.ДобавитьЗначение(ТаблицаОснования.Итог("СуммаНДС"), "ИтогСуммаНДС");
		Итоги.ДобавитьЗначение(ТаблицаОснования.Итог("СуммаНП")	, "ИтогСуммаНП");
	Иначе
	    Итоги.ДобавитьЗначение(0, "ИтогВсегоСНДС");
	//	Итоги.ДобавитьЗначение(0, "ИтогСумма");
		Итоги.ДобавитьЗначение(0, "ИтогСуммаНДС");
		Итоги.ДобавитьЗначение(0, "ИтогСуммаНП");
	КонецЕсли;	
	
  	Возврат "";
КонецФункции // ПодготовитьМнЧосн()

 

Функция ПодготовитьМнЧосн1137(МнЧ, Итоги, ФорматКоличества)
	
	Перем ТаблицаГТД;
	Перем РегПартии;
	
	ТаблицаГТД = СоздатьОбъект("ТаблицаЗначений");
	ТаблицаГТД.НоваяКолонка("Номенклатура");
	ТаблицаГТД.НоваяКолонка("СтранаПроисхождения");
	ТаблицаГТД.НоваяКолонка("ГТД");
	ТаблицаГТД.НоваяКолонка("Количество");  //в базовых единицах
	
	КолвоГТДТов = СоздатьОбъект("СписокЗначений");
	
	КороткийПрочерк = "-";
	
	// Переберем все партии, которые были списаны документом - основанием. 
	// Если в партии были выбраны страна и ГТД, их следует перенести в СФ
	РегПартии = СоздатьОбъект("Регистр.ПартииНаличие");		
	РегПартии.ВыбратьДвиженияДокумента(ДокОснование);
	
	Пока РегПартии.ПолучитьДвижение() = 1 Цикл
		
		Если (РегПартии.Расход = 1) 
		и    (РегПартии.Партия.Выбран()=1)
		Тогда
			ВремСтрана 	= РегПартии.Партия.СтранаПроисхождения;
			ВремГТД		= РегПартии.Партия.ГТД;
			
			Если (ПустоеЗначение(ВремСтрана) = 0)
			 или (ПустоеЗначение(ВремГТД   ) = 0)
			Тогда
				ТаблицаГТД.НоваяСтрока();
				ТаблицаГТД.Номенклатура        = РегПартии.Номенклатура;
				ТаблицаГТД.СтранаПроисхождения = ВремСтрана;
				ТаблицаГТД.ГТД                 = ВремГТД;
				ТаблицаГТД.Количество          = РегПартии.Количество;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	СоздатьСтруктуру(МнЧ);
	
	// создадим таблицу документа
	ТаблицаОснования = СоздатьОбъект("ТаблицаЗначений");
	ДокОснование.ВыгрузитьТабличнуюЧасть(ТаблицаОснования);
	
	// теперь у нас есть таблица, в которой собраны строки документа - основания в нужной валюте
	// надо проставить ГТД
	
	ВидОсн = ДокОснование.Вид();
	
	Если ВидОсн = "ВводОстатковПокупателя" Тогда
		ТаблицаОснования.НоваяКолонка("Сумма");
		ТаблицаОснования.НоваяКолонка("Номенклатура");
	Иначе
		Если глЕстьРеквизитМнЧ("СуммаНП", ВидОсн) = 0 Тогда
			ТаблицаОснования.НоваяКолонка("СуммаНП");
			ОснСуммаВклНП = 0;
		Иначе
			ОснСуммаВклНП = ДокОснование.СуммаВклНП;
		КонецЕсли;
			
		Если глЕстьРеквизитМнЧ("СуммаНДС", ВидОсн) = 0 Тогда
			ТаблицаОснования.НоваяКолонка("СуммаНДС");
			ОснСуммаВклНДС = 0;
		Иначе
			ОснСуммаВклНДС = ДокОснование.СуммаВклНДС;
		КонецЕсли;
	КонецЕсли;
		
	Если глЕстьРеквизитШапки("КодОперации", ВидОсн) = 1 Тогда
		БратьСуммыИзУчета = глБратьСуммыИзУчета(ДатаДок, ДокОснование.КодОперации);
	Иначе
		БратьСуммыИзУчета = глБратьСуммыИзУчета(ДатаДок);
	КонецЕсли;
	
	Если БратьСуммыИзУчета = 1 Тогда
		СкорректироватьТаблицуОснования(ТаблицаОснования, ВидОсн);
	КонецЕсли;
	
	ИтогСумма    = 0;
	ВывелиСтроку = 0;
	
	РаспредГТД = СоздатьОбъект("ТаблицаЗначений");
	РаспредГТД.НоваяКолонка("Колво");
	РаспредГТД.НоваяКолонка("Страна");
	РаспредГТД.НоваяКолонка("Номер");
	
	ТаблицаОснования . ВыбратьСтроки();
	Пока ТаблицаОснования.ПолучитьСтроку()=1 Цикл
		
		Если ВидОсн = "ВводОстатковПокупателя" Тогда
			ТаблицаОснования.Сумма = ТаблицаОснования.СуммаРуб - ТаблицаОснования.СуммаНДС - ТаблицаОснования.СуммаНП;
		Иначе
			Если ОснСуммаВклНП = 1 Тогда
				ТаблицаОснования.Сумма = ТаблицаОснования.Сумма - ТаблицаОснования.СуммаНП;
			КонецЕсли;
			
			Если ОснСуммаВклНДС = 1 Тогда
				ТаблицаОснования.Сумма = ТаблицаОснования.Сумма - ТаблицаОснования.СуммаНДС;
			КонецЕсли;
		
		КонецЕсли;
		
		МнЧ.НоваяСтрока();
		
		МнЧ.СтранаН      = "";
		МнЧ.СтранаК      = "";
		МнЧ.НомерГТД     = "";
		МнЧ.АкцизЦена    = "без акциза";
		
		Если ПустоеЗначение(ТаблицаОснования.Сумма) = 1 Тогда
			МнЧ.Сумма		= 0;
			МнЧ.СтавкаНДС	= "без НДС";
			МнЧ.СуммаНДС	= 0;
			МнЧ.СуммаНП		= 0;
		Иначе
			МнЧ.Сумма        = ТаблицаОснования.Сумма;
			МнЧ.СтавкаНДС    = ?(ТаблицаОснования.СтавкаНДС = Перечисление.СтавкиНДС.безНДС, "Без НДС", Строка(ТаблицаОснования.СтавкаНДС));
			МнЧ.СуммаНДС     = ?(ТаблицаОснования.СтавкаНДС = Перечисление.СтавкиНДС.безНДС, 0, ТаблицаОснования.СуммаНДС);
			МнЧ.СуммаНП      = глФРМ(ТаблицаОснования.СуммаНП);  
		КонецЕсли;
		
		Если ВидОсн = "РеализацияПрочее" Тогда
		    МнЧ.Номенклатура = ТаблицаОснования.Содержание;
			ВсегоКол         = 0;
			МнЧ.Количество   = ТаблицаОснования.Количество;
			ТекЕдиница       = "-";
			ТекЕдиницаКод    = "-";
			
			Если (ДокОснование.УчитыватьНДС = 1)
			   и (ДокОснование.СуммаВклНДС  = 0) Тогда
				МнЧ.Цена = ТаблицаОснования.Цена; 	
			Иначе
				МнЧ.Цена = ?(ТаблицаОснования.Количество = 0, 0, ТаблицаОснования.Сумма/ТаблицаОснования.Количество);
			КонецЕсли;

		ИначеЕсли ВидОсн = "ВводОстатковПокупателя" Тогда
			МнЧ.Номенклатура = ТаблицаОснования.ВидДолга;
			МнЧ.Количество   = 0;
			ТекЕдиница       = "-";
			ТекЕдиницаКод    = "-";
			МнЧ.Цена         = 0;
		Иначе
			МнЧ.Номенклатура = ТаблицаОснования.Номенклатура.ПолнНаименование + ?(Константа.ПоказыватьАртикул = 1, " " + ТаблицаОснования.Номенклатура.Артикул, ""); 
			МнЧ.КодТНВЭД     = ТаблицаОснования.Номенклатура.ТНВЭД;
			МнЧ.Количество   = ТаблицаОснования.Количество;
			ТекЕдиница       = ТаблицаОснования.Единица;
			ТекЕдиницаКод    = ТаблицаОснования.Единица.ОКЕИ.Код;
			ВсегоКол 	     = ТаблицаОснования.Количество;

			Если (ДокОснование.УчитыватьНДС = 1)
			   и (ДокОснование.СуммаВклНДС  = 0) Тогда
				МнЧ.Цена = ТаблицаОснования.Цена; 	
			Иначе
				МнЧ.Цена = ?(ТаблицаОснования.Количество = 0, 0, ТаблицаОснования.Сумма/ТаблицаОснования.Количество);
			КонецЕсли;
			
			Если ТипЗначенияСтр(ТаблицаОснования.Номенклатура) = "Справочник" Тогда
				Если ТаблицаОснования.Номенклатура.Вид() = "Номенклатура" Тогда
					Если (ТаблицаОснования.Номенклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Услуга)
					или (ТаблицаОснования.Номенклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Работа) Тогда
						МнЧ.ЕдиницаКод = "-"; 
						МнЧ.Единица = "-";
						МнЧ.СтранаК = "-"; 
						МнЧ.СтранаН = "-";
						МнЧ.НомерГТД = "-";
						ТекЕдиница       = "-";
						ТекЕдиницаКод    = "-";
					КонецЕсли;
				КонецЕсли;	
			КонецЕсли;

		КонецЕсли;
		
		МнЧ.Единица      = ТекЕдиница;
		МнЧ.ЕдиницаКод   = ТекЕдиницаКод;
		МнЧ.ВсегоСНДС    = ТаблицаОснования.Сумма + ТаблицаОснования.СуммаНДС;
		
		Если (МнЧ.Количество - Цел(МнЧ.Количество)) > 0 Тогда
		    ФорматКоличества = "Ч10.3";
		КонецЕсли;
		
		НомСтр 	 = 0;
		ОстКолво = ВсегоКол;
		РаспредГТД.УдалитьСтроки();
		
		Если (ВидОсн <> "РеализацияПрочее")
		и (ВидОсн <> "ВводОстатковПокупателя")
		Тогда
			
			Пока (ОстКолво > 0) 
			и    (ТаблицаГТД.НайтиЗначение(ТаблицаОснования.Номенклатура, НомСтр, "Номенклатура") <> 0)
			Цикл
				
				ТаблицаГТД.ПолучитьСтрокуПоНомеру(НомСтр);
				
				РаспредГТД.НоваяСтрока();
				РаспредГТД.Колво  = Мин(ОстКолво, ?(ТаблицаОснования.Коэффициент <> 0, ТаблицаГТД.Количество / ТаблицаОснования.Коэффициент, ТаблицаГТД.Количество));
				
				РаспредГТД.Номер  = ТаблицаГТД.ГТД;
				РаспредГТД.Страна = ТаблицаГТД.СтранаПроисхождения;
				
				ТаблицаГТД.Количество = ТаблицаГТД.Количество - РаспредГТД.Колво * ?(ТаблицаОснования.Коэффициент = 0, 1, ТаблицаОснования.Коэффициент);
				Если ТаблицаГТД.Количество <= 0 Тогда
					// если по ГТД все списали, то удаляем строку
					ТаблицаГТД.УдалитьСтроку();
				КонецЕсли;
				
				ОстКолво = ОстКолво - РаспредГТД.Колво;
				НомСтр   = 0;
			КонецЦикла;
			
			ТекТМЦ = ТаблицаОснования.Номенклатура;
			
			Если (ОстКолво > 0)
			и (ОстКолво < ВсегоКол)
			Тогда
				// только часть товара распределилась по ГТД
				РаспредГТД.НоваяСтрока();
				РаспредГТД.Колво  = ОстКолво;
				РаспредГТД.Номер  = "";
				РаспредГТД.Страна = "";
				// Заполним номер ГТД и Страну из Номенклатуры, если там есть...
				Если ПустоеЗначение(ТекТМЦ.НомерГТД) = 0 Тогда
					РаспредГТД.Номер = СокрЛП(ТекТМЦ.НомерГТД);   
				КонецЕсли;
				
				Если ПустоеЗначение(ТекТМЦ.СтранаПроисхождения) = 0 Тогда
					РаспредГТД.Страна = ТекТМЦ.СтранаПроисхождения;   
				КонецЕсли;
				
			КонецЕсли; 
			
			Если ТипЗначенияСтр(ТаблицаОснования.Номенклатура) = "Справочник" Тогда
				Если ТаблицаОснования.Номенклатура.Вид() = "Номенклатура" Тогда
					Если (ТаблицаОснования.Номенклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Услуга)
					или (ТаблицаОснования.Номенклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Работа) Тогда
						МнЧ.СтранаК = "-"; 
						МнЧ.СтранаН = "-";
						МнЧ.НомерГТД = "-"; 
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;
			
			РаспредГТД.Свернуть("Страна, Номер", "Колво");
			
			КолСтрокГТД = РаспредГТД.КоличествоСтрок();
			
			Если КолСтрокГТД = 0 Тогда
				// нет распределения по ГТД
				// Заполним номер ГТД и Страну из Номенклатуры, если там есть...
				Если ПустоеЗначение(ТекТМЦ.НомерГТД) = 0 Тогда
					МнЧ.НомерГТД = СокрЛП(ТекТМЦ.НомерГТД);   
				КонецЕсли;
				
				Если ПустоеЗначение(ТекТМЦ.СтранаПроисхождения) = 0 Тогда
					МнЧ.СтранаН = СокрЛП(ТекТМЦ.СтранаПроисхождения);
					Если ТипЗначенияСтр(ТекТМЦ.СтранаПроисхождения) = "Справочник" Тогда
						МнЧ.СтранаК = СокрЛП(ТекТМЦ.СтранаПроисхождения.Код);
					Иначе
						МнЧ.СтранаК = "";	
					КонецЕсли;
				КонецЕсли;	
			ИначеЕсли КолСтрокГТД = 1 Тогда
				РаспредГТД.ВыбратьСтроки();
				РаспредГТД.ПолучитьСтроку();
				// одна строка в таблице. Товара с номером ГТД и страной в одной строке
				МнЧ.НомерГТД    = РаспредГТД.Номер;
				МнЧ.СтранаН     = СокрЛП(РаспредГТД.Страна); 
				Если ТипЗначенияСтр(РаспредГТД.Страна) = "Справочник" Тогда
					МнЧ.СтранаК = РаспредГТД.Страна.Код;
				Иначе
					МнЧ.СтранаК = "";
				КонецЕсли;	
				
			Иначе
				
				РаспредГТД.ВыбратьСтроки();
				Пока РаспредГТД.ПолучитьСтроку() = 1 Цикл
					
					ТекСумма	  = МнЧ.Сумма;
					ТекСуммаНДС	  = МнЧ.СуммаНДС;
					ТекВсегоСНДС  = МнЧ.ВсегоСНДС;
					ТекКоличество = МнЧ.Количество;
					
					Если ТекКоличество > 0 Тогда 
						ТекКоэф = РаспредГТД.Колво/ТекКоличество;
					Иначе
						ТекКоэф = 1;
					КонецЕсли;
					
					Если НЕ(РаспредГТД.НомерСтроки = 1) Тогда
				
						Если МнЧ.КоличествоСтрок() = 0 Тогда
							МнЧ.НоваяСтрока();
							МнЧ.Номенклатура = МнЧ.ПолучитьЗначение(1,"Номенклатура");
							МнЧ.Цена		 = МнЧ.ПолучитьЗначение(1,"Цена");
							МнЧ.СтавкаНДС	 = МнЧ.ПолучитьЗначение(1,"СтавкаНДС");
							МнЧ.Единица      = МнЧ.ПолучитьЗначение(1,"Единица");
							МнЧ.ЕдиницаКод   = МнЧ.ПолучитьЗначение(1,"ЕдиницаКод");
							МнЧ.АкцизЦена    = МнЧ.ПолучитьЗначение(1,"АкцизЦена");
						Иначе
							МнЧ.НоваяСтрока();
							МнЧ.Номенклатура = МнЧ.ПолучитьЗначение(МнЧ.КоличествоСтрок()-1,"Номенклатура");
							МнЧ.Цена		 = МнЧ.ПолучитьЗначение(МнЧ.КоличествоСтрок()-1,"Цена");
							МнЧ.СтавкаНДС	 = МнЧ.ПолучитьЗначение(МнЧ.КоличествоСтрок()-1,"СтавкаНДС");
							МнЧ.Единица      = МнЧ.ПолучитьЗначение(МнЧ.КоличествоСтрок()-1,"Единица");
							МнЧ.ЕдиницаКод   = МнЧ.ПолучитьЗначение(МнЧ.КоличествоСтрок()-1,"ЕдиницаКод");
							МнЧ.АкцизЦена    = МнЧ.ПолучитьЗначение(МнЧ.КоличествоСтрок()-1,"АкцизЦена");
						КонецЕсли;		        			
					КонецЕсли;  
					
					МнЧ.Сумма		 = ТекСумма * ТекКоэф;
					МнЧ.СуммаНДС	 = ТекСуммаНДС * ТекКоэф;
					МнЧ.СуммаНП		 = КороткийПрочерк;
					МнЧ.ВсегоСНДС	 = ТекВсегоСНДС * ТекКоэф;
					МнЧ.Количество  = РаспредГТД.Колво;
				
				    МнЧ.НомерГТД    = РаспредГТД.Номер;
					МнЧ.СтранаН     = РаспредГТД.Страна;
					
					Если ТипЗначенияСтр(РаспредГТД.Страна) = "Справочник" Тогда
						МнЧ.СтранаК     = РаспредГТД.Страна.Код;
					Иначе
						МнЧ.СтранаК = "";	
					КонецЕсли;
										
					Если (МнЧ.Количество - Цел(МнЧ.Количество)) > 0 Тогда
					    ФорматКоличества = "Ч14.3";
					КонецЕсли;
									
				КонецЦикла;
			КонецЕсли;
		КонецЕсли;
		
		Если ПустаяСтрока(МнЧ.СтранаК) = 1 Тогда
		   	МнЧ.СтранаК = "-";
		КонецЕсли;
		   
		Если ПустаяСтрока(МнЧ.СтранаН) = 1 Тогда
		   	МнЧ.СтранаН = "-";
		КонецЕсли;   
		   
		Если ПустаяСтрока(МнЧ.НомерГТД) = 1 Тогда
		   	МнЧ.НомерГТД = "-";
		КонецЕсли; 
	
	КонецЦикла;// по строкам таблицы основания
		
	Если ПустоеЗначение(ФорматКоличества) = 1 Тогда
	    ФорматКоличества	= "Ч010.0";
	КонецЕсли;
	
	Итоги = СоздатьОбъект("СписокЗначений");
	
	Если ТаблицаОснования.КоличествоСтрок() > 0 Тогда
	    Итоги.ДобавитьЗначение(ТаблицаОснования.Итог("Сумма") + ТаблицаОснования.Итог("СуммаНДС"),    "ИтогВсегоСНДС");
		Итоги.ДобавитьЗначение(ТаблицаОснования.Итог("Сумма")	, "ИтогСумма");
		Итоги.ДобавитьЗначение(ТаблицаОснования.Итог("СуммаНДС"), "ИтогСуммаНДС");
		Итоги.ДобавитьЗначение(ТаблицаОснования.Итог("СуммаНП")	, "ИтогСуммаНП");
	Иначе
	    Итоги.ДобавитьЗначение(0, "ИтогВсегоСНДС");
		Итоги.ДобавитьЗначение(0, "ИтогСумма");
		Итоги.ДобавитьЗначение(0, "ИтогСуммаНДС");
		Итоги.ДобавитьЗначение(0, "ИтогСуммаНП");
	КонецЕсли;	
	
	
	Возврат "";
КонецФункции // ПодготовитьМнЧосн()
Функция ПодготовитьМнЧ1137(МнЧ, Итоги, ФорматКоличества)
	
	Если (СФНаАванс = 1) И (СчетНаОплату.Выбран() = 1) Тогда
	    Возврат ПодготовитьМнЧПоСчетуНаОплату1137(МнЧ, Итоги, ФорматКоличества); 
	КонецЕсли;
	
	Итоги = СоздатьОбъект("СписокЗначений");
	СоздатьСтруктуру(МнЧ);
	
	ИтогСумма       = 0;
	КороткийПрочерк = "-";
	
	ВыбратьСтроки();
	Пока ПолучитьСтроку() = 1 Цикл
		
		МнЧ.НоваяСтрока();
		
		ВывелиСтроку     = 1;
		МнЧ.Номенклатура = СокрП(Наименование); 
		МнЧ.КодТНВЭД= КодТНВЭД;
		МнЧ.
		МнЧ.Единица      = Единица; 
		Если ПустоеЗначение(МнЧ.Единица) = 0 Тогда
			Если МнЧ.Единица.Вид() = "Единицы" Тогда
				МнЧ.ЕдиницаКод   = Единица.ОКЕИ.Код;
			ИначеЕсли МнЧ.Единица.Вид() = "ОКЕИ" Тогда
				МнЧ.ЕдиницаКод   = Единица.Код;
			Иначе
			Конецесли;	
		Иначе
			МнЧ.ЕдиницаКод = КороткийПрочерк;
			МнЧ.Единица = КороткийПрочерк;
		КонецЕсли; 
		
		Если (МнЧ.Количество = 0) или (СФНаАванс = 1) Тогда
			МнЧ.Количество = 0;
		Иначе
			МнЧ.Количество = Количество;
		Конецесли;	
		МнЧ.АкцизЦена    = "без акциза";
		
		Если (СФНаАванс = 1) Тогда
			
			МнЧ.Цена	  = 0;
			МнЧ.Сумма	  = 0;
			МнЧ.АкцизЦена = КороткийПрочерк;
			МнЧ.СтавкаНДС = ?(СтавкаНДС = Перечисление.СтавкиНДС.безНДС, "без НДС", Строка(СтавкаНДС));
			МнЧ.СуммаНДС  = ?(СтавкаНДС = Перечисление.СтавкиНДС.безНДС, КороткийПрочерк, глФРМ(СуммаНДС,,,""));
			МнЧ.ВсегоСНДС = Сумма;                                                 
			МнЧ.СтранаН	  = КороткийПрочерк;
			МнЧ.СтранаК   = КороткийПрочерк;
			МнЧ.НомерГТД  = КороткийПрочерк;
			
			
		Иначе
					
			Если ПустоеЗначение(Сумма) = 1 Тогда
				МнЧ.Цена		= 0;
				МнЧ.Сумма		= КороткийПрочерк;
				МнЧ.СтавкаНДС	= "без НДС";
				МнЧ.СуммаНДС	= КороткийПрочерк;
				МнЧ.СуммаНП		= КороткийПрочерк;
				МнЧ.ВсегоСНДС	= КороткийПрочерк;
			Иначе
				МнЧ.Сумма		= Сумма - СуммаНДС;
				ИтогСумма		= ИтогСумма + Сумма - СуммаНДС;
				МнЧ.Цена		= ?(Количество = 0, 0, Цена - СуммаНДС / Количество);
				МнЧ.СтавкаНДС	= ?(СтавкаНДС = Перечисление.СтавкиНДС.безНДС, "Без НДС", Строка(СтавкаНДС));
				МнЧ.СуммаНДС	= ?(СтавкаНДС = Перечисление.СтавкиНДС.безНДС, КороткийПрочерк, глФРМ(СуммаНДС,,,""));
				МнЧ.ВсегоСНДС	= Сумма;                                                 
			КонецЕсли;
			
			Если ПустоеЗначение(СтранаПроисхождения)=1 Тогда
				МнЧ.СтранаН		= "-";
				МнЧ.СтранаК     = "-";
				//Если не указал страну, и указал Номер ГТД, то зачем-то это было нужно
				Если ПустаяСтрока(ГТД) = 1 Тогда        
					МнЧ.НомерГТД	= "-";
				Иначе
					МнЧ.НомерГТД	= ГТД;
				КонецЕсли;
			Иначе
				МнЧ.СтранаН	= СтранаПроисхождения;
				МнЧ.СтранаК	= СтранаПроисхождения.Код;
				// Если номер пустой, и указана страна, то позволяем потом вписать номер ГТД 
				// в напечатанном документе руками
				МнЧ.НомерГТД	= ГТД;
			КонецЕсли;
			
		КонецЕсли; 
		
		Если ТипЗначенияСтр(Наименование) = "Справочник" Тогда
			Если Наименование.Вид() = "Номенклатура" Тогда
				Если (Наименование.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Услуга)
				или (Наименование.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Работа) Тогда
					МнЧ.ЕдиницаКод = "-"; 
					МнЧ.Единица = "-";
					МнЧ.СтранаК = "-"; 
					МнЧ.СтранаН = "-";
					МнЧ.НомерГТД = "-"; 
				КонецЕсли;	
			КонецЕсли;
		КонецЕсли;
		
		Если Количество - Цел(Количество) > 0 Тогда
			ФорматКоличества	= "Ч10.3";
		КонецЕсли; 
				
	КонецЦикла;
	
	Если ПустоеЗначение(ФорматКоличества) = 1 Тогда
	    ФорматКоличества	= "Ч10.0";
	КонецЕсли;
	
	Итоги.ДобавитьЗначение(ИтогСумма, "ИтогСумма");
	Итоги.ДобавитьЗначение(Итог("СуммаНДС")	, "ИтогСуммаНДС");
	Итоги.ДобавитьЗначение(Итог("Сумма")		, "ИтогВсегоСНДС");
	Итоги.ДобавитьЗначение(Итог("СуммаНП")	, "ИтогСуммаНП");

	Возврат "";
	
КонецФункции // ПодготовитьМнЧ()

Ну вот собственно и все. Но есть еще форма  УПД, УКД и коррректировочного счета-фактуры

.

Торговля 7.7

См. также

Печатные формы Адаптация типовых решений Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Приятное улучшение обработки "Внешние печатные формы" для типовых конфигураций на базе 1С 7.7 для более комфортной работы с "любимой семерочкой".

1 стартмани

04.02.2022    3346    1    igor7777    0    

3

Адаптация типовых решений Программист Платформа 1С v7.7 Конфигурации 1cv7 Россия Бухгалтерский учет ФОМС, ЕФС Бесплатно (free)

В этой статье описано, какие небольшие изменения можно внести в модуль документа Начисление налогов с ФОТ, чтобы правильно рассчитывались страховые взносы с 1 апреля 2020 г.

09.04.2020    20627    Юджин58    39    

5

Адаптация типовых решений Программист Платформа 1С v7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 Управленческий учет Бесплатно (free)

Описан способ работы с учетом расписания с приоритетными покупателями - торговыми сетями (основными покупателями) в торговой или комплексной учетной системе на 1С 7.7. Множественная заявка покупателя на несколько торговых точек.

14.10.2019    6315    ksnik    14    

3

Зарплата Адаптация типовых решений Программист Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 Россия Бухгалтерский учет Абонемент ($m)

Реализация Постановления Правительства РФ 1316 от 04.12.14 для типовой конфигурации "Бухгалтерский учет 7.7" рел. 7.70.590

1 стартмани

31.12.2014    24049    9    Sergey1CSpb    2    

0

Адаптация типовых решений Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Универсальная обработка "Перенаправление действия" предназначена для организации вызова какой-то другой обработки (выбирается пользователем) из списка справочника через выбор печатной формы и передачи ей текущего контекста. В примере реализовано: Вызов обработки "Универсальная замена значений", которая автоматически заполняется текущим элементом справочника и почти готова к использованию.

1 стартмани

10.10.2014    15610    0    reshenie    5    

0
Оставьте свое сообщение