|
Создание новой ТЗ или удаление строк из существующей | ☑ | ||
---|---|---|---|---|
0
LivingStar
20.01.15
✎
11:05
|
Есть одна таблица значений. Формирую другую. Потом перебором первой произвожу поиск во второй. Если строка не найдена, то её нужно перенести в новую тз, или если найдена удалить из первой. Что бы на выходе получить ТЗ где только записи которых нет во второй. Поиск во второй произвожу по одноименному полю что есть в первой. Подскажите как правильнее в этом случае все сделать? Понял что в ТЗ нет функции добавления каждой строки, нужно прописывать добавление каждого поля.
| Функция ИсключитьОплаченныеСчета(Тз) ИсклОплСчТз = Новый ТаблицаЗначений; Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа.СчетНаОплату КАК СчетНаОплату, | ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа.Ссылка КАК Ссылка |ИЗ | Документ.ПоступлениеНаРасчетныйСчет.РасшифровкаПлатежа КАК ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа |ГДЕ | НЕ ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа.СчетНаОплату = ЗНАЧЕНИЕ(Документ.СчетНаОплатуПокупателю.ПустаяСсылка) | |УПОРЯДОЧИТЬ ПО | Ссылка"; ТзОплСч = Запрос.Выполнить().Выгрузить(); Для Каждого СтрТз Из Тз Цикл ОплСч = ТзОплСч.Найти(СтрТз.СчетСсылка, "СчетНаОплату"); Если ОплСч = Неопределено Тогда ИсклОплСчТз.Добавить(); КонецЕсли; КонецЦикла; Возврат ИсклОплСчТз; КонецФункции | |
|||
1
Ненавижу 1С
гуру
20.01.15
✎
11:07
|
есть ЗаполнитьЗначенияСвойств
|
|||
2
DCKiller
20.01.15
✎
11:07
|
Запросом внутреннее соединение сделать - не?
|
|||
3
Peltzer
20.01.15
✎
11:08
|
(2) Только не внутреннее, а полное.
|
|||
4
DCKiller
20.01.15
✎
11:12
|
(3) нет, лучше левое с условием ГДЕ... ЕСТЬ NULL
|
|||
5
LivingStar
20.01.15
✎
11:12
|
(2)(3) Как запросом. подскажете? То есть есть одна тз передается в функцию, делаю запрос и выгружаю в ещё одну Тз. Из за неудобной структуры данных, запросом понял что не получится. Второй запрос что получает вторую ТЗ никак не связан с первым. Там отбор по одному документу в котором может не быть Счета. А в первом запросе отбор другого документа где должен быть счет. То есть по счету никак не связать эти 2 запроса.
|
|||
6
LivingStar
20.01.15
✎
11:13
|
(4) Ну и как первый запрос будет связан со вторым???? Так как он может быть только и связан по этому полю которое вы предлагаете задать в NULL.
|
|||
7
XLife
20.01.15
✎
11:14
|
(5) понос...
|
|||
8
palpetrovich
20.01.15
✎
11:17
|
(6) тебе там предложили загрузить твои ТЗ в ВТ и уже их соединять в запросе
но, судя по (5) есть подозрение что, скорее всего, надо делать все запросом изначально |
|||
9
LivingStar
20.01.15
✎
11:18
|
не сделать запросом на сколько я понял вообще
эти запросы не связанны!!! Не правильная структура |
|||
10
yukon
20.01.15
✎
11:20
|
Функция ИсключитьОплаченныеСчета(Тз)
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗНАЧЕНИЕ(Документ.СчетНаОплатуПокупателю.ПустаяСсылка) КАК СчетСсылка |ПОМЕСТИТЬ Тз | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | Тз.СчетСсылка |ИЗ | &Тз КАК Тз |; | |ВЫБРАТЬ | ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа.СчетНаОплату КАК СчетНаОплату, | ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа.Ссылка КАК Ссылка |ИЗ | Документ.ПоступлениеНаРасчетныйСчет.РасшифровкаПлатежа КАК ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа |ГДЕ | НЕ ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа.СчетНаОплату В (ВЫБРАТЬ РАЗЛИЧНЫЕ СчетСсылка из Тз)"; Запрос.УстановитьПараметр("Тз",Тз); Возврат Запрос.Выполнить().Выгрузить(); КонецФункции |
|||
11
yukon
20.01.15
✎
11:23
|
+ (10) Надо пересматривать твой подход к названиям переменных, черт ногу сломит в ОплСч, ТзОплСч, СтрТз. Ресурс клавиатуры бережешь?
|
|||
12
palpetrovich
20.01.15
✎
11:25
|
(10) хрень какая-то :)
|
|||
13
LivingStar
20.01.15
✎
11:32
|
(1) Как работают эти заполнить значения свойств? Я попробовал но в таблицу ничего не занеслось, нужно обязательно типизировать колонки?
| Функция ИсключитьОплаченныеСчета(Тз) ИсклОплСчТз = Новый ТаблицаЗначений; ИсклОплСчТз.Колонки.Добавить("ЗаказСсылка"); ИсклОплСчТз.Колонки.Добавить("ЗаказОрганизация"); ИсклОплСчТз.Колонки.Добавить("ЗаказНомер"); ИсклОплСчТз.Колонки.Добавить("СчетСсылка"); ИсклОплСчТз.Колонки.Добавить("СчетДата"); ИсклОплСчТз.Колонки.Добавить("СчетНомер"); ИсклОплСчТз.Колонки.Добавить("ЗаказИсполнитель"); ИсклОплСчТз.Колонки.Добавить("ЗаказИсполнительИНН"); ИсклОплСчТз.Колонки.Добавить("ЗаказДатаВремяПодачиТранспорта"); ИсклОплСчТз.Колонки.Добавить("НомерВидаРасхода"); ИсклОплСчТз.Колонки.Добавить("ОстатокКОплате"); ИсклОплСчТз.Колонки.Добавить("ОдобреноРанее"); ИсклОплСчТз.Колонки.Добавить("ОдобрениеВТекущемФП"); ИсклОплСчТз.Колонки.Добавить("Примечание"); ИсклОплСчТз.Колонки.Добавить("Просрочен"); ИсклОплСчТз.Колонки.Добавить("ЮрЛицо"); ИсклОплСчТз.Колонки.Добавить("ЮрЛицоИНН"); ИсклОплСчТз.Колонки.Добавить("ЗаказСуммаИсполнитель"); Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа.СчетНаОплату КАК СчетНаОплату, | ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа.Ссылка КАК Ссылка |ИЗ | Документ.ПоступлениеНаРасчетныйСчет.РасшифровкаПлатежа КАК ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа |ГДЕ | НЕ ПоступлениеНаРасчетныйСчетРасшифровкаПлатежа.СчетНаОплату = ЗНАЧЕНИЕ(Документ.СчетНаОплатуПокупателю.ПустаяСсылка) | |УПОРЯДОЧИТЬ ПО | Ссылка"; ТзОплСч = Запрос.Выполнить().Выгрузить(); Для Каждого СтрТз Из Тз Цикл ОплСч = ТзОплСч.Найти(СтрТз.СчетСсылка, "СчетНаОплату"); Если ОплСч = Неопределено Тогда ЗаполнитьЗначенияСвойств(ИсклОплСчТз,СтрТз); КонецЕсли; КонецЦикла; Возврат ИсклОплСчТз; КонецФункции |
|||
14
LivingStar
20.01.15
✎
11:33
|
(10) что то ухитренное, возможно и сработающее, но нужно доделывать, пока не понимаю как
|
|||
15
Fish
20.01.15
✎
11:34
|
(13) Это надо СП читать:
"Глобальный контекст (Global context) ЗаполнитьЗначенияСвойств (FillPropertyValues) Синтаксис: ЗаполнитьЗначенияСвойств(<Приемник>, <Источник>, <СписокСвойств>, <ИсключаяСвойства>) Параметры: <Приемник> (обязательный) Тип: Произвольный. Значение, чьи свойства будут заполнены значениями соответствующих свойств <Источника>. <Источник> (обязательный) Тип: Произвольный. Значения свойств данного объекта будут установлены в соответствующие свойства <Приемника>. <СписокСвойств> (необязательный) Тип: Строка. Список имен свойств, разделенный запятыми, которые необходимо заполнить. Если свойства не указаны, то копируются только те, которые представлены и в <Источнике> и в <Приемнике>. Если свойства указаны, то они обязательно должны присутствовать в обоих объектах. Если в <Источнике> или <Приемнике> заданное свойство отсутствует, то будет вызвано исключение. <ИсключаяСвойства> (необязательный) Тип: Строка. Список имен свойств, разделенный запятыми, которые необходимо исключить из заполнения. Описание: Копирует значения свойств <Источника> в свойства <Приемника>. Сопоставление производится по именам свойств. Если указаны копируемые свойства, то в заполнении участвуют только они, параметр <ИсключаяСвойства> игнорируется. В противном случае, если указан параметр <ИсключаяСвойства>, то свойства перечисленные в нем, исключаются из обработки. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение. " |
|||
16
LivingStar
20.01.15
✎
11:36
|
(10) дело в том что из второго запроса нужно выбрать строки по идее которых там нет! Идет выборка по платежным поручениям, которых нет у счета. Говорю запросом не выйдет. Во тором запросе счета по которым нет платежных поручений, соответственно и запросы быть не может, так как нет связи. Не правильная структура данных. Приходится обходить её, не совсем верными методами.
|
|||
17
LivingStar
20.01.15
✎
11:38
|
(15) я просто делаю копирование в новую таблицу строку, хочу так в цикле собрать строки, но не копирует, нужно тип задавать колонок обязательно?
|
|||
18
Fish
20.01.15
✎
11:42
|
(17) Емнип, необязательно. Только зачем ты во второй таблице колонки руками создаёшь? Для этого же есть метод СкопироватьКолонки()
|
|||
19
vicof
20.01.15
✎
11:43
|
(17) Клювом не щелкай,
"Если ОплСч = Неопределено Тогда ЗаполнитьЗначенияСвойств(ИсклОплСчТз,СтрТз); КонецЕсли;" ИсклОплСчТз - это у тебя таблица значений, а не строка таблицы. |
|||
20
Drac0
20.01.15
✎
11:43
|
"Идет выборка по платежным поручениям, которых нет у счета."
В чем проблема такой выборки запроса? "Во тором запросе счета по которым нет платежных поручений, соответственно и запросы быть не может, так как нет связи." В чем проблема такой выборки запроса? Ты про NULL слышал? |
|||
21
LivingStar
20.01.15
✎
12:01
|
(20) во втором запросе выборка NULL у которого есть счет? Такого не пойму
|
|||
22
LivingStar
20.01.15
✎
12:02
|
(20) null можно выбирать у чего то, а не NULL с чем то
|
|||
23
LivingStar
20.01.15
✎
12:04
|
(19) и как в этом случае???? добавить строку у ИсклОплСчТз а ей переносить значения строк?
|
|||
24
vicof
20.01.15
✎
12:04
|
(22) надо запомнить)))
|
|||
25
vicof
20.01.15
✎
12:04
|
(23) Ты гений)))
|
|||
26
yukon
20.01.15
✎
12:07
|
(16) И в чем проблема-то?
Ты вот лучше посмотри, что у тебя в запросе из (0) делается - выбираются ВСЕ документы из базы с заполненным реквизитом СчетНаОплату. Такая реализация гарантированно ведет к деградации производительности. Подумай какие условия дополнительно (из Тз к примеру) ты можешь добавить в запрос. Возможно это поможет решить твою задачу оптимальным образом. |
|||
27
LivingStar
20.01.15
✎
12:10
|
(25) спасибо!
ТзОплСч = Запрос.Выполнить().Выгрузить(); Для Каждого СтрТз Из Тз Цикл ОплСч = ТзОплСч.Найти(СтрТз.СчетСсылка, "СчетНаОплату"); Если ОплСч = Неопределено Тогда НоваяСтр = ИсклОплСчТз.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтр,СтрТз); КонецЕсли; КонецЦикла; Возврат ИсклОплСчТз; КонецФункции |
|||
28
LivingStar
20.01.15
✎
12:12
|
(26) согласен стоит подумать
|
|||
29
Ненавижу 1С
гуру
20.01.15
✎
12:12
|
(22) считаю гениально
|
|||
30
Drac0
20.01.15
✎
12:35
|
(29) Я над этой фразой уже 10 минут медитирую. Думаю, скоро постигну дзен.
|
|||
31
vicof
20.01.15
✎
12:39
|
(29) Кличко-стайл
|
|||
32
DrZombi
гуру
20.01.15
✎
12:43
|
(13) А кто будет Строку в ТЗ дописывать?
|
|||
33
LivingStar
20.01.15
✎
12:45
|
(32) в (27)
|
|||
34
Бертыш
20.01.15
✎
12:49
|
(22) Это у Вас что то с чем то получилось
|
|||
35
LivingStar
20.01.15
✎
12:51
|
(34) это как я понимаю структуру данный, завороченная она
|
|||
36
Бертыш
20.01.15
✎
12:53
|
(35) А я тупой одинэсник. Я ничего не понимаю. Просто тупо пишу работающий код.
|
|||
37
Drac0
20.01.15
✎
13:00
|
(36) Ты, похоже, не имеешь представления о том, кто такой топикстартер? :) Знаменитый кадр на мисте )))
|
|||
38
LivingStar
20.01.15
✎
13:11
|
(36) Надо было быстро сделать то что просили. Подстроиться построиться под имеющуюся структуру. А так нужно день посвятить её анализу, начертить блок схему. Что имеется, и как это должно было бы было правильно. На следующие дни править, писать обработки для перенося данных. И ещё возможно много чего. Пока вот так на данный момент.
|
|||
39
Drac0
20.01.15
✎
13:12
|
(38) Надо было просто за 10 минут написать корректный запрос. Просто ты этого не умеешь.
|
|||
40
LivingStar
20.01.15
✎
13:15
|
(39) возможно, но я буду учиться
|
|||
41
Drac0
20.01.15
✎
13:18
|
(40) Не, не будешь. 10 лет на форуме, а вопросы как у новичка. Причем повторяются порой :)
|
|||
42
LivingStar
20.01.15
✎
20:20
|
(41) Буду!
В задаче в (0) есть Док1, у него есть ссылка на Док2 Док2 является ссылкой в Док3, но Док3 никак не связан с Док1 Нужно выбрать Док1 соответственно и Док2, где Док2 отсутствует в Док3 я думал это не возможно, но если можно хочу узнать как, пока не понял вижу что |
|||
43
LivingStar
20.01.15
✎
20:30
|
(42+) и сам Док2 никак не связан с Док3, он просто является ссылкой в Док3
|
|||
45
XLife
20.01.15
✎
20:46
|
(42) есть Док1, у него есть ссылка на Док2. Док2 является ссылкой в Док3, но Док3 никак не связан с Док1
закусывай... |
|||
46
LivingStar
21.01.15
✎
07:36
|
(45) ну по Док2 связан да, все равно не доходит, надо подумать ещё
|
|||
47
LivingStar
21.01.15
✎
07:37
|
(45) ну намекните что за выборка в таком случае? пока голова загружена другими задачами
|
|||
48
Бертыш
21.01.15
✎
14:52
|
(38) 80 процентов моей работы на работе это анализ, процентов 5 кодирование, 15 процентов административные вопросы
(40) Вот зачем Вам учиться? Выучитесь и будете решать задачи быстрее недоученных, зарабатывая меньше чем они. Оплата то у нас почасовая. |
|||
49
Drac0
21.01.15
✎
15:18
|
(47) Я тебе уже про NULL намекал.
|
|||
50
palpetrovich
21.01.15
✎
18:14
|
Если я правильно понял и есть Док1.Док2 и Док3.Док2, то можно примерно так:
ВЫБРАТЬ Док1.Ссылка, Док1.Док2 ИЗ Документ.Док1 КАК Док1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Док3 КАК Док3 ПО (НЕ Док1.Док2 В (ВЫБРАТЬ Док3.Док2 ИЗ Документ.Док3 КАК Док3 ГДЕ НЕ Док3.Док2 = ЗНАЧЕНИЕ(Документ.Док2.ПустаяСсылка))) СГРУППИРОВАТЬ ПО Док1.Ссылка, Док1.Док2 зы: на оптимальность не претендую, но работать будет :) |
|||
51
LivingStar
22.01.15
✎
11:51
|
(50) Спасибо! Нужно будет попробовать!!! Что то сильно закручено!!!
Пока не совсем понял конечно. (48) Почасовая на словах. На деле же по факту. И я в таких местах давно не работаю. Только Фиксированный оклад! |
|||
52
LivingStar
22.01.15
✎
11:52
|
(51+) Почасовая если, то оцениваться она может в 3 часа, а выполняться день.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |