Макет видимость

1. _7445_ 02.04.19 19:32 Сейчас в теме
Здравствуйте. Я плохо знаю русский. Извините за этого. Я еще новичок в 1С программирование. В УТ 10.3. Надо сделать такой отбор - что если в пользователя есть полные права тогда макета отключился видимость колонках цена и сумма иначе показало нормально. Если изменить присоединить с ввести тогда форма макета уже потеряется. Полный код такой -
Функция ПечатьСписаниеТоваров()
    
    ПараметрыПечати = ПолучитьДанныеДляПечатиСписанияТоваров();

    Если ПараметрыПечати.ЭтоСкладНТТ Тогда
        ИмяШапки         = "ШапкаТаблицы";
        ИмяСтроки        = "Строка";
    Иначе
        ИмяШапки         = "ШапкаТаблицыНТТ";
        ИмяСтроки        = "СтрокаНТТ";
    КонецЕсли;

    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СписаниеТоваров_Накладная";

    Макет = ПолучитьМакет("Накладная");

    // Выводим шапку накладной
    ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
    ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьМакета);

    ОбластьМакета = Макет.ПолучитьОбласть("РевизитыОрганизации");
    ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьМакета);

    ОбластьНомера  = Макет.ПолучитьОбласть(ИмяШапки + "|НомерСтроки");
    ОбластьКодов   = Макет.ПолучитьОбласть(ИмяШапки + "|КолонкаКодов");
    ОбластьТовар   = Макет.ПолучитьОбласть(ИмяШапки + "|Товар");
    ОбластьМест    = Макет.ПолучитьОбласть(ИмяШапки + "|Мест");
    ОбластьДанных  = Макет.ПолучитьОбласть(ИмяШапки + "|Данные");
        
    ТабДокумент.Вывести(ОбластьНомера);
    Если ПараметрыПечати.ВыводитьКоды Тогда
        ОбластьКодов.Параметры.Заполнить(ПараметрыПечати);
        ТабДокумент.Присоединить(ОбластьКодов);
    КонецЕсли;
    ТабДокумент.Присоединить(ОбластьТовар);
    ОбластьКолонкаТовар = Макет.Область("Товар");
    Если ПараметрыПечати.ВыводитьКоды Тогда
        ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки
                                            + ?(ПараметрыПечати.ФлагПечатиМест, 0, Макет.Область("R14C5").ШиринаКолонки + Макет.Область("R14C6").ШиринаКолонки);
    Иначе
        ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки
                                            + Макет.Область("КолонкаКодов").ШиринаКолонки
                                            + ?(ПараметрыПечати.ФлагПечатиМест, 0, Макет.Область("R14C5").ШиринаКолонки + Макет.Область("R14C6").ШиринаКолонки);
    КонецЕсли;
    Если ПараметрыПечати.ФлагПечатиМест Тогда
        ТабДокумент.Присоединить(ОбластьМест);
    КонецЕсли;
         

             ТабДокумент.Присоединить(ОбластьДанных);
        

    ОбластьНомера = Макет.ПолучитьОбласть(ИмяСтроки + "|НомерСтроки");
    ОбластьКодов  = Макет.ПолучитьОбласть(ИмяСтроки + "|КолонкаКодов");
    ОбластьТовар  = Макет.ПолучитьОбласть(ИмяСтроки + "|Товар");
    ОбластьМест   = Макет.ПолучитьОбласть(ИмяСтроки + "|Мест");
    ОбластьДанных = Макет.ПолучитьОбласть(ИмяСтроки + "|Данные");

    СуммаИтого = 0;
    Ном        = 0;

    // Товары и тара
    Для каждого ПараметрыПозиции Из ПараметрыПечати.Позиции Цикл

        Если НЕ ЗначениеЗаполнено(ПараметрыПозиции.Номенклатура) Тогда
            Сообщить("Sətrlərin birində nomenklaturanın mənası doldurulmayıb - çapda sətr buraxılıb.", СтатусСообщения.Важное);
            Продолжить;
        КонецЕсли;

        ОбластьНомера.Параметры.Заполнить(ПараметрыПозиции);
        ТабДокумент.Вывести(ОбластьНомера);

        Если ПараметрыПечати.ВыводитьКоды Тогда
            ОбластьКодов.Параметры.Заполнить(ПараметрыПозиции);
            ТабДокумент.Присоединить(ОбластьКодов);
        КонецЕсли;

        ОбластьТовар.Параметры.Заполнить(ПараметрыПозиции);
        ТабДокумент.Присоединить(ОбластьТовар);

        Если ПараметрыПечати.ФлагПечатиМест Тогда
            ОбластьМест.Параметры.Заполнить(ПараметрыПозиции);
            ТабДокумент.Присоединить(ОбластьМест);
        КонецЕсли;

        ОбластьДанных.Параметры.Заполнить(ПараметрыПозиции);
                
        ТабДокумент.Присоединить(ОбластьДанных);
    

    КонецЦикла;

    // Вывести Итого
    ОбластьНомера = Макет.ПолучитьОбласть("Итого|НомерСтроки");
    ОбластьКодов  = Макет.ПолучитьОбласть("Итого|КолонкаКодов");
    ОбластьТовар  = Макет.ПолучитьОбласть("Итого|Товар");
    ОбластьМест   = Макет.ПолучитьОбласть("Итого|Мест");
    ОбластьДанных = Макет.ПолучитьОбласть("Итого|Данные");


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

    // Вывести Сумму прописью
    ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
    ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьМакета);

    // Вывести подписи
    ОбластьМакета = Макет.ПолучитьОбласть("Подписи");
    ТабДокумент.Вывести(ОбластьМакета);     


    Возврат ТабДокумент;


КонецФункции // ПечатьСписаниеТоваров()
Показать

Если Имя Шапки = ШапкаТаблицыНТТ тогда надо делать отбор. В данные есть колонки количество, цена и сумма. Надо что только колонка цена и сумма не было видимо.
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. noprogrammer 239 02.04.19 19:58 Сейчас в теме
В макетах нет понятия "Отбор" - тебе необходимо разбить секцию "Данные" на 2 секции (например на секцию "Количество" и секцию "ЦенаСумма" и вот уже секцию "ЦенаСумма" выводи если есть права...
3. dhurricane 02.04.19 20:29 Сейчас в теме
В дополнение к сказанному выше еще можно предложить добавить альтернативные строки таблицы в макет, скопировав исходные и удалив в них ненужные колонки (растянув остальные). И уже в зависимости от прав получать либо первую, либо вторую область.
4. SedovSU@mail.ru 298 03.04.19 06:18 Сейчас в теме
Разбейте область Данные на две - ДанныеКоличество и ДанныеЦенаСумма.
Далее в зависимости от прав выводит либо ДанныеКоличество или ДанныеЦенаСумма или и тот и тот.

Второй подход. Когда вы заполняете область Данные, вы на уровни прав можете не заполянть значение реквизитов Цена и Сумма, тогда вам макета менять не надо, но у вас либо будет заполнено все либо будет просто заполнено количество (это можно на программном уровне описать)

И еще одни вариант. Когда уже сформирован документ, в самом конце, вы можете просто либо скрыть колонки цена и сумма либо их удалить уже в сформированном документе
5. waitklassik 03.04.19 12:33 Сейчас в теме
создать два макета и прописать какой будет доступен пользователю под какими правами
6. oleg-x 27 03.04.19 12:36 Сейчас в теме
(5) Это конечно самый простой способ решить проблему, но если подходить к задачам с такой стороны, то последующие доработки таких вещей потребует больших сил.
Так как в данном варианте в случае чего уже придется менять не один макет, а два. Завтра еще появятся условия и уже будет не 2, а 3 или 5 макетов, для каждого варианта.
7. waitklassik 03.04.19 12:39 Сейчас в теме
(6)условия появляются не так часто, а такие хотелки и подавно
8. oleg-x 27 03.04.19 12:44 Сейчас в теме
(7) Они может и не часто появляются, но с завидной периодичностью. Сегодня попросили так, через пол года, попросили добавить еще одно условие. А через 2 года сидишь и ломаешь голову, везде ли внесли правки.
Конечно, если в планах нет оставаться на такой работе или разовая задача от заказчика (с которым не будешь больше работать), то можно и по простому, а если нет, то стоит делать правильно изначально.
10. waitklassik 03.04.19 12:54 Сейчас в теме
(8)ну тут с тобой полностью согласен.
9. oleg-x 27 03.04.19 12:46 Сейчас в теме
Если уж говорить о самом простом варианте, то это просто не выводить суммы, а оставить пустыми. Колонки будут выводится, но без сумм
Оставьте свое сообщение

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