|
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)Рекомендую - меньше всего верить справке!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |