требуется печатать товарные чеки, только проведенных документов.

Что попробовал, в Функции "СформироватьПечатнуюФормуТоварногоЧека(МассивОбъектов, ОбъектыПечати)"
 определить проведен чек или нет

Если Проведен Тогда
Сообщить("Проведен!");
Иначе
Сообщить("Не проведен!");
КонецЕсли;

Выдает ошибку
{Документ.ЧекККМ.МодульМенеджера(264,9)}: Переменная не определена (Проведен)
Если <<?>>Проведен Тогда (Проверка: Сервер)

Понимаю что косяк в в параметре "проведен", но как в 8.2 обратиться к текущему документу не знаю, подскажите кто знает.
---
В 8.2 немного другие принципы печати. Команда печати имеет возможность печати нескольких документов, поэтому в процедуру передается массив документов (1 или несколько документов). Просто проверить на Проведен тут не получится.
А какой релиз УТ11 у вас? Открыла сейчас 11.0.3.6, там в обработке команды уже есть выявление непроведенных документов и их проведение.

```1c
    &НаСервере
    Функция ПроверитьПроведенностьДокументов(МассивДокументов)

    Запрос = Новый Запрос("
    |ВЫБРАТЬ
    | Документ.Ссылка КАК Ссылка,
    | Документ.Проведен КАК Проведен
    |ИЗ
    | Документ.ЧекККМ КАК Документ
    |ГДЕ
    | Документ.Ссылка В (&МассивДокументов)
    | И Не Документ.Проведен
    |");
    Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов);

    МассивНепроведенныхДокументов = Новый Массив;

    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    МассивНепроведенныхДокументов.Добавить(Выборка.Ссылка);
    КонецЦикла;

    Возврат МассивНепроведенныхДокументов;

    КонецФункции // ПроверитьПроведенностьДокументов()

    &НаКлиенте
    Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

    МассивНепроведенныхДокументов = ПроверитьПроведенностьДокументов(ПараметрКоманды);
    КоличествоНепроведенныхДокументов = МассивНепроведенныхДокументов.Количество();
    Если КоличествоНепроведенныхДокументов > 0 Тогда

    Если КоличествоНепроведенныхДокументов = 1 Тогда
    ТекстВопроса = НСтр("ru = 'Печать товарного чека возможна только после проведения документа, провести документ?'")
    Иначе
    ТекстВопроса = НСтр("ru = 'Печать товарных чеков возможна только после проведения документов, провести документы?'")
    КонецЕсли;

    КодОтвета = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
    Если КодОтвета = КодВозвратаДиалога.Да Тогда
    МассивНепроведенныхДокументов = ФормированиеПечатныхФорм.ПровестиДокументы(МассивНепроведенныхДокументов);
    КонецЕсли;

    КонецЕсли;

    Если ПараметрКоманды.Количество() - МассивНепроведенныхДокументов.Количество() > 0 Тогда
    УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(
    "Документ.ЧекККМ",
    "ТоварныйЧек",
    ПараметрКоманды,
    ПараметрыВыполненияКоманды.Источник,
    Неопределено
    );
    КонецЕсли;

    КонецПроцедуры
```

Если так не устраивает, опишите подробнее задачу и скажу как поправить данный код)
---
У тебя в функцию передается МассивОбъектов.
Для Каждого Элемент Из МассивОбъектов Цикл
 Если Элемент.Проведен Тогда
 Сообщить("Проведен!");
 Иначе
 Сообщить("Не проведен!");
 КонецЕсли;
КонецЦикла

ЗЫ. Это так, к слову. Не советую данный код использовать.
---
aidaphill, Сама функция находится в модуле менеджера документа, ЧекККМ, прежде чем его распечатать я хочу что бы пользователь его провел, но знаю как текущий документ проверить???
---
гыук320, Передайте в функцию ссылку на документ и проверьте уже ссылку.
---
Вот кусок кода из Розницы, но в торговле тоже самое примерно

Это функция модуля Универсальные механизмы. Поищи её в торговле или посмотри, как в других документах сделано в которых задается вопрос, о необходимости проведения документа.

```1c
    Функция НапечататьДокументПоУмолчанию(Объект, КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт

    ЭтоДокумент = Метаданные.Документы.Содержит(Объект.Метаданные());

    Если ЭтоДокумент
    И Объект.Метаданные().Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить
    И Не УправлениеПользователями.РазрешитьПечатьНепроведенныхДокументов(Объект.Проведен) Тогда
    Сообщить("Недостаточно полномочий для печати непроведенного документа!");
    Возврат Ложь;
    КонецЕсли;
```

Ну а если сам будешь писать не используя типовые механизмы, то вроде (2) тебе подсказали. Осталось только вывести предупреждение о необходимости провести документ.
---
если есть необходимость могу приблизительно предоставить код как я этого бы сделал на 7.7 но 8.2 тока осваиваю.
---
В УПП во всех документах в процедуре Печать() стоит такой код

```1c
    Если ЭтоНовый() Тогда
    Предупреждение(НСтр("ru = 'Документ можно распечатать только после его записи'"));
    Возврат;
    ИначеЕсли Не УправлениеДопПравамиПользователей.РазрешитьПечатьНепроведенныхДокументов(Проведен) Тогда
    Предупреждение(НСтр("ru = Недостаточно полномочий для печати непроведенного документа!'"));
    Возврат;
    КонецЕсли;
```

УТ под рукой нет. Если дадите - попробую вам помочь
---
В 8.2 немного другие принципы печати. Команда печати имеет возможность печати нескольких документов, поэтому в процедуру передается массив документов (1 или несколько документов). Просто проверить на Проведен тут не получится.
А какой релиз УТ11 у вас? Открыла сейчас 11.0.3.6, там в обработке команды уже есть выявление непроведенных документов и их проведение.

```1c
    &НаСервере
    Функция ПроверитьПроведенностьДокументов(МассивДокументов)

    Запрос = Новый Запрос("
    |ВЫБРАТЬ
    | Документ.Ссылка КАК Ссылка,
    | Документ.Проведен КАК Проведен
    |ИЗ
    | Документ.ЧекККМ КАК Документ
    |ГДЕ
    | Документ.Ссылка В (&МассивДокументов)
    | И Не Документ.Проведен
    |");
    Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов);

    МассивНепроведенныхДокументов = Новый Массив;

    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    МассивНепроведенныхДокументов.Добавить(Выборка.Ссылка);
    КонецЦикла;

    Возврат МассивНепроведенныхДокументов;

    КонецФункции // ПроверитьПроведенностьДокументов()

    &НаКлиенте
    Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

    МассивНепроведенныхДокументов = ПроверитьПроведенностьДокументов(ПараметрКоманды);
    КоличествоНепроведенныхДокументов = МассивНепроведенныхДокументов.Количество();
    Если КоличествоНепроведенныхДокументов > 0 Тогда

    Если КоличествоНепроведенныхДокументов = 1 Тогда
    ТекстВопроса = НСтр("ru = 'Печать товарного чека возможна только после проведения документа, провести документ?'")
    Иначе
    ТекстВопроса = НСтр("ru = 'Печать товарных чеков возможна только после проведения документов, провести документы?'")
    КонецЕсли;

    КодОтвета = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
    Если КодОтвета = КодВозвратаДиалога.Да Тогда
    МассивНепроведенныхДокументов = ФормированиеПечатныхФорм.ПровестиДокументы(МассивНепроведенныхДокументов);
    КонецЕсли;

    КонецЕсли;

    Если ПараметрКоманды.Количество() - МассивНепроведенныхДокументов.Количество() > 0 Тогда
    УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(
    "Документ.ЧекККМ",
    "ТоварныйЧек",
    ПараметрКоманды,
    ПараметрыВыполненияКоманды.Источник,
    Неопределено
    );
    КонецЕсли;

    КонецПроцедуры
```

Если так не устраивает, опишите подробнее задачу и скажу как поправить данный код)
---
Параметр функции "МассивОбъектов" - массив документов (чеков), вот к нему и обращайтесь.
---
нелегка жизнь программиста..