Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Заблудился в 14 строках)) Помогите)

Заблудился в 14 строках)) Помогите)
Я
   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 то продолжть), но хочется понять.


Выборка = Справочники.УПЖКХ_Помещения.Выбрать();
 Пока Выборка.Следующий() Цикл 
  Квартира = Выборка.ПолучитьОбъект();             
  Если Квартира.ЭтоГруппа Тогда 
   Продолжить; 
  КонецЕсли;                
  Если Квартира.Владелец.Многоквартирное=Истина Тогда
   Квартира.ВидПомещения = Справочники.УПЖКХ_ВидыПомещений.НайтиПоНаименованию("Квартира");
  Иначе
   Квартира.ВидПомещения = Справочники.УПЖКХ_ВидыПомещений.НайтиПоНаименованию("Помещение");                         КонецЕсли;    
  Квартира.Наименование=Квартира.ВидПомещения.НаименованиеКраткое+" "+Квартира.Наименование;
  Квартира.Записать();
 КонецЦикла;
 
 
   drcrasher
 
1 - 25.12.12 - 11:41
Квартира.Наименование=Квартира.ВидПомещения.НаименованиеКраткое+" "+Квартира.Наименование;

что ты сказать этим хотел?
   wowik
 
2 - 25.12.12 - 11:41
(0) я тоже заблудился...
   GLazNik
 
3 - 25.12.12 - 11:42
(0) запрос покажи. Ошибка скорее всего там. Хотя и представленный код попахивает.
   drcrasher
 
4 - 25.12.12 - 11:43
(3) учимся читать:
Выборка = Справочники.УПЖКХ_Помещения.Выбрать()
   cw014
 
5 - 25.12.12 - 11:43
(0) Вижу где можно ошибиться. В многократном запуске с самого начала этой обработки
   cube033
 
6 - 25.12.12 - 11:43
Квартира.Наименование=1 Например
Квартира.ВидПомещения.НаименованиеКраткое = Кв.
В Итоге Квартира.Наименование Было "1" Стало "Кв. 1"
   Feofan
 
7 - 25.12.12 - 11:44
У тебя Квартира.Наименование не очищается при каждой итерации
   Ursus maritimus
 
8 - 25.12.12 - 11:44
(0) Классика гамнокода
   del123
 
9 - 25.12.12 - 11:44
либо вначале запросом получить список элементов и перебирать, либо проверять наименование квартир, если не число, то пропускать.
   Жан Пердежон
 
10 - 25.12.12 - 11:44
(0) запросы в цикле - сам знаешь признак кого
 
 Рекламное место пустует
   GLazNik
 
11 - 25.12.12 - 11:44
(4) дада... уже заметил после того как нажал на кнопку "Отправить" :)
   del123
 
12 - 25.12.12 - 11:45
и виды помещения лучше было бы перед запросом найти и присвоить переменным
   cube033
 
13 - 25.12.12 - 11:45
Квартира.Наименование не может очищатся, так как переприсвамваеися из элемента справочника на каждой итерации.
   DEVIce
 
14 - 25.12.12 - 11:45
Ты когда делаешь Квартира.Записать(), то выборку сбиваешь. Лучше выбрать запросом и обойти его результат.
   cw014
 
15 - 25.12.12 - 11:45
(6) После второго запуска у тебя следующее:
Квартира.Наименование="Кв. 1" (уже так) Квартира.ВидПомещения.НаименованиеКраткое = Кв.
В Итоге Квартира.Наименование Было "Кв. 1" Стало "Кв. Кв. 1"
   drcrasher
 
16 - 25.12.12 - 11:46
(13) считай, что у тебя к коде наименование = наименование.
   drcrasher
 
17 - 25.12.12 - 11:46
(14) чёйта?
   DEVIce
 
18 - 25.12.12 - 11:47
Вообще в восьмерке не рекомендуется выборкой лишний раз ползоваться, тем более что меняешь наименование элементов справочника, а значит меняется положение его в выборке (он может несколько раз в итоге выбраться, а некоторые элементы ниодного). Это кстати основы самые работы в восьмерке.
   cw014
 
19 - 25.12.12 - 11:47
И еще лучше номера помещений хранить в отдельном, числовом реквизите, а в наименование можно и "отдельное помещение" написать
   sidalexsandr
 
20 - 25.12.12 - 11:47
(0)

 Выбрать(<Родитель>, <Владелец>, <Отбор>, <Порядок>)   
<Порядок> необязательный  
 
Тип: Строка. Строка с именем реквизита справочника, определяющая упорядочивание элементов в выборке. Может быть указано "Код", "Наименование" или имя одного из реквизитов примитивного типа (число, строка, дата, булево), для которого установлен признак "Индексирование" в значение "Индексировать" или в "Индексировать с доп. упорядоч." в конфигураторе. После имени реквизита через пробел может быть указано направление сортировки.  

Направление определяется:  
 
     "Убыв" ("Desc") - упорядочивать по убыванию;  
 
     "Возр" ("Asc") - упорядочивать по возрастанию.  
 
 По умолчанию сортировка производится по возрастанию. Если параметр не указан, то порядок определяется основным представлением справочника.  

Значение по умолчанию: пустая строка.
   MSII
 
21 - 25.12.12 - 11:47
(14) Да не, он тупо дописывает к наименованию "Кв." и так много раз.
   cube033
 
22 - 25.12.12 - 11:47
(15) Второго запуска нет
   DEVIce
 
23 - 25.12.12 - 11:48
(17) Тойта - читайте как работает выборка и почему ее не рекомендуется использовать в таких случаях.
   Reset
 
24 - 25.12.12 - 11:48
(14) Не сбивается она никуда. Чел в процессе отладки 100500 раз запустил обработку, каждый раз прилемпляя спереди "Кв"
   DEVIce
 
25 - 25.12.12 - 11:48
(21) Правильно. Элемент в соответствии с заданной сортировкой займет новой положение в справочнике, а значит и в выборке.
   sidalexsandr
 
26 - 25.12.12 - 11:48
(0) Поставь сортировку В методе выбрать.
   cw014
 
27 - 25.12.12 - 11:49
(22) Да ладно, цитирую тебя же:
>На примере из 6 элементов работает идеально
>на самом деле элементов в справочнике 9902. И тут начинается беда
Отсюда вывод - неоднократный вызов процедуры
   sidalexsandr
 
28 - 25.12.12 - 11:50
(0) Ещё вариант:
Выбрать Квартира.Наименование
ИЗ Справочники.УПЖКХ_Помещения КАК Квартира
   DEVIce
 
29 - 25.12.12 - 11:51
В любом случае дучше использовать запрос - будет быстрее и без вот таких вот эффектов сортировки. Автор, отвыкай программить посемерочному.
   ERWINS
 
30 - 25.12.12 - 11:51
Запускал много раз вот и накопилось
   cube033
 
31 - 25.12.12 - 11:51
(14) Пока самый дельный ответ
По поводу Неоднакратного вызова - всё четко отслеживается -  запуск - очистка - заполнение - запуск. Код не находится в цикле
   sidalexsandr
 
32 - 25.12.12 - 11:52
(0) А ещё зайди в справочник в режиме 1с Предприятие и поставь сортировку по наименованию и посмотри будет ли у тебя в правильном порядке отображаться. + Смотри (26)
   cube033
 
33 - 25.12.12 - 11:52
(29) Я и не привыкал.) Опыта пока мало - пишу интуитивно)
 
 
   DEVIce
 
34 - 25.12.12 - 11:53
(33) Забудь про выборку короче. Выбери запросом.
   sidalexsandr
 
35 - 25.12.12 - 11:54
(0) Автор, только сейчас обратил внимание. Ты одновременно делаеш выборку и записываеш элемент справочника. Такое делать нельзя (сбивается выборка).Вот твой код, где этот косяк:
Квартира.Наименование=Квартира.ВидПомещения.НаименованиеКраткое+" "+Квартира.Наименование;
  Квартира.Записать();
   Reset
 
36 - 25.12.12 - 11:55
(25) Вероятно, это верно, если для выборки задан порядок.
Но с (29) согласен
   DEVIce
 
37 - 25.12.12 - 11:56
(36) Если порядок не выбран, то по умолчанию тот что в конфигураторе задан, обычно код или наименование, он как раз наименование меняет.
   Reset
 
38 - 25.12.12 - 11:58
(37) Я проверил только что, выбирая и меняя наименование. Каждый элемент выбрался строго 1 раз
Правда в файловой, сервер в данный момент недоступен
   cw014
 
39 - 25.12.12 - 11:58
Посмотри, у тебя сейчас в наименованиях этого справочника одни цифры стоят?
   DEVIce
 
40 - 25.12.12 - 12:00
(38) Значит удачно наименование поменял или сортировка по коду стоит. :)
   DEVIce
 
41 - 25.12.12 - 12:01
(38) Сделай сортировку по наименованию и поменяй наименование так чтобы элемент был первым, а после переименования непервым. И расскажи что получилось :)
   sidalexsandr
 
42 - 25.12.12 - 12:01
Тебе надо из выборки Только читать данные + создать ещё одну переменную типа Справочники.УПЖКХ_Помещения (Временная). Далее получив из выборки следующий элемент найти например по коду через переменную Временная и далее обязательно изменять и записывать элемент справочника через перемнную Временная.
   Reset
 
43 - 25.12.12 - 12:01
(41) Так и было, сортировка по наименования
   Reset
 
44 - 25.12.12 - 12:02
(41) Порядок изменился после переименованию
   Reset
 
45 - 25.12.12 - 12:02
переименования*
   Reset
 
46 - 25.12.12 - 12:03
Собственно, алгоритм у ТС в любом случае должен включать провеку наличие свпереди сигнатуры, на случай повторного запуска
   DEVIce
 
47 - 25.12.12 - 12:03
(42) Запрос, запрос и еще раз запрос. Тогда всех этих извращений не нужно будет.
   cube033
 
48 - 25.12.12 - 12:04
(38) На маленьком примере у меня так же. Видимо на 9000 такая удача не срабатывает и все регулярно перемешивается.
Делаю запрос - по результату отпишусь
   sidalexsandr
 
49 - 25.12.12 - 12:04
(47) Полностью согласен. Просто человек хотел выборкой.
 
 Рекламное место пустует
   sidalexsandr
 
50 - 25.12.12 - 12:17
Лови Запрос:
Изменим = Справочники.УПЖКХ_Помещения.Создать();
Запрос = Новый Запрос;
Запрос.Текст = "
| Выбрать Квартира.Наименование,
|("кв."+Квартира.Наименование) КАК НовоеНаименование
| ИЗ Справочники.УПЖКХ_Помещения КАК Квартира";

РезультатЗапроса = Запрос.Выполнить().Выбрать;
Пока РезультатЗапроса.Следующий Цикл
     Текущий =Изменим.НайтиПоНаименованию(РезультатЗапрос.Наименование);  Текущий.Наименование = РезультатЗапроса.НовоеНаименование;
Текущий.Записать();

КонецЦикла;
   sidalexsandr
 
51 - 25.12.12 - 12:17
(50) Опечатлся 
Пока РезультатЗапроса.Следующий Цикл
Замени на
Пока РезультатЗапроса.Следующий() Цикл
   cube033
 
52 - 25.12.12 - 12:31
Сделал через запрос. На маленьком примере по прежнему работает. По поводу большого примера сегодня не отпишусь ибо обработка 2х экселевских документв 9900 и 28000 строк - занимает много времени. С Очисткой, загрузкой документов, переносом данных - 2 попытки в день получается))
Всем спасибо. Я только учусь, собственно сегодня был полезный урок.
   DEVIce
 
53 - 25.12.12 - 12:33
(50) Че за чушь? В запросе сразу слабо ссылку получить чтобы не делать потом еще поиск по наименованию? Или ты из ссылки объекты получать не умеешь?


Список тем форума
Рекламное место пустует  Рекламное место пустует
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит Тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует