требуется печатать товарные чеки, только проведенных документов.
Что попробовал, в Функции "СформироватьПечатнуюФормуТоварногоЧека(МассивОбъектов, ОбъектыПечати)"
определить проведен чек или нет
Если Проведен Тогда
Сообщить("Проведен!");
Иначе
Сообщить("Не проведен!");
КонецЕсли;
Выдает ошибку
{Документ.ЧекККМ.МодульМенеджера(264,9)}: Переменная не определена (Проведен)
Если <<?>>Проведен Тогда (Проверка: Сервер)
Понимаю что косяк в в параметре "проведен", но как в 8.2 обратиться к текущему документу не знаю, подскажите кто знает.
Что попробовал, в Функции "СформироватьПечатнуюФормуТоварногоЧека(МассивОбъектов, ОбъектыПечати)"
определить проведен чек или нет
Если Проведен Тогда
Сообщить("Проведен!");
Иначе
Сообщить("Не проведен!");
КонецЕсли;
Выдает ошибку
{Документ.ЧекККМ.МодульМенеджера(264,9)}: Переменная не определена (Проведен)
Если <<?>>Проведен Тогда (Проверка: Сервер)
Понимаю что косяк в в параметре "проведен", но как в 8.2 обратиться к текущему документу не знаю, подскажите кто знает.
По теме из базы знаний
- Многофункциональная выгрузка из 1С:УТ 11/ УТ 10 в 1С:БП2, БП3 (соответствия товаров, контрагентов, складов, статей ДДС)+Свёртка по НДС
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- УТ 11, КА 2, ERP 2: Настраиваемые под каждую организацию печать и подпись ответственных лиц в печатных формах (ТОРГ-12, Счёт-фактура, УПД, УКД, Заказ клиента, Акт сверки, М-15 и др.)
- Автоматическая загрузка в фоне из EXCEL (номенклатура, цены, остатки) из почты и с сайта для 1С:УТ 11 и 1С:УНФ 1.6
- Счет на оплату для УТ 11.5, КА 2.5, ERP 2 (+ версия с весом)
Найденные решения
В 8.2 немного другие принципы печати. Команда печати имеет возможность печати нескольких документов, поэтому в процедуру передается массив документов (1 или несколько документов). Просто проверить на Проведен тут не получится.
А какой релиз УТ11 у вас? Открыла сейчас 11.0.3.6, там в обработке команды уже есть выявление непроведенных документов и их проведение.
Если так не устраивает, опишите подробнее задачу и скажу как поправить данный код)
А какой релиз УТ11 у вас? Открыла сейчас 11.0.3.6, там в обработке команды уже есть выявление непроведенных документов и их проведение.
&НаСервере
Функция ПроверитьПроведенностьДокументов(МассивДокументов)
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Документ.Ссылка КАК Ссылка,
| Документ.Проведен КАК Проведен
|ИЗ
| Документ.ЧекККМ КАК Документ
|ГДЕ
| Документ.Ссылка В (&МассивДокументов)
| И Не Документ.Проведен
|");
Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов);
МассивНепроведенныхДокументов = Новый Массив;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
МассивНепроведенныхДокументов.Добавить(Выборка.Ссылка);
КонецЦикла;
Возврат МассивНепроведенныхДокументов;
КонецФункции // ПроверитьПроведенностьДокументов()
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
МассивНепроведенныхДокументов = ПроверитьПроведенностьДокументов(ПараметрКоманды);
КоличествоНепроведенныхДокументов = МассивНепроведенныхДокументов.Количество();
Если КоличествоНепроведенныхДокументов > 0 Тогда
Если КоличествоНепроведенныхДокументов = 1 Тогда
ТекстВопроса = НСтр("ru = 'Печать товарного чека возможна только после проведения документа, провести документ?'")
Иначе
ТекстВопроса = НСтр("ru = 'Печать товарных чеков возможна только после проведения документов, провести документы?'")
КонецЕсли;
КодОтвета = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Если КодОтвета = КодВозвратаДиалога.Да Тогда
МассивНепроведенныхДокументов = ФормированиеПечатныхФорм.ПровестиДокументы(МассивНепроведенныхДокументов);
КонецЕсли;
КонецЕсли;
Если ПараметрКоманды.Количество() - МассивНепроведенныхДокументов.Количество() > 0 Тогда
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(
"Документ.ЧекККМ",
"ТоварныйЧек",
ПараметрКоманды,
ПараметрыВыполненияКоманды.Источник,
Неопределено
);
КонецЕсли;
КонецПроцедуры
ПоказатьЕсли так не устраивает, опишите подробнее задачу и скажу как поправить данный код)
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
У тебя в функцию передается МассивОбъектов.
Для Каждого Элемент Из МассивОбъектов Цикл
Если Элемент.Проведен Тогда
Сообщить("Проведен!");
Иначе
Сообщить("Не проведен!");
КонецЕсли;
КонецЦикла
ЗЫ. Это так, к слову. Не советую данный код использовать.
Для Каждого Элемент Из МассивОбъектов Цикл
Если Элемент.Проведен Тогда
Сообщить("Проведен!");
Иначе
Сообщить("Не проведен!");
КонецЕсли;
КонецЦикла
ЗЫ. Это так, к слову. Не советую данный код использовать.
(3) Вот кусок кода из Розницы, но в торговле тоже самое примерно
Это функция модуля Универсальные механизмы. Поищи её в торговле или посмотри, как в других документах сделано в которых задается вопрос, о необходимости проведения документа.
Ну а если сам будешь писать не используя типовые механизмы, то вроде (2) тебе подсказали. Осталось только вывести предупреждение о необходимости провести документ.
Это функция модуля Универсальные механизмы. Поищи её в торговле или посмотри, как в других документах сделано в которых задается вопрос, о необходимости проведения документа.
Функция НапечататьДокументПоУмолчанию(Объект, КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт
ЭтоДокумент = Метаданные.Документы.Содержит(Объект.Метаданные());
Если ЭтоДокумент
И Объект.Метаданные().Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить
И Не УправлениеПользователями.РазрешитьПечатьНепроведенныхДокументов(Объект.Проведен) Тогда
Сообщить("Недостаточно полномочий для печати непроведенного документа!");
Возврат Ложь;
КонецЕсли;
ПоказатьНу а если сам будешь писать не используя типовые механизмы, то вроде (2) тебе подсказали. Осталось только вывести предупреждение о необходимости провести документ.
В УПП во всех документах в процедуре Печать() стоит такой код
УТ под рукой нет. Если дадите - попробую вам помочь
Если ЭтоНовый() Тогда
Предупреждение(НСтр("ru = 'Документ можно распечатать только после его записи'"));
Возврат;
ИначеЕсли Не УправлениеДопПравамиПользователей.РазрешитьПечатьНепроведенныхДокументов(Проведен) Тогда
Предупреждение(НСтр("ru = Недостаточно полномочий для печати непроведенного документа!'"));
Возврат;
КонецЕсли;
УТ под рукой нет. Если дадите - попробую вам помочь
В 8.2 немного другие принципы печати. Команда печати имеет возможность печати нескольких документов, поэтому в процедуру передается массив документов (1 или несколько документов). Просто проверить на Проведен тут не получится.
А какой релиз УТ11 у вас? Открыла сейчас 11.0.3.6, там в обработке команды уже есть выявление непроведенных документов и их проведение.
Если так не устраивает, опишите подробнее задачу и скажу как поправить данный код)
А какой релиз УТ11 у вас? Открыла сейчас 11.0.3.6, там в обработке команды уже есть выявление непроведенных документов и их проведение.
&НаСервере
Функция ПроверитьПроведенностьДокументов(МассивДокументов)
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Документ.Ссылка КАК Ссылка,
| Документ.Проведен КАК Проведен
|ИЗ
| Документ.ЧекККМ КАК Документ
|ГДЕ
| Документ.Ссылка В (&МассивДокументов)
| И Не Документ.Проведен
|");
Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов);
МассивНепроведенныхДокументов = Новый Массив;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
МассивНепроведенныхДокументов.Добавить(Выборка.Ссылка);
КонецЦикла;
Возврат МассивНепроведенныхДокументов;
КонецФункции // ПроверитьПроведенностьДокументов()
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
МассивНепроведенныхДокументов = ПроверитьПроведенностьДокументов(ПараметрКоманды);
КоличествоНепроведенныхДокументов = МассивНепроведенныхДокументов.Количество();
Если КоличествоНепроведенныхДокументов > 0 Тогда
Если КоличествоНепроведенныхДокументов = 1 Тогда
ТекстВопроса = НСтр("ru = 'Печать товарного чека возможна только после проведения документа, провести документ?'")
Иначе
ТекстВопроса = НСтр("ru = 'Печать товарных чеков возможна только после проведения документов, провести документы?'")
КонецЕсли;
КодОтвета = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Если КодОтвета = КодВозвратаДиалога.Да Тогда
МассивНепроведенныхДокументов = ФормированиеПечатныхФорм.ПровестиДокументы(МассивНепроведенныхДокументов);
КонецЕсли;
КонецЕсли;
Если ПараметрКоманды.Количество() - МассивНепроведенныхДокументов.Количество() > 0 Тогда
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(
"Документ.ЧекККМ",
"ТоварныйЧек",
ПараметрКоманды,
ПараметрыВыполненияКоманды.Источник,
Неопределено
);
КонецЕсли;
КонецПроцедуры
ПоказатьЕсли так не устраивает, опишите подробнее задачу и скажу как поправить данный код)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот