УТ, платформа 8.2
ТехЗадание:
Если контрагенту отдается товарная накладная (ТН), то необходимо отслеживать ее получение своего экземпляра + экземпляра Товарно-транспортной накладной(ТТН).
В форму документа вывести поле для заполнения отслеживания.
Оно должен появляться только при условии когда в поле «документы» стоит значение «Товарная накладная (ТН)».
Вывести колонку отслеживания в форму списка документа «реализацияТоваровИУслуг», чтобы удобно было отслеживать значение не входя в документ.
Колонку отслеживания в форме списка выделять красным если должны быть получены документы, но не получены.
Заполнять какие экземпляры получены будет ответственный сотрудник.
Решение:
Заводим новое перечисление:
В документе «РеализацияТоваровИУслуг» создаем новый реквизит «НашиЭкземпляры» с типом значения «перечисления.РеализацияНашиЭкземплярыДокументов» и выводим его на форму.
Если клиенту отдается ТН, то заполняется поле документ так:
Если отдается другой документ то реквизит «НашиЭкземпляры» должен быть невидимым, и если в нем было какое-либо значение то оно должно обнуляться.
При открытии формы и при изменении реквизита "Документы" должна устанавливаться видимость. Поэтому лучше видимость вывести в отдельную процедуру вида:
процедура видимостьНашиЭкземпляры(сбрасыватьЗначение=ложь)
если ЭтотОбъект.документы=Перечисления.реализацияДокументы.ТоварнаяНакладная
тогда
ЭлементыФормы.НашиЭкземпляры.Видимость=истина;
ЭлементыФормы.НадписьНашиЭкземпляры.Видимость=истина;
иначе
Если сбрасыватьЗначение тогда
ЭтотОбъект.НашиЭкземпляры=Перечисления.РеализацияНашиЭкземплярыДокументов.ПустаяСсылка();
конецЕсли;
ЭлементыФормы.НашиЭкземпляры.Видимость=ложь;
ЭлементыФормы.НадписьНашиЭкземпляры.Видимость=ложь;
КонецЕсли;
конецПроцедуры
А вызывать ее из событий приИзменении() и приОткрытии(). При событии ПриИзменении() параметр процедуры "сбрасыватьЗначение" устанавливать в истина.
Для вывода в форму списка вытаскиваем реквизит «Наши экземпляры» на форму:
Сделаем чтобы колонка выделялась красным если реквизит «НашиЭкземпляры» заполнен но его значение не равно ТН+ТТН.
Для этого допишем это условие в процедуру «ПриВыводеСтроки» формы «ФормаСписка»:
Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
// колонка "наши экземпляры"
// красный цвет если значение не пустое и не равно ТН+ТТН
если данныестроки.ссылка.НашиЭкземпляры<>перечисления.РеализацияНашиЭкземплярыДокументов.ТНиТТН и
данныестроки.ссылка.документы=перечисления.реализацияДокументы.ТоварнаяНакладная
тогда
ОформлениеСтроки.Ячейки["НашиЭкземпляры"].ЦветФона = WebЦвета.БледноКрасноФиолетовый;
конецЕсли;
КонецПроцедуры
Готово, обновляем конфигурацию.
Но при обновлении получаем окно
Аварийно завершить сеансы мы не можем, т. к. менеджеры в данный момент заполняют документы продажи клиентам, поэтому обновление конфигурации отложим на конец рабочего дня.
Результат
Документ в зависимости от от реквизита показывает или скрывает "наши экземпляры":
показывает, т.к. документы = товарная накладная
скрывает т.к. документы <> товарная накладная:
Список документов выглядит так:
Бухгалтеру удобно, не формируя никаких отчетов, видеть по каким документам не хватает документов.
Такая же доработка была заказана для отслеживания полученных копий по актам сверки.
P.S.
Раскрашивать формы списков документов не очень хорошо, т.к. это снижает производительность платформы, но в данном случае это не заметно.
Клиент хотел доработку именно в таком виде. А желание клиента закон.
Если вдруг когда-нибудь это скажется на производительности - переделаем в обычный отчет :).