Имя: Пароль:
1C
Админ
Справочники
,
0 st31
 
05.10.11
07:00
Что-то зациклился, не пойму почему ругается. Информация по элементам справочника (в т.ч. и с периодическими)занесена в ТаблицуЗначений. теперь из ТЗ надо информацию обновить в справочнике ОС. Написал следующий код (с сокращениями):
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
Если СпрОС.НайтиЭлемент(ТЗ.ОС)=1 Тогда            
Спр=СпрОС.ТекущийЭлемент();      
Сообщить("Заполняем элементы справочника "+Спр.Наименование+" с кодом:"+Спр.Код);
Спр.ИспользоватьДату(ДатаКон);
Если ПустоеЗначение(ТЗ.Группа)=0 тогда
Спр.Группа=ТЗ.Группа;
КонецЕсли;
...
Спр.Записать();

И тут выскакивает непонятное сообщение и обработка прерывается:
Спр.Записать();
{M:\.....(465)}: Не выбран элемент!
В отладчике смотрел Спр=СпрОС.ТекущийЭлемент(); Спр выбран как элемент справочника.
1 ДенисЧ
 
05.10.11
07:02
НайтиЭлемент() используй
2 chelentano
 
05.10.11
07:03
(0) раболтай с СпрОС, а не с Спр
3 chelentano
 
05.10.11
07:04
+(2) убрать Спр=СпрОС.ТекущийЭлемент(); ниже Спр заменить на СпрОС
4 st31
 
05.10.11
07:06
(2)Методологически непонятно почему не работает. Я перепозиционировался на новый элемент справочника, который должен отработать или я что-то не понял?
5 chelentano
 
05.10.11
07:07
(4) ты работаешь с ссылкой, а надо работать с объектом
6 DJ Anthon
 
05.10.11
07:08
(4) это не снеговик ))
7 st31
 
05.10.11
07:09
(5)а вариант выбора элемента справочника из ТЗ.ОС пройдет?
ТЗ.НоваяКолонка("ОС","Справочник.ОсновныеСредства");
8 st31
 
05.10.11
07:11
т.е.всеюду всесто Спр  и СпрОС поставить ТЗ.ОС и далее заполнение элементов, в т.ч. и периодических?
9 chelentano
 
05.10.11
07:19
(8) мля...
вкратце:
СпрОС = СоздатьОбъект("Справочник.ОсновныеСредства);
СпрОС.НайтиЭлемент(ТЗ.ОС);
СпрОС.ИспользоватьДату(ДатаКон);
СпрОС.Группа=ТЗ.Группа;
СпрОС.Записать();
10 st31
 
05.10.11
07:26
(9) Так я и поступил. Элемент справочника вроде записался (обаботка прошла полностью).
Когда просматриваю историю записей периодических реквизитов - записей на заданную дату нет.
В свойствах реквизитов всюду стоят флажки:
-периодический
-изменяетсяДокументами
-ручноеИзменение
?
11 chelentano
 
05.10.11
07:27
(10) а я хз как ты там периодические реквизиты записываешь
12 st31
 
05.10.11
07:30
Выбрал СпрОС.ИспользоватьДату(ДатаКон);
и присваиваю все значения независимо они периодические или нет.
СпрОС = СоздатьОбъект("Справочник.ОсновныеСредства"); задавал раньше. теперь его вставил в цикл. Пока идет обработка, результаты пока не видны.
13 chelentano
 
05.10.11
07:31
(12) я сейчас точно не помню, но, по-моему, ИспользоватьДату только для получения значений периодических реквизитов
14 st31
 
05.10.11
07:34
Выдержка из учебника:
//можно установить дату выборки периодических
//реквизитов для всего справочника
СпрСотр.ИспользоватьДату(НекаяДата);

//тогда ниже уже нельзя использовать Установить и Получить
//доступ к периодическим реквизитам становится
//такой же, как к обычным реквизитам
Катег = СпрСотр.Категория;
СпрСотр.Оклад = 6000;
15 Chum
 
05.10.11
07:38
(12) за создание объектов в цикле в случае. когда не требуются разные объекты - пожизненных эцих с гвоздями.

СпрОС = СоздатьОбъект("Справочник.ОсновныеСредства);
СпрОС.ИспользоватьДату(ДатаКон, 1);

ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
Если ПустоеЗначение(ТЗ.Группа)=0 тогда
СпрОС.НайтиЭлемент(ТЗ.ОС);
СпрОС.Группа=ТЗ.Группа;
СпрОС.Записать();
КонецЕсли;
КонецЦикла;
-----

СпрОС = СоздатьОбъект("Справочник.ОсновныеСредства);

ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
Если ПустоеЗначение(ТЗ.Группа) = 0 тогда
СпрОС.НайтиЭлемент(ТЗ.ОС);
СпрОС.Группа.Установить(ДатаКон,ТЗ.Группа);
//СпрОС.Записать(); // не требуется для существующих элементов
КонецЕсли;
КонецЦикла;
16 st31
 
05.10.11
07:39
(13) обработка завершена. вставил
СпрОС = СоздатьОбъект("Справочник.ОсновныеСредства); периодические реквизиты заполнились.
Благодарю всех :)
17 st31
 
05.10.11
07:43
(15) В своей обработке я пытался уйти от .Установить(), чтобы на каждом элементе не заморачиваться: периодический он или нет
18 Chum
 
05.10.11
07:46
(17) а определить признак "периодический" через метаданные не?
19 st31
 
05.10.11
07:50
(18) Не пробывал. Воспользовался (14)- вроде прошло :)
20 Chum
 
05.10.11
07:51
(19) более правильно: СпрОС.ИспользоватьДату(ДатаКон, 1);

1 - признак "установить сразу"
2 + 2 = 3.9999999999999999999999999999999...