|   |   | 
| 
 | v7: как переиндексовать справочник? | ☑ | ||
|---|---|---|---|---|
| 0
    
        napagokc 09.11.11✎ 08:03 | 
        Семёрочники, помогите, пожалуйста!
  Перегоняю справочники из 7.7 в 8.2. Получилось так, что Код договора в 7.7 имеет тип строка 6 символов. В конфе 8.2 код договора имеет тип число 5 знаков. Посмотрел в 7.7 и заметил, что, во-первых, весь код по сути - число, а во-вторых, используются только первый символ и два последних. То есть, так: Х000ХХ. Решил переиндексовать справочник в 7.7 перед переносом, сделать так: 000ХХХ. То есть, четвертый символ заменить первым, а первый четвертым. Это все делаю в отдельной функции: Функция ПолучитьКодДоговора(КодДоговора) СпрДоговоры = СоздатьОбъект("Справочник.Договоры"); Если СпрДоговоры.НайтиПоКоду(КодДоговора) = 1 Тогда НайденныйДоговор = СпрДоговоры.ТекущийЭлемент(); Попытка Если Число(НайденныйДоговор.Код) > 99 Тогда НайденныйДоговор.Код = "000" + Лев(КодДоговора, 1) + Прав(КодДоговора, 2); НайденныйДоговор.Записать(); Сообщить("Код договора '" + КодДоговора + "' преобразован в '" + НайденныйДоговор.Код + "'", "!"); Возврат НайденныйДоговор.Код; Иначе Возврат КодДоговора; КонецЕсли; Исключение Сообщить("Невозможно преобразовать код договора " + СпрДоговоры.Наименование + " к числу!", "!!!"); КонецПопытки; Иначе Возврат КодДоговора; КонецЕсли; КонецФункции Но у меня почему-то никогда не выполняется первое же условие. Почему? Что я делаю не так? Заранее благодарен. | |||
| 1
    
        napagokc 09.11.11✎ 08:09 | 
        Вопрос-то даровой. Я просто с семёркой не знаком, практически, пожтому мог что-то не учесть. Поделитесь опытом, плз!
  КодДоговора определяется верно по отладчику. Я в недоумении... | |||
| 2
    
        PuhUfa 09.11.11✎ 08:10 | 
        (1) КодДоговора передаваемый в функцию строка? Справочник.Договоры подчиненный?     | |||
| 3
    
        KRV 09.11.11✎ 08:11 | 
        Наверно сравниваешь разные значения, не?     | |||
| 4
    
        KRV 09.11.11✎ 08:11 | 
        +(2) ИспользоватьВладельца()     | |||
| 5
    
        alkov 09.11.11✎ 08:12 | 
        СпрДоговоры.НайтиПоКоду(КодДоговора, 0) ?     | |||
| 6
    
        napagokc 09.11.11✎ 08:13 | 
        (2) Справочник Договоры - подчиненный, да.
  Код договора передаю так: ПолучитьКодДоговора(Спр.ОсновнойДоговор.Код); где Спр = СоздатьОбъект("Справочник.Контрагенты"); | |||
| 7
    
        filh 09.11.11✎ 08:13 | 
        (0) А то что КодДоговора может быть больше 1?     | |||
| 8
    
        napagokc 09.11.11✎ 08:14 | 
        (5) Там же по умолчанию должно присваиваться? В справке так написано...
  (4) Можно поподробнее, плз? | |||
| 9
    
        filh 09.11.11✎ 08:14 | 
        Рукурсию делай и будет сщастье     | |||
| 10
    
        andrewks 09.11.11✎ 08:15 | 
        перенумерация справочника перед переносом - это моветон     | |||
| 11
    
        alkov 09.11.11✎ 08:18 | 
        (6) Зачем в процедуру передавать код договора, и по нему же потом искать договор? Не правильней было б:
  
 ? | |||
| 12
    
        alkov 09.11.11✎ 08:18 | 
        (11) в функцию     | |||
| 13
    
        napagokc 09.11.11✎ 08:23 | 
        (11) так просто запись короче получается и читать потом легче. Замени в моей функции "КодДоговора" на "Договор.Код" и увидешь, что читабельность чуть-чуть ухудшилась. + заменять "КодДоговора" проще (используя даблклик по переменной), чем Договоры.Код :) Только из этих соображений     | |||
| 14
    
        alkov 09.11.11✎ 08:25 | 
        (13) Передавать атрибут вместо объекта и потом искать объект по его атрибуту только лишь для увеличения читабельности? Это не шутка?     | |||
| 15
    
        napagokc 09.11.11✎ 08:32 | 
        (14) Так ведь в семерке в любом случае ссылку на объект можно получить только одним из методов: НайтиПоКоду(), НайтиПоНаименованию(), НайтиПоРеквизиту(). Это же не восьмерка     | |||
| 16
    
        napagokc 09.11.11✎ 08:33 | 
        (15) или я не правильно понял учебник по 7.7 на мисте.....     | |||
| 17
    
        filh 09.11.11✎ 08:34 | 
        Спр.ОсновнойДоговор и Спр.ОсновнойДоговор.ТекущийЭлемент()
  чуешь разницу? | |||
| 18
    
        alkov 09.11.11✎ 08:37 | 
        (15) Спр.ОсновнойДоговор - это тоже ссылка, если рассуждать в терминах 8-ки.     | |||
| 19
    
        ParaWiz 09.11.11✎ 08:37 | 
        мммм а зачем вообще все это если надо перелопатить весь справочник ?!
  Процедура Сформировать() Конт=СоздатьОбъект("Справочник.Контрагенты"); Дог=СоздатьОбъект("Справочник.Договоры"); Конт.ВыбратьЭлементы(); Пока Конт.ПолучитьЭлемент() = 1 Цикл Дог.ИспользоватьВладельца(Конт.ТекущийЭлемент()); Дог.ПорядокНаименований(); Дог.ВыбратьЭлементы(); Пока Дог.ПолучитьЭлемент() = 1 Цикл Дог.Код="000"+Лев(Дог.Код,1)+Прав(Дог.Код,2); Дог.Записать(); КонецЦикла; КонецЦикла; КонецПроцедуры | |||
| 20
    
        napagokc 09.11.11✎ 08:50 | 
        Ребятааа! Вы молодцы! Огромное спасибо все!
  Особая благодарность (19) за предоставленный наглядный пример! :) | |||
| 21
    
        1Сергей 09.11.11✎ 08:53 | 
        Видимо, снеговик и в правду разжижает моск     | |||
| 22
    
        ParaWiz 09.11.11✎ 09:29 | 
        (21) угу, я вообще не вкурил код в (0) ... ну то есть вкурить то вкурил ... но не понял зачем это все :) ...     | |||
| 23
    
        Patrio_ O_Muerte 09.11.11✎ 09:30 | 
        (8)Рекомендую - меньше всего верить справке!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |