|   |   | 
| 
 | Отбор документов по совпадению реквизитов в табличной части документа. | ☑ | ||
|---|---|---|---|---|
| 0
    
        Nikk100 28.11.24✎ 10:41 | 
        Задача — отобрать договора, в которых есть несовпадение реквизитов со ссылкой на обучающегося и его табличной части с этими же ссылками. Пытался сам, но что-то с методом Найти() не так, я уже с разных сторон пробовал, не находит совпадения, считает их все несовпадающими. Пробовал обойти метод Найти() через подсчет совпадений, тоже без результата.
 Код функции такой: 	МассивДоговоров = новый Массив ();
	Выборка = Документы.Договор.Выбрать();
	Пока Выборка.Следующий() Цикл
		СписокСлушателей = новый СписокЗначений;
		Если Не Выборка.Обучающийся1.Пустая() тогда
			СписокСлушателей.Добавить(Выборка.Обучающийся1)
		КонецЕсли;
		Если Не Выборка.Обучающийся2.Пустая() тогда
			СписокСлушателей.Добавить(Выборка.Обучающийся2)
		КонецЕсли;
		Если Не Выборка.Обучающийся3.Пустая() тогда
			СписокСлушателей.Добавить(Выборка.Обучающийся3)
		КонецЕсли;
		Если Не Выборка.Обучающийся4.Пустая() тогда
			СписокСлушателей.Добавить(Выборка.Обучающийся4)
		КонецЕсли;
		Если Не Выборка.Обучающийся5.Пустая() тогда
			СписокСлушателей.Добавить(Выборка.Обучающийся5)
		КонецЕсли;
		Если Не Выборка.Обучающийся6.Пустая() тогда
			СписокСлушателей.Добавить(Выборка.Обучающийся6)
		КонецЕсли;
		Если Не Выборка.Обучающийся7.Пустая() тогда
			СписокСлушателей.Добавить(Выборка.Обучающийся7)
		КонецЕсли;
		Если Не Выборка.Обучающийся8.Пустая() тогда
			СписокСлушателей.Добавить(Выборка.Обучающийся8)
		КонецЕсли;
		Если Не Выборка.Обучающийся9.Пустая() тогда
			СписокСлушателей.Добавить(Выборка.Обучающийся9)
		КонецЕсли;
		Если Не Выборка.Обучающийся10.Пустая() тогда
			СписокСлушателей.Добавить(Выборка.Обучающийся10)
		КонецЕсли;
		Если Не Выборка.Обучающийся11.Пустая() тогда
			СписокСлушателей.Добавить(Выборка.Обучающийся11)
		КонецЕсли;
		Если Не Выборка.Обучающийся12.Пустая() тогда
			СписокСлушателей.Добавить(Выборка.Обучающийся12)
		КонецЕсли;
		Если Не Выборка.Обучающийся13.Пустая() тогда
			СписокСлушателей.Добавить(Выборка.Обучающийся13)
		КонецЕсли;
		Если Не Выборка.Обучающийся14.Пустая() тогда
			СписокСлушателей.Добавить(Выборка.Обучающийся14)
		КонецЕсли;
		Если Не Выборка.Обучающийся15.Пустая() тогда
			СписокСлушателей.Добавить(Выборка.Обучающийся15)
		КонецЕсли;
		Если СписокСлушателей.Количество()<> 0 тогда
			Если Выборка.Список.Количество() > СписокСлушателей.Количество()тогда
				Для каждого ТекущаяСтрока из Выборка.Список цикл
					Если СписокСлушателей.НайтиПоЗначению(ТекущаяСтрока) = неопределено тогда
						СтруктураДоговора = новый Структура;
						СтруктураДоговора.Вставить("ДоговорНомер",Выборка.Номер);
						СтруктураДоговора.Вставить("ДоговорДата",Выборка.Дата);
						СтруктураДоговора.Вставить("СлушательВСписке","отсутствует");
						СтруктураДоговора.Вставить("СлушательВТаблице",ТекущаяСтрока.КарточкаСлушателя);
						МассивДоговоров.Добавить(СтруктураДоговора);
					КонецЕсли;
				КонецЦикла; 
			Иначе
				Для каждого Элемент из СписокСлушателей цикл
					Совпадение = 0;
					Для каждого ТекущаяСтрока из Выборка.Список цикл
						Если ТекущаяСтрока.КарточкаСлушателя.Фамилия = Элемент.Значение.Фамилия тогда
							Совпадение = Совпадение + 1;
						КонецЕсли;
					КонецЦикла;	
					Если Совпадение = 0 тогда
						СтруктураДоговора = новый Структура;
						СтруктураДоговора.Вставить("ДоговорНомер",Выборка.Номер);
						СтруктураДоговора.Вставить("ДоговорДата",Выборка.Дата);
						СтруктураДоговора.Вставить("СлушательВСписке",Элемент.Значение);
						СтруктураДоговора.Вставить("СлушательВТаблице","отсутствует");
						МассивДоговоров.Добавить(СтруктураДоговора);
					КонецЕсли;
					
				КонецЦикла;
			КонецЕсли;
		КонецЕсли;			
		
	КонецЦикла;
	Возврат МассивДоговоров; | |||
| 2
    
        Волшебник 28.11.24✎ 10:40 | 
        Зачем убрали начало и конец функции? Как называется функция? Какие параметры?     | |||
| 3
    
        Nikk100 28.11.24✎ 10:51 | 
        (2) Функция СортировкаДоговор()     | |||
| 4
    
        Nikk100 28.11.24✎ 10:52 | 
        (2) Это внешняя обработка     | |||
| 5
    
        Волшебник 28.11.24✎ 10:53 | 
        (3) Плохое название функции     | |||
| 6
    
        Nikk100 28.11.24✎ 10:56 | 
        Если смотреть на задачу глобальнее, то суть задачи найти не до заполненные табличные части договоров, а потом избавиться от отдельных реквизитов Обучающиеся1 и Обучающийся2 и т.д.     | |||
| 7
    
        Волшебник 28.11.24✎ 11:00 | 
        (6) Похоже на план     | |||
| 8
    
        2S 28.11.24✎ 11:52 | 
        (0) Цикл? Не, не слышали.     | |||
| 9
    
        youalex 28.11.24✎ 12:11 | 
        (0)
 Запросом собери в таблицу через объединение ВЫБРАТЬ Ссылка, Обучающийся1 КАК Обучающийся ПОМЕСТИТЬ ВТШапка ИЗ Документ.Договор ОБЪЕДИНИТЬ ВЫБРАТЬ Ссылка, Обучающийся2 ПОМЕСТИТЬ ВТШапка ИЗ Документ.Договор .... потом Левое соединение с ТЧ ... ГДЕ ТЧ.Ссылка IS NULL И ВТШапка.Обучающийся <> &ПустаяСсылка | |||
| 10
    
        Мультук гуру 28.11.24✎ 12:36 | 
        (0) 
 Обучающийся1 и КарточкаСлушателя Это одинаковые типы ? Если да -- пишем запрос (ВТ_ИНДИЙСКИЕ_ОБУЧ нужно дописать ради пример первые два реквизита ВЫБРАТЬ т1.ссылка, т1.Обучающийся1 как Обучающийся ПОМЕСТИТЬ ВТ_ИНДИЙСКИЕ_ОБУЧ ИЗ Документ.Договор как т1 ГДЕ т1.Обучающийся1 <> &ПустаяСсылкаОбучающийся ОБЪЕДИНИТЬ ВЫБРАТЬ т1.ссылка, т1.Обучающийся2 как Обучающийся ИЗ Документ.Договор как т1 ГДЕ т1.Обучающийся2 <> &ПустаяСсылкаОбучающийся ; ВЫБРАТЬ т1.ссылка, т1.КарточкаСлушателя как Обучающийся ПОМЕСТИТЬ ВТ_ОБУЧ ИЗ Документ.Договор.Список как т1 ; ВЫБРАТЬ т1.ссылка, т1.Обучающийся ИЗ ВТ_ИНДИЙСКИЕ_ОБУЧ как т1 ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОБУЧ как т2 ПО т1.ссылка = т2.ссылка и т1.Обучающийся = т2.Обучающийся ГДЕ т2.ссылка IS NULL | |||
| 11
    
        Nikk100 29.11.24✎ 11:06 | 
        (10) Переписал вот так. С запросами туго (надеюсь пока), строго не судите, но не работает, что-то неправильно понял, но вот что?
 функцияФункция СортировкаДоговора() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Договор.Ссылка, | Договор.Обучающийся1.Ссылка КАК Обучающийся |ПОМЕСТИТЬ СписОбуч |ИЗ | Документ.Договор КАК Договор |ГДЕ | Договор.Обучающийся1.Ссылка <> &ПустаяСсылкаОбучающийся | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | Договор.Ссылка, | Договор.Обучающийся2.Ссылка |ИЗ | Документ.Договор КАК Договор |ГДЕ | Договор.Обучающийся2.Ссылка <> &ПустаяСсылкаОбучающийся | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | Договор.Ссылка, | Договор.Обучающийся3.Ссылка |ИЗ | Документ.Договор КАК Договор |ГДЕ | Договор.Обучающийся3.Ссылка <> &ПустаяСсылкаОбучающийся | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | Договор.Ссылка, | Договор.Обучающийся4.Ссылка |ИЗ | Документ.Договор КАК Договор |ГДЕ | Договор.Обучающийся4.Ссылка <> &ПустаяСсылкаОбучающийся | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | Договор.Ссылка, | Договор.Обучающийся5.Ссылка |ИЗ | Документ.Договор КАК Договор |ГДЕ | Договор.Обучающийся5.Ссылка <> &ПустаяСсылкаОбучающийся | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | Договор.Ссылка, | Договор.Обучающийся6.Ссылка |ИЗ | Документ.Договор КАК Договор |ГДЕ | Договор.Обучающийся6.Ссылка <> &ПустаяСсылкаОбучающийся | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | Договор.Ссылка, | Договор.Обучающийся7.Ссылка |ИЗ | Документ.Договор КАК Договор |ГДЕ | Договор.Обучающийся7.Ссылка <> &ПустаяСсылкаОбучающийся | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | Договор.Ссылка, | Договор.Обучающийся8.Ссылка |ИЗ | Документ.Договор КАК Договор |ГДЕ | Договор.Обучающийся8.Ссылка <> &ПустаяСсылкаОбучающийся | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | Договор.Ссылка, | Договор.Обучающийся9.Ссылка |ИЗ | Документ.Договор КАК Договор |ГДЕ | Договор.Обучающийся9.Ссылка <> &ПустаяСсылкаОбучающийся | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | Договор.Ссылка, | Договор.Обучающийся10.Ссылка |ИЗ | Документ.Договор КАК Договор |ГДЕ | Договор.Обучающийся10.Ссылка <> &ПустаяСсылкаОбучающийся | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | Договор.Ссылка, | Договор.Обучающийся11.Ссылка |ИЗ | Документ.Договор КАК Договор |ГДЕ | Договор.Обучающийся11.Ссылка <> &ПустаяСсылкаОбучающийся | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | Договор.Ссылка, | Договор.Обучающийся12.Ссылка |ИЗ | Документ.Договор КАК Договор |ГДЕ | Договор.Обучающийся12.Ссылка <> &ПустаяСсылкаОбучающийся | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | Договор.Ссылка, | Договор.Обучающийся13.Ссылка |ИЗ | Документ.Договор КАК Договор |ГДЕ | Договор.Обучающийся13.Ссылка <> &ПустаяСсылкаОбучающийся | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | Договор.Ссылка, | Договор.Обучающийся14.Ссылка |ИЗ | Документ.Договор КАК Договор |ГДЕ | Договор.Обучающийся14.Ссылка <> &ПустаяСсылкаОбучающийся | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | Договор.Ссылка, | Договор.Обучающийся15.Ссылка |ИЗ | Документ.Договор КАК Договор |ГДЕ | Договор.Обучающийся15.Ссылка <> &ПустаяСсылкаОбучающийся |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СписОбуч.Обучающийся, | Договор.Ссылка |ИЗ | СписОбуч КАК СписОбуч | ЛЕВОЕ СОЕДИНЕНИЕ Документ.Договор КАК Договор | ПО СписОбуч.Ссылка = Договор.Список.КарточкаСлушателя.Ссылка | И СписОбуч.Обучающийся.Договор.Ссылка = Договор.Ссылка |ГДЕ | СписОбуч.Ссылка ЕСТЬ NULL"; Запрос.УстановитьПараметр("ПустаяСсылкаОбучающийся", Документы.КарточкаСлушателя.ПустаяСсылка()); РезультатЗапроса = Запрос.Выполнить(); МассивСлушателей = новый Массив (); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл НоваяСтруктура = новый Структура(); НоваяСтруктура.Вставить("Слушатель",ВыборкаДетальныеЗаписи.Обучающийся); НоваяСтруктура.Вставить("ДоговорНомер",ВыборкаДетальныеЗаписи.Ссылка.Номер); НоваяСтруктура.Вставить("ДоговорДата",ВыборкаДетальныеЗаписи.Ссылка.Дата); МассивСлушателей.Добавить(НоваяСтруктура); КонецЦикла; Возврат МассивСлушателей; КонецФункции | |||
| 12
    
        Волшебник 29.11.24✎ 11:05 | 
        (11) чушь какая-то     | |||
| 13
    
        Ненавижу 1С гуру 29.11.24✎ 11:11 | 
        маловато обучающихся. 15 - это несерьезно     | |||
| 14
    
        Nikk100 29.11.24✎ 11:15 | 
        (13) 15 отдельных реквизитов Обучающихся в документе     | |||
| 15
    
        Nikk100 29.11.24✎ 11:20 | 
        (12) Чушь возникает от непонимания, а хочется понять.     | |||
| 16
    
        Волшебник 29.11.24✎ 11:20 | 
        (15) Всё сотрите и сделайте нормально.     | |||
| 17
    
        Волшебник 29.11.24✎ 11:24 | 
        (14) Обращаться можно так:
 Для н = 1 По 15 Цикл значение = объект["обучающийся" + н]; КонецЦикла; | |||
| 18
    
        Nikk100 29.11.24✎ 11:31 | 
        (16) Чтобы сделать нормально нужно понять где ненормально. Я понял так. Первая часть запроса собирает всех Обучаюoихся(1-15) во временную таблицу. Во второй части выбирается из объединенной таблицы (временная + табличная часть) где есть в колонке от временной таблице NULL.     | |||
| 19
    
        Волшебник 29.11.24✎ 11:31 | 
        (18) Уберите запрос. Пишите циклы     | |||
| 20
    
        youalex 29.11.24✎ 12:19 | 
        (15) если хочется понять, ответь что такое "ЛЕВОЕ СОЕДИНЕНИЕ"  что такое NULL и что за условие IS NULL (ЕСТЬ NULL)
 + у тебя соединение не с ТЧ? | |||
| 21
    
        Nikk100 29.11.24✎ 17:39 | 
        (19) Подскажите в чем дело.
 Для каждого СтрТЧ из Выборка.Список Цикл Стр = СтрТЧ.КарточкаСлушателя.Ссылка; СписокТЧ.Добавить(СтрТЧ.КарточкаСлушателя.Ссылка); КонецЦикла; Переменная СтрТЧ содержит строку табличной части документа, а при обращении к значениям строки в ней содержится "{<Неизвестный модуль>(1,1)}: Переменная не определена (Стр)". Я правильно понимаю что СтрТЧ это значения полей текущей строки при переборе строк в таблице? | |||
| 22
    
        Волшебник 29.11.24✎ 18:13 | 
        (21) Вы понимаете неправильно     | |||
| 23
    
        Nikk100 29.11.24✎ 19:01 | 
        (22) Я наверно коряво описал свое понимание. Все заработало. Проблема была не в этом цикле. Спасибо огромное.     | |||
| 24
    
        Nikk100 29.11.24✎ 19:14 | 
        (20) Скорее всего понимание перечисленного есть, а вот правильного понимания языка запросов местами нет. А хотелось бы. Все в наших, и с помощью ваши, руках (головах). Спасибо.     | |||
| 25
    
        Волшебник 29.11.24✎ 19:47 | 
        (23) Покажите программный код     | |||
| 26
    
        Волшебник 29.11.24✎ 19:48 | 
        (24) Не надо пустых слов. Покажите настоящий работающий программный код.     | |||
| 27
    
        Nikk100 29.11.24✎ 20:14 | 
        (26) Есть в настройках форума уведомления о новых сообщениях в теме, на почту например? А то случайно заметил два последних. Уже уходить хотел.
 Функция СортировкаДоговора() МассивДоговоров = новый Массив (); Выборка = Документы.Договор.Выбрать(); Пока Выборка.Следующий() Цикл СписокСлушателей = новый СписокЗначений; Для Н = 1 по 15 Цикл Слушатель = Выборка["Обучающийся" + Н]; Пусто = Документы.КарточкаСлушателя.ПустаяСсылка(); Если Не Слушатель = Пусто тогда СписокСлушателей.Добавить(Слушатель); КонецЕсли; КонецЦикла; //Колич = Выборка.Список.Количество(); Если СписокСлушателей.Количество()<> 0 тогда СписокТЧ = новый СписокЗначений; Для каждого СтрТЧ из Выборка.Список Цикл Стр = СтрТЧ.КарточкаСлушателя.Ссылка; СписокТЧ.Добавить(Стр); КонецЦикла; Если Выборка.Список.Количество() > СписокСлушателей.Количество()тогда //Строк = новый Массив; //Строк = Выборка.Список.Получить(0); //Строк1 = Строк.КарточкаСлушателя.Ссылка; Для каждого Элемента из СписокТЧ цикл Если СписокСлушателей.НайтиПоЗначению(Элемента.Значение) = неопределено тогда СтруктураДоговора = новый Структура; СтруктураДоговора.Вставить("ДоговорНомер",Выборка.Номер); СтруктураДоговора.Вставить("ДоговорДата",Выборка.Дата); СтруктураДоговора.Вставить("СлушательВСписке","отсутствует"); СтруктураДоговора.Вставить("СлушательВТаблице",Элемента.Значение); МассивДоговоров.Добавить(СтруктураДоговора); КонецЕсли; КонецЦикла; Иначе Для каждого Элемент из СписокСлушателей цикл Если СписокТЧ.НайтиПоЗначению(Элемент.Значение) = неопределено тогда СтруктураДоговора = новый Структура; СтруктураДоговора.Вставить("ДоговорНомер",Выборка.Номер); СтруктураДоговора.Вставить("ДоговорДата",Выборка.Дата); СтруктураДоговора.Вставить("СлушательВСписке",Элемент.Значение); СтруктураДоговора.Вставить("СлушательВТаблице","отсутствует"); МассивДоговоров.Добавить(СтруктураДоговора); КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; Возврат МассивДоговоров; КонецФункции | |||
| 28
    
        Волшебник 29.11.24✎ 20:19 | 
        (27) Уведомлений нет.
 Ваш программный код начал показывать, что Вы не безнадёжны и понимаете рекомендации. С Вами можно работать. | |||
| 29
    
        Волшебник 29.11.24✎ 20:20 | 
        Это Вы сюда должны заходить за светлой мыслью, а не мы должны Вам пропихивать нашу светлую мысль в Вашу тёмную голову.
 Диспозиция понятна? | |||
| 30
    
        Nikk100 29.11.24✎ 20:34 | 
        (29) Понятна. Посыл был не пропустить важное. Еще раз спасибо.     | |||
| 31
    
        Волшебник 29.11.24✎ 20:35 | 
        (30) 💖     | |||
| 32
    
        lEvGl гуру 29.11.24✎ 21:03 | 
        о как к концу оптимизировали 👍     | |||
| 33
    
        Волшебник 29.11.24✎ 21:04 | 
        (32) Явно стало лучше. Человек пойдёт!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |