Хотел сначала выложить как 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";
КонецЕсли;
Итоги.ДобавитьЗначение(ИтогСумма, "ИтогСумма");
Итоги.ДобавитьЗначение(Итог("СуммаНДС") , "ИтогСуммаНДС");
Итоги.ДобавитьЗначение(Итог("Сумма") , "ИтогВсегоСНДС");
Итоги.ДобавитьЗначение(Итог("СуммаНП") , "ИтогСуммаНП");
Возврат "";
КонецФункции // ПодготовитьМнЧ()
Ну вот собственно и все. Но есть еще форма УПД, УКД и коррректировочного счета-фактуры
.