|
Отбор документов по совпадению реквизитов в табличной части документа. | ☑ | ||
---|---|---|---|---|
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) Явно стало лучше. Человек пойдёт!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |