обработка
15.10.2007
13:20
#11
"Вместо
> Спр1=СоздатьОбъект("Справочник.ОС");
Напишите
Спр1=СоздатьОбъект("Справочник.ОсновныеСредства");
Название справочника должно соответствовать наименованию в метаданных."
> Спр1=СоздатьОбъект("Справочник.ОС");
Напишите
Спр1=СоздатьОбъект("Справочник.ОсновныеСредства");
Название справочника должно соответствовать наименованию в метаданных."
15.10.2007
16:55
#12
"насчет групп, где посмотреть какой группе принадлежит справочник? проверять с помощью спр1.ЭтоГруппа()? В ПолучитьЭлемент() выбрано по умолчанию. Элементы в справочнике есть
На счет Ос, в программе у меня ОсновныеСредства. Тут просто в качестве примера указывал, поэтому сократил
Версия 1с 7.70.027, бухгалтерский учет для бюджетных предприятий 7.70.611
Если использовать Сообщить(спр1.реквизит); то он возвращает значения реквизита, но сам цикл делать ничего не хочет.
Может надо указать другое условие. Потому что на ПустоеЗначение() он наверное не реагирует
"
На счет Ос, в программе у меня ОсновныеСредства. Тут просто в качестве примера указывал, поэтому сократил
Версия 1с 7.70.027, бухгалтерский учет для бюджетных предприятий 7.70.611
Если использовать Сообщить(спр1.реквизит); то он возвращает значения реквизита, но сам цикл делать ничего не хочет.
Может надо указать другое условие. Потому что на ПустоеЗначение() он наверное не реагирует
"
16.10.2007
15:06
#13
"бррр, ничего не понятно: итак
Спр1.ВыбратьЭлементы();
Пока спр1.ПолучитьЭлемент()=1 Цикл
Сообщить(спр1.реквизит1);
Сообщить(спр1.реквизит2);
....
КонецЦикла;
Метод Сообщить что-то выдаёт при исполнении?
Если нет, то у тебя в цикл не заходит программа, а это только лишь при отсутствии элементов справочника такое возможно.
На группу надо проверять так:
Спр1.ВыбратьЭлементы();
Пока спр1.ПолучитьЭлемент()=1 Цикл
Если Спр1.ЭтоГруппа()=1 тогда
Продолжить;
КонецЕсли;
...
КонецЦикла;"
Спр1.ВыбратьЭлементы();
Пока спр1.ПолучитьЭлемент()=1 Цикл
Сообщить(спр1.реквизит1);
Сообщить(спр1.реквизит2);
....
КонецЦикла;
Метод Сообщить что-то выдаёт при исполнении?
Если нет, то у тебя в цикл не заходит программа, а это только лишь при отсутствии элементов справочника такое возможно.
На группу надо проверять так:
Спр1.ВыбратьЭлементы();
Пока спр1.ПолучитьЭлемент()=1 Цикл
Если Спр1.ЭтоГруппа()=1 тогда
Продолжить;
КонецЕсли;
...
КонецЦикла;"
17.10.2007
08:31
#15
"Можно ещё одним способом попробовать:
Спр=СоздатьОбъект("Справочник.ОС");
Спр1=СоздатьОбъект("Справочник.ОС");
спр1.ВыбратьЭлементы();
Пока спр1.ПолучитьЭлемент()=1 Цикл
а=спр1.реквизит1;
б=спр1.реквизит2;
если пустоезначение(а)=0 тогда
Спр.НайтиЭлемент(Спр1.ТекущийЭлемент());
спр.реквизит1=б;
спр.реквизит2=а;
спр.записать();
конецЕсли;
конецикла;
"
Спр=СоздатьОбъект("Справочник.ОС");
Спр1=СоздатьОбъект("Справочник.ОС");
спр1.ВыбратьЭлементы();
Пока спр1.ПолучитьЭлемент()=1 Цикл
а=спр1.реквизит1;
б=спр1.реквизит2;
если пустоезначение(а)=0 тогда
Спр.НайтиЭлемент(Спр1.ТекущийЭлемент());
спр.реквизит1=б;
спр.реквизит2=а;
спр.записать();
конецЕсли;
конецикла;
"
17.10.2007
09:56
#17
> Метод Сообщить выдает значения реквизитов,
Значит в тело цикла вы все-таки заходите и спр.получитьэлемент()=1
> но все равно ничего не происходит
не происходит замена значений в реквизитах?
Ответьте на вопросы
1.Если вы просто сделаете перебор элементов справочника (без внесения изменений), то все будет выбираться?
2.Вы один раз зашли в тело цикла, сделали изменения значений и сразу вылетели из цикла.
Значит в тело цикла вы все-таки заходите и спр.получитьэлемент()=1
> но все равно ничего не происходит
не происходит замена значений в реквизитах?
Ответьте на вопросы
1.Если вы просто сделаете перебор элементов справочника (без внесения изменений), то все будет выбираться?
2.Вы один раз зашли в тело цикла, сделали изменения значений и сразу вылетели из цикла.
18.10.2007
08:44
#18
Реквизиты обмена одного типа? Если нет, применяйте правила преобразования типа. И не периодические ли они?
19.10.2007
05:25
#19
"Как оказалось, загвоздка была в том, что этот справочник, принадлежал другому,я это добавил теперь вроде работает, но как-то не очень хорошо не все реквизиты меняет местами. Я добавил пару условий, на то чтобы реквизиты не совпадали, и что Длина строки первого должна быть больше длины второго, но он почемуто как-то хаотично стал менять. В некоторых случаях меняет, но в большинстве записей, если реквизиты подходят под эти условия ничиго почему то не меняет. Вот так процедура выглядит сейчас:
Процедура Сформировать()
Спис = СоздатьОбъект("СписокЗначений");
Спр = СоздатьОбъект("Справочник.ОсновныеСредства");
Спр.ИспользоватьВладельца(ВыбФирма);
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
Состояние("1. " + Спр.Наименование);
Если Спр.ПометкаУдаления()=1 Тогда
Продолжить;
ИначеЕсли Спр.ЭтоГруппа()=1 Тогда
Продолжить;
ИначеЕсли Спр.КоличественныйУчет=0 Тогда
Продолжить;
КонецЕсли;
Спис.ДобавитьЗначение(Спр.ТекущийЭлемент());
КонецЦикла;
Для Д = 1 по Спис.РазмерСписка() Цикл
ОС = Спис.ПолучитьЗначение(Д);
Состояние("2. " + ОС.Наименование);
а = ОС.Код;
б = ОС.НомерИнвКарт;
Если ПустоеЗначение(б) = 0 Тогда
Если СтрДлина(а)>СтрДлина(б) Тогда
Если а<>б Тогда
Спр.НайтиЭлемент(ОС);
Спр.Код = б;
Спр.НомерИнвКарт = а;
Спр.Записать();
Сообщить("Обмен: " + ОС.Код + " " + ОС.Наименование+" "+ ОС.НомерИнвКарт);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
"
Процедура Сформировать()
Спис = СоздатьОбъект("СписокЗначений");
Спр = СоздатьОбъект("Справочник.ОсновныеСредства");
Спр.ИспользоватьВладельца(ВыбФирма);
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
Состояние("1. " + Спр.Наименование);
Если Спр.ПометкаУдаления()=1 Тогда
Продолжить;
ИначеЕсли Спр.ЭтоГруппа()=1 Тогда
Продолжить;
ИначеЕсли Спр.КоличественныйУчет=0 Тогда
Продолжить;
КонецЕсли;
Спис.ДобавитьЗначение(Спр.ТекущийЭлемент());
КонецЦикла;
Для Д = 1 по Спис.РазмерСписка() Цикл
ОС = Спис.ПолучитьЗначение(Д);
Состояние("2. " + ОС.Наименование);
а = ОС.Код;
б = ОС.НомерИнвКарт;
Если ПустоеЗначение(б) = 0 Тогда
Если СтрДлина(а)>СтрДлина(б) Тогда
Если а<>б Тогда
Спр.НайтиЭлемент(ОС);
Спр.Код = б;
Спр.НомерИнвКарт = а;
Спр.Записать();
Сообщить("Обмен: " + ОС.Код + " " + ОС.Наименование+" "+ ОС.НомерИнвКарт);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
"
Читают тему
(гостей: 1)