8.х Доступность внешней печатной формы в зависимости от значения реквизита

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем nickvv, 17 фев 2017.

  1. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    402
    Симпатии:
    1
    Баллы:
    29
    Уважаемые эксперты,
    1С:Комплексная автоматизация 2 (2.2.2.199)
    В справочнике Договоры контрагентов добавлен дополнительный реквизит ТипДоговораСПартнером, каждому из значений которого соответствует определенный шаблон договора.
    В зависимости от значения этого реквизита соответствующая этому значению ВПФ, содержащая нужный шаблон, должна отображаться в списке команд печати, а не соответствующие (т.е. содержащие другие шаблоны) - должны скрываться.
    Как понимаю, условие должно описываться в процедуре ДобавитьКоманду модуля ВПФ?
    Например, ТипДоговораСПартнером - "1" (соответственно - ВПФ1) или "2" (ВПФ2).
    И в модуле ВПФ1 должно быть:
    Код:
    Функция СведенияОВнешнейОбработке() Экспорт
     
    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Справочник.ДоговорыКонтрагентов");
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", "ВПФ1");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма ВПФ1 для справочника Договоры контрагентов");
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд, "ВПФ1", "ВПФ1", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    
    Возврат ПараметрыРегистрации;
    КонецФункции
    
    Функция ПолучитьТаблицуКоманд()
      Команды = Новый ТаблицаЗначений;
      Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
      Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
      Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
      Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
      Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
      Возврат Команды;
    КонецФункции
    
    Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    
      НоваяКоманда = ТаблицаКоманд.Добавить();
      НоваяКоманда.Представление = Представление;
      НоваяКоманда.Идентификатор = Идентификатор;
      НоваяКоманда.Использование = Использование;
      НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
      НоваяКоманда.Модификатор = Модификатор;
    
    КонецПроцедуры
    
    А вот как и где прописать мое условие?
    В принципе, наверное, правильно было бы, чтобы все ВПФ по кнопке Печать были видны, но доступна только подходящая, а при попытке выбрать не ту выскакивало бы сообщение, что ПФ выбрана не та.
    Спасибо
  2. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    402
    Симпатии:
    1
    Баллы:
    29
    В общем модуле "УправлениеПечатью" есть процедура:
    Код:
    Процедура ДобавитьУсловиеВидимостиКоманды(КомандаПечати, Реквизит, Значение, Знач МетодСравнения = Неопределено) Экспорт
        Если МетодСравнения = Неопределено Тогда
            МетодСравнения = ВидСравнения.Равно;
        КонецЕсли;
        УсловиеВидимости = Новый Структура;
        УсловиеВидимости.Вставить("Реквизит", Реквизит);
        УсловиеВидимости.Вставить("ВидСравнения", МетодСравнения);
        УсловиеВидимости.Вставить("Значение", Значение);
        КомандаПечати.УсловияВидимости.Добавить(УсловиеВидимости);
    КонецПроцедуры
    
    Может быть, это - то, что мне надо?
    Если оно, то как и где это прописать?
  3. 1с-ник
    Offline

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    690
    Симпатии:
    134
    Баллы:
    104
    Ты хочешь перелопатить подсистему доп отчетов и обработок?
    Может проще все в одну ВПФ запихать и в процедуре печати уже условие прописать на свой добавленный доп реквизит, в зависимости от этого вызывать печать шаблона.
    --- Объединение сообщений, 17 фев 2017 ---
    Видимость и доступность команд печати изменять имхо не хорошо получится.
    https://its.1c.ru/db/bspdoc#content:427:1
    Вроде как можно лишь указывать заменяемые команды, но не для ВПФ, а лишь те, которые имеются в модуле менеджера объекта "ДобавитьКомандыПечати()".
    nickvv нравится это.
  4. 1с-ник
    Offline

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    690
    Симпатии:
    134
    Баллы:
    104
    В БСП 2.3 добавили видимость команды печати, только не понятно, работает оно или нет. Попробуй задать.
    nickvv нравится это.
  5. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    402
    Симпатии:
    1
    Баллы:
    29
    Да, и сам пришел к такому варианту. Что получится - напишу
  6. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    402
    Симпатии:
    1
    Баллы:
    29
    Что-то никак в модуле формы не могу добиться проверки условия на свой реквизит.
    ТекЭлемент = ЭтаФорма.Объект.ПолучитьОбъект(); - ругается
    Как вытянуть сам объект, чтобы пройтись по значениям его реквизитов?
  7. 1с-ник
    Offline

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    690
    Симпатии:
    134
    Баллы:
    104
    модуль какой формы?)
    nickvv нравится это.
  8. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    402
    Симпатии:
    1
    Баллы:
    29
    управляемая форма элемента справочника Договоры контрагентов
    ОЙ! я же в форме обработки ковыряюсь!
    А как из формы обработки, привязанной к справочнику, вытянуть текущий объект справочника?
  9. 1с-ник
    Offline

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    690
    Симпатии:
    134
    Баллы:
    104
    ПриСозданииНаСервере()
    //твоя проверка
    Если ЗначениеЗаполнено(Объект.ТвойРеквизит) Тогда...
    nickvv нравится это.
  10. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    402
    Симпатии:
    1
    Баллы:
    29
    Так у меня объект уже есть. Надо распечатать существующий договор.
    И проверка - не просто на заполненность, а еще и на значение реквизита (тип реквизита - ПеречислениеСсылка)

    У меня во внешней печатной форме справочника надо проверить значение реквизита справочника.
    И в зависимости от значения этого реквизита подтягивать тот или иной макет печатной формы.
    Последнее редактирование: 17 фев 2017
  11. 1с-ник
    Offline

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    690
    Симпатии:
    134
    Баллы:
    104
    Ну так в процедуре печати у тебя массив объектов передаётся - бери да проверяй. В чем проблема - не понятно.

Поделиться этой страницей