обработка

Новая тема
Показывать по 10 20 40 сообщений
"Вместо
> Спр1=СоздатьОбъект("Справочник.ОС");

Напишите
 Спр1=СоздатьОбъект("Справочник.ОсновныеСредства");
Название справочника должно соответствовать наименованию в метаданных."
"насчет групп, где посмотреть какой группе принадлежит справочник? проверять с помощью спр1.ЭтоГруппа()? В ПолучитьЭлемент() выбрано по умолчанию. Элементы в справочнике есть

На счет Ос, в программе у меня ОсновныеСредства. Тут просто в качестве примера указывал, поэтому сократил

Версия 1с 7.70.027, бухгалтерский учет для бюджетных предприятий 7.70.611

Если использовать Сообщить(спр1.реквизит); то он возвращает значения реквизита, но сам цикл делать ничего не хочет.
Может надо указать другое условие. Потому что на ПустоеЗначение() он наверное не реагирует

"
"бррр, ничего не понятно: итак
Спр1.ВыбратьЭлементы();
Пока спр1.ПолучитьЭлемент()=1 Цикл
Сообщить(спр1.реквизит1);
Сообщить(спр1.реквизит2);
....
КонецЦикла;
Метод Сообщить что-то выдаёт при исполнении?
Если нет, то у тебя в цикл не заходит программа, а это только лишь при отсутствии элементов справочника такое возможно.
На группу надо проверять так:
Спр1.ВыбратьЭлементы();
Пока спр1.ПолучитьЭлемент()=1 Цикл
Если Спр1.ЭтоГруппа()=1 тогда
 Продолжить;
КонецЕсли;
...
КонецЦикла;"
Метод Сообщить выдает значения реквизитов, но все равно ничего не происходит
"Можно ещё одним способом попробовать:
Спр=СоздатьОбъект("Справочник.ОС");
Спр1=СоздатьОбъект("Справочник.ОС");
спр1.ВыбратьЭлементы();
Пока спр1.ПолучитьЭлемент()=1 Цикл
а=спр1.реквизит1;
б=спр1.реквизит2;
если пустоезначение(а)=0 тогда
 Спр.НайтиЭлемент(Спр1.ТекущийЭлемент());
 спр.реквизит1=б;
 спр.реквизит2=а;
 спр.записать();
конецЕсли;
конецикла;
"
а какие реквизиты поменять хочешь?
> Метод Сообщить выдает значения реквизитов,
Значит в тело цикла вы все-таки заходите и спр.получитьэлемент()=1


> но все равно ничего не происходит

не происходит замена значений в реквизитах?
Ответьте на вопросы
1.Если вы просто сделаете перебор элементов справочника (без внесения изменений), то все будет выбираться?
2.Вы один раз зашли в тело цикла, сделали изменения значений и сразу вылетели из цикла.

Реквизиты обмена одного типа? Если нет, применяйте правила преобразования типа. И не периодические ли они?
"Как оказалось, загвоздка была в том, что этот справочник, принадлежал другому,я это добавил теперь вроде работает, но как-то не очень хорошо не все реквизиты меняет местами. Я добавил пару условий, на то чтобы реквизиты не совпадали, и что Длина строки первого должна быть больше длины второго, но он почемуто как-то хаотично стал менять. В некоторых случаях меняет, но в большинстве записей, если реквизиты подходят под эти условия ничиго почему то не меняет. Вот так процедура выглядит сейчас:
Процедура Сформировать()
Спис = СоздатьОбъект("СписокЗначений");
Спр  = СоздатьОбъект("Справочник.ОсновныеСредства");
Спр.ИспользоватьВладельца(ВыбФирма);
Спр.ВыбратьЭлементы();                        
   Пока Спр.ПолучитьЭлемент()=1 Цикл  
Состояние("1. " + Спр.Наименование);
  Если Спр.ПометкаУдаления()=1 Тогда
 Продолжить;
  ИначеЕсли Спр.ЭтоГруппа()=1 Тогда
 Продолжить;
  ИначеЕсли Спр.КоличественныйУчет=0 Тогда
 Продолжить;
      КонецЕсли;
      Спис.ДобавитьЗначение(Спр.ТекущийЭлемент());
КонецЦикла;

Для Д = 1 по  Спис.РазмерСписка() Цикл
ОС = Спис.ПолучитьЗначение(Д);
Состояние("2. " + ОС.Наименование);
а = ОС.Код;
     б = ОС.НомерИнвКарт;
     Если ПустоеЗначение(б) = 0 Тогда
  Если СтрДлина(а)>СтрДлина(б) Тогда
  Если а<>б Тогда
         Спр.НайтиЭлемент(ОС);
           Спр.Код = б;
           Спр.НомерИнвКарт = а;
           Спр.Записать();
       Сообщить("Обмен: " + ОС.Код + " " + ОС.Наименование+" "+ ОС.НомерИнвКарт);
           КонецЕсли;
           КонецЕсли;
       КонецЕсли;
КонецЦикла;
КонецПроцедуры
"
Порнография какая-то.. )))

А контроль уникальности как, проходит?

Например,  Если "СтрДлина(а)>СтрДлина(б)" Тогда всяко разно "а<>б"
Читают тему
(гостей: 1)

Быстрый переход