Имя: Пароль:
1C
1C 7.7
v7: Торговля 9.2. УПД, столбец А (код номенклатуры)
0 Maria88
 
03.06.24
15:04
Всем Привет. Как в старой 1с 7.7 торговля ред9.2 в столбец А (код товара/работ,услуг) вывести номенклатура.Код?  В свойствах ячейки пишу <докум.номенклатура. Код> и выводит код ко всем позициям товара одинаковый как к  первой строке.
1 Волшебник
 
03.06.24
15:11
цикл покажите
2 Maria88
 
03.06.24
15:22
ПечатьУПД
////////////////////////////////////////////////////////////////////////////////
// ПРОЧИЕ ПРОЦЕДУРЫ И ФУНКЦИИ
//******************************************************************************

// глБратьСуммыИзУчета(ДатаОперации)
//
// Параметры:
//     ДатаОперации - дата, дата операции, отражаемой в печатной форме
//
// Возвращаемое значение:
//     Число, 1 - брать суммы из учета, 0 - брать суммы из табличной части
//
// Описание:
//  Возвращает режим формирования печатных форм - по суммам из табличной
//  части и по суммам, отраженным в учете. До начала действия приказа № 147
//  всегда возвращается 0, так как разница в режимах проявляется только
//  для операций, на которые распространяется действие данного приказа
//  (фактически 1 января 2008 года и позднее).
//
Функция глБратьСуммыИзУчета(ДатаОперации, КодОперации = "") Экспорт
        
    //Если ДатаОперации < глДатаПоПриказу147 Тогда
        Возврат 0;
        
    //ИначеЕсли (КодОперации = Перечисление.КодыОпераций.ВозвратОтРеализатора)
    //      ИЛИ (КодОперации = Перечисление.КодыОпераций.ВозвратКомитенту)
    //      ИЛИ (КодОперации = Перечисление.КодыОпераций.ПриемНаРеализацию)
    //      ИЛИ (КодОперации = Перечисление.КодыОпераций.ПриемНаРеализациюРозница)
    //      ИЛИ (КодОперации = Перечисление.КодыОпераций.ПередачаНаРеализацию) Тогда
    //    Возврат 0;
    //
    //Иначе
    //    Возврат Константа.СуммыВПечатныхФормахПоУчету;
    //    
    //КонецЕсли;    
    
