перезапись реквизита справочника
14.02.2007
07:41
#1
"Добрый день, подскажите пожалуйста, как можно обратиться к текущему элементу справчника, изменить его реквизит и записать?
Вот код обработки
Если дог=ДогАктСокр Тогда //если равно, то заменяем текущий договор (наименование) на догАкт
СпрДоговоры.ИспользоватьВладельца(СпрКонтра);
СпрДоговоры.НайтиПоНаименованию(дог,1,1);
ТекДог = СпрДоговоры.ТекущийЭлемент();
// как здесь изменить текщий элемент?
СпрДоговоры.Наименование = догАкт;
СпрДоговоры.Записать();
КонецЕсли;"
Вот код обработки
Если дог=ДогАктСокр Тогда //если равно, то заменяем текущий договор (наименование) на догАкт
СпрДоговоры.ИспользоватьВладельца(СпрКонтра);
СпрДоговоры.НайтиПоНаименованию(дог,1,1);
ТекДог = СпрДоговоры.ТекущийЭлемент();
// как здесь изменить текщий элемент?
СпрДоговоры.Наименование = догАкт;
СпрДоговоры.Записать();
КонецЕсли;"
14.02.2007
08:49
#3
"Так пробывала - не получается. Ошибка "ТекДог.Наименование = догАкт; Не выбран элемент!""
14.02.2007
10:13
#4
"Если Вы сравниваете наименование текущего реквизита дог=ДогАктСокр,
то зачем Вы потом его ищите, да еще устанавливаете Родителя.
> СпрДоговоры.НайтиПоНаименованию(дог,1,1);
>
Скажите ,что в принципе Вам нужно сделать?"
то зачем Вы потом его ищите, да еще устанавливаете Родителя.
> СпрДоговоры.НайтиПоНаименованию(дог,1,1);
>
Скажите ,что в принципе Вам нужно сделать?"
14.02.2007
10:33
#5
Мне нужно сравнить дог с ДогАктСокр и если они равны, то наименованию дог присвоить наименование ДогАктСокр
14.02.2007
12:05
#6
"> Мне нужно сравнить дог с ДогАктСокр и если они равны, то наименованию дог присвоить наименование ДогАктСокр
>
Сравнить по какому признаку? А то в Вашем случае получается, что Вы сравниваете договора по наименованию и если наименование равны, то присваваете первому второе.
Вот пример замены названия по всему справочнику , без учета владельца, поиск по не точному соотвествию наименования.
Спр=СоздатьОБъект("Справочник.Договоры");
ДогАктСокр="Основной";
Дог="Другой";
пока Спр.НайтиПонаименованию(ДогАктСокр,0,0)=1 цикл
Спр.Наименование=Дог;
Спр.Записать();
конеццикла;"
>
Сравнить по какому признаку? А то в Вашем случае получается, что Вы сравниваете договора по наименованию и если наименование равны, то присваваете первому второе.
Вот пример замены названия по всему справочнику , без учета владельца, поиск по не точному соотвествию наименования.
Спр=СоздатьОБъект("Справочник.Договоры");
ДогАктСокр="Основной";
Дог="Другой";
пока Спр.НайтиПонаименованию(ДогАктСокр,0,0)=1 цикл
Спр.Наименование=Дог;
Спр.Записать();
конеццикла;"
14.02.2007
12:14
#7
Ошиблась: присвоить наименование догАкт.
ДогАктСокр-это первых 5 символов нового договора догАкт, который берется из таблицы dbf. и если наименование старого договора (дог) равно первым 5 символам нового (ДогАктСокр), то старый (наименование) заменяем на новый (догАкт).
Сравниваю на самом деле наименование. Просто такая ситуация. Мы формируем акты и привязываем контрагента с договором (например 12345), а потом заказчик подписывает договор и присваивает через "/" свой номер (12345/67894). В результате получается что наш договор (12345) мы должны поменять на (12345/67894).
ДогАктСокр-это первых 5 символов нового договора догАкт, который берется из таблицы dbf. и если наименование старого договора (дог) равно первым 5 символам нового (ДогАктСокр), то старый (наименование) заменяем на новый (догАкт).
Сравниваю на самом деле наименование. Просто такая ситуация. Мы формируем акты и привязываем контрагента с договором (например 12345), а потом заказчик подписывает договор и присваивает через "/" свой номер (12345/67894). В результате получается что наш договор (12345) мы должны поменять на (12345/67894).
14.02.2007
12:36
#8
"ТОгда пример
Спр=СоздатьОБъект("Справочник.Договоры");
Спр.ИспользоватьВладельца(Контр);
Спр.ПорядокКодов();
// Установить порядок -это нужно если у Вас автоматически стоит порядок
//по наименованию, и тогда при замене наименовании 1С даст сообщение.
Спр.ВыбратьЭлементы(0);
// без этого не рботает ИспользоватьВладельца и сотвественно
// появляется сообщение элемент не выбран
ДогАктСокр="Основ";
Дог="Другой";
Пока спр.получитьэлемент()=1 Цикл
если Лев(Спр.Наименование,5)=ДогАктСокр тогда
Спр.Наименование=Дог;
Спр.Записать();
Конецесли;
конеццикла;
Можно попробовать через запрос. Выбрать сначала все элементы справочника, которые удовлетворяют условию,
Другое="Новое название";
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать2)
|Обрабатывать НеПомеченныеНаУдаление;
|Без итогов;
|ТекущийЭлемент = Справочник.Договоры.ТекущийЭлемент;
|Наименование = Справочник.Договоры.Наименование;
|Владелец = Справочник.Договоры.Владелец;
|Группировка ТекущийЭлемент;
|Условие(Владелец в ВыбВладелец);
|Условие(Лев(Наименование,5)=ДокАкт);
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Спр=СоздатьОБъект("Справочник.Договоры");
Пока Запрос.Группировка() = 1 Цикл
если спр.НайтиЭлемент(Запрос.ТекущийЭлемент)=1 тогда
спр.Наименование=Другое;
спр.записать();
конецесли;
КонецЦикла;
"
Спр=СоздатьОБъект("Справочник.Договоры");
Спр.ИспользоватьВладельца(Контр);
Спр.ПорядокКодов();
// Установить порядок -это нужно если у Вас автоматически стоит порядок
//по наименованию, и тогда при замене наименовании 1С даст сообщение.
Спр.ВыбратьЭлементы(0);
// без этого не рботает ИспользоватьВладельца и сотвественно
// появляется сообщение элемент не выбран
ДогАктСокр="Основ";
Дог="Другой";
Пока спр.получитьэлемент()=1 Цикл
если Лев(Спр.Наименование,5)=ДогАктСокр тогда
Спр.Наименование=Дог;
Спр.Записать();
Конецесли;
конеццикла;
Можно попробовать через запрос. Выбрать сначала все элементы справочника, которые удовлетворяют условию,
Другое="Новое название";
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать2)
|Обрабатывать НеПомеченныеНаУдаление;
|Без итогов;
|ТекущийЭлемент = Справочник.Договоры.ТекущийЭлемент;
|Наименование = Справочник.Договоры.Наименование;
|Владелец = Справочник.Договоры.Владелец;
|Группировка ТекущийЭлемент;
|Условие(Владелец в ВыбВладелец);
|Условие(Лев(Наименование,5)=ДокАкт);
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Спр=СоздатьОБъект("Справочник.Договоры");
Пока Запрос.Группировка() = 1 Цикл
если спр.НайтиЭлемент(Запрос.ТекущийЭлемент)=1 тогда
спр.Наименование=Другое;
спр.записать();
конецесли;
КонецЦикла;
"
Читают тему
(гостей: 1)