Имя: Пароль:
1C
1С v8
Отбор по строкам в таб. частях.
☑
0 lirt82
 
16.10.26
✎
13:34
В ЕРП у документа ПроизводствоБезЗаказа, есть несколько табличных частей, расположены они на разных страницах формы,
необходимо сделать отбор строк для табличной части 2-МатериалыИРаботы расположенной на странице "Материалы и работы", когда переключаемся по строкам табличной части 1-ВыходныеИзделия расположенной на странице "Продукция", у обеих частей есть реквизит Номенклатура тип спр Номенклатура.
При выполнении кода из расширения ниже таб. часть 2-ВыходныеИзделия при первом переключении строк в таб.части 1 отображает результат отбора, но далее при переключении строк таб. часть 2 становиться пустой, как исправить?
&НаКлиенте
Процедура ВыходныеИзделияПриАктивизацииСтрокиПосле(Элемент)
    
    ТекДанныеВыходныеИзделия = Элементы.ВыходныеИзделия.ТекущиеДанные;
    
    Если ТекДанныеВыходныеИзделия = Неопределено Тогда
        Элементы.МатериалыИРаботы.ОтборСтрок = Неопределено;
    Иначе
        ТекНоменклатура = ТекДанныеВыходныеИзделия.Номенклатура;
        Элементы.МатериалыИРаботы.ОтборСтрок = Новый ФиксированнаяСтруктура("Номенклатура", ТекНоменклатура);
    КонецЕсли;    
    
КонецПроцедуры
1 Timon1405
 
16.10.26
✎
13:34
(0) см. как сделано в кнопке "показать все товары" в документе "таможенная декларация на импорт"
2 lirt82
 
16.10.26
✎
13:40
(1) да также
&НаКлиенте
Процедура ПоказатьВсеТовары(Команда)
    Элементы.ТоварыПоказатьВсеТовары.Пометка = Не Элементы.ТоварыПоказатьВсеТовары.Пометка;
    НастроитьСервисыЗаполнения(Элементы, Объект);
    АктивироватьРаздел();
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура НастроитьСервисыЗаполнения(Элементы, Объект)
    ПоРазделам = Не Элементы.ТоварыПоказатьВсеТовары.Пометка;
    
    Элементы.ТоварыПодобратьИзПоступлений.Доступность = ПоРазделам;
    Элементы.ТоварыПодобратьТовары.Доступность = ПоРазделам;
    Элементы.ТоварыПодобратьИзОформления.Доступность = ПоРазделам;
    
    Элементы.ТоварыЗаполнитьНомерРаздела.Доступность = Не ПоРазделам;
    Элементы.ТоварыУстановитьНомерРаздела.Доступность = Не ПоРазделам;
    
    Элементы.РазделыУстановитьНомерДляСФ.Доступность = Не Объект.НумероватьПоТоварам;
    Элементы.ТоварыУстановитьНомерДляСФ.Доступность = Объект.НумероватьПоТоварам;
    
КонецПроцедуры

&НаКлиенте
Процедура АктивироватьРаздел()
    РазделОтбора = ДанныеТекущегоРаздела(Элементы.Разделы).НомерРаздела;
    ПоРазделам = Не Элементы.ТоварыПоказатьВсеТовары.Пометка;
    Товары = Элементы.Товары;
    Если ПоРазделам И (Товары.ОтборСтрок = Неопределено Или Товары.ОтборСтрок.НомерРаздела <> РазделОтбора) Тогда // включить отбор
        Товары.ОтборСтрок = Новый ФиксированнаяСтруктура("НомерРаздела", РазделОтбора);
    ИначеЕсли Не ПоРазделам И Товары.ОтборСтрок<>Неопределено Тогда // выключить отбор
        Товары.ОтборСтрок = Неопределено;
    КонецЕсли; // ничего не менять
КонецПроцедуры
3 Timon1405
 
16.10.26
✎
13:45
(2) +
&НаКлиенте
Процедура РазделыПриАктивизацииСтроки(Элемент)
    ПодключитьОбработчикОжидания("АктивироватьРаздел", 0.2, Истина);
КонецПроцедуры
4 Fedor-1971
 
16.10.26
✎
13:52
(0) Для начала запросником проверить, что под каждую строку ТЧ 1 подбираются строки из ТЧ2

Перенести код установки отбора на переключение закладок т.к. может теряться фокус на неактивной закладке (т.е. пишем в реквизит формы текНоменклатуру, а при переключении на нужную закладку устанавливаем отбор)
5 lirt82
 
16.10.26
✎
14:11
(4) отбой, разобрался, отбор работает, номенклатуры в таб частях различаются, а по одной позиции одинаковые там и отбор срабатывает. Код правильный, все дело в данных.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший