Использование реквизитов в табличной форме документа

Версия для печатиPDF-версия

Платформа:

Доброго времени суток.

Меня зовут Анатолий. Я системный администратор в небольшой компании. Только начинаю программирование, как таковое (бейсик, С и другие, общий обзор, начало Бейсик). Есть у нас 1С, которую я периодически "ковыряю". Где-то макеты подправить, где-то значения изменить. В общей "картине маслом" из меня получается пока только модератор, то есть могу разобрать, изменить значение и собрать обратно. К сожалению нового написать не могу. Тем не менее пытаюсь что-то оптимизировать в работе сотрудников.

Появилась идея. Обозначение какого-либо свойства контрагента или документа на печатной форме ЗаказПокупателя.
К примеру по некоторым контрагентам требуется письменное одобрение руководителя отдела продаж на отгрузку.
Вижу реализацию идеи примерно так:
Я создал в справочнике Контрагента реквизит с флажком и разместил его на основной форме.
В документе Заказ покупателя, в табличной части, в ячейке разместил область для вывода на печать.

Хочу связать эти два элемента так, чтобы при утановке галочки в Карточке контрагента "требуется подтверждение", в печатной форме Заказ покупателя отображалось поле (ячейка) для подписи.
Имею кое какие начальные знания в программировании 1С, но минимальные, которых, видимо, не достаточно для реализации этой идеи.
Полагаю как-то делается ссылка из карточки контрагента, а потом в табличной части Заказа покупателя она влияет на отображение или не отображение ячейки подписи, либо наличие/отсутствие текста.

Примерное представление:
В справочнике Контрагенты добавлен реквизит Одобрение, на форме установлен флажок "Одобрение".

В табличной части ЗаказПокупателя в ячейке вставлен параметр Одобрение

В модуле ЗаказПокупателя

>>ПараметрыПечати.Вставить("Одобрение", ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Получатель, Шапка.Дата), "Одобрение"));

Попытался сделать по подобию параметра АдресДоставки, но, видимо сам адрес реквизита в карточке контрагента указал не правильно.

Нашёл как правильно сделать))

>>ПараметрыПечати.Вставить("Одобрение", Контрагент.Одобрение); //Обращение к реквизиту (флажок истина/ложь)

В табличной части ЗаказПокупателя в ячейке теперь показывает Да (Истина) или Нет (если флажок снят, ложь)

Но как вместо Да/Нет отображать нужный текст - не нашёл))

Какой текст хотите выводить? В печатной форме или в форме документа? Текст будет везде одинаковый?

Текст на печатной форме документа.
Если у контрагента стоит галочка "Одобрение" (Или "Требует продтверждения"), то на печатной форме "Заказ покупателя" в конкретной ячейке отображается текст типа "Одобрено НОП __________ ".

Это что-то типа информационной ячейки. К примеру, если у контрагента стоит флажок "Одобрение/подтверждение", то в этой ячейке будет содержаться текст для подписи. Если будет другой параметр, например "Товар со сроком не менее года", то в этой ячейке будет текст "Срок годности не менее года".

Текст привязан к флажку и в зависимости от того, включён или нет - передаётся в ячейку на печатной форме заявки.

Представляю себе примерно так:

На печатной форме "Заказ покупателя" ячейка содержит параметр "Одобрение" (Или "Информация", если будут добавляться другие детали карточки контрагента).

Если Информация = Одобрение //Который реквизит в карточке контрагента, булево

то Информация.Текст = "Одобрено НОП __________ "

Иначе Если Информация = БольшеГода //К примеру новый реквизит в карточке контрагента, булево

то Информация.Текст = "Срок годности не менее года"

***

Либо комбинировать их, если стоят оба флажка

Информация = " ";

Если Информация = Одобрение //Который реквизит в карточке контрагента, булево

то Информация.Текст = Информация + "Одобрено НОП __________ "

КонецЕсли;

Если Информация = БольшеГода //К примеру новый реквизит в карточке контрагента, булево

то Информация.Текст = Информация + "Срок годности не менее года"

КонецЕсли;

 

Извиняюсь, если получилось месиво =)

Если эта информация будет общей для всего документа, то добавляете в макете новую область (допустим, Информация). В нужной ячейке добавляете параметр (допустим, тоже Информация). В процедуре формирования печатной формы в нужное место добавляете подобный код:

Информация = "";
Если Контрагент.Одобрение Тогда
	Информация = "Одобрено НОП __________ ";
КонецЕсли;
Если Контрагент.БольшеГода Тогда 
	Информация = Информация + "Срок годности не менее года";
КонецЕсли;
ОбластьМакета = Макет.ПолучитьОбласть("Информация");
ОбластьМакета.Параметры.Информация = Информация;
ТабДокумент.Вывести(ОбластьМакета);

ПС. Можно это сделать без изменения конфигурации. Для этого можно использовать Свойства справочника Контрагенты. Конечно, получение значений усложнится, но если конфигурация на поддержке, то оно того стоит.

ППС. Странно привязывать срок годности к контрагенту. По-моему, это свойство номенклатуры.

Добрый день)

Вроде всё сделал так, но он сопротивляется. Если не вставлять эту часть: ОбластьМакета... - ..); , то в области Информация просто пишет Да или Нет (булево реквизитов Контрагента), а если куда-нибудь вставить (например после текста, где формируется заголовок),

Функция СоздатьТабличныйДокументПечатиСчетаЗаказа(Тип, ПараметрыПечати)
        
...

    // Выводим шапку накладной

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

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

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

//Мод

        ОбластьМакета = Макет.ПолучитьОбласть("Информация");
        ОбластьМакета.Параметры.Информация = Информация;
        ТабДокумент.Вывести(ОбластьМакета);
 

Впрочем, куда я её только не вставлял)))

, то пишет, что область Информация не найдена

{Документ.ЗаказПокупателя.МодульОбъекта(387)}: Ошибка при вызове метода контекста (ПолучитьОбласть)
    ОбластьМакета = Макет.ПолучитьОбласть("Информация");
по причине:
Область не найдена: Информация

Хотя сама ячейка с параметром Информация в макете есть.

 

Завтра посмотрю, куда ещё можно вставить)))

// ППС. Странно привязывать срок годности к контрагенту. По-моему, это свойство номенклатуры.

Я наверное не так выразился) Это в смысле не срок годности номенклатуры, а есть клиенты, которые обязательно требуют товар со сроком не меньше года, таких несколько, и этот параметр к номенклатуре не привяжешь. А некоторым и пол года нормально и 4 месяца)

Если хотите Информацию вывести в уже существующей области (например, в Заголовке), то надо добавить в нужную ячейку параметр Информация и после строки:

ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);

добавить строку:

ОбластьМакета.Параметры.Информация = Информация;

Разумеется, в переменной Информация должно уже быть сформированное ранее значение (см.выше).

> ПС. Можно это сделать без изменения конфигурации. Для этого можно использовать Свойства справочника Контрагенты. Конечно, получение значений усложнится, но если конфигурация на поддержке, то оно того стоит.

Интересный вариант. А это сложно?

У меня написано в конфигурации, что Объект поставщика редактируется с сохранением поддержки.

Я так полагаю, что при обновлении конфигурации все изменения, внесённые в код или форму таких элементов, заменяются на обновлённые компоненты.

И подозреваю, что новые элементы (обработки, новые справочники) сохраняются, так как не имеют заменяемых аналогов при обновлении.

Было бы полезно научиться модифицировать конфигурацию так, чтобы не нарушать типовой структуры, но при этом добавлять нужные элементы))
 

Вау! Круто! У меня всё получилось!!)))

Спасибо огромное, Алексей (novichok), за помощь в реализации идеи)))

Здорово учиться чему-то новому, когда в итоге всё получается как задумано)))

1. Свойства

В карточке контрагента переходите на вкладку "Свойства". Нажимаете [Insert] (Добавить). В открывшейся форме заполняете поле "Наименование". В поле "Тип значений" устанавливаете значение "Булево". Нажимаете "ОК". Это свойство будет доступно у любого контрагента.

Пример кода для получения значения свойства:

Контрагент = ПараметрыПечати.Контрагент;
Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Одобрение", Истина);
Одобрение = РегистрыСведений.ЗначенияСвойствОбъектов.Получить(Новый Структура("Объект, Свойство", Контрагент, Свойство)).Значение;
Если Одобрение = Неопределено Тогда 
	Одобрение = Ложь;
КонецЕсли;

2. При обновлении конфигурации нужно будет проводить сравнение и объединение объектов. Если в изменённом объекте в новой конфигурации поставщика нет отличий от старой конфигурации поставщика, то объект останется изменённым. Если отличия есть, то после обновления придётся заново вносить все изменения. Новые добавленные объекты при обновлении остаются без изменений.

3. В новых конфигурациях на платформе 8.3 уже есть механизм расширения конфигураций, который позволяет вносить изменения без модификации типовой конфигурации. В Управлении торговлей этот механизм доступен, начиная с версии 11.2.