Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
01 дек 2025, 02:39

Показать все документы по ключам

Автор nopIII, 27 ноя 2025, 13:57

0 Пользователей и 1 гость просматривают эту тему.

nopIII

Добрый день! Я новичок в 1С, и у меня есть вопрос по показу всех результатов при нажатии «Показать все».
У меня есть таблица значений с 8 колонками - одни из них: дата, склад, номенклатура и количество.
Ещё есть колонка с типом документ «Перемещение товаров».

При заполнении всех колонок (дата, склад, номенклатура, количество) у меня должна автоматически заполняться колонка «Перемещение товаров». Она ищет по этим ключевым полям такой документ. У меня она ищет всё идеально, но нужно, чтобы, если найдено несколько документов, при нажатии «Показать все» в поле колонки «Перемещение товаров» выдавались все документы, найденные по этим ключам.

antoneus

И как они должны там все уместиться? Есть представление?

nopIII

antoneus, Они не должны быть все в одном поле колонки, они должны быть в таблице которая появляется при нажатии "Показать все" И я буду выбирать один из этих документов и он вставится в поле. Я это  так вижу  :trhregerhg:

antoneus

А. Значит, нужно:

1. Получить форму выбора документа.
2. В списке документов на форме установить отбор по ключевым полям.
3. Открыть эту форму с отбором.
4. Обработать выбор документа в этой форме.

Понимаю, для новичка звучит люто) Что именно непонятно как сделать?

nopIII

antoneus, Попробовал вот так, сейчас после показать все открывается с пустыми значениями. Хотя бы что-то а то до этого открывалось просто со всеми документами. Но явно я что-то не понимаю :dfbsdfbsdf:  &НаКлиенте
Процедура АнализНомерПеремещенияНачалоВыбора(Элемент, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    Строка = Элементы.Анализ.ТекущиеДанные;
    Если Строка = Неопределено Тогда
        Возврат;
    КонецЕсли;

    // ---------- формируем структуру отбора ----------
    ЗначениеОтбора = Новый Структура;

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

    Если ЗначениеЗаполнено(Строка.Характеристика) Тогда
        ЗначениеОтбора.Вставить("Характеристика", Строка.Характеристика);
    КонецЕсли;

    Если ЗначениеЗаполнено(Строка.СкладОтправитель) Тогда
        ЗначениеОтбора.Вставить("СкладОтправитель", Строка.СкладОтправитель);
    КонецЕсли;

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

    Если ЗначениеЗаполнено(Строка.Дата) Тогда
        // если нужно – просто по дате, без интервала
        ЗначениеОтбора.Вставить("Дата", Строка.Дата);
    КонецЕсли;

    Если ЗначениеЗаполнено(Строка.Количество) Тогда
        ЗначениеОтбора.Вставить("КоличествоУпаковок", Строка.Количество);
    КонецЕсли;

    // Параметры формы: ключ "Отбор" – как в примере коллеги
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("Отбор", ЗначениеОтбора);

    // доп.параметры – нашу строку передаём в обработчик выбора
    ДопПарам = Новый Структура("СтрокаАнализа", Строка);

    // ---------- открываем форму выбора документа с отбором и оповещением ----------
    ОткрытьФорму(
        "Документ.ПеремещениеТоваров.ФормаВыбора",
        ПараметрыФормы,
        ЭтаФорма,                // владелец
        ,                        // имя формы
        ,                        // режим открытия
        Новый ОписаниеОповещения(
            "ОбработкаВыбораДокументаПеремещения",
            ЭтотОбъект,
            ДопПарам)
    );

КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбораДокументаПеремещения(ВыбранныйОбъект, Параметры) Экспорт

    Если ВыбранныйОбъект = Неопределено Тогда
        Возврат;
    КонецЕсли;

    Строка = Неопределено;
    Если Параметры <> Неопределено
        И Параметры.Свойство("СтрокаАнализа") Тогда
        Строка = Параметры.СтрокаАнализа;
    КонецЕсли;

    Если Строка = Неопределено Тогда
        Строка = Элементы.Анализ.ТекущиеДанные;
    КонецЕсли;

    Если Строка = Неопределено Тогда
        Возврат;
    КонецЕсли;

    Строка.НомерПеремещения  = ВыбранныйОбъект;
    Строка.СтатусПеремещения = ПолучитьСтатусПеремещения(ВыбранныйОбъект);

    Элементы.Анализ.Обновить();

КонецПроцедуры

antoneus

Дата в строке заполнена? Если что, будет работать отбор только если дата документа строго равна этой дате. Плюс-минус секунда - всё)
Потом - номенклатура, характеристика и т.д. В документе это реквизиты ТЧ? Отбор работает, грубо говоря, по колонкам списка, в основном это - реквизиты шапки. Если отбирать по реквизитам ТЧ - нужен другой подход.

nopIII

antoneus, В документе Номенклатура, Характеристика и Количество находится в ТЧ Товары. Он должен по идее искать все документы по месяцу даты которая у меня стоит в колонке тобиж если стоит 28.11.2025 то он должен искать за весь ноябрь 25 года. Сейчас еще посижу подправлю возможно заработает

Максим75

Цитата: nopIII от 28 ноя 2025, 07:55antoneus, В документе Номенклатура, Характеристика и Количество находится в ТЧ Товары. Он должен по идее искать все документы по месяцу даты которая у меня стоит в колонке тобиж если стоит 28.11.2025 то он должен искать за весь ноябрь 25 года. Сейчас еще посижу подправлю возможно заработает
вряд ли он будет вот так просто что-то искать.
вот посмотрите каким образом заполняется список на вызываемой форме, скорее всего там нет вообще никаких реквизитов табличной части. надо рисовать свой запрос и уже этим запросом что-то там отбирать, куда-то там выводить и как-то там выбирать.

antoneus

Ну можно и на табличную часть отборы поустанавливать)

nopIII

antoneus, Сейчас исправил код хотя бы чтоб мне выдавало то что в шапке этой формы выбора находится: Дата и склады. Он реально по этому коду мне выдал по моей дате ( только чтоб он выдавал конкретно по месяцу так и не понял как сделать) и только склады которые у меня стоят в полях колонок. Теперь осталось понять как поставить отбор чтоб и объекты табличных частей захватывал...  :(  :(  &НаКлиенте
Процедура АнализНомерПеремещенияНачалоВыбора(Элемент, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    Строка = Элементы.Анализ.ТекущиеДанные;
    Если Строка = Неопределено Тогда
        Возврат;
    КонецЕсли;

    // -------- формируем структуру отбора --------
    ЗначениеОтбора = Новый Структура;

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

    Если ЗначениеЗаполнено(Строка.Характеристика) Тогда
        ЗначениеОтбора.Вставить("Характеристика", Строка.Характеристика);
    КонецЕсли;

    Если ЗначениеЗаполнено(Строка.СкладОтправитель) Тогда
        ЗначениеОтбора.Вставить("СкладОтправитель", Строка.СкладОтправитель);
    КонецЕсли;

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

 

    // Параметры формы: ключ "Отбор"
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("Отбор", ЗначениеОтбора);

    // Доп.параметры – чтобы понять, в какую строку вернуться
    ДопПарам = Новый Структура("СтрокаАнализа", Строка);

    ОткрытьФорму(
        "Документ.ПеремещениеТоваров.ФормаВыбора",
        ПараметрыФормы,
        ЭтаФорма,
        Новый ОписаниеОповещения(
            "ОбработкаВыбораДокументаПеремещения",
            ЭтаФорма,
            ДопПарам
        )
    );

КонецПроцедуры


Процедура ОбработкаВыбораДокументаПеремещения(ВыбранныйОбъект, Параметры) Экспорт

    Если ВыбранныйОбъект = Неопределено Тогда
        Возврат;
    КонецЕсли;

    Строка = Параметры.СтрокаАнализа;
    Если Строка = Неопределено Тогда
        Строка = Элементы.Анализ.ТекущиеДанные;
    КонецЕсли;

    Если Строка = Неопределено Тогда
        Возврат;
    КонецЕсли;

    Строка.НомерПеремещения = ВыбранныйОбъект;
    Строка.СтатусПеремещения = ПолучитьСтатусПеремещения(ВыбранныйОбъект);

    Элементы.Анализ.Обновить();

КонецПроцедуры


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск