Имя: Пароль:
1C
1С v8
Помогоите исправить печатную форму в КА 1.1 (ЕстьРеквизитДокумента)
0 snap870
 
05.03.14
15:33
Доброго времени суток. Сейчас ушли от УТ 10.3 в пользу КА 1.1. Подгружаю печатную форму, выдается ошибка
Метод объекта не обнаружен (ЕстьРеквизитДокумента)
Хотя вроде функция то стандартная, в КА она актуальна? если нет то как заменить лучше? Код сам писал не я - достался в наследство.


#Если Клиент Тогда
Перем мТабДок;

Перем мКоличествоГруппировок;

Перем мКоличествоДопПолейПосле;
Перем мКоличествоДопПолейДо;
Перем мКоличествоДопПолейВместе;

Перем мСоответствиеГруппировок;

Перем мСоответствиеДопПолейДо;
Перем мСоответствиеДопПолейПосле;
Перем мСоответствиеДопПолейВместе;

Перем мСписокПоложенийДляПечати Экспорт;

Перем мСписокНачало;
Перем мСписокНоменклатура;
Перем мСписокДопПоле;

Перем мСписокГруппаНачало;
Перем мСписокГруппаНоменклатура;
Перем мСписокГруппаДопПоле;

Перем мСпециальныеПоля;

Перем мИмяРеквизитаСклад;
Перем мСклад;

Перем мИмяМакета Экспорт;

Перем мМакет;

Перем мИнициализироватьНастройкиПриОткрытии Экспорт;

Перем мТекущаяНастройка Экспорт;

Перем мНомерСтроки;

Перем мИзмеренияСтроки;

Перем мЕдиницаИзмеренияВеса;

Перем мПоляСПредставлениями;

Перем мВесВведенНеДляВсехТоваров;
Перем мИтогВес;



Функция Печать() Экспорт
    
    НаПринтер = Ложь;
    
    //Обработки.ПечатьРаскладкиНоменклатурыПоМестамХранения.Создать().НапечататьИзДокумента(СсылкаНаОбъект.Ссылка, , , НаПринтер);
    НапечататьИзДокумента(СсылкаНаОбъект.Ссылка, , , НаПринтер);

    Возврат Неопределено;                  

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

// Формирует структуру для сохранения настроек отчета
//
Процедура СформироватьСтруктуруДляСохраненияНастроек(СтруктураСНастройками) Экспорт

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

КонецПроцедуры // СформироватьСтруктуруДляСохраненияНастроек()
          

// Процедура осуществляет вызов формирования печатной формы из документа.
//
// Параметры:
//  
//
Процедура НапечататьИзДокумента(Док, ИмяМакета = Неопределено, ПечататьТолькоНеотсканированные = Неопределено, НаПринтер = Ложь) Экспорт
    КоличествоУровнейМестХранения = 1;                        
    Если ИмяМакета <> Неопределено Тогда
        мИмяМакета = ИмяМакета;
    КонецЕсли;

    Если ПечататьТолькоНеотсканированные <> Неопределено Тогда
        ТолькоНеотсканированныйТовар = ПечататьТолькоНеотсканированные;
    КонецЕсли;
ВидДокументов = Док.Метаданные().Имя;
    Документ = Док;
    ВосстановитьНастройкиПриОткрытии();

    Если ПоказыватьФорму Тогда
        мИнициализироватьНастройкиПриОткрытии = Ложь;

        ПолучитьФорму().Открыть();
    Иначе
        ПечатьНовая(НаПринтер);
    КонецЕсли;

КонецПроцедуры // НапечататьИзДокумента()


// Процедура открывает форму настройки из документа.
//
// Параметры:
//  ТекДок - Ссылка на документ, из которого открыта форма.
//
Процедура ОткрытьФормуНастройкиИзДокумента(Док) Экспорт
    ВидДокументов = Док.Метаданные().Имя;
    Документ = Док;
    ВосстановитьНастройкиПриОткрытии();
    мИнициализироватьНастройкиПриОткрытии = Ложь;
    ПолучитьФорму().Открыть();

КонецПроцедуры // ОткрытьФормуНастройкиИзДокумента()

// Функция выводит поле в шапку отчета. Возвращает количество выведенных полей.
//
// Параметры:
//  ДопПоле - поле, которое нужно вывести.
//  РезультатЗапроса - результат запроса.
//  Секция - выводимая секция.
//
// Возвращаемое значение:
//  Число - количество выведенных полей.
//
Функция ВывестиПолеВШапку(ДопПоле, РезультатЗапроса, Знач Секция) Экспорт

    КоличествоПолей = 0;

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

            Секция.Параметры.ДопПоле = НазваниеКолонки;
            мТабДок.Присоединить(Секция);

            КоличествоПолей = КоличествоПолей + 1;
        КонецЦикла;
    ИначеЕсли мСпециальныеПоля[ДопПоле.Имя] = 1 Тогда // "Остаток"
        Секция = мМакет.ПолучитьОбласть("Шапка|ДопПолеОстаток");

        Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад", "Все");
        Пока Выборка.Следующий() Цикл
            НазваниеКолонки = СокрЛП(Выборка.СкладПредставление);
            Если Не ПустаяСтрока(ДопПоле.Псевдоним) Тогда
                НазваниеКолонки = НазваниеКолонки + Символы.ПС + ДопПоле.Псевдоним;
            КонецЕсли;

            Секция.Параметры.ДопПоле = НазваниеКолонки;
            мТабДок.Присоединить(Секция);

            КоличествоПолей = КоличествоПолей + 1;
        КонецЦикла;
    Иначе
        Секция.Параметры.ДопПоле = ДопПоле.Псевдоним;
        мТабДок.Присоединить(Секция);

        КоличествоПолей = КоличествоПолей + 1;
    КонецЕсли;

    Возврат КоличествоПолей;

КонецФункции // ВывестиПолеВШапку()

// Процедура выводит поле в отчет.
//
// Параметры:
//  ДопПоле - поле, которое нужно вывести.
//  РезультатЗапроса - результат запроса.
//  Секция - выводимая секция.
//
Процедура ВывестиПолеВОтчет(ДопПоле, Выборка, Знач Секция) Экспорт

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

        ВыборкаДопПоле = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад", "Все");
        Пока ВыборкаДопПоле.Следующий() Цикл
            Секция.Параметры.ЗначениеДопПоля = ВыборкаДопПоле.Остаток;
            Секция.ТекущаяОбласть.ГоризонтальноеПоложение = ТаблицаНастройкиПолейПечать.Найти(ДопПоле, "Имя").Выравнивание;
            мТабДок.Присоединить(Секция);
        КонецЦикла;
    Иначе
        Если мПоляСПредставлениями[ДопПоле] = Неопределено Тогда
            ПредставлениеПоля = Выборка[ДопПоле];
        Иначе
            ПредставлениеПоля = Выборка[ДопПоле + "Представление"];
        КонецЕсли;

        Секция.Параметры.ЗначениеДопПоля = ПредставлениеПоля;
        Секция.ТекущаяОбласть.ГоризонтальноеПоложение = ТаблицаНастройкиПолейПечать.Найти(ДопПоле, "Имя").Выравнивание;
        мТабДок.Присоединить(Секция);
    КонецЕсли;

КонецПроцедуры // ВывестиПолеВОтчет()

// Процедура выводит пустое поле в отчет.
//
// Параметры:
//  ДопПоле - поле, которое нужно вывести.
//  РезультатЗапроса - результат запроса.
//  Секция - выводимая секция.
//
Процедура ВывестиПустоеПолеВОтчет(ДопПоле, Выборка, Знач Секция) Экспорт

    Если мСпециальныеПоля[ДопПоле] = 0 Тогда // "МестоХранения"
        ВыборкаДопПоле = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Приоритет", "Все");
        Пока ВыборкаДопПоле.Следующий() Цикл
            Секция.Параметры.ЗначениеДопПоля = "";
            мТабДок.Присоединить(Секция);
        КонецЦикла;
    ИначеЕсли мСпециальныеПоля[ДопПоле] = 1 Тогда // "Остаток"
        Секция = мМакет.ПолучитьОбласть("СписокГруппа|ДопПолеОстаток");

        ВыборкаДопПоле = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад", "Все");
        Пока ВыборкаДопПоле.Следующий() Цикл
            Секция.Параметры.ЗначениеДопПоля = "";
            мТабДок.Присоединить(Секция);
        КонецЦикла;
    Иначе
        Секция.Параметры.ЗначениеДопПоля = "";
        мТабДок.Присоединить(Секция);
    КонецЕсли;

КонецПроцедуры // ВывестиПустоеПолеВОтчет()

// Процедура устанавливает ширину колонок полей.
//
// Параметры:
//  ДопПоле - поле, которое нужно вывести.
//  РезультатЗапроса - результат запроса.
//  Секция - выводимая секция.
//
Функция УстановитьШиринуПолей(ДопПоле, РезультатЗапроса, ТекКолонка) Экспорт

    Если мСпециальныеПоля[ДопПоле] = 0 Тогда // "МестоХранения"
        КоличествоПолей = 0;
        ВыборкаДопПоле = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Приоритет", "Все");
        Пока ВыборкаДопПоле.Следующий() Цикл
            мТабДок.Область(, ТекКолонка + КоличествоПолей, , ТекКолонка + КоличествоПолей).ШиринаКолонки = ТаблицаНастройкиПолейПечать.Найти(ДопПоле).Ширина;

            КоличествоПолей = КоличествоПолей + 1;
        КонецЦикла;
    ИначеЕсли мСпециальныеПоля[ДопПоле] = 1 Тогда // "Остаток"
        КоличествоПолей = 0;
        ВыборкаДопПоле = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад", "Все");
        Пока ВыборкаДопПоле.Следующий() Цикл
            мТабДок.Область(, ТекКолонка + КоличествоПолей, , ТекКолонка + КоличествоПолей + 1).ШиринаКолонки = ТаблицаНастройкиПолейПечать.Найти(ДопПоле).Ширина;

            КоличествоПолей = КоличествоПолей + 1;
        КонецЦикла;
    Иначе
        мТабДок.Область(, ТекКолонка, , ТекКолонка).ШиринаКолонки = ТаблицаНастройкиПолейПечать.Найти(ДопПоле).Ширина;

        КоличествоПолей = 1;
    КонецЕсли;

    Возврат КоличествоПолей;

КонецФункции // УстановитьШиринуПолей()

// Процедура обновляет построитель отчета.
// Установленные настройки при этом не изменяются.
//
Процедура ОбновитьПостроительОтчета() Экспорт

    Настройки = ПостроительОтчета.ПолучитьНастройки();

    ЗаполнитьПостроительОтчета();                                                  

    ПостроительОтчета.УстановитьНастройки(Настройки);

КонецПроцедуры // ОбновитьПостроительОтчета()

// Проверяет корректность установленных пользователем настроек.
//
// Параметры:
//  Отказ - в этот параметр возвращается значение Истина, если обнаружены ошибки.
//
Процедура ПроверитьКорректностьНастроек(Отказ) Экспорт

    Если Не ЗначениеЗаполнено(Документ) Тогда
        Предупреждение("Не выбран документ для печати!");
        Отказ = Истина;

        Возврат;
    КонецЕсли;

    //Если СписокСкладов.Количество() = 0 Тогда
    //    Предупреждение("Не выбраны склады!");
    //    Отказ = Истина;

    //    Возврат;
    //КонецЕсли;

    Если КоличествоУровнейМестХранения = 0 Тогда
        Предупреждение("Не указано количество уровней мест хранения!");
        Отказ = Истина;

        Возврат;
    КонецЕсли;

    КоличествоИзмерений = ПостроительОтчета.ИзмеренияСтроки.Количество() - 1;

    ИзмерениеНоменклатура = ПостроительОтчета.ИзмеренияСтроки.Найти("Номенклатура");

    Если ИзмерениеНоменклатура = Неопределено Тогда
        Предупреждение("Отсутствует обязательная группировка но номенклатуре!");

        Отказ = Истина;
        Возврат;
    КонецЕсли;

    Индекс = ПостроительОтчета.ИзмеренияСтроки.Индекс(ИзмерениеНоменклатура);

    Если Индекс <> КоличествоИзмерений Тогда
        Предупреждение ("Группировка: ""Номенклатура"" должна быть последней в измерениях строк.");
        ПостроительОтчета.ИзмеренияСтроки.Сдвинуть(ИзмерениеНоменклатура, КоличествоИзмерений - Индекс);
    КонецЕсли;

    СоответствиеСтрок = Новый Соответствие;
    Для Каждого СтрокаПостроителя Из ПостроительОтчета.ИзмеренияСтроки Цикл
        Если СоответствиеСтрок[СтрокаПостроителя.ПутьКДанным] = Неопределено Тогда
            СоответствиеСтрок.Вставить(СтрокаПостроителя.ПутьКДанным, СтрокаПостроителя);
        Иначе
            Предупреждение("Повторяющаяся группировка " + СтрокаПостроителя.Представление + "." + Символы.ПС +
            "Нельзя использовать одинаковые поля группировки строк!");

            Отказ = Истина;
            Прервать;
        КонецЕсли;
    КонецЦикла;

КонецПроцедуры // ПроверитьКорректностьНастроек()

// В текст для построителя отчета вставляет свойства.
// Скопирована из общего модуля и изменена.
Процедура ДобавитьВТекстСвойстваЛокально(ТаблицаПолей, Текст, СтруктураПредставлениеПолей, мСоответствиеНазначений,
                                              СтруктураПараметры, ТекстИсточникиСведений="", ТекстПоляКатегорий="",
                                              ТекстПоляСвойств="", ТекстПоляСгруппироватьПо = "",
                                              ЗаменятьСвойства = "//СВОЙСТВА", ЗаменятьКатегории = "//КАТЕГОРИИ",
                                              ЗаменятьСоединения = "//СОЕДИНЕНИЯ", ЗаменятьСгруппироватьПо = "//СГРУППИРОВАТЬПО",
                                              ИдентификаторыПараметровДляОтборовПоКатегориям = "", ЗаменятьИтоги = "//ИТОГИ",
                                              ЗаменятьПредставления = "//ПРЕДСТАВЛЕНИЯ_СВОЙСТВА") Экспорт

    // Добавляемые фрагменты запроса.
    ТекстПоляСвойствДляГруппировки = "";
    ТекстИсточникиСведений ="";
    ТекстПоляСвойств = "";
    ТекстПоляСвойствИтоги = "";
    ТекстПоляСвойствПредставления = "";

    Индекс = 0;

    СвойстваОбъектов = ПланыВидовХарактеристик.СвойстваОбъектов.Выбрать();

    Пока СвойстваОбъектов.Следующий() Цикл
        Если СвойстваОбъектов.ЭтоГруппа ИЛИ СвойстваОбъектов.ПометкаУдаления Тогда
            Продолжить;
        КонецЕсли;

        Поля = ТаблицаПолей.НайтиСтроки(Новый Структура("Назначение", СвойстваОбъектов.НазначениеСвойства));

        Для Каждого Поле из Поля Цикл

            // Для списка всех полей.
            ТекстПоляСвойств = ТекстПоляСвойств + ",
            |    Свойство" + Индекс + ".Значение" + " КАК " + "Свойство" + Индекс + "Значение";

            ТекстПоляСвойствИтоги = ТекстПоляСвойствИтоги + ",
            |    МИНИМУМ(Свойство" + Индекс + ".Значение)";

            ТекстПоляСвойствПредставления = ТекстПоляСвойствПредставления + ",
            |    Свойство" + Индекс + ".Значение.Представление" + " КАК " + "Свойство" + Индекс + "ЗначениеПредставление";

            ТекстПоляСвойствДляГруппировки = ТекстПоляСвойствДляГруппировки + ",
            |    Свойство" + Индекс + ".Значение";

            // Источник для свойств.
            ТекстИсточникиСведений = ТекстИсточникиСведений + Символы.ПС +
            "{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК Свойство" + Индекс + "
            |ПО Свойство" + Индекс + ".Объект = " + Поле.ПутьКДанным + "
            |И  Свойство" + Индекс + ".Свойство = &ПараметрСвойство" + Индекс + "}";

            СтруктураПараметры.Вставить("ПараметрСвойство" + Индекс, СвойстваОбъектов.Ссылка);

            СтруктураПредставлениеПолей.Вставить("Свойство" + Индекс + "Значение", СвойстваОбъектов.Наименование + " (св-во " + Поле.Представление + ")");

            мСоответствиеНазначений.Вставить(СвойстваОбъектов.Наименование + " (св-во " + Поле.Представление + ")", СвойстваОбъектов.Ссылка);

            Индекс = Индекс + 1;
        КонецЦикла;
    КонецЦикла;

    Текст = СтрЗаменить(Текст, ЗаменятьСвойства, ТекстПоляСвойств);
    Текст = СтрЗаменить(Текст, ЗаменятьИтоги, ТекстПоляСвойствИтоги);
    Текст = СтрЗаменить(Текст, ЗаменятьПредставления, ТекстПоляСвойствПредставления);
    Текст = СтрЗаменить(Текст, ЗаменятьСоединения, ТекстИсточникиСведений);
    Текст = СтрЗаменить(Текст, ЗаменятьСгруппироватьПо, ТекстПоляСвойствДляГруппировки);

КонецПроцедуры // ДобавитьВТекстСвойстваЛокально()

// Производит рекурсивный обход выборки,
// выводит в макет строки из текущей выборки.
//
//  Параметры:
//   Выборка - текущая выборка.
//   НомерГруппировки - текущий номер группировки строк.
//
Процедура ВывестиСтроку(Выборка, НомерГруппировки) Экспорт

    // Обойдем в цикле переданную выборку.
    Пока Выборка.Следующий() Цикл
        НазваниеГруппировки = Выборка.Группировка();

        ЗначениеГруппировки = Выборка[НазваниеГруппировки];

        Уровень = Выборка.Уровень();
        ЭтоНеИтогПоИерархии = (Выборка.ТипЗаписи() <> ТипЗаписиЗапроса.ИтогПоИерархии);

        ЭтоНижнийУровень = (НазваниеГруппировки = "Номенклатура" И ЭтоНеИтогПоИерархии);

        Если мПоляСПредставлениями[НазваниеГруппировки] = Неопределено Тогда
            ПредставлениеГруппировки = Выборка[НазваниеГруппировки];
        Иначе
            ПредставлениеГруппировки = Выборка[НазваниеГруппировки + "Представление"];
        КонецЕсли;

        // Если тип записи - это итог по иерархии,
        // то для вывода будем использовать секции, предназначенные для иерархии.
        Если ЭтоНижнийУровень Тогда
            мНомерСтроки = мНомерСтроки + 1;

            СекцияНачало = мСписокНачало;

            СекцияНачало.Параметры.НомерСтроки = мНомерСтроки;

            СекцияНоменклатура = мСписокНоменклатура;
            СекцияДопПоле = мСписокДопПоле;
        Иначе
            СекцияНачало = мСписокГруппаНачало;
            СекцияНоменклатура = мСписокГруппаНоменклатура;
            СекцияДопПоле = мСписокГруппаДопПоле;
        КонецЕсли;

        СекцияНоменклатура.Параметры.Измерение = ПредставлениеГруппировки;

        Если ЭтоНеИтогПоИерархии Тогда
            СекцияНоменклатура.Параметры.Расшифровка = ЗначениеГруппировки;
        КонецЕсли;

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

                Если ВыборкаЕдиницыИзмерения.Вес = 0 Тогда
                    мВесВведенНеДляВсехТоваров = Истина;
                Иначе
                    мИтогВес = мИтогВес + ВыборкаЕдиницыИзмерения.Вес;
                КонецЕсли;

                Для Тмп = 1 По мСоответствиеДопПолейДо.Количество() Цикл
                    ВывестиПолеВОтчет(мСоответствиеДопПолейДо[Тмп], ВыборкаЕдиницыИзмерения, СекцияДопПоле);
                КонецЦикла;

                СтрокаДопПолейВместе = "";
                Для Тмп = 1 По мКоличествоДопПолейВместе Цикл
                    Если Не ПустаяСтрока(Строка(ВыборкаЕдиницыИзмерения[мСоответствиеДопПолейВместе[Тмп]])) Тогда
                        Если ПустаяСтрока(СтрокаДопПолейВместе) Тогда
                            СтрокаДопПолейВместе = СтрокаДопПолейВместе + " (" + ВыборкаЕдиницыИзмерения[мСоответствиеДопПолейВместе[Тмп]];
                        Иначе
                            СтрокаДопПолейВместе = СтрокаДопПолейВместе + ", " + ВыборкаЕдиницыИзмерения[мСоответствиеДопПолейВместе[Тмп]];
                        КонецЕсли;
                    КонецЕсли;
                КонецЦикла;

                Если Не ПустаяСтрока(СтрокаДопПолейВместе) Тогда
                    СекцияНоменклатура.Параметры.Измерение = Строка(СекцияНоменклатура.Параметры.Измерение) + СтрокаДопПолейВместе + ")";
                КонецЕсли;

                мТабДок.Присоединить(СекцияНоменклатура);

                Для Тмп = 1 По мСоответствиеДопПолейПосле.Количество() Цикл
                    ВывестиПолеВОтчет(мСоответствиеДопПолейПосле[Тмп], ВыборкаЕдиницыИзмерения, СекцияДопПоле);
                КонецЦикла;
            КонецЦикла;
        Иначе
            мТабДок.Вывести(СекцияНачало, Уровень, , Истина);

            // Для группировок верхних уровней и иерархии выведем
            // пустые ячейки доп. полей.
            Для Тмп = 1 По мСоответствиеДопПолейДо.Количество() Цикл
                ВывестиПустоеПолеВОтчет(мСоответствиеДопПолейДо[Тмп], Выборка, СекцияДопПоле);
            КонецЦикла;

            мТабДок.Присоединить(СекцияНоменклатура);

            Для Тмп = 1 По мСоответствиеДопПолейПосле.Количество() Цикл
                ВывестиПустоеПолеВОтчет(мСоответствиеДопПолейПосле[Тмп], Выборка, СекцияДопПоле);
            КонецЦикла;

            // Если тип записи не итог по иерархии,
            // то нужно выбрать следующую группировку.
            Если ЭтоНеИтогПоИерархии Тогда
                ВывестиСтроку(Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, мСоответствиеГруппировок[НомерГруппировки + 1]), НомерГруппировки + 1);
            КонецЕсли;
        КонецЕсли;
        
    КонецЦикла;

КонецПроцедуры // ВывестиСтроку()

Функция ВосстановитьНастройки() Экспорт

    Перем СохраненнаяНастройка;

    СтруктураНастройки = Новый Структура;
    СтруктураНастройки.Вставить("Пользователь"         , глЗначениеПеременной("глТекущийПользователь"));
    СтруктураНастройки.Вставить("ИмяОбъекта"           , Строка(ЭтотОбъект));
    СтруктураНастройки.Вставить("НаименованиеНастройки", ?(мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка.НаименованиеНастройки));

    Результат = УниверсальныеМеханизмы.ВосстановлениеНастроек(СтруктураНастройки);
    Если Результат <> Неопределено Тогда
        мТекущаяНастройка = Результат;

        ВосстановитьНастройкиИзСтруктуры(мТекущаяНастройка.СохраненнаяНастройка);
    Иначе
        мТекущаяНастройка = СтруктураНастройки;
    КонецЕсли;

    ОбновитьСохраненныеНастройки();

КонецФункции // ВосстановитьНастройки()

// Процедура восстанавливает сохраненные настройки при открытии обработки.
//
Процедура ВосстановитьНастройкиПриОткрытии() Экспорт

    ЗаполнитьПостроительОтчета();

    СтруктураНастройки = Новый Структура;
    СтруктураНастройки.Вставить("Пользователь", глЗначениеПеременной("глТекущийПользователь"));
    СтруктураНастройки.Вставить("ИмяОбъекта"  , Строка(СсылкаНаОбъект));

    Если УниверсальныеМеханизмы.ПолучитьНастройкуИспользоватьПриОткрытии(СтруктураНастройки) Тогда
        мТекущаяНастройка = СтруктураНастройки;
        ВосстановитьНастройкиИзСтруктуры(СтруктураНастройки.СохраненнаяНастройка);
    КонецЕсли;

    ОбновитьСохраненныеНастройки();

КонецПроцедуры // ВосстановитьНастройкиПриОткрытии()

// Заполняет настройки отчета из структуры сохраненных настроек
//
Функция ВосстановитьНастройкиИзСтруктуры(СтруктураСНастройками) Экспорт

    Перем ТекНастройка;

    Если СтруктураСНастройками.Свойство("НастройкиПостроителя", ТекНастройка) Тогда
        ПостроительОтчета.УстановитьНастройки(ТекНастройка);
    КонецЕсли;

    СтруктураСНастройками.Свойство("ТаблицаНастройкиПолейПечать"         , ТаблицаНастройкиПолейПечать);
    СтруктураСНастройками.Свойство("СписокСкладов"                       , СписокСкладов);
    СтруктураСНастройками.Свойство("ВыводитьЗаголовок"                   , ВыводитьЗаголовок);
    СтруктураСНастройками.Свойство("ПоказыватьФорму"                     , ПоказыватьФорму);
    СтруктураСНастройками.Свойство("ИспользоватьСвойства"                , ИспользоватьСвойства);
    СтруктураСНастройками.Свойство("КоличествоУровнейМестХранения"       , 1);
//    СтруктураСНастройками.Свойство("КоличествоУровнейМестХранения"       , КоличествоУровнейМестХранения);
    СтруктураСНастройками.Свойство("ПредставленияПриоритетовМестХранения", ПредставленияПриоритетовМестХранения);

КонецФункции // ВосстановитьНастройкиИзСтруктуры()

Процедура СохранитьНастройки()  Экспорт

    Перем СохраненнаяНастройка;

    СохраненнаяНастройка = Новый Структура;
    СформироватьСтруктуруДляСохраненияНастроек(СохраненнаяНастройка);

    СтруктураНастройки = Новый Структура;
    СтруктураНастройки.Вставить("Пользователь", глЗначениеПеременной("глТекущийПользователь"));
    СтруктураНастройки.Вставить("ИмяОбъекта", Строка(ЭтотОбъект));
    СтруктураНастройки.Вставить("НаименованиеНастройки", ?(мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка.НаименованиеНастройки));
    СтруктураНастройки.Вставить("СохраненнаяНастройка", СохраненнаяНастройка);
    СтруктураНастройки.Вставить("ИспользоватьПриОткрытии", Ложь);
    СтруктураНастройки.Вставить("СохранятьАвтоматически", Ложь);

    Результат = УниверсальныеМеханизмы.СохранениеНастроек(СтруктураНастройки);

    Если Результат <> Неопределено Тогда
        мТекущаяНастройка = Результат;
    Иначе
        мТекущаяНастройка = СтруктураНастройки;
    КонецЕсли;

КонецПроцедуры // СохранитьНастройки()

// Процедура добавляет колонку в таблицу значений, если ее там нет.
// Параметры:
//  ТЗ - таблица значений, в которую нужно добавить колонку;
//  ИмяКолонки - имя колонки, которую нужно добавить.
Процедура ДобавитьКолонкуВТЗ(ТЗ, ИмяКолонки, ЗначениеПоУмолчанию = Неопределено)  Экспорт

    Если ТЗ.Колонки.Найти(ИмяКолонки) = Неопределено Тогда
        ТЗ.Колонки.Добавить(ИмяКолонки);
        ТЗ.ЗаполнитьЗначения(ЗначениеПоУмолчанию, ИмяКолонки);
    КонецЕсли;

КонецПроцедуры // ДобавитьКолонкуВТЗ()

// Процедура обновляет настройки после их восстановления.
//
Процедура ОбновитьСохраненныеНастройки()  Экспорт

    ДобавитьКолонкуВТЗ(ТаблицаНастройкиПолейПечать, "Поле");
    ДобавитьКолонкуВТЗ(ТаблицаНастройкиПолейПечать, "Псевдоним");
    ДобавитьКолонкуВТЗ(ТаблицаНастройкиПолейПечать, "Выво
1 shuhard
 
05.03.14
15:34
(0) ни кто это УГ за тебя разгребать не будет
2 snap870
 
05.03.14
15:35
да код я дал просто, т.к. спрашивают часто. Интересует больше сама функция.
3 salvator
 
05.03.14
15:37
(2) Если нет в текущей конфигурации, найди в типовых.
И кстати в твоей простыне нет вызова этого метода.
Ошибка? Это не ошибка, это системная функция.