Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/155: Рейтинг темы: голосов - 155, средняя оценка - 4.65
myw2011

Перенос элемента

17.03.2010, 06:25. Показов 28584. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1С ЗиК,7.7. Хочу программно перенести сотрудника в группу.

Code
1
2
3
4
5
6
7
8
9
10
11
12
СпрСотр.ВыбратьЭлементы();
СпрСотр.НайтиПоКоду(СокрЛП("57380"),0);
тэ=СпрСотр.ТекущийЭлемент();
Пока БД.ВКонце()=0 Цикл
Код=БД.NUM;
СпрСотр.ВыбратьЭлементы();
Если СпрСотр.НайтиПоКоду(СокрЛП(Код),0)=1 Тогда
СпрСотр.ТекущийЭлемент().Родитель=тэ;
сообщить(СпрСотр.ТекущийЭлемент());
КонецЕсли;
БД.Следующая();
КонецЦикла;
Пишет "Объет не может быть перепозиционирован!"
Это вообще программно реализовывается?
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.03.2010, 06:25
Ответы с готовыми решениями:

Перенос элемента
Как в текстовом файле поменять местами первый и последний элементы(числа)? Вот что у меня получилось: #include "stdafx.h" ...

Перенос элемента в конец списка
Доброго времени суток. Задание: описать процедуру, которая переносит в конец непустого списка L его первый элемент. Скажите,...

Перенос элемента списка в другую позицию
Значит это кусок кода. Я в лист кидаю элементы массива. "С" - это минимальный элемент. Находим его в списке и переносим в начало списка....

22
0 / 0 / 0
Регистрация: 14.09.2007
Сообщений: 428
17.03.2010, 09:05
Code
1
2
3
4
5
6
7
8
9
10
11
12
СпрСотр.НайтиПоКоду(СокрЛП("57380"),0);
ГруппаРодитель=СпрСотр.ТекущийЭлемент();
Пока БД.ВКонце()=0 Цикл
Код=БД.NUM;
Если СпрСотр.НайтиПоКоду(СокрЛП(Код),0)=1 Тогда
ЭлементНаПеренос=СпрСотр.ТекущийЭлемент();
ЭлементНаПеренос.Родитель=ГруппаРодитель;
ЭлементНаПеренос.Записать();
Сообщить(ЭлементНаПеренос.Родитель);
КонецЕсли;
БД.Следующая();
КонецЦикла;
0
1 / 1 / 0
Регистрация: 24.07.2008
Сообщений: 658
17.03.2010, 09:08
New2011,
1. Не вижу где написано СпрСотр.Записать()

2. В отладчике смотрели чему равно тэ если остановиться на строке
СпрСотр.ТекущийЭлемент().Родитель=тэ;
?

3. И еще мелочь, но все же: зачем использовать СокрЛП, если написана в кавычках конкретная строка?
0
0 / 0 / 0
Регистрация: 14.09.2007
Сообщений: 428
17.03.2010, 09:26
:gifts:
0
myw2011
17.03.2010, 11:04
Цитата Сообщение от Bap

Code
1
2
3
4
5
6
7
8
9
10
11
12
СпрСотр.НайтиПоКоду(СокрЛП("57380"),0);
ГруппаРодитель=СпрСотр.ТекущийЭлемент();
Пока БД.ВКонце()=0 Цикл
Код=БД.NUM;
Если СпрСотр.НайтиПоКоду(СокрЛП(Код),0)=1 Тогда
ЭлементНаПеренос=СпрСотр.ТекущийЭлемент();
ЭлементНаПеренос.Родитель=ГруппаРодитель;
ЭлементНаПеренос.Записать();
Сообщить(ЭлементНаПеренос.Родитель);
КонецЕсли;
БД.Следующая();
КонецЦикла;
Исправлено,ошибка осталась.

Code
1
2
3
4
5
6
7
8
9
10
11
12
СпрСотр.НайтиПоКоду("57380",0);
ГруппаРодитель=СпрСотр.ТекущийЭлемент();
Пока БД.ВКонце()=0 Цикл
Код=БД.NUM;
Если СпрСотр.НайтиПоКоду(СокрЛП(Код),0)=1 Тогда
ЭлементПеренос=СпрСотр.ТекущийЭлемент();
ЭлементПеренос.Родитель=ГруппаРодитель;
ЭлементПеренос.Записать();
Сообщить(ЭлементПеренос.Родитель);
КонецЕсли;
БД.Следующая();
КонецЦикла;
Добавлено:


Цитата Сообщение от Hryv
New2011,
1. Не вижу где написано СпрСотр.Записать()

2. В отладчике смотрели чему равно тэ если остановиться на строке
СпрСотр.ТекущийЭлемент().Родитель=тэ;
?

3. И еще мелочь, но все же: зачем использовать СокрЛП, если написана в кавычках конкретная строка?
1. исправлено
2. да все верно тэ-именно та группа, в которую нужно перенести элемент.
3.исправлено
0 / 0 / 0
Регистрация: 07.07.2008
Сообщений: 1,401
17.03.2010, 11:05
А справочник сотрудники не подчиненный случаем? Если так то может произойти ситуация когда у группы один владелец, а у элементов другой - здрасвуй ошибочка!

Вариант номер два - а какой тип значения поле num в БД? Есжли он число, то сокрлп его превратит в строку, а искать число по строке не выйдет - надо привести типы к одному.
0
1 / 1 / 0
Регистрация: 24.07.2008
Сообщений: 658
17.03.2010, 11:11
Цитата Сообщение от puh14
А справочник сотрудники не подчиненный случаем? Если так то может произойти ситуация когда у группы один владелец, а у элементов другой - здрасвуй ошибочка!

Вариант номер два - а какой тип значения поле num в БД? Есжли он число, то сокрлп его превратит в строку, а искать число по строке не выйдет - надо привести типы к одному.
Второй вариант врядли. Если работает
СпрСотр.НайтиПоКоду(СокрЛП("57380"),0);
то и
СпрСотр.НайтиПоКоду(СокрЛП(Код),0)
должно работать

Тем более оно стоит в условии "Если", то есть если не найдет то и родителя менять не будет
0
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
17.03.2010, 11:36
А так ? ВыбратьЭлементы - совсем лишнее, но, вроде, не мешает

СпрСотр.НайтиПоКоду(СокрЛП("57380"),0);
тэ=СпрСотр.ТекущийЭлемент();
Пока БД.ВКонце()=0 Цикл
Код=БД.NUM;
Если СпрСотр.НайтиПоКоду(СокрЛП(Код),0)=1 Тогда
СпрСотр.Родитель=тэ;
сообщить(СпрСотр.ТекущийЭлемент());
СпрСотр.Записать()
КонецЕсли;
БД.Следующая();
КонецЦикла;
0
myw2011
17.03.2010, 11:44
Цитата Сообщение от puh14
А справочник сотрудники не подчиненный случаем? Если так то может произойти ситуация когда у группы один владелец, а у элементов другой - здрасвуй ошибочка!

Вариант номер два - а какой тип значения поле num в БД? Есжли он число, то сокрлп его превратит в строку, а искать число по строке не выйдет - надо привести типы к одному.
справочник неподчинен,типы в соответствии текст=текст
0 / 0 / 0
Регистрация: 07.07.2008
Сообщений: 1,401
17.03.2010, 12:10
СпГр = СоздатьОбъект("Справочник.Сотрудники");
СпГр.НайтиПоКоду("57380",0);
Пока БД.ВКонце()=0 Цикл
Код=БД.NUM;
Если СпрСотр.НайтиПоКоду(СокрЛП(Код),0)=1 Тогда
СпрСотр.Родитель=СпГр.ТекущийЭлемент();
СпрСотр.Записать();
Сообщить(СпрСотр.Родитель);
КонецЕсли;
БД.Следующая();
КонецЦикла;

У меня так работает - родитель один объект, элементы - второй.
0
myw2011
17.03.2010, 12:15
Цитата Сообщение от New2011
справочник неподчинен,типы в соответствии текст=текст
вот придумала

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
СпрСотр.НайтиПоКоду("57380",0);
ГруппаРодитель=СпрСотр.ТекущийЭлемент();
Пока БД.ВКонце()=0 Цикл
Код=БД.NUM;
СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
Если СпрСотр.Код=СокрЛП(Код) Тогда
СпрСотр.Родитель= ГруппаРодитель;
//ЭлементПеренос=СпрСотр.ТекущийЭлемент();
//ЭлементПеренос.Родитель=ГруппаРодитель;
СпрСотр.Записать();
//сообщить(ЭлементПеренос.Родитель);
КонецЕсли;
КонецЦикла;
БД.Следующая();
КонецЦикла;
работает все. :gifts:
1 / 1 / 0
Регистрация: 24.07.2008
Сообщений: 658
17.03.2010, 12:17
Цитата Сообщение от puh14
У меня так работает - родитель один объект, элементы - второй
Не возьмусь подвести теоретическую базу, но лично я чисто интуитивно сразу бы так делал

Добавлено:


Цитата Сообщение от New2011
работает все.
по быстродействию, думаю, не лучший вариант
хотя, если не критично...
0
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
17.03.2010, 12:43
А то, что я привел час назад никто не попробовал проверить ?
Думаю, основная загвоздка в том, что
СпрСотр.ТекущийЭлемент().Родитель=тэ; надо заменить на СпрСотр.Родитель=тэ;
Желающие могут посмотреть аналогичный код в обработке "ГрупповаяОбработкаНоменклатуры" в ТиС, например
Перебирать элементы - это кошмар, хоть и работает :gifts:
0
1 / 1 / 0
Регистрация: 24.07.2008
Сообщений: 658
17.03.2010, 12:53
Цитата Сообщение от vbs
Думаю, основная загвоздка в том, что
СпрСотр.ТекущийЭлемент().Родитель=тэ; надо заменить на СпрСотр.Родитель=тэ;
Это, кстати, и использовано при переборе :gifts:
0
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
17.03.2010, 13:50
Так перебирать-то не надо !
Нашли элемент - поменяли родителя, вот и все
0
1 / 1 / 0
Регистрация: 24.07.2008
Сообщений: 658
17.03.2010, 13:55
Я это и имел ввиду: вариант с перебором заработал скорее всего не из-за перебора, а потому что используется СпрСотр.Родитель= ГруппаРодитель;
0
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
17.03.2010, 14:02
Ну да, девушка поправила ошибку, а потом изобрела перебор :gifts:

Хорошо хоть справочник у нее не сумасшедшего размера, а было бы там 30-40 тысяч позиций ? :(
0
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 1,399
20.03.2010, 15:28
А если так?


А так ? ВыбратьЭлементы - совсем лишнее, но, вроде, не мешает

СпрСотр.НайтиПоКоду(СокрЛП("57380"),0);
тэ=СпрСотр.ТекущийЭлемент();
Пока БД.ВКонце()=0 Цикл
Код=БД.NUM;
Если СпрСотр.НайтиПоКоду(СокрЛП(Код),0)=1 Тогда
Спр = СоздатьОбъект("Справочник.Сотрудники");
Спр.НайтиЭлемент(СпрСотр);
Спр.Родитель=Родитель.текущийЭлемент();
сообщить(Спр.ТекущийЭлемент());
Спр.Записать()
КонецЕсли;
БД.Следующая();
КонецЦикла;
0
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
20.03.2010, 15:33
А где здесь улучшение ? Или оптимизация ?

СпрСотр.НайтиПоКоду(СокрЛП("57380"),0);
тэ=СпрСотр.ТекущийЭлемент();
Пока БД.ВКонце()=0 Цикл
Код=БД.NUM;
Если СпрСотр.НайтиПоКоду(СокрЛП(Код),0)=1 Тогда
СпрСотр.Родитель=тэ;
сообщить(Спр.ТекущийЭлемент());
Спр.Записать()
КонецЕсли;
БД.Следующая();
КонецЦикла;

и короче, и экономичнее
0
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 1,399
20.03.2010, 15:34
Если работает, то да.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.03.2010, 15:34
Помогаю со студенческими работами здесь

Перенос последнего элемента списка в начало
помогите с задачей данного типа: Написать программу переноса в начало списка его последнего элемента. программа должна работать так : ...

Перенос значения элемента строкового массива
Нужно заполнить двумерный массив символами. Мой код выглядит так: k=n=0; for(i=int('а'); i<int('я'); i++) {k=n++; ...

Перенос элемента Listboxa в статический элемент
Товарищи, начал осваивать WinApi но натолкнулся на непонятку. Необходимо из выделенный в листбоксе элемент при двойном щелчке копировался...

Перенос максимального элемента в последнюю позицию строки
В каждой строке прямоугольной матрицы перенести максимальный элемент в последнюю позицию строки, сдвинув при этом влево расположенные после...

Перенос элемента при изменении размеров окна
Все доброго времени суток. На работе дали задание, и если не в даваться в подробности, то оно следующее: на форме есть изображение области,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru