8.х 1С 8.2 УТ10.3 Как добавить комментарий в печатную форму?

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем Stas2201, 19 дек 2012.

  1. TopicStarter Overlay
    Stas2201
    Offline

    Stas2201

    Регистрация:
    19 дек 2012
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Добрый день!
    1С:Предприятие 8.2 (8.2.16.368)
    Конфигурация: "Управление торговлей", редакция 10.3 (10.3.18.3)
    Вопрос следующий.
    Когда заполняешь заказ покупателя, то в нижней части окна есть строка комментарий, где можно ввести произвольную информацию. Вот очень нужно, что бы этот комментарий выводился в печатной форме "заказ покупателя".
    Как это реализовать?! Очень нужно!!!


    Модуль объекта Заказ покупателя (если нужно!?)


    Перем мУдалятьДвижения;
    Перем мВалютаРегламентированногоУчета Экспорт;
    Перем мПараметрыСвязиСтрокТЧ Экспорт;
    // Хранит текущий договор контрагента
    // используется для восстановления старого договора в случае некорректного выбора нового
    Перем мТекущийДоговорКонтрагента Экспорт;
    // Хранит валюту взаиморасчетов, установленную в текущем договоре взаиморасчетов,
    // используется для определения необходимости пересчетов при изменении договора.
    Перем мТекущаяВалютаВзаиморасчетов Экспорт;
    Перем мРассчитыватьАвтоматическиеСкидки;
    Перем мМинимальныеЦены Экспорт;
    Перем мСписокФильтров Экспорт;
    // Хранит иформацию для веб-приложения
    Перем мСуммаВсего Экспорт;
    Перем мСуммаВсегоНДС Экспорт;
    Перем мУчетнаяПолитика Экспорт;
    Перем мРезервироватьПоСериям Экспорт;
    // Хранит структуру, содержащую параметры для определения договора, доступного в данном документе:
    // список допустимых видов договоров;
    // список допустимых способов ведения взаиморасчетов.
    Перем мСтруктураПараметровДляПолученияДоговора Экспорт;
    ////////////////////////////////////////////////////////////////////////////////
    // ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ ДОКУМЕНТА

    // Функция помещает в структуру все данные, отображаемые при печати документа.
    // Вызывается из функции ПечатьСчетаЗаказа и из веб-приложения
    //
    // Параметры:
    // Тип - строка, содержит тип печатаемого документа (счет или заказ)
    //
    // Возвращаемое значение:
    // Структура
    //
    Функция ПолучитьПараметрыПечатиСчетаЗаказа(Тип) Экспорт
    ПараметрыПечати = Новый Структура;
    Позиции = Новый Массив;
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
    Запрос.Текст ="
    |ВЫБРАТЬ
    | Номер,
    | Дата,
    | ДоговорКонтрагента,
    | Организация,
    | Контрагент КАК Получатель,
    | Организация КАК Руководители,
    | Организация КАК Поставщик,
    | СуммаДокумента,
    | ВалютаДокумента,
    | УчитыватьНДС,
    | СуммаВключаетНДС
    |ИЗ
    | Документ.ЗаказПокупателя КАК ЗаказПокупателя
    |
    |ГДЕ
    | ЗаказПокупателя.Ссылка = &ТекущийДокумент";
    Шапка = Запрос.Выполнить().Выбрать();
    Шапка.Следующий();
    СтрокаВыборкиПоляСодержания = ОбработкаТабличныхЧастей.ПолучитьЧастьЗапросаДляВыбораСодержания("ЗаказПокупателя");
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
    Запрос.Текст = "
    |ВЫБРАТЬ
    | ВложенныйЗапрос.Номенклатура КАК Номенклатура,
    | ВЫРАЗИТЬ (ВложенныйЗапрос.Номенклатура.НаименованиеПолное КАК Строка(1000)) КАК НаименованиеПолное,
    | ВложенныйЗапрос.Номенклатура.Код КАК Код,
    | ВложенныйЗапрос.Номенклатура.Артикул КАК Артикул,
    | ВложенныйЗапрос.Количество КАК Количество,
    | ВложенныйЗапрос.ЕдиницаИзмерения.Представление КАК ЕдиницаИзмерения,
    | ВложенныйЗапрос.ПроцентСкидкиНаценки
    | + ВложенныйЗапрос.ПроцентАвтоматическихСкидок КАК Скидка,
    | ВложенныйЗапрос.Цена КАК Цена,
    | ВложенныйЗапрос.Сумма КАК Сумма,
    | ВложенныйЗапрос.СуммаНДС КАК СуммаНДС,
    | ВложенныйЗапрос.Характеристика КАК Характеристика,
    | NULL Как Серия,
    | ВложенныйЗапрос.НомерСтроки КАК НомерСтроки,
    | Метка
    |ИЗ
    |(
    | ВЫБРАТЬ
    | ЗаказПокупателя.Номенклатура,
    | ЗаказПокупателя.ЕдиницаИзмерения,
    | ЗаказПокупателя.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,
    | ЗаказПокупателя.ПроцентАвтоматическихСкидок КАК ПроцентАвтоматическихСкидок,
    | ЗаказПокупателя.Цена КАК Цена,
    | СУММА(ЗаказПокупателя.Количество) КАК Количество,
    | СУММА(ЗаказПокупателя.Сумма ) КАК Сумма,
    | СУММА(ЗаказПокупателя.СуммаНДС ) КАК СуммаНДС,
    | ЗаказПокупателя.ХарактеристикаНоменклатуры КАК Характеристика,
    | МИНИМУМ(ЗаказПокупателя.НомерСтроки) КАК НомерСтроки,
    | 0 КАК Метка
    | ИЗ
    | Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателя
    | ГДЕ
    | ЗаказПокупателя.Ссылка = &ТекущийДокумент
    | СГРУППИРОВАТЬ ПО
    | ЗаказПокупателя.Номенклатура,
    | ЗаказПокупателя.ЕдиницаИзмерения,
    | ЗаказПокупателя.ПроцентСкидкиНаценки,
    | ЗаказПокупателя.ПроцентАвтоматическихСкидок,
    | ЗаказПокупателя.Цена,
    | ЗаказПокупателя.ХарактеристикаНоменклатуры
    |) КАК ВложенныйЗапрос
    |ОБЪЕДИНИТЬ ВСЕ
    |ВЫБРАТЬ
    | ЗаказПокупателя.Номенклатура,
    | " + СтрокаВыборкиПоляСодержания + " КАК Товар,
    | ЗаказПокупателя.Номенклатура.Код КАК Код,
    | ЗаказПокупателя.Номенклатура.Артикул КАК Артикул,
    | ЗаказПокупателя.Количество КАК Количество,
    | ЗаказПокупателя.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения,
    | ЗаказПокупателя.ПроцентСкидкиНаценки
    | + ЗаказПокупателя.ПроцентАвтоматическихСкидок КАК Скидка,
    | ЗаказПокупателя.Цена КАК Цена,
    | ЗаказПокупателя.Сумма КАК Сумма,
    | ЗаказПокупателя.СуммаНДС КАК СуммаНДС,
    | NULL КАК Характеристика,
    | NULL КАК Серия,
    | ЗаказПокупателя.НомерСтроки КАК НомерСтроки,
    | 1 КАК Метка
    |ИЗ
    | Документ.ЗаказПокупателя.Услуги КАК ЗаказПокупателя
    |ГДЕ
    | ЗаказПокупателя.Ссылка = &ТекущийДокумент
    |ОБЪЕДИНИТЬ ВСЕ
    |ВЫБРАТЬ
    | ЗаказПокупателя.Номенклатура КАК Номенклатура,
    | ПРЕДСТАВЛЕНИЕ(ЗаказПокупателя.Номенклатура) КАК Товар,
    | ЗаказПокупателя.Номенклатура.Код КАК Код,
    | ЗаказПокупателя.Номенклатура.Артикул КАК Артикул,
    | ЗаказПокупателя.Количество КАК Количество,
    | ЗаказПокупателя.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения,
    | NULL КАК Скидка,
    | ЗаказПокупателя.Цена КАК Цена,
    | ЗаказПокупателя.Сумма КАК Сумма,
    | (0) КАК СуммаНДС,
    | NULL КАК Характеристика,
    | NULL КАК Серия,
    | ЗаказПокупателя.НомерСтроки КАК НомерСтроки,
    | 3 КАК Метка
    |ИЗ
    |(
    | ВЫБРАТЬ
    | ЗаказПокупателя.Номенклатура КАК Номенклатура,
    | СУММА(ЗаказПокупателя.Количество) КАК Количество,
    | ЗаказПокупателя.Цена КАК Цена,
    | СУММА(ЗаказПокупателя.Сумма) КАК Сумма,
    | МИНИМУМ(ЗаказПокупателя.НомерСтроки) КАК НомерСтроки
    | ИЗ
    | Документ.ЗаказПокупателя.ВозвратнаяТара КАК ЗаказПокупателя
    | ГДЕ
    | ЗаказПокупателя.Ссылка = &ТекущийДокумент
    | СГРУППИРОВАТЬ ПО
    | ЗаказПокупателя.Номенклатура,
    | ЗаказПокупателя.Цена
    |) КАК ЗаказПокупателя
    |УПОРЯДОЧИТЬ ПО Метка ВОЗР, НомерСтроки ВОЗР
    |";
    ЗапросТовары = Запрос.Выполнить().Выгрузить();
    // Выводим шапку накладной
    ПараметрыПечати.Вставить("УчитыватьНДС", Шапка.УчитыватьНДС);
    СведенияОПоставщике = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Поставщик, Шапка.Дата);
    Если Тип = "Счет" Тогда
    ПараметрыПечати.Вставить("ИНН", СведенияОПоставщике.ИНН);
    ПараметрыПечати.Вставить("КПП", СведенияОПоставщике.КПП);
    ПредставлениеПоставщикаДляПлатПоручения = "";
    Если ТипЗнч(СтруктурнаяЕдиница) = Тип("СправочникСсылка.БанковскиеСчета") Тогда
    Банк = СтруктурнаяЕдиница.Банк;
    БИК = Банк.Код;
    КоррСчет = Банк.КоррСчет;
    ГородБанка = Банк.Город;
    НомерСчета = СтруктурнаяЕдиница.НомерСчета;
    ПараметрыПечати.Вставить("БИКБанкаПолучателя", БИК);
    ПараметрыПечати.Вставить("БанкПолучателя", Банк);
    ПараметрыПечати.Вставить("БанкПолучателяПредставление", СокрЛП(Банк) + " " + ГородБанка);
    ПараметрыПечати.Вставить("СчетБанкаПолучателя", КоррСчет);
    ПараметрыПечати.Вставить("СчетБанкаПолучателяПредставление", КоррСчет);
    ПараметрыПечати.Вставить("СчетПолучателяПредставление", НомерСчета);
    ПараметрыПечати.Вставить("СчетПолучателя", НомерСчета);
    ПредставлениеПоставщикаДляПлатПоручения = СтруктурнаяЕдиница.ТекстКорреспондента;
    КонецЕсли;
    Если ПустаяСтрока(ПредставлениеПоставщикаДляПлатПоручения) Тогда
    ПредставлениеПоставщикаДляПлатПоручения = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,");
    КонецЕсли;
    ПараметрыПечати.Вставить("ПредставлениеПоставщикаДляПлатПоручения", ПредставлениеПоставщикаДляПлатПоручения);
    КонецЕсли;
    Если Тип = "Счет" Тогда
    ПараметрыПечати.Вставить("ТекстЗаголовка", ОбщегоНазначения.СформироватьЗаголовокДокумента(Шапка, "Счет на оплату"));
    Иначе
    ПараметрыПечати.Вставить("ТекстЗаголовка", ОбщегоНазначения.СформироватьЗаголовокДокумента(Шапка, "Заказ покупателя"));
    КонецЕсли;
    ПараметрыПечати.Вставить("ТекстПоставщик", ?(Тип = "Счет", "Поставщик:", "Исполнитель:"));
    ПараметрыПечати.Вставить("ПредставлениеПоставщика", ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.Дата), "ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,"));
    СведенияОПолучателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Получатель, Шапка.Дата);
    ПараметрыПечати.Вставить("ТекстПокупатель", ?(Тип = "Счет", "Покупатель:", "Заказчик:"));
    ПараметрыПечати.Вставить("ПредставлениеПолучателя", ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Получатель, Шапка.Дата), "ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,"));
    ПараметрыПечати.Вставить("ЕстьСкидки", Ложь);
    Для каждого ВыборкаСтрокТовары Из ЗапросТовары Цикл
    Если ЗначениеЗаполнено(ВыборкаСтрокТовары.Скидка) Тогда
    ПараметрыПечати.ЕстьСкидки = Истина;
    Прервать;
    КонецЕсли;
    КонецЦикла;
    ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
    ПараметрыПечати.Вставить("ВыводитьКоды", Ложь);
    Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
    ПараметрыПечати.ВыводитьКоды = Истина;
    Колонка = "Артикул";
    ИначеЕсли ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Код Тогда
    ПараметрыПечати.ВыводитьКоды = Истина;
    Колонка = "Код";
    КонецЕсли;
    Если ПараметрыПечати.ВыводитьКоды Тогда
    ПараметрыПечати.Вставить("ИмяКолонкиКодов", Колонка);
    КонецЕсли;
    Сумма = 0;
    СуммаНДС = 0;
    ВсегоСкидок = 0;
    ВсегоБезСкидок = 0;
    Для каждого ВыборкаСтрокТовары Из ЗапросТовары Цикл
    ПараметрыПозиции = Новый Структура;
    ПараметрыПозиции.Вставить("Номенклатура", ВыборкаСтрокТовары.Номенклатура);
    ПараметрыПозиции.Вставить("НомерСтроки", ЗапросТовары.Индекс(ВыборкаСтрокТовары) + 1);
    Если ПараметрыПечати.ВыводитьКоды Тогда
    Если Колонка = "Артикул" Тогда
    ПараметрыПозиции.Вставить("Артикул", ВыборкаСтрокТовары.Артикул);
    Иначе
    ПараметрыПозиции.Вставить("Артикул", ВыборкаСтрокТовары.Код);
    КонецЕсли;
    КонецЕсли;
    ПараметрыПозиции.Вставить("Количество", ВыборкаСтрокТовары.Количество);
    ПараметрыПозиции.Вставить("ЕдиницаИзмерения", ВыборкаСтрокТовары.ЕдиницаИзмерения);
    ПараметрыПозиции.Вставить("Цена", ВыборкаСтрокТовары.Цена);
    ПараметрыПозиции.Вставить("Товар", СокрП(ВыборкаСтрокТовары.НаименованиеПолное)
    + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары)
    + ?(ВыборкаСтрокТовары.Метка = 3, " (возвратная тара)", ""));
    Скидка = Ценообразование.ПолучитьСуммуСкидки(ВыборкаСтрокТовары.Сумма, ВыборкаСтрокТовары.Скидка);
    Если ПараметрыПечати.ЕстьСкидки Тогда
    ПараметрыПозиции.Вставить("Скидка", Скидка);
    ПараметрыПозиции.Вставить("СуммаБезСкидки", ВыборкаСтрокТовары.Сумма + Скидка);
    КонецЕсли;
    ПараметрыПозиции.Вставить("Сумма", ВыборкаСтрокТовары.Сумма);
    Сумма = Сумма + ВыборкаСтрокТовары.Сумма;
    СуммаНДС = СуммаНДС + ВыборкаСтрокТовары.СуммаНДС;
    ВсегоСкидок = ВсегоСкидок + Скидка;
    ВсегоБезСкидок = Сумма + ВсегоСкидок;
    #Если ВнешнееСоединение Тогда
    WEBПриложения.ПодготовитьСтруктуруДляВнешнегоСоединения(ПараметрыПозиции);
    #КонецЕсли
    Позиции.Добавить(ПараметрыПозиции);
    КонецЦикла;
    ПараметрыПечати.Вставить("Позиции", Позиции);
    // Вывести Итого
    Если ПараметрыПечати.ЕстьСкидки Тогда
    ПараметрыПечати.Вставить("ВсегоСкидок", ВсегоСкидок);
    ПараметрыПечати.Вставить("ВсегоБезСкидок", ВсегоБезСкидок);
    КонецЕсли;
    ПараметрыПечати.Вставить("Всего", ОбщегоНазначения.ФорматСумм(Сумма));
    // Вывести ИтогоНДС
    Если ПараметрыПечати.УчитыватьНДС Тогда
    ПараметрыПечати.Вставить("НДС", ?(Шапка.СуммаВключаетНДС, "В том числе НДС:", "Сумма НДС:"));
    ПараметрыПечати.Вставить("ВсегоНДС", ОбщегоНазначения.ФорматСумм(ЗапросТовары.Итог("СуммаНДС")));
    КонецЕсли;
    // Вывести Сумму прописью
    СуммаКПрописи = Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС);
    ПараметрыПечати.Вставить("ИтоговаяСтрока", "Всего наименований " + ЗапросТовары.Количество()
    + ", на сумму " + ОбщегоНазначения.ФорматСумм(СуммаКПрописи, Шапка.ВалютаДокумента));
    ПараметрыПечати.Вставить("СуммаПрописью", ОбщегоНазначения.СформироватьСуммуПрописью(СуммаКПрописи, Шапка.ВалютаДокумента));
    // Вывести подписи
    Если Тип = "Счет" Тогда
    Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизации(Шапка.Руководители, Шапка.Дата,);
    Руководитель = Руководители.Руководитель;
    Бухгалтер = Руководители.ГлавныйБухгалтер;
    ПараметрыПечати.Вставить("ФИОРуководителя", "/" + Руководитель + "/");
    ПараметрыПечати.Вставить("ФИОБухгалтера", "/" + Бухгалтер + "/");
    ПараметрыПечати.Вставить("ФИООтветственный", "/" + Ответственный + "/");
    КонецЕсли;
    #Если ВнешнееСоединение Тогда
    WEBПриложения.ПодготовитьСтруктуруДляВнешнегоСоединения(ПараметрыПечати);
    #КонецЕсли
    Возврат ПараметрыПечати;
    КонецФункции // ПолучитьПараметрыПечатиСчетаЗаказа()
    #Если Клиент Тогда
    // Функция создает табличный документ для печати счета и заказа,
    // помещая в него готовые данные, переданные в виде структуры.
    //
    // Параметры:
    // Тип - строка, содержит тип печатаемого документа (счет или заказ);
    // ПараметрыПечати - структура с данными для печати.
    //
    // Возвращаемое значение:
    // Табличный документ - сформированная печатная форма
    //
    Функция СоздатьТабличныйДокументПечатиСчетаЗаказа(Тип, ПараметрыПечати)
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗаказПокупателя_СчетЗаказ";
    Макет = ПолучитьМакет("СчетЗаказ");
    // Выводим шапку накладной
    Если Тип = "Счет" Тогда
    ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокСчета");
    ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьМакета);
    КонецЕсли;
    ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
    ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьМакета);
    ОбластьМакета = Макет.ПолучитьОбласть("Поставщик");
    ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьМакета);
    ОбластьМакета = Макет.ПолучитьОбласть("Покупатель");
    ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьМакета);
    ОбластьНомера = Макет.ПолучитьОбласть("ШапкаТаблицы|НомерСтроки");
    ОбластьКодов = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов");
    ОбластьДанных = Макет.ПолучитьОбласть("ШапкаТаблицы|Данные");
    ОбластьСкидок = Макет.ПолучитьОбласть("ШапкаТаблицы|Скидка");
    ОбластьСуммы = Макет.ПолучитьОбласть("ШапкаТаблицы|Сумма");
    ОбластьТовар = Макет.ПолучитьОбласть("ШапкаТаблицы|Товар");
    Если Не ПараметрыПечати.ВыводитьКоды И ПараметрыПечати.ЕстьСкидки Тогда
    ОбластьТовар = Макет.ПолучитьОбласть("ШапкаТаблицы|ТоварБезКодов");
    ИначеЕсли НЕ ПараметрыПечати.ЕстьСкидки И ПараметрыПечати.ВыводитьКоды Тогда
    ОбластьТовар = Макет.ПолучитьОбласть("ШапкаТаблицы|ТоварБезСкидок");
    ИначеЕсли НЕ ПараметрыПечати.ЕстьСкидки И НЕ ПараметрыПечати.ВыводитьКоды Тогда
    ОбластьТовар = Макет.ПолучитьОбласть("ШапкаТаблицы|ТоварБезКодовИСкидок");
    КонецЕсли;
    ТабДокумент.Вывести(ОбластьНомера);
    Если ПараметрыПечати.ВыводитьКоды Тогда
    ОбластьКодов.Параметры.ИмяКолонкиКодов = ПараметрыПечати.ИмяКолонкиКодов;
    ТабДокумент.Присоединить(ОбластьКодов);
    КонецЕсли;
    ОбластьТовар.Параметры.Товар = "Товары (работы, услуги)";
    ТабДокумент.Присоединить(ОбластьТовар);
    ТабДокумент.Присоединить(ОбластьДанных);
    Если ПараметрыПечати.ЕстьСкидки Тогда
    ТабДокумент.Присоединить(ОбластьСкидок);
    КонецЕсли;
    ТабДокумент.Присоединить(ОбластьСуммы);
    // Увеличим ширину колонки Товар на ширину неиспользуемых колонок
    ОбластьКолонкаТовар = Макет.Область("Товар");
    Если Не ПараметрыПечати.ВыводитьКоды И ПараметрыПечати.ЕстьСкидки Тогда
    ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки * 1.5;
    ИначеЕсли НЕ ПараметрыПечати.ЕстьСкидки И ПараметрыПечати.ВыводитьКоды Тогда
    ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки * 2.125;
    ИначеЕсли НЕ ПараметрыПечати.ЕстьСкидки И НЕ ПараметрыПечати.ВыводитьКоды Тогда
    ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки * 2.625;
    КонецЕсли;
    ОбластьНомера = Макет.ПолучитьОбласть("Строка|НомерСтроки");
    ОбластьКодов = Макет.ПолучитьОбласть("Строка|КолонкаКодов");
    ОбластьДанных = Макет.ПолучитьОбласть("Строка|Данные");
    ОбластьСкидок = Макет.ПолучитьОбласть("Строка|Скидка");
    ОбластьСуммы = Макет.ПолучитьОбласть("Строка|Сумма");
    ОбластьТовар = Макет.ПолучитьОбласть("Строка|Товар");
    Если Не ПараметрыПечати.ВыводитьКоды И ПараметрыПечати.ЕстьСкидки Тогда
    ОбластьТовар = Макет.ПолучитьОбласть("Строка|ТоварБезКодов");
    ИначеЕсли НЕ ПараметрыПечати.ЕстьСкидки И ПараметрыПечати.ВыводитьКоды Тогда
    ОбластьТовар = Макет.ПолучитьОбласть("Строка|ТоварБезСкидок");
    ИначеЕсли НЕ ПараметрыПечати.ЕстьСкидки И НЕ ПараметрыПечати.ВыводитьКоды Тогда
    ОбластьТовар = Макет.ПолучитьОбласть("Строка|ТоварБезКодовИСкидок");
    КонецЕсли;
    Для каждого ПараметрыПозиции Из ПараметрыПечати.Позиции Цикл
    Если НЕ ЗначениеЗаполнено(ПараметрыПозиции.Номенклатура) Тогда
    Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
    Продолжить;
    КонецЕсли;
    ОбластьНомера.Параметры.Заполнить(ПараметрыПозиции);
    ТабДокумент.Вывести(ОбластьНомера);
    Если ПараметрыПечати.ВыводитьКоды Тогда
    ОбластьКодов.Параметры.Заполнить(ПараметрыПозиции);
    ТабДокумент.Присоединить(ОбластьКодов);
    КонецЕсли;
    ОбластьТовар.Параметры.Заполнить(ПараметрыПозиции);
    ТабДокумент.Присоединить(ОбластьТовар);
    ОбластьДанных.Параметры.Заполнить(ПараметрыПозиции);
    ТабДокумент.Присоединить(ОбластьДанных);
    Если ПараметрыПечати.ЕстьСкидки Тогда
    ОбластьСкидок.Параметры.Заполнить(ПараметрыПозиции);
    ТабДокумент.Присоединить(ОбластьСкидок);
    КонецЕсли;
    ОбластьСуммы.Параметры.Заполнить(ПараметрыПозиции);
    ТабДокумент.Присоединить(ОбластьСуммы);
    КонецЦикла;
    // Вывести Итого
    ОбластьНомера = Макет.ПолучитьОбласть("Итого|НомерСтроки");
    ОбластьКодов = Макет.ПолучитьОбласть("Итого|КолонкаКодов");
    ОбластьДанных = Макет.ПолучитьОбласть("Итого|Данные");
    ОбластьСкидок = Макет.ПолучитьОбласть("Итого|Скидка");
    ОбластьСуммы = Макет.ПолучитьОбласть("Итого|Сумма");
    ОбластьТовар = Макет.ПолучитьОбласть("Итого|Товар");
    Если Не ПараметрыПечати.ВыводитьКоды И ПараметрыПечати.ЕстьСкидки Тогда
    ОбластьТовар = Макет.ПолучитьОбласть("Итого|ТоварБезКодов");
    ИначеЕсли НЕ ПараметрыПечати.ЕстьСкидки И ПараметрыПечати.ВыводитьКоды Тогда
    ОбластьТовар = Макет.ПолучитьОбласть("Итого|ТоварБезСкидок");
    ИначеЕсли НЕ ПараметрыПечати.ЕстьСкидки И НЕ ПараметрыПечати.ВыводитьКоды Тогда
    ОбластьТовар = Макет.ПолучитьОбласть("Итого|ТоварБезКодовИСкидок");
    КонецЕсли;
    ТабДокумент.Вывести(ОбластьНомера);
    Если ПараметрыПечати.ВыводитьКоды Тогда
    ТабДокумент.Присоединить(ОбластьКодов);
    КонецЕсли;
    ТабДокумент.Присоединить(ОбластьТовар);
    ТабДокумент.Присоединить(ОбластьДанных);
    Если ПараметрыПечати.ЕстьСкидки Тогда
    ОбластьСкидок.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Присоединить(ОбластьСкидок);
    КонецЕсли;
    ОбластьСуммы.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Присоединить(ОбластьСуммы);
    // Вывести ИтогоНДС
    Если ПараметрыПечати.УчитыватьНДС Тогда
    ОбластьНомера = Макет.ПолучитьОбласть("ИтогоНДС|НомерСтроки");
    ОбластьКодов = Макет.ПолучитьОбласть("ИтогоНДС|КолонкаКодов");
    ОбластьДанных = Макет.ПолучитьОбласть("ИтогоНДС|Данные");
    ОбластьСкидок = Макет.ПолучитьОбласть("ИтогоНДС|Скидка");
    ОбластьСуммы = Макет.ПолучитьОбласть("ИтогоНДС|Сумма");
    ОбластьТовар = Макет.ПолучитьОбласть("ИтогоНДС|Товар");
    Если Не ПараметрыПечати.ВыводитьКоды И ПараметрыПечати.ЕстьСкидки Тогда
    ОбластьТовар = Макет.ПолучитьОбласть("ИтогоНДС|ТоварБезКодов");
    ИначеЕсли НЕ ПараметрыПечати.ЕстьСкидки И ПараметрыПечати.ВыводитьКоды Тогда
    ОбластьТовар = Макет.ПолучитьОбласть("ИтогоНДС|ТоварБезСкидок");
    ИначеЕсли НЕ ПараметрыПечати.ЕстьСкидки И НЕ ПараметрыПечати.ВыводитьКоды Тогда
    ОбластьТовар = Макет.ПолучитьОбласть("ИтогоНДС|ТоварБезКодовИСкидок");
    КонецЕсли;
    ТабДокумент.Вывести(ОбластьНомера);
    Если ПараметрыПечати.ВыводитьКоды Тогда
    ТабДокумент.Присоединить(ОбластьКодов);
    КонецЕсли;
    ОбластьТовар.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Присоединить(ОбластьТовар);
    ОбластьДанных.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Присоединить(ОбластьДанных);
    Если ПараметрыПечати.ЕстьСкидки Тогда
    ТабДокумент.Присоединить(ОбластьСкидок);
    КонецЕсли;
    ОбластьСуммы.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Присоединить(ОбластьСуммы);
    КонецЕсли;
    // Вывести Сумму прописью
    ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
    ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьМакета);
    // Вывести подписи
    Если Тип = "Счет" Тогда
    ОбластьМакета = Макет.ПолучитьОбласть("ПодвалСчета");
    Иначе
    ОбластьМакета = Макет.ПолучитьОбласть("ПодвалЗаказа");
    КонецЕсли;
    ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьМакета);
    Возврат ТабДокумент;
    КонецФункции // СоздатьТабличныйДокументПечатиСчетаЗаказа()
    // Функция формирует табличный документ с печатной формой заказа или счета,
    // разработанного методистами
    //
    // Возвращаемое значение:
    // Табличный документ - сформированная печатная форма
    //
    Функция ПечатьСчетаЗаказа(Тип)
    Возврат СоздатьТабличныйДокументПечатиСчетаЗаказа(Тип, ПолучитьПараметрыПечатиСчетаЗаказа(Тип));
    КонецФункции
    // Функция формирует табличный документ с печатной формой заказа или счета,
    // разработанного методистами (с учетом внесенных корректировок)
    //
    // Возвращаемое значение:
    // Табличный документ - сформированная печатная форма
    //
    Функция ПечатьСчетаЗаказаКорректировки(Тип)
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
    Запрос.УстановитьПараметр("ПустойКонтрагент", Справочники.Контрагенты.ПустаяСсылка());
    Запрос.Текст ="
    |ВЫБРАТЬ
    | Номер,
    | Дата,
    | ДоговорКонтрагента,
    | Организация,
    | Контрагент КАК Получатель,
    | ВЫБОР КОГДА Грузоотправитель = &ПустойКонтрагент
    | ТОГДА Организация
    | ИНАЧЕ Грузоотправитель КОНЕЦ КАК Грузоотправитель,
    | ВЫБОР КОГДА Грузополучатель = &ПустойКонтрагент
    | ТОГДА Контрагент
    | ИНАЧЕ Грузополучатель КОНЕЦ КАК Грузополучатель,
    | Организация КАК Руководители,
    | Организация КАК Поставщик,
    | СуммаДокумента,
    | ВалютаДокумента,
    | УчитыватьНДС,
    | СуммаВключаетНДС
    |ИЗ
    | Документ.ЗаказПокупателя КАК ЗаказПокупателя
    |
    |ГДЕ
    | ЗаказПокупателя.Ссылка = &ТекущийДокумент";
    Шапка = Запрос.Выполнить().Выбрать();
    Шапка.Следующий();
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗаказПокупателя_СчетЗаказ";
    СтрокаВыборкиПоляСодержания = ОбработкаТабличныхЧастей.ПолучитьЧастьЗапросаДляВыбораСодержания("ЗаказПокупателя");
    СтрокаВыборкиКорректировкиПоляСодержания = ОбработкаТабличныхЧастей.ПолучитьЧастьЗапросаДляВыбораСодержания("КорректировкаЗаказаПокупателя");
    Запрос = Новый Запрос;
    ТекстЗапроса = "
    |ВЫБРАТЬ
    | ВложенныйЗапрос.НомерТЧ,
    | Минимум(ВложенныйЗапрос.ПризнакКорректировка) КАК ПризнакКорректировка,
    | Минимум(ВложенныйЗапрос.НомерСтроки) КАК НомерСтроки,
    | ВложенныйЗапрос.Номенклатура,
    | ВложенныйЗапрос.НаименованиеПолное,
    | ВложенныйЗапрос.Номенклатура.Артикул КАК Артикул,
    | ВложенныйЗапрос.Номенклатура.Код КАК Код,
    | СУММА(ВложенныйЗапрос.Количество) КАК КоличествоТовара,
    | ВложенныйЗапрос.ЕдиницаИзмерения.Представление КАК ЕдиницаИзмерения,
    | ВложенныйЗапрос.ПроцентСкидкиНаценки
    | + ВложенныйЗапрос.ПроцентАвтоматическихСкидок КАК Скидка,
    | СУММА(ВложенныйЗапрос.СуммаНДС) КАК СуммаНДС,
    | ВложенныйЗапрос.Цена КАК Цена,
    | СУММА(ВложенныйЗапрос.Сумма) КАК Сумма,
    | ВложенныйЗапрос.ХарактеристикаНоменклатуры КАК Характеристика,
    | NULL КАК Серия
    |ИЗ
    |
    |(
    |ВЫБРАТЬ
    | ЗаказПокупателя.Номенклатура КАК Номенклатура,
    | ВЫРАЗИТЬ (ЗаказПокупателя.Номенклатура.НаименованиеПолное КАК Строка(1000)) КАК НаименованиеПолное,
    | ЗаказПокупателя.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    | ЗаказПокупателя.Цена КАК Цена,
    | ЗаказПокупателя.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,
    | ЗаказПокупателя.ПроцентАвтоматическихСкидок КАК ПроцентАвтоматическихСкидок,
    | ЗаказПокупателя.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    | ЗаказПокупателя.СуммаНДС КАК СуммаНДС,
    | ЗаказПокупателя.Сумма КАК Сумма,
    | ЗаказПокупателя.Количество КАК Количество,
    | (1) КАК НомерТЧ,
    | (0) КАК ПризнакКорректировка,
    | ЗаказПокупателя.НомерСтроки КАК НомерСтроки
    | ИЗ
    | Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателя
    |
    | ГДЕ
    | ЗаказПокупателя.Ссылка = &ТекущийДокумент
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    | КорректировкаЗаказаПокупателя.Номенклатура КАК Номенклатура,
    | ВЫРАЗИТЬ (КорректировкаЗаказаПокупателя.Номенклатура.НаименованиеПолное КАК Строка(1000)) КАК НаименованиеПолное,
    | КорректировкаЗаказаПокупателя.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    | КорректировкаЗаказаПокупателя.Цена КАК Цена,
    | КорректировкаЗаказаПокупателя.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,
    | КорректировкаЗаказаПокупателя.ПроцентАвтоматическихСкидок КАК ПроцентАвтоматическихСкидок,
    | КорректировкаЗаказаПокупателя.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    | КорректировкаЗаказаПокупателя.СуммаНДС КАК СуммаНДС,
    | КорректировкаЗаказаПокупателя.Сумма КАК Сумма,
    | КорректировкаЗаказаПокупателя.Количество КАК Количество,
    | (1) КАК НомерТЧ,
    | (1) КАК ПризнакКорректировка,
    | КорректировкаЗаказаПокупателя.НомерСтроки КАК НомерСтроки
    | ИЗ
    | Документ.КорректировкаЗаказаПокупателя.Товары КАК КорректировкаЗаказаПокупателя
    |
    | ГДЕ
    | КорректировкаЗаказаПокупателя.Ссылка.ЗаказПокупателя = &ТекущийДокумент
    | И КорректировкаЗаказаПокупателя.Ссылка.Проведен = Истина
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    | ЗаказПокупателя.Номенклатура КАК Номенклатура,
    | " + СтрокаВыборкиПоляСодержания + " КАК НаименованиеПолное,
    | ЗаказПокупателя.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения,
    | ЗаказПокупателя.Цена КАК Цена,
    | ЗаказПокупателя.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,
    | ЗаказПокупателя.ПроцентАвтоматическихСкидок КАК ПроцентАвтоматическихСкидок,
    | NULL КАК ХарактеристикаНоменклатуры,
    | ЗаказПокупателя.СуммаНДС КАК СуммаНДС,
    | ЗаказПокупателя.Сумма КАК Сумма,
    | ЗаказПокупателя.Количество КАК Количество,
    | (2) КАК НомерТЧ,
    | (0) КАК ПризнакКорректировка,
    | ЗаказПокупателя.НомерСтроки КАК НомерСтроки
    | ИЗ
    | Документ.ЗаказПокупателя.Услуги КАК ЗаказПокупателя
    |
    | ГДЕ
    | ЗаказПокупателя.Ссылка = &ТекущийДокумент
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    | КорректировкаЗаказаПокупателя.Номенклатура КАК Номенклатура,
    |" + СтрокаВыборкиКорректировкиПоляСодержания + " КАК НаименованиеПолное,
    | КорректировкаЗаказаПокупателя.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения,
    | КорректировкаЗаказаПокупателя.Цена КАК Цена,
    | КорректировкаЗаказаПокупателя.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,
    | КорректировкаЗаказаПокупателя.ПроцентАвтоматическихСкидок КАК ПроцентАвтоматическихСкидок,
    | NULL КАК ХарактеристикаНоменклатуры,
    | КорректировкаЗаказаПокупателя.СуммаНДС КАК СуммаНДС,
    | КорректировкаЗаказаПокупателя.Сумма КАК Сумма,
    | КорректировкаЗаказаПокупателя.Количество КАК Количество,
    | (2) КАК НомерТЧ,
    | (1) КАК ПризнакКорректировка,
    | КорректировкаЗаказаПокупателя.НомерСтроки КАК НомерСтроки
    | ИЗ
    | Документ.КорректировкаЗаказаПокупателя.Услуги КАК КорректировкаЗаказаПокупателя
    |
    | ГДЕ
    | КорректировкаЗаказаПокупателя.Ссылка.ЗаказПокупателя = &ТекущийДокумент
    | И КорректировкаЗаказаПокупателя.Ссылка.Проведен = Истина
    |";
    Если Тип <> "Счет" Тогда
    ТекстЗапроса = ТекстЗапроса +
    "
    |ОБЪЕДИНИТЬ ВСЕ
    |ВЫБРАТЬ
    | ЗаказПокупателя.Номенклатура КАК Номенклатура,
    | ВЫРАЗИТЬ (ЗаказПокупателя.Номенклатура.НаименованиеПолное КАК Строка(1000)) КАК НаименованиеПолное,
    | ЗаказПокупателя.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения,
    | ЗаказПокупателя.Цена КАК Цена,
    | 0 КАК ПроцентСкидкиНаценки,
    | 0 КАК ПроцентАвтоматическихСкидок,
    | NULL КАК ХарактеристикаНоменклатуры,
    | 0 КАК СуммаНДС,
    | ЗаказПокупателя.Сумма КАК Сумма,
    | ЗаказПокупателя.Количество КАК Количество,
    | (3) КАК НомерТЧ,
    | (0) КАК ПризнакКорректировка,
    | ЗаказПокупателя.НомерСтроки КАК НомерСтроки
    | ИЗ
    | Документ.ЗаказПокупателя.ВозвратнаяТара КАК ЗаказПокупателя
    |
    | ГДЕ
    | ЗаказПокупателя.Ссылка = &ТекущийДокумент
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    | КорректировкаЗаказаПокупателя.Номенклатура КАК Номенклатура,
    | ВЫРАЗИТЬ (КорректировкаЗаказаПокупателя.Номенклатура.НаименованиеПолное КАК Строка(1000)) КАК НаименованиеПолное,
    | КорректировкаЗаказаПокупателя.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения,
    | КорректировкаЗаказаПокупателя.Цена КАК Цена,
    | 0 КАК ПроцентСкидкиНаценки,
    | 0 КАК ПроцентАвтоматическихСкидок,
    | NULL КАК ХарактеристикаНоменклатуры,
    | 0 КАК СуммаНДС,
    | КорректировкаЗаказаПокупателя.Сумма КАК Сумма,
    | КорректировкаЗаказаПокупателя.Количество КАК Количество,
    | (3) КАК НомерТЧ,
    | (1) КАК ПризнакКорректировка,
    | КорректировкаЗаказаПокупателя.НомерСтроки КАК НомерСтроки
    | ИЗ
    | Документ.КорректировкаЗаказаПокупателя.ВозвратнаяТара КАК КорректировкаЗаказаПокупателя
    |
    | ГДЕ
    | КорректировкаЗаказаПокупателя.Ссылка.ЗаказПокупателя = &ТекущийДокумент
    | И КорректировкаЗаказаПокупателя.Ссылка.Проведен = Истина
    |";
    КонецЕсли;
    ТекстЗапроса = ТекстЗапроса+
    "
    |) КАК ВложенныйЗапрос
    |
    |СГРУППИРОВАТЬ ПО
    | ВложенныйЗапрос.НомерТЧ,
    | ВложенныйЗапрос.Номенклатура,
    | ВложенныйЗапрос.ЕдиницаИзмерения,
    | ВложенныйЗапрос.ПроцентСкидкиНаценки,
    | ВложенныйЗапрос.ПроцентАвтоматическихСкидок,
    | ВложенныйЗапрос.ХарактеристикаНоменклатуры,
    | ВложенныйЗапрос.Цена,
    | ВложенныйЗапрос.НаименованиеПолное
    |
    |УПОРЯДОЧИТЬ ПО
    | ВложенныйЗапрос.НомерТЧ, ПризнакКорректировка, НомерСтроки
    |";
    Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
    Запрос.Текст = ТекстЗапроса;
    ЗапросТовары = Запрос.Выполнить().Выгрузить();

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

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

    // Получить экземпляр документа на печать
    Если ИмяМакета = "Заказ" Тогда
    ТабДокумент = ПечатьСчетаЗаказа(ИмяМакета);
    ИначеЕсли ИмяМакета = "ЗаказКорректировка" тогда
    ТабДокумент = ПечатьСчетаЗаказаКорректировки(ИмяМакета);
    ИначеЕсли ИмяМакета = "Счет" тогда
    ТабДокумент = ПечатьСчетаЗаказаКорректировки(ИмяМакета);
    ИначеЕсли ИмяМакета = "Бланк" Тогда
    ТабДокумент = ПечатьБланк(НаПринтер);
    ИначеЕсли ТипЗнч(ИмяМакета) = Тип("ДвоичныеДанные") Тогда
    ТабДокумент = УниверсальныеМеханизмы.НапечататьВнешнююФорму(Ссылка, ИмяМакета);
    Если ТабДокумент = Неопределено Тогда
    Возврат
    КонецЕсли;
    КонецЕсли;
    УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект), Ссылка);
    КонецПроцедуры // Печать
    #КонецЕсли
    // Возвращает доступные варианты печати документа
    //
    // Вовращаемое значение:
    // Струткура, каждая строка которой соответствует одному из вариантов печати
    //
    Функция ПолучитьСтруктуруПечатныхФорм() Экспорт
    СтруктураПечатныхФорм = Новый Структура("Заказ,ЗаказКорректировка,Счет,Бланк",
    "Заказ покупателя",
    "Заказ покупателя (с учетом корректировок)",
    "Счет на оплату (с учетом корректировок)",
    "Бланк товарного наполнения");
    Возврат СтруктураПечатныхФорм;
    КонецФункции // ПолучитьСтруктуруПечатныхФорм()
    // Заполняет реквизиты значениями по умолчанию
    //
    // Параметры:
    // ПараметрОбъектКопирования - содержкит ссылку на документ копирования в случае,
    // если новый документ создается копированием
    // ПараметрОснование - содержкит ссылку на документ-основание в случае,
    // если новый документ создается на основании другого
    //
    Процедура ИнициализироватьНовыйДокумент(ПараметрОбъектКопирования, ПараметрОснование) Экспорт
    #Если Клиент Или ВнешнееСоединение Тогда
    ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ЭтотОбъект, глЗначениеПеременной("глТекущийПользователь"), мВалютаРегламентированногоУчета, "Продажа", ПараметрОбъектКопирования, ПараметрОснование, мСтруктураПараметровДляПолученияДоговора);
    #КонецЕсли
    УправлениеЗаказами.УстановитьДатуОплатыПоДоговору(ЭтотОбъект);
    Если ПараметрОбъектКопирования<>неопределено Тогда
    ДатаОтгрузки = неопределено;
    КонецЕсли;
    КонецПроцедуры
    ////////////////////////////////////////////////////////////////////////////////
    // ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ ОБЕСПЕЧЕНИЯ ПРОВЕДЕНИЯ ДОКУМЕНТА
    // Заполняет табличную часть при оперативном проведении, когда включены флаги авторазмещения и/или авторезервирования
    //
    // Параметры:
    // Параметры - структура параметров на основании которых заполняется документ.
    //
    Процедура ЗаполнитьТабличныеЧастиПередПроведениемУпр(Параметры) Экспорт
    ОбособленныйУчет = ЗначениеЗаполнено(ДоговорКонтрагента)
    И ДоговорКонтрагента.ОбособленныйУчетТоваровПоЗаказамПокупателей;
    Параметры.Вставить("Заказ",ЭтотОбъект);
    Параметры.Вставить("РезервироватьПоСериям",мРезервироватьПоСериям и ОбособленныйУчет);
    Параметры.Вставить("ОбособленныйУчет",ОбособленныйУчет);
    УправлениеЗаказами.Заказ_ЗаполнитьТабличныеЧастиВозможнымРазмещением(Параметры, Товары, ВозвратнаяТара);
    КонецПроцедуры // ЗаполнитьТабличныеЧастиПередПроведениемУпр()
    // Заполнение документа по упр. основанию
    //
    Процедура ЗаполнитьДокументПоОснованиюУпр(Основание)
    Если ТипЗнч(Основание) = Тип("ДокументСсылка.Событие") Тогда
    КонтактноеЛицоКонтрагента = Основание.КонтактноеЛицо;
    Контрагент = Основание.Контрагент;
    КонецЕсли;
    КонецПроцедуры // ЗаполнитьДокументПоОснованиюУпр()
    ////////////////////////////////////////////////////////////////////////////////
    // ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ ОБЕСПЕЧЕНИЯ ПРОВЕДЕНИЯ ДОКУМЕНТА
    // По виду операции определяет статус партии товаров (не возвратная тара!)
    //
    // Параметры:
    // Нет.
    //
    // Возвращаемое значение:
    // Значение перечисления "Статусы партии товаров".
    //
    Функция ОпределитьСтатусПартии()
    Возврат Перечисления.СтатусыПартийТоваров.Купленный;
    КонецФункции // ОпределитьСтатусПартииПрихода()
    // Выгружает результат запроса в табличную часть, добавляет ей необходимые колонки для проведения.
    //
    // Параметры:
    // РезультатЗапросаПоТоварам - результат запроса по табличной части "Товары",
    // СтруктураШапкиДокумента - выборка по результату запроса по шапке документа.
    //
    // Возвращаемое значение:
    // Сформированная таблица значений.
    //
    Функция ПодготовитьТаблицуТоваров(РезультатЗапросаПоТоварам, СтруктураШапкиДокумента)
    ТаблицаТоваров = РезультатЗапросаПоТоварам.Выгрузить();
    // Надо добавить колонки "СуммаБезНДС"
    ТаблицаТоваров.Колонки.Добавить( "СуммаБезНДС", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15, 2));
    // Надо заполнить новые колонки.
    Для каждого СтрокаТЧ Из ТаблицаТоваров Цикл
    СтрокаТЧ.СуммаБезНДС = СтрокаТЧ.Сумма - ?(УчитыватьНДС И СуммаВключаетНДС, СтрокаТЧ.НДС, 0);
    КонецЦикла;
    // Вызываем отдельные процедуры подготовки для упр. учета
    ПодготовитьТаблицуТоваровУпр(ТаблицаТоваров, СтруктураШапкиДокумента);
    Возврат ТаблицаТоваров;
    КонецФункции // ПодготовитьТаблицуТоваров()
    // Добавляет в таблицу колонки, необходимые для упр. проведения.
    //
    Процедура ПодготовитьТаблицуТоваровУпр(ТаблицаТоваров, СтруктураШапкиДокумента)
    // Надо добавить колонки
    ТаблицаТоваров.Колонки.Добавить("СуммаВзаиморасчетов", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,2));
    ТаблицаТоваров.Колонки.Добавить("СуммаУпр", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,2));
    // Надо заполнить новые колонки.
    Для каждого СтрокаТаблицы Из ТаблицаТоваров Цикл
    // Суммы пересчитаем в валюту упр. учета
    СтрокаТаблицы.СуммаБезНДС = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СтрокаТаблицы.СуммаБезНДС, ВалютаДокумента,
    СтруктураШапкиДокумента.ВалютаУправленческогоУчета,
    СтруктураШапкиДокумента.КурсДокумента,
    СтруктураШапкиДокумента.КурсВалютыУправленческогоУчета,
    СтруктураШапкиДокумента.КратностьДокумента,
    СтруктураШапкиДокумента.КратностьВалютыУправленческогоУчета);
    СуммаНДС = СтрокаТаблицы.НДС;
    СтрокаТаблицы.НДС = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СтрокаТаблицы.НДС, ВалютаДокумента,
    СтруктураШапкиДокумента.ВалютаУправленческогоУчета,
    СтруктураШапкиДокумента.КурсДокумента,
    СтруктураШапкиДокумента.КурсВалютыУправленческогоУчета,
    СтруктураШапкиДокумента.КратностьДокумента,
    СтруктураШапкиДокумента.КратностьВалютыУправленческогоУчета);
    СуммаСНДС = СтрокаТаблицы.Сумма + ?(УчитыватьНДС И Не СуммаВключаетНДС, СуммаНДС, 0);
    СтрокаТаблицы.СуммаВзаиморасчетов = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СуммаСНДС, ВалютаДокумента,
    СтруктураШапкиДокумента.ВалютаВзаиморасчетов,
    СтруктураШапкиДокумента.КурсДокумента,
    КурсВзаиморасчетов,
    СтруктураШапкиДокумента.КратностьДокумента,
    КратностьВзаиморасчетов);
    СтрокаТаблицы.СуммаУпр = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СуммаСНДС, ВалютаДокумента,
    СтруктураШапкиДокумента.ВалютаУправленческогоУчета,
    СтруктураШапкиДокумента.КурсДокумента,
    СтруктураШапкиДокумента.КурсВалютыУправленческогоУчета,
    СтруктураШапкиДокумента.КратностьДокумента,
    СтруктураШапкиДокумента.КратностьВалютыУправленческогоУчета);
    КонецЦикла;
    КонецПроцедуры // ПодготовитьТаблицуТоваровУпр()
    // Выгружает результат запроса в табличную часть, добавляет ей необходимые колонки для проведения.
    //
    // Параметры:
    // РезультатЗапросаПоУслугам - результат запроса по табличной части "Услуги",
    // СтруктураШапкиДокумента - выборка по результату запроса по шапке документа.
    //
    // Возвращаемое значение:
    // Сформированная таблица значений.
    //
    Функция ПодготовитьТаблицуУслуг(РезультатЗапросаПоУслугам, СтруктураШапкиДокумента)
    ТаблицаУслуг = РезультатЗапросаПоУслугам.Выгрузить();
    // Надо добавить колонки "СуммаБезНДС".
    ТаблицаУслуг.Колонки.Добавить("СуммаБезНДС", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,2));
    // Надо заполнить новые колонки.
    Для каждого СтрокаТаблицы Из ТаблицаУслуг Цикл
    СтрокаТаблицы.СуммаБезНДС = СтрокаТаблицы.Сумма -
    ?(УчитыватьНДС И СуммаВключаетНДС, СтрокаТаблицы.НДС, 0);
    КонецЦикла;
    // Вызываем отдельные процедуры подготовки для упр. учета
    ПодготовитьТаблицуУслугУпр(ТаблицаУслуг, СтруктураШапкиДокумента);
    Возврат ТаблицаУслуг;
    КонецФункции // ПодготовитьТаблицуУслуг()
    // Добавляет в таблицу колонки, необходимые для упр. проведения.
    //
    Процедура ПодготовитьТаблицуУслугУпр(ТаблицаУслуг, СтруктураШапкиДокумента)
    // Надо добавить колонки.
    ТаблицаУслуг.Колонки.Добавить("СуммаВзаиморасчетов", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,2));
    ТаблицаУслуг.Колонки.Добавить("СуммаУпр", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,2));
    // Надо заполнить новые колонки.
    Для каждого СтрокаТаблицы Из ТаблицаУслуг Цикл
    // Суммы пересчитаем в валюту упр. учета
    СтрокаТаблицы.СуммаБезНДС = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СтрокаТаблицы.СуммаБезНДС, ВалютаДокумента,
    СтруктураШапкиДокумента.ВалютаУправленческогоУчета,
    СтруктураШапкиДокумента.КурсДокумента,
    СтруктураШапкиДокумента.КурсВалютыУправленческогоУчета,
    СтруктураШапкиДокумента.КратностьДокумента,
    СтруктураШапкиДокумента.КратностьВалютыУправленческогоУчета);
    СуммаНДС = СтрокаТаблицы.НДС;
    СтрокаТаблицы.НДС = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СтрокаТаблицы.НДС, ВалютаДокумента,
    СтруктураШапкиДокумента.ВалютаУправленческогоУчета,
    СтруктураШапкиДокумента.КурсДокумента,
    СтруктураШапкиДокумента.КурсВалютыУправленческогоУчета,
    СтруктураШапкиДокумента.КратностьДокумента,
    СтруктураШапкиДокумента.КратностьВалютыУправленческогоУчета);
    СуммаСНДС = СтрокаТаблицы.Сумма + ?(УчитыватьНДС И Не СуммаВключаетНДС, СуммаНДС, 0);
    СтрокаТаблицы.СуммаВзаиморасчетов = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СуммаСНДС, ВалютаДокумента,
    СтруктураШапкиДокумента.ВалютаВзаиморасчетов,
    СтруктураШапкиДокумента.КурсДокумента,
    КурсВзаиморасчетов,
    СтруктураШапкиДокумента.КратностьДокумента,
    КратностьВзаиморасчетов);
    СтрокаТаблицы.СуммаУпр = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СуммаСНДС, ВалютаДокумента,
    СтруктураШапкиДокумента.ВалютаУправленческогоУчета,
    СтруктураШапкиДокумента.КурсДокумента,
    СтруктураШапкиДокумента.КурсВалютыУправленческогоУчета,
    СтруктураШапкиДокумента.КратностьДокумента,
    СтруктураШапкиДокумента.КратностьВалютыУправленческогоУчета);
    КонецЦикла;
    КонецПроцедуры // ПодготовитьТаблицуУслугУпр()
    // Выгружает результат запроса в табличную часть, добавляет ей необходимые колонки для проведения.
    //
    // Параметры:
    // РезультатЗапросаПоТаре - результат запроса по табличной части "ВозвратнаяТара",
    // СтруктураШапкиДокумента - выборка по результату запроса по шапке документа.
    //
    // Возвращаемое значение:
    // Сформированная таблица значений.
    //
    Функция ПодготовитьТаблицуТары(РезультатЗапросаПоТаре, СтруктураШапкиДокумента)
    ТаблицаТары = РезультатЗапросаПоТаре.Выгрузить();
    ТаблицаТары.Колонки.Добавить("СуммаБезНДС", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,2));
    ТаблицаТары.Колонки.Добавить("НДС", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,2));
    ТаблицаТары.Колонки.Добавить("ХарактеристикаНоменклатуры", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
    ТаблицаТары.Колонки.Добавить("СерияНоменклатуры", Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатуры"));
    // Надо заполнить новые колонки.
    Для каждого СтрокаТаблицы Из ТаблицаТары Цикл
    СтрокаТаблицы.СуммаБезНДС = СтрокаТаблицы.Сумма; // Сумма по таре всегда с НДС в валюте взаиморасчетов
    КонецЦикла;
    // Вызываем отдельные процедуры подготовки для упр. учета
    ПодготовитьТаблицуТарыУпр(ТаблицаТары, СтруктураШапкиДокумента);
    Возврат ТаблицаТары;
    КонецФункции // ПодготовитьТаблицуТары()
    // Добавляет в таблицу колонки, необходимые для упр. проведения.
    //
    Процедура ПодготовитьТаблицуТарыУпр(ТаблицаТары, СтруктураШапкиДокумента)
    // Надо добавить колонки.
    ТаблицаТары.Колонки.Добавить("СуммаВзаиморасчетов", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,2));
    ТаблицаТары.Колонки.Добавить("СуммаУпр", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,2));
    // Надо заполнить новые колонки.
    Для каждого СтрокаТаблицы Из ТаблицаТары Цикл
    // Суммы пересчитаем в валюту упр. учета
    СтрокаТаблицы.СуммаБезНДС = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СтрокаТаблицы.СуммаБезНДС, ВалютаДокумента,
    СтруктураШапкиДокумента.ВалютаУправленческогоУчета,
    СтруктураШапкиДокумента.КурсДокумента,
    СтруктураШапкиДокумента.КурсВалютыУправленческогоУчета,
    СтруктураШапкиДокумента.КратностьДокумента,
    СтруктураШапкиДокумента.КратностьВалютыУправленческогоУчета);
    СтрокаТаблицы.НДС = 0;
    СтрокаТаблицы.СуммаВзаиморасчетов = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СтрокаТаблицы.Сумма, ВалютаДокумента,
    СтруктураШапкиДокумента.ВалютаВзаиморасчетов,
    СтруктураШапкиДокумента.КурсДокумента,
    КурсВзаиморасчетов,
    СтруктураШапкиДокумента.КратностьДокумента,
    КратностьВзаиморасчетов);
    СтрокаТаблицы.СуммаУпр = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СтрокаТаблицы.Сумма, ВалютаДокумента,
    СтруктураШапкиДокумента.ВалютаУправленческогоУчета,
    СтруктураШапкиДокумента.КурсДокумента,
    СтруктураШапкиДокумента.КурсВалютыУправленческогоУчета,
    СтруктураШапкиДокумента.КратностьДокумента,
    СтруктураШапкиДокумента.КратностьВалютыУправленческогоУчета);
    КонецЦикла;
    КонецПроцедуры // ПодготовитьТаблицуТарыУпр()
    // Проверяет правильность заполнения шапки документа.
    // Если какой-то из реквизтов шапки, влияющий на проведение не заполнен или
    // заполнен не корректно, то выставляется флаг отказа в проведении.
    // Проверяется также правильность заполнения реквизитов ссылочных полей документа.
    // Проверка выполняется по объекту и по выборке из результата запроса по шапке.
    //
    // Параметры:
    // СтруктураШапкиДокумента - выборка из результата запроса по шапке документа,
    // Отказ - флаг отказа в проведении,
    // Заголовок - строка, заголовок сообщения об ошибке проведения.
    //
    Процедура ПроверитьЗаполнениеШапки(СтруктураШапкиДокумента, Отказ, Заголовок)
    // Укажем, что надо проверить:
    СтруктураОбязательныхПолей =
    Новый Структура("Организация, ВалютаДокумента,
    |Контрагент, ДоговорКонтрагента, КратностьВзаиморасчетов");
    Если СтруктураШапкиДокумента.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоСчетам Тогда
    ОбщегоНазначения.СообщитьОбОшибке("Документ можно выписывать только по договору, взаиморасчеты по которому ведутся по заказам или по договору в целом!", Отказ, Заголовок);
    КонецЕсли;
    // Вызовем общую процедуру для проверки проверки.
    ЗаполнениеДокументов.ПроверитьЗаполнениеШапкиДокумента(ЭтотОбъект, СтруктураОбязательныхПолей, Отказ, Заголовок);
    ПроверитьЗаполнениеШапкиУпр(СтруктураШапкиДокумента, Отказ, Заголовок);
    //Организация в документе должна совпадать с организацией, указанной в договоре взаиморасчетов.
    УправлениеВзаиморасчетами.ПроверитьСоответствиеОрганизацииДоговоруВзаиморасчетов(Организация, ДоговорКонтрагента, СтруктураШапкиДокумента.ДоговорОрганизация, Отказ, Заголовок);
    КонецПроцедуры // ПроверитьЗаполнениеШапки()
    // Проверяет правильность заполнения упр. реквизитов шапки
    //
    Процедура ПроверитьЗаполнениеШапкиУпр(СтруктураШапкиДокумента, Отказ, Заголовок)
    Если СтруктураШапкиДокумента.ВидСклада = Перечисления.ВидыСкладов.НТТ Тогда
    ОбщегоНазначения.СообщитьОбОшибке("Документ не может осуществлять заказ с НТТ!", Отказ, Заголовок);
    КонецЕсли;
    КонецПроцедуры // ПроверитьЗаполнениеШапкиУпр()
    // Проверяет правильность заполнения строк табличной части "Товары".
    //
    // Параметры:
    // Параметры:
    // ТаблицаПоТоварам - таблица значений, содержащая данные для проведения и проверки ТЧ Товары
    // СтруктураШапкиДокумента - выборка из результата запроса по шапке документа,
    // Отказ - флаг отказа в проведении.
    // Заголовок - строка, заголовок сообщения об ошибке проведения.
    //
    Процедура ПроверитьЗаполнениеТабличнойЧастиТовары(ТаблицаПоТоварам, СтруктураШапкиДокумента, Отказ, Заголовок)
    ИмяТабличнойЧасти = "Товары";
    // Укажем, что надо проверить:
    СтруктураОбязательныхПолей =
    Новый Структура("Номенклатура, Количество, Сумма");
    УправлениеЗапасами.КорректировкаСтруктурыОбязательныхПолей(ЭтотОбъект, ИмяТабличнойЧасти, СтруктураШапкиДокумента.ВидСклада, СтруктураОбязательныхПолей);
    Если УчитыватьНДС Тогда
    СтруктураОбязательныхПолей.Вставить("СтавкаНДС");
    КонецЕсли;
    ЗаполнениеДокументов.ПроверитьЗаполнениеТабличнойЧасти(ЭтотОбъект, "Товары", СтруктураОбязательныхПолей, Отказ, Заголовок);
    // Здесь услуг быть не должно.
    УправлениеЗапасами.ПроверитьЧтоНетУслуг(ЭтотОбъект, "Товары", ТаблицаПоТоварам, Отказ, Заголовок);
    // Здесь наборов-пакетов быть не должно.
    УправлениеЗапасами.ПроверитьЧтоНетНаборов(ЭтотОбъект, "Товары", ТаблицаПоТоварам, Отказ, Заголовок);
    // Здесь не должно быть размещений по НТТ
    УправлениеЗапасами.ПроверитьЧтоСкладНеНТТ(ЭтотОбъект, "Товары", ТаблицаПоТоварам, Отказ, Заголовок);
    КонецПроцедуры // ПроверитьЗаполнениеТабличнойЧастиТовары()
    // Проверяет правильность заполнения строк табличной части "Услуги".
    //
    // Параметры:
    // Параметры:
    // ТаблицаПоУслугам - таблица значений, содержащая данные для проведения и проверки ТЧ Услуги
    // СтруктураШапкиДокумента - выборка из результата запроса по шапке документа,
    // Отказ - флаг отказа в проведении.
    // Заголовок - строка, заголовок сообщения об ошибке проведения.
    //
    Процедура ПроверитьЗаполнениеТабличнойЧастиУслуги(ТаблицаПоУслугам, СтруктураШапкиДокумента, Отказ, Заголовок)
    ИмяТабличнойЧасти = "Услуги";
    // Укажем, что надо проверить:
    СтруктураОбязательныхПолей =
    Новый Структура("Номенклатура, Количество, Сумма, Содержание");
    Если УчитыватьНДС Тогда
    СтруктураОбязательныхПолей.Вставить("СтавкаНДС");
    КонецЕсли;
    УправлениеЗапасами.КорректировкаСтруктурыОбязательныхПолей(ЭтотОбъект, ИмяТабличнойЧасти, СтруктураШапкиДокумента.ВидСклада, СтруктураОбязательныхПолей);
    ЗаполнениеДокументов.ПроверитьЗаполнениеТабличнойЧасти(ЭтотОбъект, "Услуги", СтруктураОбязательныхПолей, Отказ, Заголовок);
    // Здесь товаров быть не должно.
    УправлениеЗапасами.ПроверитьЧтоНетТоваров(ЭтотОбъект, "Услуги", ТаблицаПоУслугам, Отказ, Заголовок);
    // Здесь наборов-пакетов быть не должно.
    УправлениеЗапасами.ПроверитьЧтоНетНаборов(ЭтотОбъект, "Услуги", ТаблицаПоУслугам, Отказ, Заголовок);
    // Здесь наборов-комплектов быть не должно.
    УправлениеЗапасами.ПроверитьЧтоНетКомплектов(ЭтотОбъект, "Услуги", ТаблицаПоУслугам, Отказ, Заголовок);
    КонецПроцедуры // ПроверитьЗаполнениеТабличнойЧастиУслуги()
    // Проверяет правильность заполнения строк табличной части "Возвратная тара".
    //
    // Параметры:
    // Параметры:
    // ТаблицаПоТаре - таблица значений, содержащая данные для проведения и проверки ТЧ "Возвратная тара",
    // СтруктураШапкиДокумента - выборка из результата запроса по шапке документа,
    // Отказ - флаг отказа в проведении.
    // Заголовок - строка, заголовок сообщения об ошибке проведения.
    //
    Процедура ПроверитьЗаполнениеТабличнойЧастиВозвратнаяТара(ТаблицаПоТаре, СтруктураШапкиДокумента,
    Отказ, Заголовок)
    ИмяТабличнойЧасти = "ВозвратнаяТара";
    // Укажем, что надо проверить:
    СтруктураОбязательныхПолей = Новый Структура("Номенклатура, Количество, Сумма");
    УправлениеЗапасами.КорректировкаСтруктурыОбязательныхПолей(ЭтотОбъект, ИмяТабличнойЧасти, СтруктураШапкиДокумента.ВидСклада, СтруктураОбязательныхПолей);
    ЗаполнениеДокументов.ПроверитьЗаполнениеТабличнойЧасти(ЭтотОбъект, "ВозвратнаяТара", СтруктураОбязательныхПолей, Отказ, Заголовок);
    // Здесь услуг быть не должно.
    УправлениеЗапасами.ПроверитьЧтоНетУслуг(ЭтотОбъект, "ВозвратнаяТара", ТаблицаПоТаре, Отказ, Заголовок);
    // Здесь наборов-пакетов быть не должно.
    УправлениеЗапасами.ПроверитьЧтоНетНаборов(ЭтотОбъект, "ВозвратнаяТара", ТаблицаПоТаре, Отказ, Заголовок);
    // Здесь наборов-комплектов быть не должно.
    УправлениеЗапасами.ПроверитьЧтоНетКомплектов(ЭтотОбъект, "ВозвратнаяТара", ТаблицаПоТаре, Отказ, Заголовок);
    // Здесь не должно быть размещений по НТТ
    УправлениеЗапасами.ПроверитьЧтоСкладНеНТТ(ЭтотОбъект, "ВозвратнаяТара", ТаблицаПоТаре, Отказ, Заголовок);
    // По возвратной таре не должен вестись учет по характеристикам.
    УправлениеЗапасами.ПроверитьЧтоНетНоменклатурыСХарактеристиками(ЭтотОбъект, "ВозвратнаяТара", ТаблицаПоТаре, Отказ, Заголовок);
    // Нельзя резервировать возвратную тару под заказ покупателя с обособленным учетом
    УправлениеЗаказами.ПроверитьРезервированиеТарыПодЗаказСОбособленнымУчетом(ЭтотОбъект,"Ссылка", истина, "Размещение", Отказ, Заголовок);
    КонецПроцедуры // ПроверитьЗаполнениеТабличнойЧастиВозвратнаяТара()
    // Функция удаляет из исходной таблицы строки не требующие размещения
    // Возвращается КОПИЯ исходной таблицы
    //
    Функция СоздатьТаблицуРазмещенияЗаказов(ТаблицаПоКомплектам)
    ТаблицаПоТоварамРазмещение = ТаблицаПоКомплектам.Скопировать();
    Сч = 0;
    Пока Сч < ТаблицаПоТоварамРазмещение.Количество() Цикл
    СтрокаТаблицы = ТаблицаПоТоварамРазмещение.Получить(Сч);
    Если НЕ ЗначениеЗаполнено(СтрокаТаблицы.Размещение)
    или ТипЗнч(СтрокаТаблицы.Размещение) = Тип("СправочникСсылка.Склады") Тогда
    ТаблицаПоТоварамРазмещение.Удалить(СтрокаТаблицы);
    Иначе
    Сч = Сч + 1;
    КонецЕсли;
    КонецЦикла;
    ТаблицаПоТоварамРазмещение.Колонки.Размещение.Имя = "ЗаказПоставщику";
    Возврат ТаблицаПоТоварамРазмещение;
    КонецФункции // СоздатьТаблицуРазмещенияЗаказов()
    // Функция удаляет из исходной таблицы строки не требующие резервирования
    // Возвращается КОПИЯ исходной таблицы
    //
    Функция СоздатьТаблицуРезервированияПодЗаказ(ТаблицаПоКомплектам)
    ТаблицаПоТоварамРезервирование = ТаблицаПоКомплектам.Скопировать();
    Сч = 0;
    Пока Сч < ТаблицаПоТоварамРезервирование.Количество() Цикл
    СтрокаТаблицы = ТаблицаПоТоварамРезервирование.Получить(Сч);
    Если НЕ ЗначениеЗаполнено(СтрокаТаблицы.Размещение)
    или ТипЗнч(СтрокаТаблицы.Размещение) <> Тип("СправочникСсылка.Склады") Тогда
    ТаблицаПоТоварамРезервирование.Удалить(СтрокаТаблицы);
    Иначе
    Сч = Сч + 1;
    КонецЕсли;
    КонецЦикла;
    ТаблицаПоТоварамРезервирование.Колонки.Размещение.Имя = "Склад";
    Возврат ТаблицаПоТоварамРезервирование;
    КонецФункции // СоздатьТаблицуРезервированияПодЗаказ()
    // По результату запроса по шапке документа формируем движения по регистрам.
    //
    // Параметры:
    // РежимПроведения - режим проведения документа (оперативный или неоперативный),
    // СтруктураШапкиДокумента - выборка из результата запроса по шапке документа,
    // ТаблицаПоТоварам - таблица значений, содержащая данные для проведения и проверки ТЧ Товары
    // ТаблицаПоТаре - таблица значений, содержащая данные для проведения и проверки ТЧ "Возвратная тара",
    // Отказ - флаг отказа в проведении,
    // Заголовок - строка, заголовок сообщения об ошибке проведения.
    //
    Процедура ДвиженияПоРегистрам(РежимПроведения, СтруктураШапкиДокумента,
    ТаблицаПоТоварам, ТаблицаПоУслугам, ТаблицаПоТаре,
    Отказ, Заголовок);
    ТаблицаПоКомплектам = УправлениеЗапасами.СформироватьТаблицуКомплектующих(ТаблицаПоТоварам, ЭтотОбъект);
    ДвиженияПоРегистрамУпр(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоКомплектам, ТаблицаПоУслугам,
    ТаблицаПоТаре, Отказ, Заголовок);
    Если СтруктураШапкиДокумента.ОбособленныйУчетТоваровПоЗаказамПокупателей Тогда
    ДвиженияПоРегиструСписанныеТовары(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоКомплектам, ТаблицаПоУслугам,
    ТаблицаПоТаре, Отказ, Заголовок);
    УчетнаяПолитика = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Дата);
    Если УчетнаяПолитика.СписыватьПартииПриПроведенииДокументов Тогда
    УправлениеЗапасамиПартионныйУчет.ДвижениеПартийТоваров(Ссылка, Движения.СписанныеТовары.Выгрузить());
    Иначе
    // В неоперативном режиме границы последовательностей сдвигаются назад, если они позже документа.
    Если РежимПроведения = РежимПроведенияДокумента.Неоперативный Тогда
    УправлениеЗапасамиПартионныйУчет.СдвигГраницыПоследовательностиПартионногоУчетаНазад(Дата, Ссылка, Организация)
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры // ДвиженияПоРегистрам()
    // Процедура формирует движение в регистру РасчетыСКонтрагентами
    //
    Процедура ДвиженияПоРасчетамСКонтрагентами( СтруктураШапкиДокумента, Отказ)
    // Движения по документу.
    Если СуммаДокумента = 0 Тогда
    Возврат;
    КонецЕсли;
    НаборДвижений = Движения.РасчетыСКонтрагентами;
    // Получим таблицу значений, совпадающую со структурой набора записей регистра.
    ТаблицаДвижений = НаборДвижений.ВыгрузитьКолонки();
    // Заполним таблицу движений.
    СтрокаДвижений = ТаблицаДвижений.Добавить();
    СтрокаДвижений.РасчетыВозврат = Перечисления.РасчетыВозврат.Расчеты;
    СтрокаДвижений.ДоговорКонтрагента = ДоговорКонтрагента;
    СтрокаДвижений.Контрагент = Контрагент;
    СтрокаДвижений.Организация = Организация;
    СтрокаДвижений.Сделка = Ссылка;
    СтрокаДвижений.СуммаВзаиморасчетов = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СуммаДокумента, ВалютаДокумента,
    СтруктураШапкиДокумента.ВалютаВзаиморасчетов,
    СтруктураШапкиДокумента.КурсДокумента, КурсВзаиморасчетов,
    СтруктураШапкиДокумента.КратностьДокумента, КратностьВзаиморасчетов);
    СтрокаДвижений.СуммаУпр = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СуммаДокумента, ВалютаДокумента,
    СтруктураШапкиДокумента.ВалютаУправленческогоУчета,
    СтруктураШапкиДокумента.КурсДокумента,
    СтруктураШапкиДокумента.КурсВалютыУправленческогоУчета,
    СтруктураШапкиДокумента.КратностьДокумента,
    СтруктураШапкиДокумента.КратностьВалютыУправленческогоУчета);
    НаборДвижений.мПериод = Дата;
    НаборДвижений.мТаблицаДвижений = ТаблицаДвижений;
    Если Не Отказ Тогда
    Движения.РасчетыСКонтрагентами.ВыполнитьПриход();
    КонецЕсли;
    КонецПроцедуры // ДвиженияПоРасчетамСКонтрагентами()
    // Формируем движения по упр. регистрам.
    //
    Процедура ДвиженияПоРегистрамУпр(РежимПроведения, СтруктураШапкиДокумента,
    ТаблицаПоТоварам, ТаблицаПоКомплектам, ТаблицаПоУслугам, ТаблицаПоТаре,
    Отказ, Заголовок);
    ДвиженияПоРасчетамСКонтрагентами( СтруктураШапкиДокумента, Отказ);
    Если Не Отказ Тогда
    // Движения по заказам покупателей.
    НаборДвижений = Движения.ЗаказыПокупателей;
    СтруктТаблицДокумента = Новый Структура;
    СтруктТаблицДокумента.Вставить("ТаблицаПоТоварам", ТаблицаПоТоварам);
    СтруктТаблицДокумента.Вставить("ТаблицаПоУслугам", ТаблицаПоУслугам);
    СтруктТаблицДокумента.Вставить("ТаблицаПоТаре", ТаблицаПоТаре);
    ТаблицыДанныхДокумента = ОбщегоНазначения.ЗагрузитьТаблицыДокументаВСтруктуру(НаборДвижений, СтруктТаблицДокумента);
    ОбщегоНазначения.УстановитьЗначениеВТаблицыДокумента(ТаблицыДанныхДокумента, "ЗаказПокупателя", Ссылка);
    ОбщегоНазначения.УстановитьЗначениеВТаблицыДокумента(ТаблицыДанныхДокумента, "ДоговорКонтрагента", ДоговорКонтрагента);
    ОбщегоНазначения.УстановитьЗначениеВТаблицыДокумента(ТаблицыДанныхДокумента, "СтатусПартии", ОпределитьСтатусПартии(), "ТаблицаПоТоварам");
    ОбщегоНазначения.УстановитьЗначениеВТаблицыДокумента(ТаблицыДанныхДокумента, "СтатусПартии", Перечисления.СтатусыПартийТоваров.Купленный, "ТаблицаПоУслугам");
    ОбщегоНазначения.УстановитьЗначениеВТаблицыДокумента(ТаблицыДанныхДокумента, "СтатусПартии", Перечисления.СтатусыПартийТоваров.ВозвратнаяТара, "ТаблицаПоТаре");
    ОбщегоНазначения.ЗаписатьТаблицыДокументаВРегистр(НаборДвижений, ВидДвиженияНакопления.Приход, ТаблицыДанныхДокумента, Дата);
    // Движения по размещениям.
    ТаблицаПоТоварамРазмещение = СоздатьТаблицуРазмещенияЗаказов(ТаблицаПоКомплектам);
    ТаблицаПоТареРазмещение = СоздатьТаблицуРазмещенияЗаказов(ТаблицаПоТаре);
    Если ТаблицаПоТоварамРазмещение.Количество() > 0 ИЛИ ТаблицаПоТареРазмещение.Количество() > 0 Тогда
    // По регистру РазмещениеЗаказовПокупателей
    НаборДвижений = Движения.РазмещениеЗаказовПокупателей;
    Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
    НаборДвижений.КонтрольОстатков(ЭтотОбъект, "Товары", СтруктураШапкиДокумента, Отказ, Заголовок);
    НаборДвижений.КонтрольОстатков(ЭтотОбъект, "ВозвратнаяТара", СтруктураШапкиДокумента, Отказ, Заголовок);
    КонецЕсли;
    Если Не Отказ Тогда
    СтруктТаблицДокумента = Новый Структура;
    СтруктТаблицДокумента.Вставить("ТаблицаПоТоварам", ТаблицаПоТоварамРазмещение);
    СтруктТаблицДокумента.Вставить("ТаблицаПоТаре", ТаблицаПоТареРазмещение);
    ТаблицыДанныхДокумента = ОбщегоНазначения.ЗагрузитьТаблицыДокументаВСтруктуру(НаборДвижений, СтруктТаблицДокумента);
    ОбщегоНазначения.УстановитьЗначениеВТаблицыДокумента(ТаблицыДанныхДокумента, "ЗаказПокупателя", Ссылка);
    ОбщегоНазначения.УстановитьЗначениеВТаблицыДокумента(ТаблицыДанныхДокумента, "ТоварТара", Перечисления.ТоварТара.Товар, "ТаблицаПоТоварам");
    ОбщегоНазначения.УстановитьЗначениеВТаблицыДокумента(ТаблицыДанныхДокумента, "ТоварТара", Перечисления.ТоварТара.Тара, "ТаблицаПоТаре");
    ОбщегоНазначения.ЗаписатьТаблицыДокументаВРегистр(НаборДвижений, ВидДвиженияНакопления.Приход, ТаблицыДанныхДокумента, Дата);
    КонецЕсли;
    КонецЕсли;
    // Движения по резервированиям.
    ТаблицаПоТоварамРезервирование = СоздатьТаблицуРезервированияПодЗаказ(ТаблицаПоКомплектам);
    ТаблицаПоТареРезервирование = СоздатьТаблицуРезервированияПодЗаказ(ТаблицаПоТаре);
    Если ТаблицаПоТоварамРезервирование.Количество() > 0 ИЛИ ТаблицаПоТареРезервирование.Количество() > 0 Тогда
    НаборДвижений = Движения.ТоварыВРезервеНаСкладах;
    // Проверка остатков при оперативном проведении.
    Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
    НаборДвижений.КонтрольОстатков(ЭтотОбъект, "Товары", СтруктураШапкиДокумента, Отказ, Заголовок);
    НаборДвижений.КонтрольОстатков(ЭтотОбъект, "ВозвратнаяТара", СтруктураШапкиДокумента, Отказ, Заголовок);
    КонецЕсли;
    Если Не Отказ Тогда
    СтруктТаблицДокумента = Новый Структура;
    СтруктТаблицДокумента.Вставить("ТаблицаПоТоварам", ТаблицаПоТоварамРезервирование);
    СтруктТаблицДокумента.Вставить("ТаблицаПоТаре", ТаблицаПоТареРезервирование);
    ТаблицыДанныхДокумента = ОбщегоНазначения.ЗагрузитьТаблицыДокументаВСтруктуру(НаборДвижений, СтруктТаблицДокумента);
    ОбщегоНазначения.УстановитьЗначениеВТаблицыДокумента(ТаблицыДанныхДокумента, "ДокументРезерва", Ссылка);
    ОбщегоНазначения.ЗаписатьТаблицыДокументаВРегистр(НаборДвижений, ВидДвиженияНакопления.Приход, ТаблицыДанныхДокумента, Дата);
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры // ДвиженияПоРегистрамУпр()
    // Заполняет колонки значениями, нужными для упр. учета
    //
    Процедура ЗаполнитьКолонкиРегистраСписанныеТоварыПоТоварамУпр(ТаблицаДвижений, СтруктураШапкиДокумента, ТаблицаПоТаре)
    ТаблицаДвижений.ЗаполнитьЗначения(Перечисления.СтатусыПартийТоваров.Купленный,"ДопустимыйСтатус1");
    ТаблицаДвижений.ЗаполнитьЗначения(Перечисления.СтатусыПартийТоваров.НаКомиссию,"ДопустимыйСтатус3");
    ТаблицаДвижений.ЗаполнитьЗначения(Подразделение,"Подразделение");
    ТаблицаДвижений.ЗаполнитьЗначения(Истина,"ОтражатьВУправленческомУчете");
    КонецПроцедуры // ЗаполнитьКолонкиРегистраСписанныеТоварыПоТоварамУпр()
    // Заполняет колонки значениями, нужными для упр. учета
    //
    Процедура ЗаполнитьКолонкиРегистраСписанныеТоварыПоВозвратнойТареУпр(ТаблицаДвижений, СтруктураШапкиДокумента, ТаблицаПоТаре)
    ТаблицаДвижений.ЗаполнитьЗначения(Перечисления.СтатусыПартийТоваров.ВозвратнаяТара,"ДопустимыйСтатус1");
    ТаблицаДвижений.ЗаполнитьЗначения(Подразделение,"Подразделение");
    ТаблицаДвижений.ЗаполнитьЗначения(Истина,"ОтражатьВУправленческомУчете");
    КонецПроцедуры // ЗаполнитьКолонкиРегистраСписанныеТоварыПоВозвратнойТареУпр()
    // Формируем движения по регистру СписанныеТовары
    //
    Процедура ДвиженияПоРегиструСписанныеТовары(РежимПроведения, СтруктураШапкиДокумента,
    ТаблицаПоТоварам, ТаблицаПоУслугам, ТаблицаПоТаре,
    Отказ, Заголовок)
    // ТОВАРЫ ПО РЕГИСТРУ СписанныеТовары
    ТаблицаПоТоварамРезервирование = СоздатьТаблицуРезервированияПодЗаказ(ТаблицаПоТоварам);
    ТаблицаПоТареРезервирование = СоздатьТаблицуРезервированияПодЗаказ(ТаблицаПоТаре);
    Если ТаблицаПоТоварамРезервирование.Количество() > 0 ИЛИ ТаблицаПоТареРезервирование.Количество() > 0 Тогда
    НаборДвижений = Движения.СписанныеТовары;
    СтруктТаблицДокумента = Новый Структура;
    СтруктТаблицДокумента.Вставить("ТаблицаПоТоварам", ТаблицаПоТоварамРезервирование);
    СтруктТаблицДокумента.Вставить("ТаблицаПоТаре", ТаблицаПоТареРезервирование);
    ТаблицыДанныхДокумента = ОбщегоНазначения.ЗагрузитьТаблицыДокументаВСтруктуру(НаборДвижений, СтруктТаблицДокумента);
    // Недостающие поля.
    Инд = 0;
    Для каждого Строка Из ТаблицыДанныхДокумента["ТаблицаПоТоварам"] Цикл
    Инд = Инд+1;
    Строка.НомерСтрокиДокумента = Инд;
    КонецЦикла;
    Для каждого Строка Из ТаблицыДанныхДокумента["ТаблицаПоТаре"] Цикл
    Инд = Инд+1;
    Строка.НомерСтрокиДокумента = Инд;
    КонецЦикла;
    ОбщегоНазначения.УстановитьЗначениеВТаблицыДокумента(ТаблицыДанныхДокумента, "КодОперацииПартииТоваров", Перечисления.КодыОперацийПартииТоваров.РезервированиеПодЗаказ);
    ОбщегоНазначения.УстановитьЗначениеВТаблицыДокумента(ТаблицыДанныхДокумента, "СписыватьТолькоПоЗаказу", Истина);
    ОбщегоНазначения.УстановитьЗначениеВТаблицыДокумента(ТаблицыДанныхДокумента, "ЗаказСписания", Ссылка);
    ЗаполнитьКолонкиРегистраСписанныеТоварыПоТоварамУпр ( ТаблицыДанныхДокумента["ТаблицаПоТоварам"], СтруктураШапкиДокумента, ТаблицаПоТоварам);
    ЗаполнитьКолонкиРегистраСписанныеТоварыПоВозвратнойТареУпр( ТаблицыДанныхДокумента["ТаблицаПоТаре"], СтруктураШапкиДокумента, ТаблицаПоТаре);
    ОбщегоНазначения.ЗаписатьТаблицыДокументаВРегистр(НаборДвижений, Неопределено, ТаблицыДанныхДокумента, Дата);
    Если Движения.СписанныеТовары.Модифицированность() Тогда
    Движения.СписанныеТовары.Записать(Истина);
    КонецЕсли;
    // Зарегистрируем в последовательности УУ
    ЗаписьРегистрации = ПринадлежностьПоследовательностям.ПартионныйУчет.Добавить();
    ЗаписьРегистрации.Период = Дата;
    КонецЕсли;
    КонецПроцедуры // ДвиженияПоРегиструСписанныеТовары()
    ////////////////////////////////////////////////////////////////////////////////
    // ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ ВЕБ-ПРИЛОЖЕНИЯ
    // Функция проверяет возможность расчета автоматических скидок в документе.
    //
    // Возвращаемое значение:
    // Булево.
    //
    Функция МожноРассчитыватьАвтоматическиеСкидки() Экспорт
    Если мРассчитыватьАвтоматическиеСкидки = Неопределено Тогда
    Если ПолучитьЗначениеУчетнойПолитики().ИспользоватьСкидкиПоКоличествуТовара
    Или ПолучитьЗначениеУчетнойПолитики().ИспользоватьСкидкиПоСуммеДокумента
    Или ПолучитьЗначениеУчетнойПолитики().ИспользоватьСкидкиПоВидуОплаты
    Или ПолучитьЗначениеУчетнойПолитики().ИспользоватьСкидкиПоДисконтнойКарте Тогда
    мРассчитыватьАвтоматическиеСкидки = Истина;
    Иначе
    мРассчитыватьАвтоматическиеСкидки = Ложь;
    КонецЕсли;
    КонецЕсли;
    Возврат мРассчитыватьАвтоматическиеСкидки;
    КонецФункции // МожноРассчитыватьАвтоматическиеСкидки()
    //Проверяет необходимость Расчета автоматических скидок
    //
    Функция РассчитыватьАвтоматическиеСкидки() Экспорт
    Возврат МожноРассчитыватьАвтоматическиеСкидки() И Не Проведен;
    КонецФункции // РассчитыватьАвтоматическиеСкидки()
    // Возвращает сумму документа с НДС
    //
    // Вовращаемое значение:
    // Сумма документа с НДС
    //
    Функция ПолучитьСуммуСНДС() Экспорт
    Возврат УчетНДС.ПолучитьСуммуДокументаСНДС(ЭтотОбъект, "Товары") +
    УчетНДС.ПолучитьСуммуДокументаСНДС(ЭтотОбъект, "Услуги");
    КонецФункции // ПолучитьСуммуСНДС()
    // Возвращает сумму НДС документа
    //
    // Вовращаемое значение:
    // Сумма НДС документа
    //
    Функция ПолучитьСуммуНДС() Экспорт
    Возврат УчетНДС.ПолучитьНДСДокумента(ЭтотОбъект, "Товары") +
    УчетНДС.ПолучитьНДСДокумента(ЭтотОбъект, "Услуги");
    КонецФункции // ПолучитьСуммуНДС()
    // Процедура рассчитывает суммы по заказу
    //
    Процедура РассчитатьСумму() Экспорт
    мСуммаВсего = ПолучитьСуммуСНДС();
    мСуммаВсегоНДС = ПолучитьСуммуНДС();
    КонецПроцедуры
    // Производит заполнение документа переданными из формы подбора данными.
    //
    // Параметры:
    // ТабличнаяЧасть - табличная часть, в которую надо добавлять подобранную позицию номенклатуры;
    // ЗначениеВыбора - структура, содержащая параметры подбора.
    //
    Функция ЗаполнитьТабличнуюЧастьИзПодбора(ТабличнаяЧасть, ЗначениеВыбора) Экспорт
    Перем СпособЗаполненияЦен, ВалютаЦены;
    Перем Номенклатура, ЕдиницаИзмерения, Количество, КоличествоМест, Цена, Характеристика;
    // Получим параметры подбора из структуры подбора.
    УправлениеЗапасами.ПолучитьПараметрыДокументаИзСтруктуры(ЗначениеВыбора, ТипЦен, СпособЗаполненияЦен,
    Номенклатура, Количество, КоличествоМест, Характеристика,
    ВалютаЦены, Цена, ЕдиницаИзмерения);
    Серия = ?(ЗначениеВыбора.Свойство("Серия"), ЗначениеВыбора.Серия, Справочники.СерииНоменклатуры.ПустаяСсылка());
    // Ищем выбранную позицию в таблице подобранной номенклатуры.
    // Если найдем - увеличим количество; не найдем - добавим новую строку.
    СтруктураОтбора = Новый Структура();
    Если ТабличнаяЧасть = Товары Тогда
    СтруктураОтбора.Вставить("ЕдиницаИзмерения", ЕдиницаИзмерения);
    СтруктураОтбора.Вставить("ХарактеристикаНоменклатуры", Характеристика);
    Если Серия <> NULL Тогда
    СтруктураОтбора.Вставить("СерияНоменклатуры", Серия);
    КонецЕсли;
    Иначе
    СтруктураОтбора.Вставить("Номенклатура", Номенклатура);
    КонецЕсли;
    СтрокаТабличнойЧасти = ОбработкаТабличныхЧастей.НайтиСтрокуТабЧасти(ТабличнаяЧасть, СтруктураОтбора);
    Если СтрокаТабличнойЧасти <> Неопределено Тогда
    Если ТабличнаяЧасть = Товары Тогда
    СуммаСтрокиДоИзменения = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Количество;
    // Нашли, увеличиваем количество в первой найденной строке.
    СтрокаТабличнойЧасти.Количество = СтрокаТабличнойЧасти.Количество + Количество;
    // Рассчитать реквизиты табличной части.
    ОбработкаТабличныхЧастей.РассчитатьКоличествоМестТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    //Расчет скидок
    Если Не ПересчитатьАвтоматическиеСкидки() Тогда
    ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    КонецЕсли;
    ИначеЕсли ТабличнаяЧасть = Услуги Тогда
    // Нашли, увеличиваем количество в первой найденной строке.
    СтрокаТабличнойЧасти.Количество = СтрокаТабличнойЧасти.Количество + Количество;
    // Рассчитать реквизиты табличной части.
    ОбработкаТабличныхЧастей.РассчитатьКоличествоМестТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    ИначеЕсли ТабличнаяЧасть = ВозвратнаяТара Тогда
    // Нашли, увеличиваем количество в первой найденной строке.
    СтрокаТабличнойЧасти.Количество = СтрокаТабличнойЧасти.Количество + Количество;
    // Рассчитать реквизиты табличной части.
    ОбработкаТабличныхЧастей.РассчитатьСуммуВозвратнойТарыТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    КонецЕсли;
    Иначе
    // Не нашли - добавляем новую строку.
    СтрокаТабличнойЧасти = ТабличнаяЧасть.Добавить();
    СтрокаТабличнойЧасти.Номенклатура = Номенклатура;
    Если ТабличнаяЧасть = Товары Тогда
    СтрокаТабличнойЧасти.Количество = Количество;
    СтрокаТабличнойЧасти.ЕдиницаИзмерения = ЕдиницаИзмерения;
    СтрокаТабличнойЧасти.Коэффициент = СтрокаТабличнойЧасти.ЕдиницаИзмерения.Коэффициент;
    СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры = Характеристика;
    СтрокаТабличнойЧасти.СерияНоменклатуры = Серия;
    // Заполняем реквизиты табличной части.
    ОбработкаТабличныхЧастей.ЗаполнитьСтавкуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, "Реализация");
    // Пересчитаем цену в валюту документа.
    Если Цена <> Неопределено Тогда
    Цена = Ценообразование.ПересчитатьЦенуПриИзмененииВалюты(Цена, ВалютаЦены, ВалютаДокумента, ЗаполнениеДокументов.КурсДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета), ЗаполнениеДокументов.КратностьДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета), Дата);
    СтрокаТабличнойЧасти.Цена = Ценообразование.ПересчитатьЦенуПриИзмененииФлаговНалогов(Цена,
    СпособЗаполненияЦен,
    ТипЦен.ЦенаВключаетНДС,
    УчитыватьНДС,
    СуммаВключаетНДС,
    УчетНДС.ПолучитьСтавкуНДС(СтрокаТабличнойЧасти.СтавкаНДС));
    Иначе
    ПриИзмененииНоменклатурыТоваров(СтрокаТабличнойЧасти);
    КонецЕсли;
    // Рассчитываем реквизиты табличной части.
    ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуМестТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, Ложь);
    //Расчет скидок
    Если Не ПересчитатьАвтоматическиеСкидки() Тогда
    ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    КонецЕсли;
    // Рассчитываем плановую себестоимость.
    ОбработкаТабличныхЧастей.РассчитатьПлановуюСебестоимостьВСтрокеТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, мВалютаРегламентированногоУчета);
    // Ввод состава набора
    СтрокаТабличнойЧасти.КлючСтроки = УправлениеЗапасами.ПолучитьНовыйКлючСтроки(ЭтотОбъект);
    УправлениеЗапасами.ДобавитьСоставНабора(СтрокаТабличнойЧасти, ЭтотОбъект);
    ИначеЕсли ТабличнаяЧасть = Услуги Тогда
    СтрокаТабличнойЧасти.Количество = Количество;
    // Заполняем реквизиты табличной части.
    ОбработкаТабличныхЧастей.ЗаполнитьСтавкуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, "Реализация");
    Если Цена <> Неопределено Тогда
    // Пересчитаем цену в валюту документа.
    Цена = Ценообразование.ПересчитатьЦенуПриИзмененииВалюты(Цена,
    ВалютаЦены,
    ВалютаДокумента,
    ЗаполнениеДокументов.КурсДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета),
    ЗаполнениеДокументов.КратностьДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета), Дата);
    СтрокаТабличнойЧасти.Цена = Ценообразование.ПересчитатьЦенуПриИзмененииФлаговНалогов(Цена,
    СпособЗаполненияЦен,
    ТипЦен.ЦенаВключаетНДС,
    УчитыватьНДС,
    СуммаВключаетНДС,
    УчетНДС.ПолучитьСтавкуНДС(СтрокаТабличнойЧасти.СтавкаНДС));
    Иначе
    СтрокаТабличнойЧасти.Цена = Ценообразование.ПолучитьЦенуНоменклатуры(СтрокаТабличнойЧасти.Номенклатура,
    Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка(),
    ТипЦен,
    Дата,
    Справочники.ЕдиницыИзмерения.ПустаяСсылка(),
    ВалютаДокумента,
    КурсВзаиморасчетов,
    КратностьВзаиморасчетов,,
    ДоговорКонтрагента);
    КонецЕсли;
    //Расчет скидок
    Если Не ПересчитатьАвтоматическиеСкидки() Тогда
    ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    КонецЕсли;
    ОбработкаТабличныхЧастей.ЗаполнитьСодержаниеТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    ИначеЕсли ТабличнаяЧасть = ВозвратнаяТара Тогда
    СтрокаТабличнойЧасти.Количество = Количество;
    // Пересчитаем цену в валюту документа.
    Цена = Ценообразование.ПересчитатьЦенуПриИзмененииВалюты(Цена, ВалютаЦены, ВалютаДокумента, ЗаполнениеДокументов.КурсДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета), ЗаполнениеДокументов.КратностьДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета), Дата);
    // Если цену заполнили из регистра, то ее надо пересчитывать по флагам налогообложения.
    // Считаем, что оценочную стоимость возвратной тары всегда задают с НД
    // ставки берутся из номенклатуры.
    СтрокаТабличнойЧасти.Цена = Ценообразование.ПересчитатьЦенуПриИзмененииФлаговНалогов(Цена,
    СпособЗаполненияЦен,
    ТипЦен.ЦенаВключаетНДС,
    УчитыватьНДС,
    Истина,
    УчетНДС.ПолучитьСтавкуНДС(СтрокаТабличнойЧасти.Номенклатура.СтавкаНДС));
    // Рассчитать реквизиты табличной части.
    ОбработкаТабличныхЧастей.РассчитатьСуммуВозвратнойТарыТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    КонецЕсли;
    КонецЕсли;
    Возврат СтрокаТабличнойЧасти;
    КонецФункции // ЗаполнитьТабличнуюЧастьИзПодбора()
    // Процедура выполняет необходимые действия при изменении договора взаиморасчетов
    // с контрагентом.
    //
    Процедура ПриИзмененииДоговора() Экспорт
    СпособЗаполненияЦен = Перечисления.СпособыЗаполненияЦен.ПоЦенамНоменклатуры;
    // Зададим, какие реквизиты надо редактировать.
    СтруктураРеквизитовДокумента = Ценообразование.ПолучитьСтруктуруРеквизитовДокументаДляЦенообразования(ЭтотОбъект);
    ЗаполнениеДокументов.ПриИзмененииЗначенияДоговора(ЭтотОбъект, мТекущаяВалютаВзаиморасчетов, мВалютаРегламентированногоУчета, СпособЗаполненияЦен, СтруктураРеквизитовДокумента, "Продажа", "Товары", мТекущийДоговорКонтрагента);
    //Расчет скидок
    ПересчитатьАвтоматическиеСкидки();
    мТекущаяВалютаВзаиморасчетов = ДоговорКонтрагента.ВалютаВзаиморасчетов;
    УправлениеЗаказами.УстановитьДатуОплатыПоДоговору(ЭтотОбъект,"ДоговорКонтрагента",мТекущийДоговорКонтрагента);
    РассчитатьСумму();
    КонецПроцедуры // ПриИзмененииДоговора()
    // Процедура вызывается при изменении значения Контрагент
    //
    Процедура ПриИзмененииКонтрагента() Экспорт
    // Выполняем общие действия для всех документов при изменении Контрагент.
    ЗаполнениеДокументов.ПриИзмененииЗначенияКонтрагента(ЭтотОбъект, мСтруктураПараметровДляПолученияДоговора);
    Если НЕ ЗначениеЗаполнено(КонтактноеЛицоКонтрагента) Тогда
    КонтактноеЛицоКонтрагента = Контрагент.ОсновноеКонтактноеЛицо;
    Иначе
    Если КонтактноеЛицоКонтрагента.Владелец <> Контрагент Тогда
    КонтактноеЛицоКонтрагента = Контрагент.ОсновноеКонтактноеЛицо;
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры // ПриИзмененииКонтрагента()
    // Процедура при изменении поля ввода номенклатуры в строке табличной части "Товары".
    //
    Процедура ПриИзмененииНоменклатурыТоваров(СтрокаТабличнойЧасти) Экспорт
    СуммаСтроки = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Количество;
    // Выполнить общие действия для всех документов при изменении номенклатуры.
    ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    // Заполняем реквизиты табличной части.
    ОбработкаТабличныхЧастей.ЗаполнитьСтавкуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, "Реализация");
    ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуЦенуПродажиТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, мВалютаРегламентированногоУчета);
    //Расчет скидок
    Если Не ПересчитатьАвтоматическиеСкидки() Тогда
    ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
    КонецЕсли;
    // Рассчитываем плановую себестоимость.
    ОбработкаТабличныхЧастей.РассчитатьПлановуюСебестоимостьВСтрокеТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, мВалютаРегламентированногоУчета);
    // Ввод состава набора
    УправлениеЗапасами.ДобавитьСоставНабора(СтрокаТабличнойЧасти, ЭтотОбъект);
    КонецПроцедуры // ПриИзмененииНоменклатурыТоваров()
    ////////////////////////////////////////////////////////////////////////////////
    // ОБРАБОТЧИКИ СОБЫТИЙ
    // Процедура - обработчик события "ОбработкаЗаполнения".
    //
    Процедура ОбработкаЗаполнения(Основание)
    ДокументОснование = Основание;
    Если ТипЗнч(Основание) = Тип("ДокументСсылка.Событие") Тогда
    // Заполнение шапки
    Комментарий = Основание.Комментарий;
    Ответственный = Основание.Ответственный;
    ЗаполнитьДокументПоОснованиюУпр(Основание);
    ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ЗаказПоставщику") Тогда
    // Заполнение шапки
    ВалютаДокумента = Основание.ВалютаДокумента;
    Подразделение = Основание.Подразделение;
    СкладГруппа = Основание.Склад;
    СуммаВключаетНДС = Основание.СуммаВключаетНДС;
    СуммаДокумента = Основание.СуммаДокумента;
    УчитыватьНДС = Основание.УчитыватьНДС;
    ОрганизацияКонтрагента = ЗаполнениеДокументов.ПолучитьОрганизациюПоКонтрагенту(Основание.Контрагент);
    Если ЗначениеЗаполнено(ОрганизацияКонтрагента) Тогда
    Контрагент = ЗаполнениеДокументов.ПолучитьКонтрагентаПоОрганизации( Основание.Организация);
    Организация = ЗаполнениеДокументов.ПолучитьОрганизациюПоКонтрагенту( Основание.Контрагент);
    ЗаполнениеДокументов.ПриИзмененииЗначенияКонтрагента(ЭтотОбъект);
    КонецЕсли;

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

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

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    В вашем коде даже разбираться не хочется. В печатную форму добавить поле комментарий. Далее в тексте найти то место где выводится область и присвоить комментарию нужное значение. По сути делов на 5 минут. Но если не знаете, то либо отдавайте эту работу знающему человеку, либо кидайте сюда. Может кто-нить откликнется. Запрос немножко нужно будет дописать.
  3. TopicStarter Overlay
    Stas2201
    Offline

    Stas2201

    Регистрация:
    19 дек 2012
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Люди добрые!
    Своими силами я не могу допереть как это реализовать! Какая информация нужна, чтоб вы могли помочь мне!?)

Поделиться этой страницей