КонецФункции // глБратьСуммыИзУчета()

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ
//
//
//******************************************************************************
// ПолучитьИНН(ИННКПП)
//
// Параметры:
//  ИННКПП  - строка, написанные вместе ИНН и КПП юр лица.
//
// Возвращаемое значение:
//  значение ИНН юр лица.
//  
// Описание:
//  Функция возращает ИНН из переданной строки
//
Функция ПолучитьИНН(ИННКПП)
    
    Если Найти(ИННКПП, "\") <> 0 Тогда
        // найден разделитель
        Возврат Лев(ИННКПП, Найти(ИННКПП, "\") - 1);

    Иначе
        Возврат СокрЛП(ИННКПП);

    КонецЕсли;

КонецФункции // ПолучитьИНН()

//******************************************************************************
// ПолучитьКПП(ИННКПП)
//
// Параметры:
//  ИННКПП  - строка, написанные вместе ИНН и КПП юр лица.
//
// Возвращаемое значение:
//  значение КПП юр лица.
//  
// Описание:
//  Функция возращает КПП из переданной строки
//
Функция ПолучитьКПП(ИННКПП)

    Если Найти(ИННКПП, "\") <> 0 Тогда
        // найден разделитель
        Возврат Сред(ИННКПП, Найти(ИННКПП, "\") + 1);

    Иначе
        Возврат "";

    КонецЕсли;

КонецФункции // ПолучитьКПП()

//******************************************************************************
// СоздатьСтруктуруМнЧ(МнЧ)
//
// Параметры:
//  Нет
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//
Процедура СоздатьСтруктуру(МнЧ)
    
    МнЧ = СоздатьОбъект("ТаблицаЗначений");
    МнЧ.НоваяКолонка("Цена",);
    МнЧ.НоваяКолонка("Сумма",);
    МнЧ.НоваяКолонка("СтавкаНДС");
    МнЧ.НоваяКолонка("СуммаНДС",);
    МнЧ.НоваяКолонка("СуммаНП",);
    МнЧ.НоваяКолонка("ВсегоСНДС",);
    МнЧ.НоваяКолонка("Номенклатура");
    МнЧ.НоваяКолонка("СтранаН");
    МнЧ.НоваяКолонка("СтранаК");
    МнЧ.НоваяКолонка("НомерГТД");
    МнЧ.НоваяКолонка("Единица");
    МнЧ.НоваяКолонка("ЕдиницаКод");
    МнЧ.НоваяКолонка("Количество");
    МнЧ.НоваяКолонка("АкцизЦена");
    
КонецПроцедуры // СоздатьСтруктуруМнЧ()    

//******************************************************************************
// СкорректироватьТаблицуОснования(МнЧ)
//
// Параметры:
//  ТаблицаОснования
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  Корректирует цену, сумму, сумму НДС и сумму НП по итогам проведения
//  документа основания по регистрам в зависимости от вида документа
//
Процедура СкорректироватьТаблицуОснования(Докум, ТаблицаОснования, ВидОсн)

    Если (ВидОсн = "Реализация") ИЛИ (ВидОсн = "РеализацияПрочее") Тогда

        ПечВалюта = Константа.ВалютаБухУчета;

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

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

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

    Если ПустоеЗначение(ДокумСФ.ДатаПлатРасчДок) = 1 Тогда
        ПечДатаПлатРасчДок = "";    
    Иначе
        ПечДатаПлатРасчДок  = Формат(ДокумСФ.ДатаПлатРасчДок ,"Д ДДММГГГГ") + " г.";
    КонецЕсли;
    //ШапкаИПодвал.ДобавитьЗначение(СокрЛ(ДокумСФ.НомерПлатРасчДок) + "  от  " + ПечДатаПлатРасчДок, "ПечНомерПлатРасчДок");

    ТекПлатСтр = "";
    Если (ПустоеЗначение(ДокумСФ.НомерПлатРасчДок) * ПустоеЗначение(ДокумСФ.ДатаПлатРасчДок))=0 Тогда
        ТекПлатСтр = СокрЛП(ДокумСФ.НомерПлатРасчДок) + "  от  " + ПечДатаПлатРасчДок;
    
        //РеквШапкиПоДокументу=РеквШапки.Получить("ПоДокументу");
        Если (ПустоеЗначение(ДокумСФ.НомерПлатРасчДок1) * ПустоеЗначение(ДокумСФ.ДатаПлатРасчДок1))=0 Тогда
            ТекПлатСтр=ТекПлатСтр+", № "+Сокрлп(Строка(ДокумСФ.НомерПлатРасчДок1))+" от "+Строка(ДокумСФ.ДатаПлатРасчДок1);
        КонецЕсли;
        Если ПустоеЗначение(ДокумСФ.НомерПлатРасчДок2) * ПустоеЗначение(ДокумСФ.ДатаПлатРасчДок2)=0 Тогда
            ТекПлатСтр=ТекПлатСтр+", № "+Сокрлп(Строка(ДокумСФ.НомерПлатРасчДок2))+" от "+Строка(ДокумСФ.ДатаПлатРасчДок2);
        КонецЕсли;
        Если ПустоеЗначение(ДокумСФ.НомерПлатРасчДок3) * ПустоеЗначение(ДокумСФ.ДатаПлатРасчДок3)=0 Тогда
            ТекПлатСтр=ТекПлатСтр+", № "+Сокрлп(Строка(ДокумСФ.НомерПлатРасчДок3))+" от "+Строка(ДокумСФ.ДатаПлатРасчДок3);
        КонецЕсли;
    КонецЕсли;
    ШапкаИПодвал.ДобавитьЗначение(ТекПлатСтр, "ПечНомерПлатРасчДок");


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

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

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

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

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

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

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

//******************************************************************************
// ПодготовитьМнЧПоСчетуНаОплатуУПД()
//
// Параметры:
//  Нет
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//
Функция ПодготовитьМнЧПоСчетуНаОплатуУПД(Докум, ДокумСФ, МнЧ, Итоги, ФорматКоличества)
    
    Итоги = СоздатьОбъект("СписокЗначений");
    СоздатьСтруктуру(МнЧ);

    Если Докум.СуммаВклНДС = 0 Тогда
        СуммаСчета = Докум.Итог("Сумма") + Докум.Итог("СуммаНДС");

    Иначе
        СуммаСчета = Докум.Итог("Сумма");
        
    КонецЕсли;
    
    ИтогСумма          = 0;
    КороткийПрочерк = "-";
    
    Если СуммаСчета  > 0 Тогда
        
        Если ДокумСФ.СуммаАвансаПоУчету = 1 Тогда

            СуммаАвансаОснования = 0;
            РегПокупатели = СоздатьОбъект("Регистр.Покупатели");
            РегПокупатели.ВыбратьДвиженияДокумента(Докум);
            Пока РегПокупатели.ПолучитьДвижение() = 1 Цикл
                Если РегПокупатели.ВидДолга = глВД.Аванс Тогда
                       СуммаАвансаОснования = СуммаАвансаОснования + РегПокупатели.СуммаРуб - РегПокупатели.СуммаНП;
                КонецЕсли;
            КонецЦикла;
        
            К = СуммаАвансаОснования / СуммаСчета;

        Иначе        
            К = Докум.Сумма / СуммаСчета;
        
        КонецЕсли;
        
        Докум.ВыбратьСтроки();
        Пока Докум.ПолучитьСтроку() = 1 Цикл
            
            МнЧ.НоваяСтрока();
            
            ВывелиСтроку     = 1;
            МнЧ.Номенклатура = Докум.Номенклатура.ПолнНаименование + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(Докум.Номенклатура.Артикул), "");
            МнЧ.ЕдиницаКод = КороткийПрочерк;
            МнЧ.Единица = КороткийПрочерк;
            МнЧ.Количество   = 0;
            МнЧ.АкцизЦена = КороткийПрочерк;
            МнЧ.Цена        = 0;
                    
            Если ПустоеЗначение(Докум.Сумма) = 1 Тогда
                
                МнЧ.Сумма        = 0;
                МнЧ.СтавкаНДС    = "без НДС";
                МнЧ.СуммаНДС    = 0;
                МнЧ.СуммаНП        = КороткийПрочерк;
                МнЧ.ВсегоСНДС    = 0;
                                            
            Иначе
                
                ИтогСумма        = ИтогСумма + К * Докум.Сумма - К * Докум.СуммаНП;
                Если Докум.СтавкаНДС = Перечисление.СтавкиНДС.НДС10 Тогда
                    МнЧ.СтавкаНДС    = Строка(Перечисление.СтавкиНДС.НДС10_110);
                    
                ИначеЕсли Докум.СтавкаНДС = Перечисление.СтавкиНДС.НДС18 Тогда
                    МнЧ.СтавкаНДС    = Строка(Перечисление.СтавкиНДС.НДС18_118);
                    
                ИначеЕсли Докум.СтавкаНДС = Перечисление.СтавкиНДС.НДС20 Тогда
                    МнЧ.СтавкаНДС    = Строка(Перечисление.СтавкиНДС.НДС20_120);
                    
                Иначе
                    МнЧ.СтавкаНДС    = Строка(Докум.СтавкаНДС);
                    
                КонецЕсли;
                
                МнЧ.СуммаНДС    = ?(Докум.СтавкаНДС = Перечисление.СтавкиНДС.безНДС, КороткийПрочерк, глФРМ(К * Докум.СуммаНДС,,,""));
                            
                Если Докум.СуммаВклНДС = 0 Тогда
                    МнЧ.ВсегоСНДС    = К * Докум.Сумма + К * Докум.СуммаНДС - К * Докум.СуммаНП;                                                
                Иначе
                    МнЧ.ВсегоСНДС    = К * Докум.Сумма - К * Докум.СуммаНП;
                КонецЕсли;
                
                МнЧ.Сумма        = 0;

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


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

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

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

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

//******************************************************************************  
//
//ПолучитьСклонениеНомераСтраницы(НомерЛиста)
//
//Параметры:
// НомерЛиста - номер листа, склонение которого надо возвратить
//
//Возвращаемое значение:
// номер листа в правильном падеже
//
Функция ПолучитьСклонениеНомераСтраницы(НомерСтраницы)                      
    
    Если (НомерСтраницы = 1) или (НомерСтраницы = 21)
    или (НомерСтраницы = 31) или (НомерСтраницы = 41)
    или (НомерСтраницы = 51) или (НомерСтраницы = 61)
    или (НомерСтраницы = 71) или (НомерСтраницы = 81)
    или (НомерСтраницы = 91) или (НомерСтраницы = 101) Тогда
        
        Возврат "листе";
    КонецЕсли;
    
    Возврат "листах";    
    
КонецФункции  

//******************************************************************************
// ПечатьУПД(СразуНаПринтер, КолЭкз)
//
// Параметры:
//  СразуНаПринтер - (1) если печать на принтер, (0) - с предварительным просмотром
//  КолЭкз - количество экземпляров печати
//
// Возвращаемое значение:
//  нет.
//
// Описание:
//
Процедура ПечатьУПД(Знач Докум, Устройство=0, КолвоКопий=1) Экспорт
    
    Перем ШапкаИПодвал, МнЧ, Итоги, ФорматКоличества;
    Перем ТекстВал;
    
    
    ДокументыОбОтгрузке="";
    
    
    Если Докум.ДатаДок < '01.01.2013' Тогда
        ТекстСообщения = "Универсальный передаточный документ" "можно сформировать, начиная с 01.01.2013 г.";
        Предупреждение(ТекстСообщения );
        Возврат;             
    КонецЕсли;
    
    СтатусУПД  = 0;
    ТекстПредупреждения = "";
    ТекДок = ПолучитьПустоеЗначение();
    
    Если Докум.Вид() = "СчетФактураВыданный" Тогда
        ТекДок = Докум;
        ТекДокОснование = ТекДок.ДокОснование;
        Если (ПустоеЗначение(ТекДокОснование.ТекущийДокумент()) = 0) Тогда
            Докум = ТекДокОснование;
        КонецЕсли;
        
        СтатусУПД = 1;
    ИначеЕсли Докум.Вид() = "ИсправлениеСчетаФактуры" Тогда
        Если Докум.ДокОснование.Вид() = "СчетФактураВыданный" Тогда
            ТекДок = Докум.ДокОснование;
        КонецЕсли;
    КонецЕсли;    
    
    Если ПустоеЗначение(ТекДок) = 0 Тогда
        ТекущийПодчДок = ТекДок;
        СтатусУПД = 2;
    КонецЕсли;    
    
    Если (ПустоеЗначение(Докум.ТекущийДокумент()) = 0) и (СтатусУПД = 0) Тогда    
        ПодчДок = СоздатьОбъект("Документ");  
        ПодчДок.ВыбратьПодчиненныеДокументы(Докум.ДатаДок,, Докум.ТекущийДокумент());
        ТекущийПодчДок = ПолучитьПустоеЗначение("Документ");
        
        Пока ПодчДок.ПолучитьДокумент() = 1 Цикл
            Если ПодчДок.Вид() = "СчетФактураВыданный" Тогда
                Если ПодчДок.ПометкаУдаления() = 1 Тогда
                    Продолжить;
                КонецЕсли;
            
                ТекущийПодчДок = ПодчДок.ТекущийДокумент();     
                
                Прервать;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    
    ПодготовитьРеквизитыШапкиУПД(Докум, ТекущийПодчДок, ШапкаИПодвал);
    
    ВидОсн = Докум.Вид();
    
    Если (ВидОсн = "СчетФактураВыданный") и (Докум.КоличествоСтрок() = 0) Тогда
        ПодготовитьМнЧУПД(Докум, ТекущийПодчДок, МнЧ, Итоги, ФорматКоличества);
    ИначеЕсли Докум.Вид() = "ИсправлениеСчетаФактуры" Тогда
        ПодготовитьМнЧИспрУПД(Докум, ТекущийПодчДок, МнЧ, Итоги, ФорматКоличества);
    ИначеЕсли ВидОсн = "ОтчетКомитенту" Тогда
        ПодготовитьПоКнигеПродажУПД(Докум, МнЧ, Итоги, ФорматКоличества, "Комиссионное вознаграждение");
    ИначеЕсли ВидОсн = "ЗакрытиеМесяца" Тогда
        ПодготовитьПоКнигеПокупокУПД(Докум, МнЧ, Итоги, ФорматКоличества, "Корректировка НДС, предъявляемого к вычету");
    ИначеЕсли (ВидОсн = "ВводОстатковПокупателя") или (ВидОсн = "ОтчетКомиссионера") Тогда
        ПодготовитьМнЧоснУПД(Докум, МнЧ, Итоги, ФорматКоличества);
    ИначеЕсли (ВидОсн = "ПКО") ИЛИ (ВидОсн = "КорректировкаДолга") ИЛИ (ВидОсн = "РКО") ИЛИ (ВидОсн = "СтрокаВыпискиПриход") ИЛИ (ВидОсн = "СтрокаВыпискиРасход") Тогда
        ПодготовитьМнЧУПД(Докум, ТекущийПодчДок, МнЧ, Итоги, ФорматКоличества);
        ПечВалюта = "наименование, код " + СокрЛП(глРубли.ПолнНаименование) +", " + глРубли.Код;
    Иначе
        ПодготовитьМнЧоснУПД(Докум,МнЧ, Итоги, ФорматКоличества);
    КонецЕсли;
    
    
    ПустойПоказатель = "----";
    
    Постановление981      = ?(Докум.ДатаДок >= '01.10.2017', 1, 0);
         
    Таб = СоздатьОбъект("Таблица");
    
    Если Постановление981 = 0 Тогда
        Таб.ИсходнаяТаблица("Таблица");
    Иначе
        Таб.ИсходнаяТаблица("УПД534");
    КонецЕсли;
    
    ПечНомерДокумента = ШапкаИПодвал.Получить("ПечНомерДокумента");
    ПечДатаДокумента = ШапкаИПодвал.Получить("ПечДатаДокумента");
    ПечНомерИсправления = ШапкаИПодвал.Получить("ПечНомерИсправления");
    ПечДатаИсправления = ШапкаИПодвал.Получить("ПечДатаИсправления");
    ПечПродавец = ШапкаИПодвал.Получить("ПечПродавец");
    ПечПродавецАдрес = ШапкаИПодвал.Получить("ПечПродавецАдрес");
    ПечСтатусУПД = ШапкаИПодвал.Получить("ПечСтатусУПД");
    ПечПродавецИННКПП = ШапкаИПодвал.Получить("ПечПродавецИННКПП");
    ПечГрузоотправитель = ШапкаИПодвал.Получить("ПечГрузоотправитель");
    ПечГрузополучатель = ШапкаИПодвал.Получить("ПечГрузополучатель");
    ПечНомерПлатРасчДок = ШапкаИПодвал.Получить("ПечНомерПлатРасчДок");
    ПечДатаПлатРасчДок = ШапкаИПодвал.Получить("ПечДатаПлатРасчДок");
    ПечПокупатель = ШапкаИПодвал.Получить("ПечПокупатель");
    ПечПокупательАдрес = ШапкаИПодвал.Получить("ПечПокупательАдрес");
    ПечПокупательИННКПП = ШапкаИПодвал.Получить("ПечПокупательИННКПП");
    ВалютаПечати = ШапкаИПодвал.Получить("ВалютаПечати");
    
    ПечОснование = ШапкаИПодвал.Получить("ПечОснование");
    ПечДатаОтгрузкиПередачи = ШапкаИПодвал.Получить("ПечДатаОтгрузкиПередачи");
    ПечПредставлениеОрганизации = ШапкаИПодвал.Получить("ПечПредставлениеОрганизации");
    ПечПредставлениеКонтрагента = ШапкаИПодвал.Получить("ПечПредставлениеКонтрагента");
    
    ПечРуководитель = ШапкаИПодвал.Получить("ПечРуководитель");
    ПечГлБухгалтер = ШапкаИПодвал.Получить("ПечГлБухгалтер");
    ПечПредприниматель = ШапкаИПодвал.Получить("ПечПредприниматель");
    ПечПредпринимательРеквизитыСвидетельства = ШапкаИПодвал.Получить("ПечПредпринимательРеквизитыСвидетельства");
    
    Если  (глЕстьРеквизитШапки("ИдентификаторГосКонтракта", Докум.Вид()) = 1) Тогда
        ПечИдентификаторГосКонтракта = Докум.ИдентификаторГосКонтракта;
    Иначе    
        ПечИдентификаторГосКонтракта = "";
    КонецЕсли;
    
    Если (Докум.ДатаДок >= '01.07.2017') и (Постановление981 = 0) Тогда    
        Таб.ВывестиСекцию("Шапка625");
    Иначе
        Таб.ВывестиСекцию("Шапка");
    КонецЕсли;
    
    Таб.ВывестиСекцию("ЗаголовокТаблицы");
    
    
    // Печать строк документа.
    МнЧ.ВыбратьСтроки();
    НомерСтроки = 0;
    ТоварКод = "";
    НомерСтраницы = 1;
    
    //СтрокНаСтранице = 28;
    СтрокНаСтранице = 26;
    //СтрокШапки = 9;
    СтрокШапки = 7;
    СтрокПодвала = 13;
    
    Если МнЧ.КоличествоСтрок() <= 26 Тогда
        ПереноситьПоследнююСтроку = 1;
    Иначе
        ЦелыхСтраницСПодвалом = Цел((СтрокШапки + МнЧ.КоличествоСтрок() + СтрокПодвала) / СтрокНаСтранице);
        ЦелыхСтраницБезПодвала = Цел((СтрокШапки + МнЧ.КоличествоСтрок() - 0) / СтрокНаСтранице);
        ПереноситьПоследнююСтроку = ЦелыхСтраницСПодвалом - ЦелыхСтраницБезПодвала;
    КонецЕсли;
    
    Пока МнЧ.ПолучитьСтроку() = 1 Цикл
        
        НомерСтроки = НомерСтроки + 1;
        
        ЦелаяСтраница = (СтрокШапки + НомерСтроки - 0) / (СтрокНаСтранице);
        
        Если (ЦелаяСтраница = Цел(ЦелаяСтраница))  
        или ((ПереноситьПоследнююСтроку = 0) и (НомерСтроки = МнЧ.КоличествоСтрок())) Тогда
            Таб.НоваяСтраница();
            НомерСтраницы = НомерСтраницы + 1;
            Таб.ВывестиСекцию("ЗаголовокТаблицы");
        КонецЕсли;
        
        НомерСтраницыПрописью = ПолучитьСклонениеНомераСтраницы(НомерСтраницы);    
        
        Если Постановление981 = 1 Тогда
            ТоварКодТНВЭД = "----";
        КонецЕсли;
        
        Если ТипЗначения(МнЧ.Количество) = 1 Тогда
            МнЧ.Количество = Формат(МнЧ.Количество, ФорматКоличества);
        КонецЕсли;
        
        Наименование = СокрЛП(МнЧ.Номенклатура);
        ЕдиницаИзмеренияКод = МнЧ.ЕдиницаКод;
        ЕдиницаИзмерения = МнЧ.Единица;
        ПечКоличество = ?(МнЧ.Количество=0, ПустойПоказатель, Формат(МнЧ.Количество, ФорматКоличества));
        ПечЦена = ?(МнЧ.Цена=0, ПустойПоказатель, Формат(МнЧ.Цена,"Ч15.2"));
        ПечСумма = ?(МнЧ.Сумма=0, ПустойПоказатель, Формат(МнЧ.Сумма,"Ч015.2"));
        ПечАкциз = МнЧ.АкцизЦена;
        ПредставлениеСтавкиНДС = ?(ПустоеЗначение(МнЧ.СуммаНДС) = 1, "Без НДС", МнЧ.СтавкаНДС);
        ПечНДС = ?(ПустоеЗначение(МнЧ.СуммаНДС) = 1, ПустойПоказатель, МнЧ.СуммаНДС);
        ПечВсего = ?(МнЧ.ВсегоСНДС=0, ПустойПоказатель, Формат(МнЧ.ВсегоСНДС,"Ч15.2"));
        СтранаКод = МнЧ.СтранаК;
        СтранаН = МнЧ.СтранаН;
        НомерГТД_Н = МнЧ.НомерГТД;

        Таб.ВывестиСекцию("Строка");
        
    КонецЦикла;
    ПечИтогБезНДС = ?(Итоги.Получить("ИтогСумма")=0,ПустойПоказатель, Формат(Итоги.Получить("ИтогСумма"),"Ч15.2"));
    ПечИтогНДС = ?(Итоги.Получить("ИтогСуммаНДС")=0,ПустойПоказатель, Формат(Итоги.Получить("ИтогСуммаНДС"),"Ч15.2"));
    ПечИтогВсего = ?(Итоги.Получить("ИтогВсегоСНДС")=0,ПустойПоказатель, Формат(Итоги.Получить("ИтогВсегоСНДС"),"Ч15.2"));
    
    Таб.ВывестиСекцию("Подвал");
    
    Таб.ВывестиСекцию("ПодвалНакладной");
    
    Если Устройство = 0 Тогда
        Таб.Опции(0, 0, 0, 0, "ОпцииПечатиУПД", "ОкноУПД");

        Если глПолучитьПолномочие("РазрешитьРедактированиеТаблиц") = 0 Тогда
            Таб.Защита(1);
        Иначе
            Таб.Защита(0);
        КонецЕсли;
        Таб.ТолькоПросмотр(1);
        Таб.ПараметрыСтраницы(2,,,,,,,,,1,,);
        Таб.Показать("Печать универсального передаточного документа","");  
    Иначе    
        Таб.Опции(0, 0, 0, 0, "ОпцииПечатиУПД", "ОкноУПД");
        Таб.КоличествоЭкземпляров(КолвоКопий);
        Таб.Напечатать(0);
    КонецЕсли;
    
КонецПроцедуры // ПечатьУПД()

//******************************************************************************
// ПоКнопкеПечать()
//
// Параметры:
//  Нет
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//
Процедура ПоКнопкеПечать()
    
    Если Док.Выбран() = 0 Тогда
        Предупреждение("Не выбран документ!", 60);
        Возврат;
    КонецЕсли;
    
    ПечатьУПД(Док);
    
КонецПроцедуры // ПоКнопкеПечать()

////////////////////////////////////////////////////////////////////////////////
// ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ
//
//******************************************************************************
// Предопределенная процедура
//
Процедура ПриОткрытии()
    
    Если ПустоеЗначение(Форма.Параметр) = 0 Тогда
        
        Докум      = Форма.Параметр.Получить("Контекст");
        Устройство = Форма.Параметр.Получить("Устройство");
        КолвоКопий = Форма.Параметр.Получить("КоличествоКопий");
    
        Если Докум.Выбран() = 0 Тогда
            Предупреждение("Не записан документ!", 60);
            Статусвозврата(0);
            Возврат;
        Иначе
            Докум = Докум.ТекущийДокумент();
        КонецЕсли;
                
        ПечатьУПД(Докум, Устройство, КолвоКопий);
        Статусвозврата(0);
        Возврат;
    КонецЕсли;
    
КонецПроцедуры // ПриОткрытии()

////////////////////////////////////////////////////////////////////////////////
3 Волшебник
 
03.06.24
15:18
Щас, разберёмся. Не кладите трубку. Ваш звонок очень важен для нас
4 Волшебник
 
03.06.24
15:25
	// Печать строк документа.
	МнЧ.ВыбратьСтроки();
	НомерСтроки = 0; 
	ТоварКод = "";


Ниже ТоварКод не заполняется. Заполните
5 Maria88
 
03.06.24
15:27
А что именно там надо прописать?
6 Злопчинский
 
03.06.24
15:27
(2) ну и нахрена нам здесь ВСЯ простыня из модуля формы? Типа ешьте дорогие гости, мы в этом году поросёнка не держим...
7 Волшебник
 
03.06.24
15:29
(5) Что-нибудь мудрое, красивое, вечное. Вам с этой семёркой ещё сто лет работать
8 Смотрящий
 
03.06.24
15:30
(6) Это лучшее, чем дятлы не способные внятно сформулировать проблему или выложить скриншот
9 Maria88
 
03.06.24
15:30
Извините, мне сказали цикл показать, я показала. Если бы понимала как сделать,  сделала бы сама и не спрашивала
10 Смотрящий
 
03.06.24
15:31
(5) Начните с классического "х$й". Сохраните обработку, откройте в режиме предприятия.
Посмотрите на рузельтат.
11 Злопчинский
 
03.06.24
15:32
(0) при печати выводятся не строки доекумента, а строки предварительно подготовленной по документу таблицы значений. Поэтому то что вы вообще не смотря ни в код, ни в другие ячейки строки макета тупо захерачили обращение к документу - то и получили. По всём строкам вывода из перебираемых строк ТЗ (МНЧ) сьроки документа не перебираются, выводится код товара по той строке документа которая текущая...
12 Злопчинский
 
03.06.24
15:33
(9) это нё цикл.
Это весь код модуля формы.
Страшно подумать что такое в твоём понимании цикл
13 Злопчинский
 
03.06.24
15:36
При подготовке выводимой МНЧ
В колонку МНЧ "номенклатура" пишется либо ссылка на номенклатуру и тогда в шаблоне достаточно написать МНЧ. Номенклатура.код
Или пишется в МНЧ наименование номенклатуры и тогда придётся в МНЧ делать колонку типа НоменклатураКод и заполнять жив колонку при подготовке МНЧ
14 Maria88
 
03.06.24
15:40
(12) если в модуле к этой строке вообще ничего не прописано то что мне надо было скинуть?
15 Злопчинский
 
03.06.24
15:42
(8) тут согласен стопудтво
16 Злопчинский
 
03.06.24
15:44
(14) кусок кода который  отвечает за печать.
Например процедуру
ПечатьУпд
И вызываемые из неё процедуры для подготовки данных для печать
Например
ПодготтвттьМнчУПД
17 Arbuz
 
03.06.24
15:45
(0) В свойствах ячейки надо писать не <докум.номенклатура. Код>, а <МнЧ.Номенклатура.Код>
18 Злопчинский
 
03.06.24
15:48
(14) выращивание тонн лишнего ненужного кода здесь не любят. И не потому что это тонны кода, а потому что это свидетельствует о том, что ты не удосужилась приложить усилия чтобы хотя бы немного разобраться. Халявщиков здесь не любят. И даже немножко гнобят.
19 Злопчинский
 
03.06.24
15:49
(17) там в МНЧ.Номенклатуоа скорее всего строка наименования. Мне с телефона влом мелкое смотреть. Минут через 20 дома в компа буду, если не затопчут насмерть ТС - будем посмотреть дальше
20 Волшебник
 
03.06.24
15:50
(17) А лучше ТоварКод, который заполнить в цикле
21 Волшебник
 
03.06.24
15:50
(19) Да его завтра уже не будет. Под каждую ветку генерят отдельный ник.
22 Maria88
 
03.06.24
15:52
(17) тогда значение не представляет агрегатный объект(Код)
23 Maria88
 
03.06.24
16:05
(21) да я первый раз здесь вопрос задала. Не получается через структуру МнЧ вывести номенклатура.Код , в обычной торг 12 номенклатура.Код вводится корректно, когда просто свойства  ячейки заполняю.
24 Злопчинский
 
03.06.24
16:23
(22) читаем ЕЩЕ РАЗ (13). вдумчиво.
25 Злопчинский
 
03.06.24
16:25
(23) потому что в ТОРГ12 - не требуется бить строки.
а в УПД/СЧФ одна строка документа может расщепиться на несколько строк вывода, например, по разным ГТД.
поэтому выводится не строки документа, а подготавливается МЧ, которая заполняется данными/строками, которые будут выведены на печать.
26 Злопчинский
 
03.06.24
16:32
для некоторых видов документов, в т.ч. для Реализации - для подготовки печати отрабатывается ПодготовитьМнЧоснУПД
и МНЧ.Номенклатура - это СТРОКА, в нее пишется наименование товара (+артикул если настройка такая указана). Поэтому попытка тупо халявно МНЧ.Номенклатура.Код - даст ошибку, ибо из строк не получится вытащить код.
27 Злопчинский
 
03.06.24
16:32
можно тупо даже колонку кода товара не заполнять, а код товара вывести в строку наименования...
28 Maria88
 
03.06.24
16:57
(26)Спасибо. Мне надо в отдельную колонку вывести. Перечитаю(13) еще раз
29 Злопчинский
 
03.06.24
16:59
(28) смотри как сделано
МНЧ.Единица и МНЧ.ЕдиницаКод
.
аналогично для кода товара ;-)
30 Волшебник
 
03.06.24
17:07
🥱 (зеваю...) Вы уже заполнили ТоварКод из (4) ?
31 Maria88
 
03.06.24
17:21
(30) я не умная,пробовала (4) заполнить, но все не верно
32 Злопчинский
 
03.06.24
17:30
(30) в том месте ей неоткуда будет код товара вытащить...
33 Волшебник
 
03.06.24
17:33
(32) Можно в том, можно в другом. Лишь бы работало
34 bolder
 
03.06.24
17:34
(31) 1.Добавить колонку ТоварКод в МнЧ.
2.Заполнить ее везде где есть заполнение колонки Номенклатура.
3.В макете поправить название колонки.
35 Maria88
 
03.06.24
17:37
(28) пробовала ранее, может что-то пропустила.  Выдавал ошибку (переменная не найдена)
36 Maria88
 
03.06.24
17:40
т.е не определена
37 Злопчинский
 
03.06.24
18:00
(34) выше уже писал
38 Злопчинский
 
03.06.24
18:01
(36) получилось?
если нет -  стучись прямо сейчас оперативно в скайп Zlopun
39 Maria88
 
03.06.24
18:35
Пока не получилось. Скайпа нет. Завтра еще раз попробую (28)
40 Злопчинский
 
03.06.24
18:48
(39) .. и (29)
41 Волшебник
 
03.06.24
19:03
(39) Ждём Вас завтра, послезавтра и вообще готовы взять Вас на поруки.
https://ru.wiktionary.org/wiki/на_поруки
42 Maria88
 
03.06.24
21:27
А через ТекТМЦ = ТаблицаОснования.Номенклатура; нельзя сделать вывод Номенклатура.Код?
43 Волшебник
 
03.06.24
21:44
(42) Нет, нельзя. Завтра Вы будете живы?
44 Maria88
 
03.06.24
22:05
(43) надеюсь что да. Но похоже я для этого всего тупая
45 Волшебник
 
03.06.24
22:28
(44) Вы не верите в себя, а Вас уже готовы взять на поруки...
46 mishaPH
 
03.06.24
22:31
(0) найдите где в таб часть выводится номенклатура
затем в колонку куда надо вывести код, пропишите
блабалбла.Код.
47 mishaPH
 
03.06.24
22:33
(0) вообще по идее у вас правильно. Напишите, что написано в ячейке, где номенклатура Выводится
48 Maria88
 
03.06.24
22:46
(47) в ячейке где номенклатура <Наименование>
49 mishaPH
 
03.06.24
23:24
(48) в (2)
Наименование = СокрЛП(МнЧ.Номенклатура);

Допишите
КодТовара = СокрЛП(МнЧ.Номенклатура.Код);

КодТовара в ячейку таблицы
50 MarySue
 
04.06.24
03:46
В этой ветке меня более всего изумило использование СКАЙПА некоторыми участниками
51 Злопчинский
 
04.06.24
06:47
(49) не получитсч. МНЧ.Номенклатура - строка.
52 Злопчинский
 
04.06.24
06:49
(50) наезд..?!
Изумляет что а контактах в личной карточке - ни мыла, ничего.
В меня скайп, например, чисто для первоначальных контактов. Дальше хоть телега, хоть вацап, хоть вайбер.
53 Злопчинский
 
04.06.24
06:51
(48) давай уже хоть на мыло в моей личной карточке свой прямой контакт в телеге/вацапе скинь. Сядем и разберём тати "проблемы".
54 Злопчинский
 
04.06.24
06:53
(42) нет, нельзя. Список строк к выводу в УПД в общем случае не совпадает со списком строк в таблице(документе) основания.
55 Волшебник
 
04.06.24
08:49
(50) Предлагаю обсудить это по ICQ
56 mishaPH
 
04.06.24
09:35
(51) тогда там гже это делается оставить объект! и тогда все будет ок. а при выводе названия уже
МнЧ.Номенклатура тепить из той строки с подным наименованием
57 mishaPH
 
04.06.24
09:36
короче я на 7ку реально повышу цену. Какие кадры... остались
58 Maria88
 
04.06.24
09:40
(49) значение не представляет агрегатный объект(код)
59 mishaPH
 
04.06.24
09:40
(58) (56) смотри.
60 mishaPH
 
04.06.24
09:44
(58) а лучше так.
1. где МНЧ.НоваяКолонка("КодНом")
2. в таблице в ячейку МНЧ.КодНом

в местах где МНЧ.Номенклатура = если это номенклатура добавить МНЧ.КодНом = Номенклатура.Код
61 mishaPH
 
04.06.24
09:45
1. где задаются колонки для МНЧ добавить еще одну
62 bolder
 
04.06.24
09:48
(58) Опять двадцать пять!Смотри (26) и мое (34).Думай.
63 mishaPH
 
04.06.24
09:54
(62) бу гага.. короче глухой да услышит.
64 Maria88
 
04.06.24
09:56
60 МнЧ.Номенклатура = если <<?>> это номенклатура добавить МнЧ.КодНом = Номенклатура.Код=ТаблицаОснования.Содержание;  переменная не определена(это)
65 Maria88
 
04.06.24
10:49
(29) по аналогии у меня не получилось  ТекНоменклатура.Код = ТаблицаОснования.НоменклатураКод; поле агрегатного объекта не обнаруженно(НоменклатураКод)
66 Смотрящий
 
04.06.24
10:55
(65) А вы кем там числитесь у себя ?
67 Maria88
 
04.06.24
11:00
(66) да я понимаю что раз не получается, надо программиста звать. Бух по первичке и остаткам
68 mishaPH
 
04.06.24
11:09
(67) это не ексель. прога позовите
69 Смотрящий
 
04.06.24
11:18
(67) Фондов не выделяют на погромизда ? или свербит от желания самому(ой) разобраться ?
70 Ёпрст
 
04.06.24
11:28
(0)

<spoiler title="на вот, занимайся">


////////////////////////////////////////////////////////////////////////////////
// ПРОЧИЕ ПРОЦЕДУРЫ И ФУНКЦИИ
//******************************************************************************

// глБратьСуммыИзУчета(ДатаОперации)
//
// Параметры:
//     ДатаОперации - дата, дата операции, отражаемой в печатной форме
//
// Возвращаемое значение:
//     Число, 1 - брать суммы из учета, 0 - брать суммы из табличной части
//
// Описание:
//  Возвращает режим формирования печатных форм - по суммам из табличной
//  части и по суммам, отраженным в учете. До начала действия приказа № 147
//  всегда возвращается 0, так как разница в режимах проявляется только
//  для операций, на которые распространяется действие данного приказа
//  (фактически 1 января 2008 года и позднее).
//
Функция глБратьСуммыИзУчета(ДатаОперации, КодОперации = "") Экспорт
        
    //Если ДатаОперации < глДатаПоПриказу147 Тогда
        Возврат 0;
        
    //ИначеЕсли (КодОперации = Перечисление.КодыОпераций.ВозвратОтРеализатора)
    //      ИЛИ (КодОперации = Перечисление.КодыОпераций.ВозвратКомитенту)
    //      ИЛИ (КодОперации = Перечисление.КодыОпераций.ПриемНаРеализацию)
    //      ИЛИ (КодОперации = Перечисление.КодыОпераций.ПриемНаРеализациюРозница)
    //      ИЛИ (КодОперации = Перечисление.КодыОпераций.ПередачаНаРеализацию) Тогда
    //    Возврат 0;
    //
    //Иначе
    //    Возврат Константа.СуммыВПечатныхФормахПоУчету;
    //    
    //КонецЕсли;    
    
КонецФункции // глБратьСуммыИзУчета()

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ
//
//
//******************************************************************************
// ПолучитьИНН(ИННКПП)
//
// Параметры:
//  ИННКПП  - строка, написанные вместе ИНН и КПП юр лица.
//
// Возвращаемое значение:
//  значение ИНН юр лица.
//  
// Описание:
//  Функция возращает ИНН из переданной строки
//
Функция ПолучитьИНН(ИННКПП)
    
    Если Найти(ИННКПП, "\") <> 0 Тогда
        // найден разделитель
        Возврат Лев(ИННКПП, Найти(ИННКПП, "\") - 1);

    Иначе
        Возврат СокрЛП(ИННКПП);

    КонецЕсли;

КонецФункции // ПолучитьИНН()

//******************************************************************************
// ПолучитьКПП(ИННКПП)
//
// Параметры:
//  ИННКПП  - строка, написанные вместе ИНН и КПП юр лица.
//
// Возвращаемое значение:
//  значение КПП юр лица.
//  
// Описание:
//  Функция возращает КПП из переданной строки
//
Функция ПолучитьКПП(ИННКПП)

    Если Найти(ИННКПП, "\") <> 0 Тогда
        // найден разделитель
        Возврат Сред(ИННКПП, Найти(ИННКПП, "\") + 1);

    Иначе
        Возврат "";

    КонецЕсли;

КонецФункции // ПолучитьКПП()

//******************************************************************************
// СоздатьСтруктуруМнЧ(МнЧ)
//
// Параметры:
//  Нет
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//
Процедура СоздатьСтруктуру(МнЧ)
    
    МнЧ = СоздатьОбъект("ТаблицаЗначений");
    МнЧ.НоваяКолонка("Цена",);
    МнЧ.НоваяКолонка("Сумма",);
    МнЧ.НоваяКолонка("СтавкаНДС");
    МнЧ.НоваяКолонка("СуммаНДС",);
    МнЧ.НоваяКолонка("СуммаНП",);
    МнЧ.НоваяКолонка("ВсегоСНДС",);
    МнЧ.НоваяКолонка("Номенклатура");
    МнЧ.НоваяКолонка("СтранаН");
    МнЧ.НоваяКолонка("СтранаК");
    МнЧ.НоваяКолонка("НомерГТД");
    МнЧ.НоваяКолонка("Единица");
    МнЧ.НоваяКолонка("ЕдиницаКод");
    МнЧ.НоваяКолонка("Количество");
    МнЧ.НоваяКолонка("АкцизЦена");
    МнЧ.НоваяКолонка("НоменклатураКод");
    
КонецПроцедуры // СоздатьСтруктуруМнЧ()    

//******************************************************************************
// СкорректироватьТаблицуОснования(МнЧ)
//
// Параметры:
//  ТаблицаОснования
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  Корректирует цену, сумму, сумму НДС и сумму НП по итогам проведения
//  документа основания по регистрам в зависимости от вида документа
//
Процедура СкорректироватьТаблицуОснования(Докум, ТаблицаОснования, ВидОсн)

    Если (ВидОсн = "Реализация") ИЛИ (ВидОсн = "РеализацияПрочее") Тогда

        ПечВалюта = Константа.ВалютаБухУчета;

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

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

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

    Если ПустоеЗначение(ДокумСФ.ДатаПлатРасчДок) = 1 Тогда
        ПечДатаПлатРасчДок = "";    
    Иначе
        ПечДатаПлатРасчДок  = Формат(ДокумСФ.ДатаПлатРасчДок ,"Д ДДММГГГГ") + " г.";
    КонецЕсли;
    //ШапкаИПодвал.ДобавитьЗначение(СокрЛ(ДокумСФ.НомерПлатРасчДок) + "  от  " + ПечДатаПлатРасчДок, "ПечНомерПлатРасчДок");

    ТекПлатСтр = "";
    Если (ПустоеЗначение(ДокумСФ.НомерПлатРасчДок) * ПустоеЗначение(ДокумСФ.ДатаПлатРасчДок))=0 Тогда
        ТекПлатСтр = СокрЛП(ДокумСФ.НомерПлатРасчДок) + "  от  " + ПечДатаПлатРасчДок;
    
        //РеквШапкиПоДокументу=РеквШапки.Получить("ПоДокументу");
        Если (ПустоеЗначение(ДокумСФ.НомерПлатРасчДок1) * ПустоеЗначение(ДокумСФ.ДатаПлатРасчДок1))=0 Тогда
            ТекПлатСтр=ТекПлатСтр+", № "+Сокрлп(Строка(ДокумСФ.НомерПлатРасчДок1))+" от "+Строка(ДокумСФ.ДатаПлатРасчДок1);
        КонецЕсли;
        Если ПустоеЗначение(ДокумСФ.НомерПлатРасчДок2) * ПустоеЗначение(ДокумСФ.ДатаПлатРасчДок2)=0 Тогда
            ТекПлатСтр=ТекПлатСтр+", № "+Сокрлп(Строка(ДокумСФ.НомерПлатРасчДок2))+" от "+Строка(ДокумСФ.ДатаПлатРасчДок2);
        КонецЕсли;
        Если ПустоеЗначение(ДокумСФ.НомерПлатРасчДок3) * ПустоеЗначение(ДокумСФ.ДатаПлатРасчДок3)=0 Тогда
            ТекПлатСтр=ТекПлатСтр+", № "+Сокрлп(Строка(ДокумСФ.НомерПлатРасчДок3))+" от "+Строка(ДокумСФ.ДатаПлатРасчДок3);
        КонецЕсли;
    КонецЕсли;
    ШапкаИПодвал.ДобавитьЗначение(ТекПлатСтр, "ПечНомерПлатРасчДок");


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

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

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

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

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

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

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

//******************************************************************************
// ПодготовитьМнЧПоСчетуНаОплатуУПД()
//
// Параметры:
//  Нет
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//
Функция ПодготовитьМнЧПоСчетуНаОплатуУПД(Докум, ДокумСФ, МнЧ, Итоги, ФорматКоличества)
    
    Итоги = СоздатьОбъект("СписокЗначений");
    СоздатьСтруктуру(МнЧ);

    Если Докум.СуммаВклНДС = 0 Тогда
        СуммаСчета = Докум.Итог("Сумма") + Докум.Итог("СуммаНДС");

    Иначе
        СуммаСчета = Докум.Итог("Сумма");
        
    КонецЕсли;
    
    ИтогСумма          = 0;
    КороткийПрочерк = "-";
    
    Если СуммаСчета  > 0 Тогда
        
        Если ДокумСФ.СуммаАвансаПоУчету = 1 Тогда

            СуммаАвансаОснования = 0;
            РегПокупатели = СоздатьОбъект("Регистр.Покупатели");
            РегПокупатели.ВыбратьДвиженияДокумента(Докум);
            Пока РегПокупатели.ПолучитьДвижение() = 1 Цикл
                Если РегПокупатели.ВидДолга = глВД.Аванс Тогда
                       СуммаАвансаОснования = СуммаАвансаОснования + РегПокупатели.СуммаРуб - РегПокупатели.СуммаНП;
                КонецЕсли;
            КонецЦикла;
        
            К = СуммаАвансаОснования / СуммаСчета;

        Иначе        
            К = Докум.Сумма / СуммаСчета;
        
        КонецЕсли;
        
        Докум.ВыбратьСтроки();
        Пока Докум.ПолучитьСтроку() = 1 Цикл
            
            МнЧ.НоваяСтрока();
            
            ВывелиСтроку     = 1;
            МнЧ.Номенклатура = Докум.Номенклатура.ПолнНаименование + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(Докум.Номенклатура.Артикул), "");
            МнЧ.НоменклатураКод = Докум.Номенклатура.Код;
            МнЧ.ЕдиницаКод = КороткийПрочерк;
            МнЧ.Единица = КороткийПрочерк;
            МнЧ.Количество   = 0;
            МнЧ.АкцизЦена = КороткийПрочерк;
            МнЧ.Цена        = 0;
                    
            Если ПустоеЗначение(Докум.Сумма) = 1 Тогда
                
                МнЧ.Сумма        = 0;
                МнЧ.СтавкаНДС    = "без НДС";
                МнЧ.СуммаНДС    = 0;
                МнЧ.СуммаНП        = КороткийПрочерк;
                МнЧ.ВсегоСНДС    = 0;
                                            
            Иначе
                
                ИтогСумма        = ИтогСумма + К * Докум.Сумма - К * Докум.СуммаНП;
                Если Докум.СтавкаНДС = Перечисление.СтавкиНДС.НДС10 Тогда
                    МнЧ.СтавкаНДС    = Строка(Перечисление.СтавкиНДС.НДС10_110);
                    
                ИначеЕсли Докум.СтавкаНДС = Перечисление.СтавкиНДС.НДС18 Тогда
                    МнЧ.СтавкаНДС    = Строка(Перечисление.СтавкиНДС.НДС18_118);
                    
                ИначеЕсли Докум.СтавкаНДС = Перечисление.СтавкиНДС.НДС20 Тогда
                    МнЧ.СтавкаНДС    = Строка(Перечисление.СтавкиНДС.НДС20_120);
                    
                Иначе
                    МнЧ.СтавкаНДС    = Строка(Докум.СтавкаНДС);
                    
                КонецЕсли;
                
                МнЧ.СуммаНДС    = ?(Докум.СтавкаНДС = Перечисление.СтавкиНДС.безНДС, КороткийПрочерк, глФРМ(К * Докум.СуммаНДС,,,""));
                            
                Если Докум.СуммаВклНДС = 0 Тогда
                    МнЧ.ВсегоСНДС    = К * Докум.Сумма + К * Докум.СуммаНДС - К * Докум.СуммаНП;                                                
                Иначе
                    МнЧ.ВсегоСНДС    = К * Докум.Сумма - К * Докум.СуммаНП;
                КонецЕсли;
                
                МнЧ.Сумма        = 0;

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


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

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

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

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

//******************************************************************************  
//
//ПолучитьСклонениеНомераСтраницы(НомерЛиста)
//
//Параметры:
// НомерЛиста - номер листа, склонение которого надо возвратить
//
//Возвращаемое значение:
// номер листа в правильном падеже
//
Функция ПолучитьСклонениеНомераСтраницы(НомерСтраницы)                      
    
    Если (НомерСтраницы = 1) или (НомерСтраницы = 21)
    или (НомерСтраницы = 31) или (НомерСтраницы = 41)
    или (НомерСтраницы = 51) или (НомерСтраницы = 61)
    или (НомерСтраницы = 71) или (НомерСтраницы = 81)
    или (НомерСтраницы = 91) или (НомерСтраницы = 101) Тогда
        
        Возврат "листе";
    КонецЕсли;
    
    Возврат "листах";    
    
КонецФункции  

//******************************************************************************
// ПечатьУПД(СразуНаПринтер, КолЭкз)
//
// Параметры:
//  СразуНаПринтер - (1) если печать на принтер, (0) - с предварительным просмотром
//  КолЭкз - количество экземпляров печати
//
// Возвращаемое значение:
//  нет.
//
// Описание:
//
Процедура ПечатьУПД(Знач Докум, Устройство=0, КолвоКопий=1) Экспорт
    
    Перем ШапкаИПодвал, МнЧ, Итоги, ФорматКоличества;
    Перем ТекстВал;
    
    
    ДокументыОбОтгрузке="";
    
    
    Если Докум.ДатаДок < '01.01.2013' Тогда
        ТекстСообщения = "Универсальный передаточный документ" "можно сформировать, начиная с 01.01.2013 г.";
        Предупреждение(ТекстСообщения );
        Возврат;             
    КонецЕсли;
    
    СтатусУПД  = 0;
    ТекстПредупреждения = "";
    ТекДок = ПолучитьПустоеЗначение();
    
    Если Докум.Вид() = "СчетФактураВыданный" Тогда
        ТекДок = Докум;
        ТекДокОснование = ТекДок.ДокОснование;
        Если (ПустоеЗначение(ТекДокОснование.ТекущийДокумент()) = 0) Тогда
            Докум = ТекДокОснование;
        КонецЕсли;
        
        СтатусУПД = 1;
    ИначеЕсли Докум.Вид() = "ИсправлениеСчетаФактуры" Тогда
        Если Докум.ДокОснование.Вид() = "СчетФактураВыданный" Тогда
            ТекДок = Докум.ДокОснование;
        КонецЕсли;
    КонецЕсли;    
    
    Если ПустоеЗначение(ТекДок) = 0 Тогда
        ТекущийПодчДок = ТекДок;
        СтатусУПД = 2;
    КонецЕсли;    
    
    Если (ПустоеЗначение(Докум.ТекущийДокумент()) = 0) и (СтатусУПД = 0) Тогда    
        ПодчДок = СоздатьОбъект("Документ");  
        ПодчДок.ВыбратьПодчиненныеДокументы(Докум.ДатаДок,, Докум.ТекущийДокумент());
        ТекущийПодчДок = ПолучитьПустоеЗначение("Документ");
        
        Пока ПодчДок.ПолучитьДокумент() = 1 Цикл
            Если ПодчДок.Вид() = "СчетФактураВыданный" Тогда
                Если ПодчДок.ПометкаУдаления() = 1 Тогда
                    Продолжить;
                КонецЕсли;
            
                ТекущийПодчДок = ПодчДок.ТекущийДокумент();     
                
                Прервать;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    
    ПодготовитьРеквизитыШапкиУПД(Докум, ТекущийПодчДок, ШапкаИПодвал);
    
    ВидОсн = Докум.Вид();
    
    Если (ВидОсн = "СчетФактураВыданный") и (Докум.КоличествоСтрок() = 0) Тогда
        ПодготовитьМнЧУПД(Докум, ТекущийПодчДок, МнЧ, Итоги, ФорматКоличества);
    ИначеЕсли Докум.Вид() = "ИсправлениеСчетаФактуры" Тогда
        ПодготовитьМнЧИспрУПД(Докум, ТекущийПодчДок, МнЧ, Итоги, ФорматКоличества);
    ИначеЕсли ВидОсн = "ОтчетКомитенту" Тогда
        ПодготовитьПоКнигеПродажУПД(Докум, МнЧ, Итоги, ФорматКоличества, "Комиссионное вознаграждение");
    ИначеЕсли ВидОсн = "ЗакрытиеМесяца" Тогда
        ПодготовитьПоКнигеПокупокУПД(Докум, МнЧ, Итоги, ФорматКоличества, "Корректировка НДС, предъявляемого к вычету");
    ИначеЕсли (ВидОсн = "ВводОстатковПокупателя") или (ВидОсн = "ОтчетКомиссионера") Тогда
        ПодготовитьМнЧоснУПД(Докум, МнЧ, Итоги, ФорматКоличества);
    ИначеЕсли (ВидОсн = "ПКО") ИЛИ (ВидОсн = "КорректировкаДолга") ИЛИ (ВидОсн = "РКО") ИЛИ (ВидОсн = "СтрокаВыпискиПриход") ИЛИ (ВидОсн = "СтрокаВыпискиРасход") Тогда
        ПодготовитьМнЧУПД(Докум, ТекущийПодчДок, МнЧ, Итоги, ФорматКоличества);
        ПечВалюта = "наименование, код " + СокрЛП(глРубли.ПолнНаименование) +", " + глРубли.Код;
    Иначе
        ПодготовитьМнЧоснУПД(Докум,МнЧ, Итоги, ФорматКоличества);
    КонецЕсли;
    
    
    ПустойПоказатель = "----";
    
    Постановление981      = ?(Докум.ДатаДок >= '01.10.2017', 1, 0);
         
    Таб = СоздатьОбъект("Таблица");
    
    Если Постановление981 = 0 Тогда
        Таб.ИсходнаяТаблица("Таблица");
    Иначе
        Таб.ИсходнаяТаблица("УПД534");
    КонецЕсли;
    
    ПечНомерДокумента = ШапкаИПодвал.Получить("ПечНомерДокумента");
    ПечДатаДокумента = ШапкаИПодвал.Получить("ПечДатаДокумента");
    ПечНомерИсправления = ШапкаИПодвал.Получить("ПечНомерИсправления");
    ПечДатаИсправления = ШапкаИПодвал.Получить("ПечДатаИсправления");
    ПечПродавец = ШапкаИПодвал.Получить("ПечПродавец");
    ПечПродавецАдрес = ШапкаИПодвал.Получить("ПечПродавецАдрес");
    ПечСтатусУПД = ШапкаИПодвал.Получить("ПечСтатусУПД");
    ПечПродавецИННКПП = ШапкаИПодвал.Получить("ПечПродавецИННКПП");
    ПечГрузоотправитель = ШапкаИПодвал.Получить("ПечГрузоотправитель");
    ПечГрузополучатель = ШапкаИПодвал.Получить("ПечГрузополучатель");
    ПечНомерПлатРасчДок = ШапкаИПодвал.Получить("ПечНомерПлатРасчДок");
    ПечДатаПлатРасчДок = ШапкаИПодвал.Получить("ПечДатаПлатРасчДок");
    ПечПокупатель = ШапкаИПодвал.Получить("ПечПокупатель");
    ПечПокупательАдрес = ШапкаИПодвал.Получить("ПечПокупательАдрес");
    ПечПокупательИННКПП = ШапкаИПодвал.Получить("ПечПокупательИННКПП");
    ВалютаПечати = ШапкаИПодвал.Получить("ВалютаПечати");
    
    ПечОснование = ШапкаИПодвал.Получить("ПечОснование");
    ПечДатаОтгрузкиПередачи = ШапкаИПодвал.Получить("ПечДатаОтгрузкиПередачи");
    ПечПредставлениеОрганизации = ШапкаИПодвал.Получить("ПечПредставлениеОрганизации");
    ПечПредставлениеКонтрагента = ШапкаИПодвал.Получить("ПечПредставлениеКонтрагента");
    
    ПечРуководитель = ШапкаИПодвал.Получить("ПечРуководитель");
    ПечГлБухгалтер = ШапкаИПодвал.Получить("ПечГлБухгалтер");
    ПечПредприниматель = ШапкаИПодвал.Получить("ПечПредприниматель");
    ПечПредпринимательРеквизитыСвидетельства = ШапкаИПодвал.Получить("ПечПредпринимательРеквизитыСвидетельства");
    
    Если  (глЕстьРеквизитШапки("ИдентификаторГосКонтракта", Докум.Вид()) = 1) Тогда
        ПечИдентификаторГосКонтракта = Докум.ИдентификаторГосКонтракта;
    Иначе    
        ПечИдентификаторГосКонтракта = "";
    КонецЕсли;
    
    Если (Докум.ДатаДок >= '01.07.2017') и (Постановление981 = 0) Тогда    
        Таб.ВывестиСекцию("Шапка625");
    Иначе
        Таб.ВывестиСекцию("Шапка");
    КонецЕсли;
    
    Таб.ВывестиСекцию("ЗаголовокТаблицы");
    
    
    // Печать строк документа.
    МнЧ.ВыбратьСтроки();
    НомерСтроки = 0;
    ТоварКод = "";
    НомерСтраницы = 1;
    
    //СтрокНаСтранице = 28;
    СтрокНаСтранице = 26;
    //СтрокШапки = 9;
    СтрокШапки = 7;
    СтрокПодвала = 13;
    
    Если МнЧ.КоличествоСтрок() <= 26 Тогда
        ПереноситьПоследнююСтроку = 1;
    Иначе
        ЦелыхСтраницСПодвалом = Цел((СтрокШапки + МнЧ.КоличествоСтрок() + СтрокПодвала) / СтрокНаСтранице);
        ЦелыхСтраницБезПодвала = Цел((СтрокШапки + МнЧ.КоличествоСтрок() - 0) / СтрокНаСтранице);
        ПереноситьПоследнююСтроку = ЦелыхСтраницСПодвалом - ЦелыхСтраницБезПодвала;
    КонецЕсли;
    
    Пока МнЧ.ПолучитьСтроку() = 1 Цикл
        
        НомерСтроки = НомерСтроки + 1;
        
        ЦелаяСтраница = (СтрокШапки + НомерСтроки - 0) / (СтрокНаСтранице);
        
        Если (ЦелаяСтраница = Цел(ЦелаяСтраница))  
        или ((ПереноситьПоследнююСтроку = 0) и (НомерСтроки = МнЧ.КоличествоСтрок())) Тогда
            Таб.НоваяСтраница();
            НомерСтраницы = НомерСтраницы + 1;
            Таб.ВывестиСекцию("ЗаголовокТаблицы");
        КонецЕсли;
        
        НомерСтраницыПрописью = ПолучитьСклонениеНомераСтраницы(НомерСтраницы);    
        
        Если Постановление981 = 1 Тогда
            ТоварКодТНВЭД = "----";
        КонецЕсли;
        
        Если ТипЗначения(МнЧ.Количество) = 1 Тогда
            МнЧ.Количество = Формат(МнЧ.Количество, ФорматКоличества);
        КонецЕсли;
        
        Наименование = СокрЛП(МнЧ.Номенклатура);
        НоменклатураКод = МнЧ.НоменклатураКод;
        ЕдиницаИзмеренияКод = МнЧ.ЕдиницаКод;
        ЕдиницаИзмерения = МнЧ.Единица;
        ПечКоличество = ?(МнЧ.Количество=0, ПустойПоказатель, Формат(МнЧ.Количество, ФорматКоличества));
        ПечЦена = ?(МнЧ.Цена=0, ПустойПоказатель, Формат(МнЧ.Цена,"Ч15.2"));
        ПечСумма = ?(МнЧ.Сумма=0, ПустойПоказатель, Формат(МнЧ.Сумма,"Ч015.2"));
        ПечАкциз = МнЧ.АкцизЦена;
        ПредставлениеСтавкиНДС = ?(ПустоеЗначение(МнЧ.СуммаНДС) = 1, "Без НДС", МнЧ.СтавкаНДС);
        ПечНДС = ?(ПустоеЗначение(МнЧ.СуммаНДС) = 1, ПустойПоказатель, МнЧ.СуммаНДС);
        ПечВсего = ?(МнЧ.ВсегоСНДС=0, ПустойПоказатель, Формат(МнЧ.ВсегоСНДС,"Ч15.2"));
        СтранаКод = МнЧ.СтранаК;
        СтранаН = МнЧ.СтранаН;
        НомерГТД_Н = МнЧ.НомерГТД;

        Таб.ВывестиСекцию("Строка");
        
    КонецЦикла;
    ПечИтогБезНДС = ?(Итоги.Получить("ИтогСумма")=0,ПустойПоказатель, Формат(Итоги.Получить("ИтогСумма"),"Ч15.2"));
    ПечИтогНДС = ?(Итоги.Получить("ИтогСуммаНДС")=0,ПустойПоказатель, Формат(Итоги.Получить("ИтогСуммаНДС"),"Ч15.2"));
    ПечИтогВсего = ?(Итоги.Получить("ИтогВсегоСНДС")=0,ПустойПоказатель, Формат(Итоги.Получить("ИтогВсегоСНДС"),"Ч15.2"));
    
    Таб.ВывестиСекцию("Подвал");
    
    Таб.ВывестиСекцию("ПодвалНакладной");
    
    Если Устройство = 0 Тогда
        Таб.Опции(0, 0, 0, 0, "ОпцииПечатиУПД", "ОкноУПД");

        Если глПолучитьПолномочие("РазрешитьРедактированиеТаблиц") = 0 Тогда
            Таб.Защита(1);
        Иначе
            Таб.Защита(0);
        КонецЕсли;
        Таб.ТолькоПросмотр(1);
        Таб.ПараметрыСтраницы(2,,,,,,,,,1,,);
        Таб.Показать("Печать универсального передаточного документа","");  
    Иначе    
        Таб.Опции(0, 0, 0, 0, "ОпцииПечатиУПД", "ОкноУПД");
        Таб.КоличествоЭкземпляров(КолвоКопий);
        Таб.Напечатать(0);
    КонецЕсли;
    
КонецПроцедуры // ПечатьУПД()

//******************************************************************************
// ПоКнопкеПечать()
//
// Параметры:
//  Нет
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//
Процедура ПоКнопкеПечать()
    
    Если Док.Выбран() = 0 Тогда
        Предупреждение("Не выбран документ!", 60);
        Возврат;
    КонецЕсли;
    
    ПечатьУПД(Док);
    
КонецПроцедуры // ПоКнопкеПечать()

////////////////////////////////////////////////////////////////////////////////
// ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ
//
//******************************************************************************
// Предопределенная процедура
//
Процедура ПриОткрытии()
    
    Если ПустоеЗначение(Форма.Параметр) = 0 Тогда
        
        Докум      = Форма.Параметр.Получить("Контекст");
        Устройство = Форма.Параметр.Получить("Устройство");
        КолвоКопий = Форма.Параметр.Получить("КоличествоКопий");
    
        Если Докум.Выбран() = 0 Тогда
            Предупреждение("Не записан документ!", 60);
            Статусвозврата(0);
            Возврат;
        Иначе
            Докум = Докум.ТекущийДокумент();
        КонецЕсли;
                
        ПечатьУПД(Докум, Устройство, КолвоКопий);
        Статусвозврата(0);
        Возврат;
    КонецЕсли;
    
КонецПроцедуры // ПриОткрытии()

////////////////////////////////////////////////////////////////////////////////


</spoiler>
71 Maria88
 
04.06.24
11:24
(67) Реквизит не обязательный к заполнению. Обычно сама находила, как подправить, если это надо было . А тут уже да стало интересно стало что не так делаю. А по видимому всё не так.
72 Ёпрст
 
04.06.24
11:30
ЗЫ: в ячейке напиши НоменклатураКод
Наслаждайся
73 Ёпрст
 
04.06.24
11:30
(71) да есть такое - выбрала не ту профессию.
74 Maria88
 
04.06.24
11:41
(70) Спасибо. Так работает.  Буду разбираться, что я не так делала
75 Maria88
 
04.06.24
11:42
(72) это уже было написано, после исправлений )
76 Злопчинский
 
04.06.24
12:17
Пришел Ёпрст, принес кошель рыбы, а мы все удочку хотели дать... ;-)
77 Maria88
 
04.06.24
13:14
И можно подправить чтоб без нулей печатала: НоменклатураКод = Формат(МнЧ НоменклатураКод,"ЧД");
78 Maria88
 
04.06.24
13:20
(76) Спасибо! Я хоть поняла что не так делала
79 Ёпрст
 
04.06.24
15:11
(78) осилила (73) и наконец -то будешь варить борщ?
80 Ёпрст
 
04.06.24
15:11
Если что, вот годный рецепт.
Вари, забей на 1с и будет тебе счастье


https://www.povarenok.ru/recipes/show/96329/
81 Maria88
 
04.06.24
13:28
(80) А, вот чего для счастья, мне и не хватало, буду знать)
82 Ёпрст
 
04.06.24
13:29
(81) Именно. Лучше борща может быть только много борща!
83 Волшебник
 
04.06.24
13:47
(77) Вы там точку пропустили. Странно, что эта строчка работает
84 Maria88
 
04.06.24
13:58
(83) А с точкой не работает. Проверяла
85 Maria88
 
04.06.24
14:00
(83) А Вы про точку после МнЧ. Это я здесь пропустила.
86 Волшебник
 
04.06.24
14:05
(85) Не делайте так больше. Показывайте программный код точно, т.е. копируйте, а не пересказывайте
87 Maria88
 
04.06.24
14:11
(86) хорошо! Буду внимательней
88 Arbuz
 
04.06.24
15:54
МнЧ.Единица.Владелец.Код уже предлагали?
89 Ёпрст
 
04.06.24
16:04
(88) придётся в попытку оборачивать, ибо в большинстве кода там МнЧ.Единица = "-";
90 MarySue
 
05.06.24
22:54
(52) почему сразу наезд?  так... искреннее удивление
никогда мне не нравился скайп
когда не было ничего иного, приходилось его юзать
но не понимаю, зачем за него держаться, когда появились нормальные удобные красивые мессенджеры
91 Волшебник
 
05.06.24
23:03
Автор убит
92 Волшебник
 
05.06.24
23:04
(90) Она (оно) убивает мисту