Имя: Пароль:
1C
1С v8
Цикл съедает всю память и все зависает. Как оптимизировать?
0 vmprog
 
16.11.12
17:19
Задача. Подкрутить стандартную обработку "Поиск и замена дублирующихся элементов", чтобы после заполнения найденных ссылок галки были только на объектах отобранных по условию.
Делаю так:
[code]
Процедура КоманднаяПанельЗаменяемыеЗначенияНайтиСсылки(Кнопка)
   МассивЗаменяемых = Новый Массив;
   Для каждого Стр Из ЗаменяемыеЗначения Цикл
       Если Стр.Пометка Тогда
           МассивЗаменяемых.Добавить(Стр.ЧтоЗаменять);
       КонецЕсли;
   КонецЦикла;
   Если МассивЗаменяемых.Количество() = 0 Тогда
       Предупреждение("Не выбрано ни одного значения для поиска!");
       Возврат;
   КонецЕсли;
   НайденныеСсылки = НайтиПоСсылкам(МассивЗаменяемых);
   НайденныеСсылки.Колонки[0].Имя = "Ссылка";
   НайденныеСсылки.Колонки[1].Имя = "Данные";
   НайденныеСсылки.Колонки[2].Имя = "Метаданные";
   НайденныеСсылки.Колонки.Добавить("Включено", вОписаниеТипа("Булево"));
 КоманднаяПанельНайденныеСсылкиВключитьВсе("");
   
   //--Мой кусок    
   Для каждого СтрТ из НайденныеСсылки цикл
       Если ТипЗнч(СтрТ.Данные) = Тип("ДокументСсылка.Обращение") и СтрТ.Данные.Дата < Дата(2012,11,01) тогда
           СтрТ.Включено = ложь;    
       ИначеЕсли ТипЗнч(СтрТ.Данные) = Тип("СправочникСсылка.Клиенты") и СтрТ.Данные.ДатаПервогоОбращения < Дата(2012,11,01) тогда
           СтрТ.Включено = ложь;    
       КонецЕсли;
   КонецЦикла;
   //--Мой кусок    
КонецПроцедуры
[/code]
1 Утконос
 
16.11.12
17:20
учи  запросы
2 vmprog
 
16.11.12
17:24
(1) тогда подскажите как в МенеджерВременныхТаблиц засунуть ТЗ с колонкой разных типов?
3 Maxus43
 
16.11.12
17:26
(2) всмысле с разными? составной тип поддерживает
4 5 Элемент
 
16.11.12
17:28
Нужно обязательно указать их тип
5 Maxus43
 
16.11.12
17:28
что такое "ЗаменяемыеЗначения"?
6 vmprog
 
16.11.12
17:29
НайденныеСсылки = НайтиПоСсылкам(МассивЗаменяемых);
Наполняет таблицу нестабильной кучей разных типов.
7 Maxus43
 
16.11.12
17:30
(6) она типизированная же. её в запрос подсунуть никак чтоль?
8 vmprog
 
16.11.12
17:31
(5) таблица ссылок элементов которые надо заменить друг на друга. Это кусок стандартной обработки "Поиск и замена дублирующихся элементов"
9 Maxus43
 
16.11.12
17:32
(7) + удалив 3-ю колонку
10 vmprog
 
16.11.12
17:33
Пытался так:
РезультатТЗ = новый ТаблицаЗначений;
Для Каждого Колонка из НайденныеСсылки.Колонки Цикл
   Имя = Колонка.Имя;
   МассивТипов = новый Массив(1);
   МассивТипов[0] = ТипЗнч(НайденныеСсылки[0][Имя]);
   Описатель = новый ОписаниеТипов(МассивТипов);
   РезультатТЗ.Колонки.Добавить(Имя, Описатель);
КонецЦикла;
Для каждого Строка из НайденныеСсылки Цикл
СтрокаРез = РезультатТЗ.Добавить();
   ЗаполнитьЗначенияСвойств(СтрокаРез, Строка);
КонецЦикла;
НайденныеСсылки = РезультатТЗ.Скопировать();
       
Загружаем таблицу значений в менеджер временных таблиц запроса
Запрос=Новый Запрос("Выбрать Т.Ссылка, Т.Данные, Т.Метаданные, Т.Включено  ПОМЕСТИТЬ ВТТаб Из &Таб Как Т");
Запрос=Новый Запрос("Выбрать * ПОМЕСТИТЬ ВТТаб Из &Таб Как Т");
Запрос.МенеджерВременныхТаблиц=Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Таб",НайденныеСсылки);
Запрос.Выполнить();
11 Maxus43
 
16.11.12
17:34
ТЗ_В_ЗАПРОС = НайденныеСсылки.Скопировать("Ссылка, Данные");
и далее
12 Aprobator
 
16.11.12
17:38
(10) это типа шутка такая?

...
Запрос=Новый Запрос("Выбрать Т.Ссылка, Т.Данные, Т.Метаданные, Т.Включено  ПОМЕСТИТЬ ВТТаб Из &Таб Как Т");
Запрос=Новый Запрос("Выбрать * ПОМЕСТИТЬ ВТТаб Из &Таб Как Т");
Запрос.МенеджерВременныхТаблиц=Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Таб",НайденныеСсылки);
Запрос.Выполнить();
...
13 Maxus43
 
16.11.12
17:39
(12) :)
14 vmprog
 
16.11.12
17:45
(12)
{Форма.Форма.Форма(597)}: Ошибка при вызове метода контекста (Выполнить)
   Запрос.Выполнить();
по причине:
{(1, 30)}: Тип не может быть выбран в запросе
Выбрать * ПОМЕСТИТЬ ВТТаб Из <<?>>&Таб Как Т
15 Aprobator
 
16.11.12
17:57
колонку метаданные во входящей таблице переименовать попробуй.
16 Aprobator
 
16.11.12
18:01
была похожая шняга когда набор записей регистра накопления выгружал в ТЗ и потом в запрос пытался отдать. Только там трабла была из за колонки моментвремени.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой