УТ 11

1. гыук320 18 06.08.12 13:25 Сейчас в теме
требуется печатать товарные чеки, только проведенных документов.

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

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

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

Понимаю что косяк в в параметре "проведен", но как в 8.2 обратиться к текущему документу не знаю, подскажите кто знает.
По теме из базы знаний
Найденные решения
8. beska11 06.08.12 15:00 Сейчас в теме
В 8.2 немного другие принципы печати. Команда печати имеет возможность печати нескольких документов, поэтому в процедуру передается массив документов (1 или несколько документов). Просто проверить на Проведен тут не получится.
А какой релиз УТ11 у вас? Открыла сейчас 11.0.3.6, там в обработке команды уже есть выявление непроведенных документов и их проведение.
&НаСервере
Функция ПроверитьПроведенностьДокументов(МассивДокументов)
	
	Запрос = Новый Запрос("
	|ВЫБРАТЬ
	|	Документ.Ссылка КАК Ссылка,
	|	Документ.Проведен КАК Проведен
	|ИЗ
	|	Документ.ЧекККМ КАК Документ
	|ГДЕ
	|	Документ.Ссылка В (&МассивДокументов)
	|	И Не Документ.Проведен
	|");
	Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов);
	
	МассивНепроведенныхДокументов = Новый Массив;
	
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		МассивНепроведенныхДокументов.Добавить(Выборка.Ссылка);
	КонецЦикла;
	
	Возврат МассивНепроведенныхДокументов;

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

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


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

ЗЫ. Это так, к слову. Не советую данный код использовать.
гыук320; +1 Ответить
3. гыук320 18 06.08.12 13:50 Сейчас в теме
(2) aidaphill, Сама функция находится в модуле менеджера документа, ЧекККМ, прежде чем его распечатать я хочу что бы пользователь его провел, но знаю как текущий документ проверить???
5. HameleonA 104 06.08.12 14:05 Сейчас в теме
(3) гыук320, Передайте в функцию ссылку на документ и проверьте уже ссылку.
гыук320; +1 Ответить
6. FreeArcher 162 06.08.12 14:06 Сейчас в теме
(3) Вот кусок кода из Розницы, но в торговле тоже самое примерно

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

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

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

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


Ну а если сам будешь писать не используя типовые механизмы, то вроде (2) тебе подсказали. Осталось только вывести предупреждение о необходимости провести документ.
гыук320; +1 Ответить
4. гыук320 18 06.08.12 13:53 Сейчас в теме
если есть необходимость могу приблизительно предоставить код как я этого бы сделал на 7.7 но 8.2 тока осваиваю.
7. SheremetevaValentina 06.08.12 14:07 Сейчас в теме
В УПП во всех документах в процедуре Печать() стоит такой код

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


УТ под рукой нет. Если дадите - попробую вам помочь
гыук320; +1 Ответить
8. beska11 06.08.12 15:00 Сейчас в теме
В 8.2 немного другие принципы печати. Команда печати имеет возможность печати нескольких документов, поэтому в процедуру передается массив документов (1 или несколько документов). Просто проверить на Проведен тут не получится.
А какой релиз УТ11 у вас? Открыла сейчас 11.0.3.6, там в обработке команды уже есть выявление непроведенных документов и их проведение.
&НаСервере
Функция ПроверитьПроведенностьДокументов(МассивДокументов)
	
	Запрос = Новый Запрос("
	|ВЫБРАТЬ
	|	Документ.Ссылка КАК Ссылка,
	|	Документ.Проведен КАК Проведен
	|ИЗ
	|	Документ.ЧекККМ КАК Документ
	|ГДЕ
	|	Документ.Ссылка В (&МассивДокументов)
	|	И Не Документ.Проведен
	|");
	Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов);
	
	МассивНепроведенныхДокументов = Новый Массив;
	
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		МассивНепроведенныхДокументов.Добавить(Выборка.Ссылка);
	КонецЦикла;
	
	Возврат МассивНепроведенныхДокументов;

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

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


Если так не устраивает, опишите подробнее задачу и скажу как поправить данный код)
гыук320; +1 Ответить
9. Bassgood 1458 07.08.12 13:23 Сейчас в теме
Параметр функции "МассивОбъектов" - массив документов (чеков), вот к нему и обращайтесь.
гыук320; +1 Ответить
10. KillHunter 8 08.08.12 10:40 Сейчас в теме
нелегка жизнь программиста..
гыук320; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот