|
Обход полученных запросов. Метод ПолучитьОбъект. | ☑ | ||
---|---|---|---|---|
0
reznik911
09.01.17
✎
08:42
|
Добрый день уважаемые! Есть справочники (Спр) Банки и Банковские счета (БС). В справочник Банки занесли список банков по городам (БИК банков совпадают, разнятся только названия и города). Теперь решили оставить по одному банку из всех списков, чтобы плагиата не было. А БС по всем то уже занесли, есть ссылки. Помечаем на удаление банки, оставляем по одному из каждого вида.
Написал внешнюю обработку. На форме обработки первый запрос получает из Спр Банки все записи не помеченные на удаление, которых оставили. Второй запрос получает все те записи из Спр БС ,у которых реквизит Банк помечен на удаление. Цель: заменить в спр БС реквизиты банк на те банки из СПр Банки не помеченные на удаление. После того как ссылки перебьются на новые, стандартной обработкой удалить лишние записи. Пока удается получить из запросов записи, а найти по БИК и записать Объекту банковские счета новое значение не получается. Конечный цикл у меня неправильно перебирает и методом получить объект не выходит. Надеюсь на какие ни будь направления где что искать и что не правильно по сути |
|||
1
reznik911
09.01.17
✎
08:42
|
&НаКлиенте
Процедура ИзменитьСсылки(Команда) ИзменитьСсылкиНаСервере(); КонецПроцедуры &НаСервере Процедура ИзменитьСсылкиНаСервере() //Условие: выбираем тех, которые не помечены на удаление Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Банки.Ссылка, | Банки.БИК КАК БИК |ИЗ | Справочник.Банки КАК Банки |ГДЕ | НЕ Банки.ПометкаУдаления "; ТаблицаЗапросаБанки = Запрос.Выполнить().Выбрать(); Пока ТаблицаЗапросаБанки.Следующий() Цикл КонецЦикла; // Выбрать тех, где поле банк заполнено тем значением, который помечен на удаление Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | БанковскиеСчета.Ссылка КАК СсылкаНаСпр, | БанковскиеСчета.Банк, | БанковскиеСчета.БИКБанка КАК БИКБанка |ИЗ | Справочник.БанковскиеСчета КАК БанковскиеСчета |ГДЕ | БанковскиеСчета.Банк.ПометкаУдаления"; ТаблицаЗапросаБС = Запрос.Выполнить().Выбрать(); Пока ТаблицаЗапросаБС.Следующий() Цикл КонецЦикла; Если ТаблицаЗапросаБС.БИКБанка = ТаблицаЗапросаБанки.БИК Тогда; БанковкийСчет = ТаблицаЗапросаБС.СсылкаНаСпр.ПолучитьОбъект(); БанковкийСчет.Банк = ТаблицаЗапросаБанки.Ссылка; БанковкийСчет.Записать(); КонецЕсли; КонецПроцедуры; |
|||
2
reznik911
09.01.17
✎
08:56
|
Может быть так:
Для Каждого Строка Из ТаблицаЗапросаБанки Цикл Если ТаблицаЗапросаБС.БИКБанка = ТаблицаЗапросаБанки.БИК Тогда БанковкийСчет = ТаблицаЗапросаБС.СсылкаНаСпр.ПолучитьОбъект(); БанковкийСчет.Банк = Строка; БанковкийСчет.Записать(); КонецЕсли; |
|||
3
reznik911
09.01.17
✎
08:57
|
КонецЦикла
|
|||
4
reznik911
09.01.17
✎
10:20
|
Никто ниче не знает?
|
|||
5
Cool_Profi
09.01.17
✎
10:29
|
(4) Я знаю то, что с логикой и вообще примитивными навыками программирования у тебя не то что плохо... И вообще нет.
|
|||
6
Cool_Profi
09.01.17
✎
10:29
|
*их
|
|||
7
Smile 8D
09.01.17
✎
10:32
|
(0) Для начала: что за конфигурация? В типовых имеется встроенный механизм замены дублей, который позволяет сделать, то что вам надо без программирования.
|
|||
8
DrZombi
гуру
09.01.17
✎
10:35
|
(1) Код не соответствует описанной проблеме в (0) :)
Вам банки мешают или вы решили нагадить компании и удалить из счетов все банки ? :)))) |
|||
9
reznik911
09.01.17
✎
10:39
|
(5) как вы это определили?
|
|||
10
Cool_Profi
09.01.17
✎
10:40
|
(9) по предложенному нашему вниманию коду.
|
|||
11
DrZombi
гуру
09.01.17
✎
10:40
|
(9) Код в (1) делает совсем другое, нежели в (0) :)
|
|||
12
reznik911
09.01.17
✎
10:41
|
(7) Конфигурация не типовая. Дублей нет. Поэтому универсальной обработкой не стал
|
|||
13
reznik911
09.01.17
✎
10:42
|
(11) нет почему же. Может я не так выразился когда пытался объяснить суть задачи
|
|||
14
reznik911
09.01.17
✎
10:44
|
(10) что же вас там смутило? ЗАпросом получаем данные и после справочнику прописываем новое значение
|
|||
15
DrZombi
гуру
09.01.17
✎
10:45
|
(13) Вам нужно взять один банк по бику и заменить на него все что не соответствует этому банку, т.е. элементу справочника, но соответствует бику :)
Добавь проверку на пометку удаления Добавь поиск нужного элемента банка в ТЗ по Бику :) |
|||
16
Cool_Profi
09.01.17
✎
10:45
|
(14) Я ж говорю - логики в коде никакой.
|
|||
17
reznik911
09.01.17
✎
10:50
|
(15) нет вы не поняли. Не нужно один банк записывать всем. Есть n количество банков. Казмкоммерцбанк, ИнвестБанк, Сбербанк и т.д. и все они занесли еще по городам. В справочник Банки они ввели один и тот же банк к примеру Сбербанк в Алмате, В Астане еще и по остальным городам. Теперь они хотят убрать запси по городам. Понятие города у Банка вообще убрать, т.к. он и не нужен. Оставить например просто Сбербанки все. И так по всем остальным банкам.
|
|||
18
reznik911
09.01.17
✎
10:53
|
(15) и конечно же просто лишние стереть не получится или допустим перебивать ссылки на оставшиеся банки в справочниках в ручную тоже не вариант. Было решено пометить лишние записи , а в справочнике банковских счетов обработка изменит ссылки на актуальные
|
|||
19
reznik911
09.01.17
✎
10:57
|
(16) какой содержательный ответ. Логика есть. Написал выше. И как это связано с мышлением программирования не понял))
|
|||
20
Cool_Profi
09.01.17
✎
10:58
|
(19) ну смотри. У тебя 2 цикла. Совершенно не связанных друг с другом.
И что ты от этого кода хочешь? |
|||
21
reznik911
09.01.17
✎
11:00
|
(20) Вы об этом ? (2)
|
|||
22
Cool_Profi
09.01.17
✎
11:01
|
(21) И (2) тоже никак не связано с с.
Ты сначала перебираешь все банки. А уже потом, после перебора - перебираешь счета. Намёк понял? |
|||
23
reznik911
09.01.17
✎
11:01
|
(15) проверка на пометку уже есть в запросах. Я уже получаю результат отсеивая в первом запросе не помеченные, во втором наоборот
|
|||
24
reznik911
09.01.17
✎
11:03
|
(22) Я не отрицаю что (2) полный брэд. Вот вместо него незнаю как должно быть чтобы связал запросы и проверил на общее поле
|
|||
25
reznik911
09.01.17
✎
11:07
|
(22) не понял
|
|||
26
DrZombi
гуру
09.01.17
✎
11:13
|
(17) >>> Понятие города у Банка вообще убрать, т.к. он и не нужен.
Это вам пользователи напели? Лукавят ;) |
|||
27
DrZombi
гуру
09.01.17
✎
11:14
|
(20) Он хочет "Напишите мне, я буду признателен" :)
|
|||
28
Cool_Profi
09.01.17
✎
11:14
|
(25) Печально. Я ж говорил в (5)...
|
|||
29
DrZombi
гуру
09.01.17
✎
11:15
|
(23) Ты не понял. Проверка на пометку по тем банкам, которые еще присутствуют в счетах и которые еще не заменены на нужные :)
|
|||
30
DrZombi
гуру
09.01.17
✎
11:15
|
+ В общем делай просто в цикле, забудь про запросы
|
|||
31
Cool_Profi
09.01.17
✎
11:16
|
Логика простая.
Получаем очередной банк к удалению и соответствие к нему банка на оставление. Получаем все счета с первым банком, заменяем на второй. Повторяем для каждого банка. Для разовой задачи - приемлем запрос в цикле. Для регулярной - можно запрос написать один. |
|||
32
reznik911
09.01.17
✎
11:17
|
(27) нет я не хотел и просил)) (28) молодец
|
|||
33
reznik911
09.01.17
✎
11:20
|
(32) не просил
|
|||
34
reznik911
09.01.17
✎
11:26
|
(30) забудь про запросы (31) запрос в цикле))))
|
|||
35
DrZombi
гуру
09.01.17
✎
11:29
|
(33) Ладненько.
1. Выбираешь в запросе список Банков, которые не помеченные на удаление с полями: - Ссылка на элемент банка - БИК Выгружаешь все в ТЗ 2. Формируешь запросом список счетов с отбором, все помеченные на удаление Банки 3. В цикле по счетам ищешь в ТЗ банков по бику нужный банк и как только ты его находишь, что подставляешь вместо прошлого банка и записываешь его. |
|||
36
DrZombi
гуру
09.01.17
✎
11:30
|
(35)
4. Записываешь его - Записываешь Банк в нужном счете :) |
|||
37
DrZombi
гуру
09.01.17
✎
11:31
|
+(34) Код сам надеюсь осилишь :)
|
|||
38
Cool_Profi
09.01.17
✎
11:31
|
(34) Я же сказал - для разовой запрос в цикле терпимо.
А вообще можно и одним запросом. |
|||
39
DrZombi
гуру
09.01.17
✎
11:31
|
(38) +100 :)
|
|||
40
ВРедная
09.01.17
✎
11:32
|
А внешняя обработка поиска дублей что, не работает?
|
|||
41
ВРедная
09.01.17
✎
11:33
|
(40) зачем изобретать велосипед, особенно, когда ясно, что велосипед не получается
|
|||
42
reznik911
09.01.17
✎
11:40
|
(35) ну первым запросом я и так получил. Только перебирал еще его. Выходит лишнее. Но и не загрузил в ТЗ
2 . пункт я это и сделал. 3. У меня так и было. Но тупо не срабатывал. Отладчиком смотрел, он находил записи, сверял, результат ложь и зарвешал чикл и все. И как я знаю такой цикл завершается когнда получает значение ложь и тупо завершал Пока ТаблицаЗапросаБС.Следующий() Цикл Если ТаблицаЗапросаБС.БИКБанка = ТаблицаЗапросаБанки.БИК Тогда; БанковкийСчет = ТаблицаЗапросаБС.СсылкаНаСпр.ПолучитьОбъект(); БанковкийСчет.Банк = ТаблицаЗапросаБанки.Ссылка; БанковкийСчет.Записать(); КонецЕсли; КонецЦикла; |
|||
43
youalex
09.01.17
✎
12:04
|
|
|||
44
DrZombi
гуру
09.01.17
✎
12:14
|
(40) Не работает, и возможно биков 1000, немного нерационально 1000 раз запускать обработку? :)
|
|||
45
DrZombi
гуру
09.01.17
✎
12:15
|
(42) Условие тут лишнее.
Тебе БИК известен и его надо лишь найти в ТЗ биков Банков И подставить нужный элемент "Банк" вместо старого :) |
|||
46
reznik911
09.01.17
✎
12:41
|
(45) если не условием то НайтиПоРеквизиту("БИК") ?
|
|||
47
reznik911
09.01.17
✎
13:08
|
(43) эт я так понял когда одним запросом получаем. Проблема не в этом была. Это лишь оптимизация так?
|
|||
48
DrZombi
гуру
09.01.17
✎
13:25
|
(46) Вот так
СтрокаТЗ = ТЗ_БИК.Найти(<ТутИскомыйБИК>,"БИК"); |
|||
49
DrZombi
гуру
09.01.17
✎
13:26
|
(47) Для вас это высший пилотаж. Сделай как проще :)
|
|||
50
ВРедная
09.01.17
✎
13:27
|
(45) вообще, поиск дублей хоть 1000 дублей обработает, она для этого и придумана. И запускать 1000 раз её не придётся. ..
|
|||
51
DrZombi
гуру
09.01.17
✎
13:32
|
(50) Тогда ТС так ничему не научится :)
|
|||
52
Cool_Profi
09.01.17
✎
13:41
|
(51) А может, оно и к лучшему?
А то снегу на улицах много.. Весна придёт - грязь.. Лето - грязь... Осень листья... Убирать некому... |
|||
53
reznik911
09.01.17
✎
13:44
|
(52) остряк
|
|||
54
reznik911
09.01.17
✎
13:46
|
(51) я вот не понимаю кем вы себя считаете? Я незнаю, поэтому обратился к форуму, будучи знающим нафига мне сюда писать. Если не получается и пытаюсь понять, то почему это плохо и лишний раз является предметом стеба таких как вы амебы?
|
|||
55
Cool_Profi
09.01.17
✎
13:48
|
(54) у тебя не то что не получается...
Просто ты даже не пытаешься понять, к сожалению. |
|||
56
reznik911
09.01.17
✎
13:52
|
(55) почему не пытаюсь, я максимально пытаюсь понять , а не тупо не сижу и не жду ответа. Но сложно сразу все уловить
|
|||
57
rabbidX
09.01.17
✎
13:56
|
(56) книжки читай.
|
|||
58
DrZombi
гуру
09.01.17
✎
14:03
|
(54) тебе расписали алгоритм. Садись и пиши
|
|||
59
reznik911
09.01.17
✎
14:14
|
(58) слушаюсь
|
|||
60
Filin
09.01.17
✎
14:28
|
Ну можно как то так, не мудря особо -
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | БанковскиеСчета.Ссылка КАК Ссылка, | Банки.Ссылка КАК Банк |ИЗ | Справочник.БанковскиеСчета КАК БанковскиеСчета | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Банки КАК Банки | ПО БанковскиеСчета.Банк.Код = Банки.Код | И (НЕ Банки.ПометкаУдаления) |ГДЕ | БанковскиеСчета.Банк.ПометкаУдаления"; Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ОбъектСчет = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); ОбъектСчет.Банк = ВыборкаДетальныеЗаписи.Банк; ОбъектСчет.Записать(); КонецЦикла; |
|||
61
youalex
09.01.17
✎
14:33
|
(60) БИК
|
|||
62
Filin
09.01.17
✎
14:36
|
(61) Ну тут я хз, чо за конфа не написал наш ТС, у меня в БП БИК - это код :) А так да, конечно вместо "Банки.Код" - "Банки.БИК" и т.д.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |