Имя: Пароль:
1C
 
Исключение в подборе уже использованных записей в документе
0 NIGHTHUNTER
 
11.08.22
09:03
В документе, используется подбор. Задача в том что бы  этом подборе не выводились записи, уже выбранные в существующих документах.
Как правильно сделать исключение этих записей из подбора?
1 6awkup_true
 
11.08.22
09:06
редактированием запроса дин списка
2 6awkup_true
 
11.08.22
09:11
помещаешь в вт всю номенклатуру, участвующую в проведенных документов. цепляешь вт к справочнику номенклатуры левым соединением. в условиях запроса пишешь условие ВТ_НоменклатураДокументов.Номенклатура есть null
3 6awkup_true
 
11.08.22
09:18
либо собираешь номенклатуру перед открытием формы выбора и при начале выбора пишешь следующее

НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Ссылка");
ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.НеРавно;
ЭлементОтбора.Использование  = Истина;
ЭлементОтбора.ПравоеЗначение = МассивСсылокНаИсключаемуюНоменклатуру;

ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ФиксированныеНастройки", НастройкиКомпоновки);
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ПараметрыФормы.Вставить("МножественныйВыбор",Истина);

ОткрытьФорму(...
4 NIGHTHUNTER
 
11.08.22
09:30
(1) Вообще в обработку подбора, данные выбираются таким запросом.

    Запрос.Текст ="ВЫБРАТЬ
          |    Остатки.ЗаказКлиента КАК ЗаказКлиента,
          |    Остатки.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
          |    Остатки.ЭтапПроизводства КАК ЭтапПроизводства,
          |    Остатки.Номенклатура КАК Номенклатура,
          |    Остатки.Характеристика КАК Характеристика,
          |    Остатки.КоличествоПоЗаявкеМенеджераОстаток КАК Количество,
          |    Остатки.ХХХ_УИД КАК ХХХ_УИД,
          |    ЛОЖЬ КАК СтрокаВыбрана
          |ПОМЕСТИТЬ ВТ_Остатки
          |ИЗ
          |    РегистрНакопления.ХХХ_ЗаказыПоставщикамПоЭтапамПроизводства.Остатки(&Дата1, ) КАК Остатки
          |ГДЕ
          |    Остатки.КоличествоПоЗаявкеМенеджераОстаток > 0
      |        @заказ@ @ЭтапПроизводства@ @ЗаказНаПроизводство@
          |;
          |
          |////////////////////////////////////////////////////////////////////////////////
          |ВЫБРАТЬ
          |    ВТ_Остатки.ЗаказКлиента КАК ЗаказКлиента,
          |    ВТ_Остатки.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
          |    ВТ_Остатки.ЭтапПроизводства КАК ЭтапПроизводства,
          |    ВТ_Остатки.Номенклатура КАК Номенклатура,
          |    ВТ_Остатки.Характеристика КАК Характеристика,
          |    ВТ_Остатки.Количество КАК Количество,
          |    ВТ_Остатки.ХХХ_УИД КАК ХХХ_УИД,
          |    ВТ_Остатки.СтрокаВыбрана КАК СтрокаВыбрана,
          |    а.ХХХ_СформировалПотребность КАК ХХХ_СформировалПотребность,
          |    а.ХХХ_ОтветственныйНаУчастке КАК ХХХ_ОтветственныйНаУчастке,
          |    а.ХХХ_НомерДобавления КАК ХХХ_НомерДобавления,
          |    а.ХХХ_НарядЗадание КАК ХХХ_НарядЗадание,
      |    а.ПрименениеМатериала КАК ПрименениеМатериала,
      |    а.ХХХ_КлассБезопасности КАК ХХХ_КлассБезопасности
          |ИЗ
          |    ВТ_Остатки КАК ВТ_Остатки
          |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЭтапПроизводства2_2.ОбеспечениеМатериаламиИРаботами КАК а
          |        ПО ВТ_Остатки.ЭтапПроизводства = а.Ссылка
          |            И ВТ_Остатки.Номенклатура = а.Номенклатура
          |            И ВТ_Остатки.Характеристика = а.Характеристика
          |            И ВТ_Остатки.ХХХ_УИД = а.ХХХ_УИД
      |ГДЕ Истина @СформировалПотребность@ @ОтветственныйНаУчастке@ @НомерДобавления@
      | @НомерНарядЗадания@";



(3) как его правильно доработать, что бы исключить из него записи что уже учавствуют в документах?
5 yopQua
 
11.08.22
09:35
Ванга : ТС 0-1
6 NIGHTHUNTER
 
11.08.22
09:39
Записи видимо нужно исключать из первого пакетного запроса.
Подбираются они в документ ЗаявкаМенеджера.

Как будет правильно сделать?
7 yopQua
 
11.08.22
09:40
а что это за собачки, там.. в текстах запроса? это так параметры сейчас задаются?
видимо Регистр Не в (Выбрать Из Документ)
8 Kassern
 
11.08.22
09:42
(7) вангую, сабачками куски текста запроса выделяются, чтобы потом производить замену текста. Получается динамические условия в запросе.
9 NIGHTHUNTER
 
11.08.22
09:42
(3) Видите тут несколько иначе.

В подбор записи помещаются строкой, -

Объект.СписокСтрок.Загрузить(ВыборкаДетальныеЗаписи);

Как правильно исключить записи подбора, уже внесенные в документы ЗаказМенеджера, из первого пакетного запроса (4) .
10 NIGHTHUNTER
 
11.08.22
09:43
(8) Я думал собачками и смайликами выделялись, так как делал это маньяк.
11 yopQua
 
11.08.22
09:43
(8) Ну мб мб
12 NIGHTHUNTER
 
11.08.22
09:44
(8) Там потом такие условия

    Запрос.УстановитьПараметр("Дата1", КонецДня(ТекущаяДата()));
    Если ЗначениеЗаполнено(Этаформа.ЗаказКлиента) Тогда
        Запрос.Текст=СтрЗаменить(Запрос.Текст,"@заказ@"," и Остатки.ЗаказКлиента=&ЗаказКлиента");
        Запрос.УстановитьПараметр("ЗаказКлиента", Этаформа.ЗаказКлиента);
    Иначе
        Запрос.Текст=СтрЗаменить(Запрос.Текст,"@заказ@","");
    КонецЕсли;
    
    Если ЗначениеЗаполнено(Этаформа.НомерНарядЗадания) Тогда
        Запрос.Текст=СтрЗаменить(Запрос.Текст,"@НомерНарядЗадания@"," и а.ХХХ_НарядЗадание.Номер ПОДОБНО &НомерНарядЗадания");
        Запрос.УстановитьПараметр("НомерНарядЗадания", "%" + Этаформа.НомерНарядЗадания + "%");
    Иначе
        Запрос.Текст=СтрЗаменить(Запрос.Текст,"@НомерНарядЗадания@","");
    КонецЕсли;
    
    Если ЗначениеЗаполнено(Этаформа.ЭтапПроизводства) Тогда
        Запрос.Текст=СтрЗаменить(Запрос.Текст,"@ЭтапПроизводства@"," и Остатки.ЭтапПроизводства=&ЭтапПроизводства");
        Запрос.УстановитьПараметр("ЭтапПроизводства", Этаформа.ЭтапПроизводства);
    Иначе
        Запрос.Текст=СтрЗаменить(Запрос.Текст,"@ЭтапПроизводства@","");
    КонецЕсли;
    Если ЗначениеЗаполнено(Этаформа.ЗаказНаПроизводство) Тогда
        Запрос.Текст=СтрЗаменить(Запрос.Текст,"@ЗаказНаПроизводство@"," и Остатки.ЗаказНаПроизводство=&ЗаказНаПроизводство");
        Запрос.УстановитьПараметр("ЗаказНаПроизводство", Этаформа.ЗаказНаПроизводство);
    Иначе
        Запрос.Текст=СтрЗаменить(Запрос.Текст,"@ЗаказНаПроизводство@","");
    КонецЕсли;
    
    Если ЗначениеЗаполнено(Этаформа.ОтветственныйНаУчастке) Тогда
        Запрос.Текст=СтрЗаменить(Запрос.Текст,"@ОтветственныйНаУчастке@"," и а.ХХХ_ОтветственныйНаУчастке=&ОтветственныйНаУчастке");
        Запрос.УстановитьПараметр("ОтветственныйНаУчастке", Этаформа.ОтветственныйНаУчастке);
    Иначе
        Запрос.Текст=СтрЗаменить(Запрос.Текст,"@ОтветственныйНаУчастке@","");
    КонецЕсли;
    Если ЗначениеЗаполнено(Этаформа.СформировалПотребность) Тогда
        Запрос.Текст=СтрЗаменить(Запрос.Текст,"@СформировалПотребность@"," и а.ХХХ_СформировалПотребность=&СформировалПотребность");
        Запрос.УстановитьПараметр("СформировалПотребность", Этаформа.СформировалПотребность);
    Иначе
        Запрос.Текст=СтрЗаменить(Запрос.Текст,"@СформировалПотребность@","");
    КонецЕсли;
    
    Если ЗначениеЗаполнено(Этаформа.НомерДобавления) Тогда
        Запрос.Текст=СтрЗаменить(Запрос.Текст,"@НомерДобавления@"," и а.ХХХ_НомерДобавления=&НомерДобавления");
        Запрос.УстановитьПараметр("НомерДобавления", Этаформа.НомерДобавления);
    Иначе
        Запрос.Текст=СтрЗаменить(Запрос.Текст,"@НомерДобавления@","");
    КонецЕсли;


но сабачки и смайлики, тут не уместны!!!!
13 NIGHTHUNTER
 
11.08.22
09:46
Подскажите пожалуйста, как исключить из запроса (4), записи, уже введенные в документы ЗаказМенеджера .
14 NIGHTHUNTER
 
11.08.22
10:01
поделитесь технологией?????
15 NIGHTHUNTER
 
11.08.22
10:01
Вот такой текст запроса, я извлек, перед (9)

ВЫБРАТЬ
    Остатки.ЗаказКлиента КАК ЗаказКлиента,
    Остатки.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
    Остатки.ЭтапПроизводства КАК ЭтапПроизводства,
    Остатки.Номенклатура КАК Номенклатура,
    Остатки.Характеристика КАК Характеристика,
    Остатки.КоличествоПоЗаявкеМенеджераОстаток КАК Количество,
    Остатки.ХХХ_УИД КАК ХХХ_УИД,
    ЛОЖЬ КАК СтрокаВыбрана
ПОМЕСТИТЬ ВТ_Остатки
ИЗ
    РегистрНакопления.ХХХ_ЗаказыПоставщикамПоЭтапамПроизводства.Остатки(&Дата1, ) КАК Остатки
ГДЕ
    Остатки.КоличествоПоЗаявкеМенеджераОстаток > 0
          
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Остатки.ЗаказКлиента КАК ЗаказКлиента,
    ВТ_Остатки.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
    ВТ_Остатки.ЭтапПроизводства КАК ЭтапПроизводства,
    ВТ_Остатки.Номенклатура КАК Номенклатура,
    ВТ_Остатки.Характеристика КАК Характеристика,
    ВТ_Остатки.Количество КАК Количество,
    ВТ_Остатки.ХХХ_УИД КАК ХХХ_УИД,
    ВТ_Остатки.СтрокаВыбрана КАК СтрокаВыбрана,
    а.ХХХ_СформировалПотребность КАК ХХХ_СформировалПотребность,
    а.ХХХ_ОтветственныйНаУчастке КАК ХХХ_ОтветственныйНаУчастке,
    а.ХХХ_НомерДобавления КАК ХХХ_НомерДобавления,
    а.ХХХ_НарядЗадание КАК ХХХ_НарядЗадание,
    а.ПрименениеМатериала КАК ПрименениеМатериала,
    а.ХХХ_КлассБезопасности КАК ХХХ_КлассБезопасности
ИЗ
    ВТ_Остатки КАК ВТ_Остатки
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЭтапПроизводства2_2.ОбеспечениеМатериаламиИРаботами КАК а
        ПО ВТ_Остатки.ЭтапПроизводства = а.Ссылка
            И ВТ_Остатки.Номенклатура = а.Номенклатура
            И ВТ_Остатки.Характеристика = а.Характеристика
            И ВТ_Остатки.ХХХ_УИД = а.ХХХ_УИД
ГДЕ Истина
16 Kassern
 
11.08.22
10:22
(14) да без проблем. Технология очень простая. Для того, чтобы в запросе из одной таблицы исключить записи имеющие строки в другой таблице, необходимо связать по ключевым полям данные таблицы и как вариант, сделать условие на нулл.
17 yopQua
 
11.08.22
10:27
я же написал уже технологию
а текст сами напишите
18 NIGHTHUNTER
 
11.08.22
11:03
(16) (17) Ясно. Пока сменилась сама постановка. Что то не так в бизнесс процессе, а именно в данных.
19 vicof
 
11.08.22
13:05
(18) Скорей что-то не так в мозгах
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.