|
ФормыСправочника | ☑ | ||
---|---|---|---|---|
0
Nykos
21.08.13
✎
11:08
|
Всем привет!
Возникла такая проблемка. Есть справочник с полями "Код" и "Наименование". Потребовалось изменить формат кода (пример: с "00151" на "151000", не суть важно) во всем справочнике. Добился того, что в ФормеЭлемента написал процедуру "ПриИзменении" и Код меняется только после редактирования одного конкретного Наименования и нажатия кнопки "Записать". Так как в справочнике более 3 тысяч позиций и руками перебитьвать не вариант, меня это не устраивает. Насколько я понимаю, все операции нужно производить в ФормеСписка. Нужен цикл, который бы заменил текущий формат Кода на новый во всех элементах справочника. Помогите, пожалуйста, разобраться. |
|||
1
Wobland
21.08.13
✎
11:09
|
цикл нужен, да
|
|||
2
Wobland
21.08.13
✎
11:09
|
форма списка не нужна, нет
|
|||
3
Любопытная
21.08.13
✎
11:10
|
(0) А почему обязательно в форме-то?
|
|||
4
Wobland
21.08.13
✎
11:11
|
(3) человек, вероятно, думает, что в базе есть только то, что он способен увидеть
|
|||
5
Godofsin
21.08.13
✎
11:12
|
(0) Используй перенумерацию из обработки справочников и документов
|
|||
6
mulmulya
21.08.13
✎
11:17
|
(0) не надо писать ничего в форме справочника (ни списка, ни элемента). В (5) тебе дело сказали. Но если уж хочется самому написать, то создай внешнюю обработку и в ней перенумеруй все элементы. Делаешь выборку всех элементов и в цикле меняешь каждому код
|
|||
7
mulmulya
21.08.13
✎
11:19
|
+ (6) Запрос к справочнику, потом выборку
|
|||
8
Nykos
21.08.13
✎
11:27
|
Что-то вроде этого, да?...
Запрос = Новый Запрос(" |ВЫБРАТЬ | Код |ИЗ | Справочник.Номенклатура |АВТОУПОРЯДОЧИВАНИЕ"); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл //цикл для замены кода КонецЦикла; |
|||
9
Wobland
21.08.13
✎
11:27
|
выбрать ссылку
|
|||
10
Nykos
21.08.13
✎
11:30
|
Запрос = Новый Запрос("
|ВЫБРАТЬ | Ссылка, | Код |ИЗ | Справочник.Номенклатура |АВТОУПОРЯДОЧИВАНИЕ"); так? |
|||
11
Wobland
21.08.13
✎
11:30
|
(10) нет
|
|||
12
Nykos
21.08.13
✎
11:35
|
Не понимаю(
А может через выборку? Выборка = Справочники.Номенклатура.Выбрать(); Пока выборка.Следующий() = 1 Цикл //мой цикл по замене кода ...Сообщить(...); КонецЦикла Так может как-то? |
|||
13
Wobland
21.08.13
✎
11:37
|
я не против
|
|||
14
Любопытная
21.08.13
✎
11:39
|
(12) не забудь, что по ссылке тебе надо получить объект, а потом уже в объекте менять код.
|
|||
15
Nykos
21.08.13
✎
11:46
|
(14) А объектом у меня является что?
|
|||
16
Любопытная
21.08.13
✎
11:52
|
(15)
Выборка = Справочники.Номенклатура.Выбрать(); Пока Выборка.Следующий() Цикл НомОбъект = Выборка.ПолучитьОбъект(); НомОбъект.УстановитьНовыНомер("000");//или НомОбъект.Код = "151000"; Попытка НомОбъект.Записать(); Исключение КонецПопытки; Первый день как 1С увидел? |
|||
17
Любопытная
21.08.13
✎
11:53
|
А, КонецЦикла забыла :)
|
|||
18
hhhh
21.08.13
✎
11:53
|
(15) элементы справочника Номенклатура имхо
|
|||
19
Wobland
21.08.13
✎
11:53
|
(18) думаю, у него там больше объектов, чем только номенклатуры
|
|||
20
Nykos
21.08.13
✎
12:04
|
(16)Получилось. Но теперь, когда я хочу поменять запись в Наименовании выдает ошибку "Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных(возможно, запись была изменена или удалена).
Не первый, третий. Но очень хочу научиться. |
|||
21
hhhh
21.08.13
✎
12:06
|
(20) так не надо было держать документ открытым во время выполнения обработки? Граждане, вовремя закрывайте документы, не держите их на экране.
|
|||
22
Nykos
21.08.13
✎
12:46
|
(6) Спасибо) сделал через внешнюю обработку.
Запрос = Новый Запрос("ВЫБРАТЬ | Номенклатура.Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура"); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Объект = Результат.Ссылка.ПолучитьОбъект(); Объект.Код = "12345"; Объект.Записать(); КонецЦикла; Все получилось, заполнило в поле Код во всем справочнике "12345". Принцип понятен) А вот у меня в справочнике есть поле "Номер", которое имеет вид: 1.1.0 1.1.1 1.1.2 ... 1.1.21 и тд. И мне надо сделать так, чтобы Код равнялся Номеру, только вместо точек в Коде должны быть нули, ну и спереди нолик дописать. (пример: "1.1.21"-0101021"). Не подскажете как это сделать? |
|||
23
Wobland
21.08.13
✎
12:50
|
Лев("00000000000"+СтрЗаменить(стр, ".", "0"), НужнаяДлина)
|
|||
24
Wobland
21.08.13
✎
12:51
|
(23) прав, конечно
|
|||
25
Nykos
22.08.13
✎
10:27
|
Ребят, помогите написать обработчик, который бы проверял длину строки одного поля(Номер) и в цикле добивал нулями до нужной длины(10 символов) и помещал в другое поле(Код)?
|
|||
26
Wobland
22.08.13
✎
10:31
|
(25) посылаю тебе луч помощи
|
|||
27
hhhh
22.08.13
✎
10:35
|
(23) ну в (23) же написан этот обработчик
|
|||
28
Nykos
22.08.13
✎
10:38
|
Запрос = Новый Запрос("ВЫБРАТЬ
| Номенклатура.Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура"); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Объект = Результат.Ссылка.ПолучитьОбъект(); Объект.Код = "Лев("00000000000"+СтрЗаменить(Объект.<моя строка>, ".", "0"), <НужнаяДлина>)"; Объект.Записать(); КонецЦикла; Я так делал, когда выполняю все просто забивается нулями... |
|||
29
Wobland
22.08.13
✎
11:25
|
(28) врёшь ты всё. "Лев("00000" у тбя там должно быть
|
|||
30
Nykos
22.08.13
✎
11:47
|
Правда вру, сделал поменьше, заработало)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |