|
Заблудился в 14 строках)) Помогите) | ☑ | ||
---|---|---|---|---|
0
cube033
25.12.12
✎
11:39
|
Простейший участок кода. Не вижу, где можно ошибиться. На примере из 6 элементов работает идеально, преобразует 1,2,3,4,5,6 в
Кв. 1 Кв. 2 Кв. 3 итд. Проблема в том, что на самом деле элементов в справочнике 9902. И тут начинается беда. Работает всё так Кв.1 Кв.2 ------ Кв.6 Кв.Кв.1 Кв.Кв.2 -------- Кв.Кв.6 Кв.Кв.Кв.1 итд вплоть до Кв.Кв.Кв.Кв.Кв.Кв.Кв.Кв.Кв.Кв.Кв.Кв.Кв до конца длины поля Как я понимаю - он обходит справочник множество раз. Могу побороть это кривым методом (если число вхождений "Кв."=1 то продолжть), но хочется понять. Выборка = Справочники.УПЖКХ_Помещения.Выбрать(); Пока Выборка.Следующий() Цикл Квартира = Выборка.ПолучитьОбъект(); Если Квартира.ЭтоГруппа Тогда Продолжить; КонецЕсли; Если Квартира.Владелец.Многоквартирное=Истина Тогда Квартира.ВидПомещения = Справочники.УПЖКХ_ВидыПомещений.НайтиПоНаименованию("Квартира"); Иначе Квартира.ВидПомещения = Справочники.УПЖКХ_ВидыПомещений.НайтиПоНаименованию("Помещение"); КонецЕсли; Квартира.Наименование=Квартира.ВидПомещения.НаименованиеКраткое+" "+Квартира.Наименование; Квартира.Записать(); КонецЦикла; |
|||
1
drcrasher
25.12.12
✎
11:41
|
Квартира.Наименование=Квартира.ВидПомещения.НаименованиеКраткое+" "+Квартира.Наименование;
что ты сказать этим хотел? |
|||
2
wowik
25.12.12
✎
11:41
|
(0) я тоже заблудился...
|
|||
3
GLazNik
25.12.12
✎
11:42
|
(0) запрос покажи. Ошибка скорее всего там. Хотя и представленный код попахивает.
|
|||
4
drcrasher
25.12.12
✎
11:43
|
(3) учимся читать:
Выборка = Справочники.УПЖКХ_Помещения.Выбрать() |
|||
5
cw014
25.12.12
✎
11:43
|
(0) Вижу где можно ошибиться. В многократном запуске с самого начала этой обработки
|
|||
6
cube033
25.12.12
✎
11:43
|
Квартира.Наименование=1 Например
Квартира.ВидПомещения.НаименованиеКраткое = Кв. В Итоге Квартира.Наименование Было "1" Стало "Кв. 1" |
|||
7
Feofan
25.12.12
✎
11:44
|
У тебя Квартира.Наименование не очищается при каждой итерации
|
|||
8
Ursus maritimus
25.12.12
✎
11:44
|
(0) Классика гамнокода
|
|||
9
del123
25.12.12
✎
11:44
|
либо вначале запросом получить список элементов и перебирать, либо проверять наименование квартир, если не число, то пропускать.
|
|||
10
Жан Пердежон
25.12.12
✎
11:44
|
(0) запросы в цикле - сам знаешь признак кого
|
|||
11
GLazNik
25.12.12
✎
11:44
|
(4) дада... уже заметил после того как нажал на кнопку "Отправить" :)
|
|||
12
del123
25.12.12
✎
11:45
|
и виды помещения лучше было бы перед запросом найти и присвоить переменным
|
|||
13
cube033
25.12.12
✎
11:45
|
Квартира.Наименование не может очищатся, так как переприсвамваеися из элемента справочника на каждой итерации.
|
|||
14
DEVIce
25.12.12
✎
11:45
|
Ты когда делаешь Квартира.Записать(), то выборку сбиваешь. Лучше выбрать запросом и обойти его результат.
|
|||
15
cw014
25.12.12
✎
11:45
|
(6) После второго запуска у тебя следующее:
Квартира.Наименование="Кв. 1" (уже так) Квартира.ВидПомещения.НаименованиеКраткое = Кв. В Итоге Квартира.Наименование Было "Кв. 1" Стало "Кв. Кв. 1" |
|||
16
drcrasher
25.12.12
✎
11:46
|
(13) считай, что у тебя к коде наименование = наименование.
|
|||
17
drcrasher
25.12.12
✎
11:46
|
(14) чёйта?
|
|||
18
DEVIce
25.12.12
✎
11:47
|
Вообще в восьмерке не рекомендуется выборкой лишний раз ползоваться, тем более что меняешь наименование элементов справочника, а значит меняется положение его в выборке (он может несколько раз в итоге выбраться, а некоторые элементы ниодного). Это кстати основы самые работы в восьмерке.
|
|||
19
cw014
25.12.12
✎
11:47
|
И еще лучше номера помещений хранить в отдельном, числовом реквизите, а в наименование можно и "отдельное помещение" написать
|
|||
20
sidalexsandr
25.12.12
✎
11:47
|
(0)
Выбрать(<Родитель>, <Владелец>, <Отбор>, <Порядок>) <Порядок> необязательный Тип: Строка. Строка с именем реквизита справочника, определяющая упорядочивание элементов в выборке. Может быть указано "Код", "Наименование" или имя одного из реквизитов примитивного типа (число, строка, дата, булево), для которого установлен признак "Индексирование" в значение "Индексировать" или в "Индексировать с доп. упорядоч." в конфигураторе. После имени реквизита через пробел может быть указано направление сортировки. Направление определяется: "Убыв" ("Desc") - упорядочивать по убыванию; "Возр" ("Asc") - упорядочивать по возрастанию. По умолчанию сортировка производится по возрастанию. Если параметр не указан, то порядок определяется основным представлением справочника. Значение по умолчанию: пустая строка. |
|||
21
MSII
25.12.12
✎
11:47
|
(14) Да не, он тупо дописывает к наименованию "Кв." и так много раз.
|
|||
22
cube033
25.12.12
✎
11:47
|
(15) Второго запуска нет
|
|||
23
DEVIce
25.12.12
✎
11:48
|
(17) Тойта - читайте как работает выборка и почему ее не рекомендуется использовать в таких случаях.
|
|||
24
Reset
25.12.12
✎
11:48
|
(14) Не сбивается она никуда. Чел в процессе отладки 100500 раз запустил обработку, каждый раз прилемпляя спереди "Кв"
|
|||
25
DEVIce
25.12.12
✎
11:48
|
(21) Правильно. Элемент в соответствии с заданной сортировкой займет новой положение в справочнике, а значит и в выборке.
|
|||
26
sidalexsandr
25.12.12
✎
11:48
|
(0) Поставь сортировку В методе выбрать.
|
|||
27
cw014
25.12.12
✎
11:49
|
(22) Да ладно, цитирую тебя же:
>На примере из 6 элементов работает идеально >на самом деле элементов в справочнике 9902. И тут начинается беда Отсюда вывод - неоднократный вызов процедуры |
|||
28
sidalexsandr
25.12.12
✎
11:50
|
(0) Ещё вариант:
Выбрать Квартира.Наименование ИЗ Справочники.УПЖКХ_Помещения КАК Квартира |
|||
29
DEVIce
25.12.12
✎
11:51
|
В любом случае дучше использовать запрос - будет быстрее и без вот таких вот эффектов сортировки. Автор, отвыкай программить посемерочному.
|
|||
30
ERWINS
25.12.12
✎
11:51
|
Запускал много раз вот и накопилось
|
|||
31
cube033
25.12.12
✎
11:51
|
(14) Пока самый дельный ответ
По поводу Неоднакратного вызова - всё четко отслеживается - запуск - очистка - заполнение - запуск. Код не находится в цикле |
|||
32
sidalexsandr
25.12.12
✎
11:52
|
(0) А ещё зайди в справочник в режиме 1с Предприятие и поставь сортировку по наименованию и посмотри будет ли у тебя в правильном порядке отображаться. + Смотри (26)
|
|||
33
cube033
25.12.12
✎
11:52
|
(29) Я и не привыкал.) Опыта пока мало - пишу интуитивно)
|
|||
34
DEVIce
25.12.12
✎
11:53
|
(33) Забудь про выборку короче. Выбери запросом.
|
|||
35
sidalexsandr
25.12.12
✎
11:54
|
(0) Автор, только сейчас обратил внимание. Ты одновременно делаеш выборку и записываеш элемент справочника. Такое делать нельзя (сбивается выборка).Вот твой код, где этот косяк:
Квартира.Наименование=Квартира.ВидПомещения.НаименованиеКраткое+" "+Квартира.Наименование; Квартира.Записать(); |
|||
36
Reset
25.12.12
✎
11:55
|
(25) Вероятно, это верно, если для выборки задан порядок.
Но с (29) согласен |
|||
37
DEVIce
25.12.12
✎
11:56
|
(36) Если порядок не выбран, то по умолчанию тот что в конфигураторе задан, обычно код или наименование, он как раз наименование меняет.
|
|||
38
Reset
25.12.12
✎
11:58
|
(37) Я проверил только что, выбирая и меняя наименование. Каждый элемент выбрался строго 1 раз
Правда в файловой, сервер в данный момент недоступен |
|||
39
cw014
25.12.12
✎
11:58
|
Посмотри, у тебя сейчас в наименованиях этого справочника одни цифры стоят?
|
|||
40
DEVIce
25.12.12
✎
12:00
|
(38) Значит удачно наименование поменял или сортировка по коду стоит. :)
|
|||
41
DEVIce
25.12.12
✎
12:01
|
(38) Сделай сортировку по наименованию и поменяй наименование так чтобы элемент был первым, а после переименования непервым. И расскажи что получилось :)
|
|||
42
sidalexsandr
25.12.12
✎
12:01
|
Тебе надо из выборки Только читать данные + создать ещё одну переменную типа Справочники.УПЖКХ_Помещения (Временная). Далее получив из выборки следующий элемент найти например по коду через переменную Временная и далее обязательно изменять и записывать элемент справочника через перемнную Временная.
|
|||
43
Reset
25.12.12
✎
12:01
|
(41) Так и было, сортировка по наименования
|
|||
44
Reset
25.12.12
✎
12:02
|
(41) Порядок изменился после переименованию
|
|||
45
Reset
25.12.12
✎
12:02
|
переименования*
|
|||
46
Reset
25.12.12
✎
12:03
|
Собственно, алгоритм у ТС в любом случае должен включать провеку наличие свпереди сигнатуры, на случай повторного запуска
|
|||
47
DEVIce
25.12.12
✎
12:03
|
(42) Запрос, запрос и еще раз запрос. Тогда всех этих извращений не нужно будет.
|
|||
48
cube033
25.12.12
✎
12:04
|
(38) На маленьком примере у меня так же. Видимо на 9000 такая удача не срабатывает и все регулярно перемешивается.
Делаю запрос - по результату отпишусь |
|||
49
sidalexsandr
25.12.12
✎
12:04
|
(47) Полностью согласен. Просто человек хотел выборкой.
|
|||
50
sidalexsandr
25.12.12
✎
12:17
|
Лови Запрос:
Изменим = Справочники.УПЖКХ_Помещения.Создать(); Запрос = Новый Запрос; Запрос.Текст = " | Выбрать Квартира.Наименование, |("кв."+Квартира.Наименование) КАК НовоеНаименование | ИЗ Справочники.УПЖКХ_Помещения КАК Квартира"; РезультатЗапроса = Запрос.Выполнить().Выбрать; Пока РезультатЗапроса.Следующий Цикл Текущий =Изменим.НайтиПоНаименованию(РезультатЗапрос.Наименование); Текущий.Наименование = РезультатЗапроса.НовоеНаименование; Текущий.Записать(); КонецЦикла; |
|||
51
sidalexsandr
25.12.12
✎
12:17
|
(50) Опечатлся
Пока РезультатЗапроса.Следующий Цикл Замени на Пока РезультатЗапроса.Следующий() Цикл |
|||
52
cube033
25.12.12
✎
12:31
|
Сделал через запрос. На маленьком примере по прежнему работает. По поводу большого примера сегодня не отпишусь ибо обработка 2х экселевских документв 9900 и 28000 строк - занимает много времени. С Очисткой, загрузкой документов, переносом данных - 2 попытки в день получается))
Всем спасибо. Я только учусь, собственно сегодня был полезный урок. |
|||
53
DEVIce
25.12.12
✎
12:33
|
(50) Че за чушь? В запросе сразу слабо ссылку получить чтобы не делать потом еще поиск по наименованию? Или ты из ссылки объекты получать не умеешь?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |