Имя: Пароль:
1C
1С v8
Поиск соответствий по строкам таблицы
0 Boudybuilder
 
28.03.12
01:32
Для Каждого ТС Из ТаблВыставленияСоответствия Цикл
       ТС.Номенклатура = "";
       ТС.ХарактеристикаНоменклатуры = "";
       Запрос = Новый Запрос;
       Запрос.Текст = "ВЫБРАТЬ
              |    НоменклатураКонтрагентов.Контрагент,
              |    НоменклатураКонтрагентов.Номенклатура,
              |    НоменклатураКонтрагентов.ХарактеристикаНоменклатуры,
              |    НоменклатураКонтрагентов.КодНоменклатурыКонтрагента,
              |    НоменклатураКонтрагентов.АртикулНоменклатурыКонтрагента,
              |    НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента,
              |    НоменклатураКонтрагентов.ШтрихКодНоменклатурыКонтрагента,
              |    НоменклатураКонтрагентов.ЕдиницаНоменклатурыКонтрагента
              |ИЗ
              |    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
              |ГДЕ
              |    НоменклатураКонтрагентов.Контрагент = &Контрагент
              |    И НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента ПОДОБНО &НаименованиеНоменклатурыКонтрагента";
              Запрос.УстановитьПараметр("Контрагент",Контрагент);
              Запрос.УстановитьПараметр("НаименованиеНоменклатурыКонтрагента" , ТС.ХарактеристикаНоменклатурыСтрока);
              РезЗап = Запрос.Выполнить();
              Выб = РезЗап.Выбрать();
              Пока Выб.Следующий() Цикл
                  ТС.Номенклатура = Выб.Номенклатура;
                  ТС.ХарактеристикаНоменклатуры = Выб.ХарактеристикаНоменклатуры;
       КонецЦикла;
   КонецЦикла;
1 Boudybuilder
 
28.03.12
01:32
Сделал так , но запрос в цыкле - это глупость наверное.
Как сделать чтоб не в цыкле ?
Выгрузить в массив или ТаблицуЗначений?
2 Boudybuilder
 
28.03.12
01:33
Можете показать пример?
3 ptrtss
 
28.03.12
06:10
Запрос такой:

"ВЫБРАТЬ
|    т.НомерСтроки,
|    т.ХарактеристикаНоменклатурыСтрока
|ПОМЕСТИТЬ вт
|ИЗ
|    &т КАК т
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    вт.НомерСтроки КАК НомерСтроки,
|    НоменклатураКонтрагентов.Номенклатура КАК Номенклатура,
|    НоменклатураКонтрагентов.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
|ИЗ
|    вт КАК вт
|        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
|        ПО (вт.ХарактеристикаНоменклатурыСтрока ПОДОБНО НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента)
|ИТОГИ ПО
|    НомерСтроки"

При обходе ищем строку таблицы по индексу, и из группировки итогов второго уровня берем первую строчку, забираем номенклатуру с характеристикой из нее
4 Boudybuilder
 
28.03.12
10:53
(3) Смотрю как баран на новые ворота...
Ничего не понимаю.
Что за т.НомерСтроки , Что за вт.НомерСтроки?
5 Boudybuilder
 
31.03.12
01:32
Кто подскажет поподробнее
6 Boudybuilder
 
31.03.12
02:02
Запрос = Новый Запрос;
       Запрос.Текст = "ВЫБРАТЬ
              |    НоменклатураКонтрагентов.Контрагент,
              |    НоменклатураКонтрагентов.Номенклатура,
              |    НоменклатураКонтрагентов.ХарактеристикаНоменклатуры,
              |    НоменклатураКонтрагентов.КодНоменклатурыКонтрагента,
              |    НоменклатураКонтрагентов.АртикулНоменклатурыКонтрагента,
              |    НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента,
              |    НоменклатураКонтрагентов.ШтрихКодНоменклатурыКонтрагента,
              |    НоменклатураКонтрагентов.ЕдиницаНоменклатурыКонтрагента
              |ИЗ
              |    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
              |ГДЕ
              |    НоменклатураКонтрагентов.Контрагент = &Контрагент";
              Запрос.УстановитьПараметр("Контрагент",Контрагент);
              РезЗап = Запрос.Выполнить();
              Выб = РезЗап.Выбрать();
              Ном   = Выб.Номенклатура;
              ХарНом = Выб.ХарактеристикаНоменклатуры;
              Для Каждого ТС Из СписокНоменклатуры Цикл
                  ТС.Номенклатура = "";
                  ТС.ХарактеристикаНоменклатуры = "";
                  Если Строка(Выб.НаименованиеНоменклатурыКонтрагента) = Строка(ТС.НаименованиеНоменклатурыКонтрагента) Тогда
                      ТС.Номенклатура               = Выб.Номенклатура;
                      ТС.ХарактеристикаНоменклатуры = Выб.ХарактеристикаНоменклатуры;
                  КонецЕсли;
              КонецЦикла;
7 Boudybuilder
 
31.03.12
02:02
(6)
Так правильно?
8 Boudybuilder
 
31.03.12
02:05
Так почему то вобще ничего не возвращает... :(
9 echo77
 
31.03.12
08:00
(4) Используется описание временной таблицы. Временная таблица передается в запрос как переметр с именем "т", в таблице две колонки:
-НомерСтроки
-ХарактеристикаНоменклатурыСтрока
10 Boudybuilder
 
31.03.12
10:52
Извените , но во впременных таблицах я еще пока не соображаю.

Вобщем покажите пожалуйста конкретно на моем примере если не жалко минутки вашего времени. Ведь мне то еще париться и париться...
А запос в цыкле на 25 000 строк работает 2,5 минуты... :(
Прискорбно.

Тут еще раз показываю как работает мой запрос с отбором по тек строке в цикле.

Для Каждого ТС Из ТаблВыставленияСоответствия Цикл
       ТС.Номенклатура = "";
       ТС.ХарактеристикаНоменклатуры = "";
       Запрос = Новый Запрос;
       Запрос.Текст = "ВЫБРАТЬ
              |    НоменклатураКонтрагентов.Контрагент,
              |    НоменклатураКонтрагентов.Номенклатура,
              |    НоменклатураКонтрагентов.ХарактеристикаНоменклатуры,
              |    НоменклатураКонтрагентов.КодНоменклатурыКонтрагента,
              |    НоменклатураКонтрагентов.АртикулНоменклатурыКонтрагента,
              |    НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента,
              |    НоменклатураКонтрагентов.ШтрихКодНоменклатурыКонтрагента,
              |    НоменклатураКонтрагентов.ЕдиницаНоменклатурыКонтрагента
              |ИЗ
              |    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
              |ГДЕ
              |    НоменклатураКонтрагентов.Контрагент = &Контрагент
              |    И НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента ПОДОБНО &НаименованиеНоменклатурыКонтрагента";
              Запрос.УстановитьПараметр("Контрагент",Контрагент);
              Запрос.УстановитьПараметр("НаименованиеНоменклатурыКонтрагента" , ТС.НаименованиеНоменклатурыКонтрагента);
              РезЗап = Запрос.Выполнить();
              Выб = РезЗап.Выбрать();
              Пока Выб.Следующий() Цикл
                  ТС.Номенклатура = Выб.Номенклатура;
                  ТС.ХарактеристикаНоменклатуры = Выб.ХарактеристикаНоменклатуры;
       КонецЦикла;
   КонецЦикла;


На его примере переделайте пожалуйста как должно быть. Плиз.
Спасибо.
11 Boudybuilder
 
31.03.12
11:54
...
12 Boudybuilder
 
31.03.12
14:06
Народ!!! Не поленитесь помочь (10)
13 FIXXXL
 
31.03.12
22:41
(0) возми ТС.ХарактеристикаНоменклатурыСтрока по всей ТЧ, запихни в ТЗ, и ТЗ передавай как параметр в запрос
сравнение через "В"
ну и дальше играйся :)
14 Новиков
 
31.03.12
22:48
цИкл, извИните - пиши правильно, блеать!
пожалуйста = Плиз - учи русский, блеать!

и да. Будь мужиком, блеать! Пиши сам.
15 Boudybuilder
 
02.04.12
00:14
(13)
Мне пример нужен.
Я сам не разберусь пока
16 CepeLLlka
 
02.04.12
01:36
АльфаАвто... не иначе :)
17 Boudybuilder
 
03.04.12
01:15
Я б хотел чтоб мой цикл переделали на правильное решение этой проблемы , или показали мне пример конкретный по этой теме. Ато (13) я так особо и не понял. Извените , за пока недостаточное количество знаний.
18 Boudybuilder
 
04.04.12
02:35
ТЗ = СписокНоменклатуры.ВыгрузитьКолонку("НаименованиеНоменклатурыКонтрагента");
   
   ЗП = Новый Запрос;
   ЗП.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
   ЗП.Текст = "ВЫБРАТЬ
              |    ТЗ.НаименованиеНоменклатурыКонтрагента,
              |ПОМЕСТИТЬ ТЗ
              |ИЗ
              |    &ТЗ КАК ТЗ";  
  ЗП.Параметры.Вставить("ТЗ",ТЗ);  
  ЗП.Выполнить();
 
  ЗП.Текст = "ВЫБРАТЬ
             |    НоменклатураКонтрагентов.Контрагент,
             |    НоменклатураКонтрагентов.Номенклатура,
             |    НоменклатураКонтрагентов.ХарактеристикаНоменклатуры,
             |    НоменклатураКонтрагентов.КодНоменклатурыКонтрагента,
             |    НоменклатураКонтрагентов.АртикулНоменклатурыКонтрагента,
             |    НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента,
             |    НоменклатураКонтрагентов.ШтрихКодНоменклатурыКонтрагента,
             |    НоменклатураКонтрагентов.ЕдиницаНоменклатурыКонтрагента
             |ИЗ
             |    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
             |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ
             |        ПО (НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента ПОДОБНО ТЗ.НаименованиеНоменклатурыКонтрагента)
             |ГДЕ
             |    НоменклатураКонтрагентов.Контрагент = &Контрагент";
             ЗП.УстановитьПараметр("Контрагент",Контрагент);
             СписокНоменклатуры.ЗагрузитьКолонку(ЗП.Выполнить().Выгрузить("НаименованиеНоменклатурыКонтрагента"),"Номенклатура");





Что тут не так?
19 Rusty Nail
 
04.04.12
03:16
(18) ТЗ, по твоему, это что?
20 Boudybuilder
 
04.04.12
03:24
ТЗ = Новый ТаблицаЗначений ?
21 Boudybuilder
 
04.04.12
03:36
ТЗ = Новый ТаблицаЗначений;
   ТЗ.Колонки.Добавить("НаименованиеНоменклатурыКонтрагента",Новый ОписаниеТипов("Строка"),"НаименованиеНоменклатурыКонтрагента");
   ТЗ.ЗагрузитьКолонку(СписокНоменклатуры.ВыгрузитьКолонку("НаименованиеНоменклатурыКонтрагента"),"НаименованиеНоменклатурыКонтрагента");
       
   ЗП = Новый Запрос;
   ЗП.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
   ЗП.Текст =   "ВЫБРАТЬ
                | ТЗ.НаименованиеНоменклатурыКонтрагента
                |ПОМЕСТИТЬ ТЗ
                |ИЗ
                |    &ТЗ КАК ТЗ";  
  ЗП.Параметры.Вставить("ТЗ",ТЗ);  
  ЗП.Выполнить();
   
  ЗП.Текст = "ВЫБРАТЬ
             |    НоменклатураКонтрагентов.Номенклатура,
             |    НоменклатураКонтрагентов.ХарактеристикаНоменклатуры
             |ИЗ
             |    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
             |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ
             |        ПО (НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента ПОДОБНО ТЗ.НаименованиеНоменклатурыКонтрагента)
             |ГДЕ
             |    НоменклатураКонтрагентов.Контрагент = &Контрагент";
             ЗП.УстановитьПараметр("Контрагент",Контрагент);
             СписокНоменклатуры.ЗагрузитьКолонку(ЗП.Выполнить().Выгрузить("Номенклатура"),"Номенклатура");
22 Boudybuilder
 
04.04.12
09:50
(21) Правильно я сделал?

Но на эту строку ругается...


СписокНоменклатуры.ЗагрузитьКолонку(ЗП.Выполнить().Выгрузить("Номенклатура"),"Номенклатура");
23 Boudybuilder
 
04.04.12
12:18
&
24 Boudybuilder
 
04.04.12
12:18
?
25 Boudybuilder
 
04.04.12
12:42
Народ , что тут не правильно ? (21) (22)
26 111Ivan111
 
04.04.12
12:56
Книжки полистай))) Арбра-кадабра везде у тебя)
27 111Ivan111
 
04.04.12
12:58
(21)  ЗП.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;?
А де Менеджер = Новый МенеджерВременныхТаблиц?
28 Boudybuilder
 
04.04.12
13:08
ТЗ = Новый ТаблицаЗначений;
   ТЗ.Колонки.Добавить("НаименованиеНоменклатурыКонтрагента",Новый ОписаниеТипов("Строка"),"НаименованиеНоменклатурыКонтрагента");
   ТЗ.ЗагрузитьКолонку(СписокНоменклатуры.ВыгрузитьКолонку("НаименованиеНоменклатурыКонтрагента"),"НаименованиеНоменклатурыКонтрагента");
       
   ЗП = Новый Запрос;
   Менеджер = Новый МенеджерВременныхТаблиц;
   ЗП.МенеджерВременныхТаблиц = Менеджер;
   ЗП.Текст =   "ВЫБРАТЬ
                | ТЗ.НаименованиеНоменклатурыКонтрагента
                |ПОМЕСТИТЬ ТЗ
                |ИЗ
                |    &ТЗ КАК ТЗ";  
  ЗП.Параметры.Вставить("ТЗ",ТЗ);  
  ЗП.Выполнить();
   
  ЗП.Текст = "ВЫБРАТЬ
             |    НоменклатураКонтрагентов.Номенклатура,
             |    НоменклатураКонтрагентов.ХарактеристикаНоменклатуры
             |ИЗ
             |    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
             |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ
             |        ПО (НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента ПОДОБНО ТЗ.НаименованиеНоменклатурыКонтрагента)
             |ГДЕ
             |    НоменклатураКонтрагентов.Контрагент = &Контрагент";
             ЗП.УстановитьПараметр("Контрагент",Контрагент);
             СписокНоменклатуры.ЗагрузитьКолонку(ЗП.Выполнить().Выгрузить("НоменклатураКонтрагентов.Номенклатура"),"Номенклатура");




Ошибка при вызове метода контекста (Выгрузить)
             СписокНоменклатуры.ЗагрузитьКолонку(ЗП.Выполнить().Выгрузить("НоменклатураКонтрагентов.Номенклатура"),"Номенклатура");
29 Boudybuilder
 
04.04.12
13:13
Ошибка при вызове метода контекста (Выгрузить)
             СписокНоменклатуры.ЗагрузитьКолонку(ЗП.Выполнить().Выгрузить("НоменклатураКонтрагентов.Номенклатура"),"Номенклатура");
30 111Ivan111
 
04.04.12
13:14
(29)ТаблицаЗначений (ValueTable)
ЗагрузитьКолонку (LoadColumn)
Синтаксис:

ЗагрузитьКолонку(<Массив>, <Колонка>)
Параметры:

<Массив> (обязательный)

Тип: Массив.
Массив значений, который выступает в качестве источника данных для колонки.
<Колонка> (обязательный)

Тип: Число; Строка; КолонкаТаблицыЗначений.
Колонка, в которую будут загружены значения из массива. В качестве значения параметра может выступать индекс колонки, имя колонки, сама колонка.
Описание:

Загружает колонку таблицы значений из массива значений.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Примечание:

Значения из массива загружаются в колонку в порядке индексов.
Пример:

ТаблицаРезультат = Новый ТаблицаЗначений;
Для каждого ИмяКолонки Из МассивИменКолонок Цикл
   ТаблицаРезультат.Колонки.Добавить(ИмяКолонки);
КонецЦикла;

// Создадим пустые строки таблицы
Для Н=1 По СтрокиДереваЗначений.Количество() Цикл
   ТаблицаРезультат.Добавить();
КонецЦикла;

// Скопируем значения колонок
Для каждого ИмяКолонки Из МассивИменКолонок Цикл
   ЗначенияКолонки = СтрокиДереваЗначений.ВыгрузитьКолонку(ИмяКолонки);
   ТаблицаРезультат.ЗагрузитьКолонку(ЗначенияКолонки, ИмяКолонки);
КонецЦикла;

Читай!
31 Boudybuilder
 
04.04.12
13:34
ТЗ = Новый ТаблицаЗначений;
   ТЗ.Колонки.Добавить("НаименованиеНоменклатурыКонтрагента",Новый ОписаниеТипов("Строка"),"НаименованиеНоменклатурыКонтрагента");
   ТЗ.ЗагрузитьКолонку(СписокНоменклатуры.ВыгрузитьКолонку("НаименованиеНоменклатурыКонтрагента"),"НаименованиеНоменклатурыКонтрагента");
       
   ЗП = Новый Запрос;
   Менеджер = Новый МенеджерВременныхТаблиц;
   ЗП.МенеджерВременныхТаблиц = Менеджер;
   ЗП.Текст =   "ВЫБРАТЬ
                | ТЗ.НаименованиеНоменклатурыКонтрагента
                |ПОМЕСТИТЬ ТЗ
                |ИЗ
                |    &ТЗ КАК ТЗ";  
  ЗП.Параметры.Вставить("ТЗ",ТЗ);  
  ЗП.Выполнить();
   
  ЗП.Текст = "ВЫБРАТЬ
             |    НоменклатураКонтрагентов.Номенклатура КАК Номенклатура,
             |    НоменклатураКонтрагентов.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
             |ИЗ
             |    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
             |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ
             |        ПО (НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента ПОДОБНО ТЗ.НаименованиеНоменклатурыКонтрагента)
             |ГДЕ
             |    НоменклатураКонтрагентов.Контрагент = &Контрагент";
             ЗП.УстановитьПараметр("Контрагент",Контрагент);
             Рез = ЗП.Выполнить().Выгрузить();
             Кол = Рез.ВыгрузитьКолонку("Номенклатура");
             СписокНоменклатуры.ЗагрузитьКолонку(Кол,"Номенклатура");
32 Boudybuilder
 
04.04.12
13:34
(31) Сделал так. Уже не ругается , но не возвращает ничего... :(
33 m-serg74
 
04.04.12
14:13
(32) а вместо
>ТЗ = Новый ТаблицаЗначений;
   >ТЗ.Колонки.Добавить("НаименованиеНоменклатурыКонтрагента",Новый >ОписаниеТипов("Строка"),"НаименованиеНоменклатурыКонтрагента");
   >ТЗ.ЗагрузитьКолонку(СписокНоменклатуры.ВыгрузитьКолонку("НаименованиеНоменклатурыКонтрагента"),"НаименованиеНоменклатурыКонтрагента");

не судьба как нить так:
ТЗ = СписокНоменклатуры.Скопировать( ,"НаименованиеНоменклатурыКонтрагента")?
34 Boudybuilder
 
04.04.12
14:39
Блин , но я туплю с єти кодом!
сто раз переделываю а то ничего не дает!!!!!!!


ТабЗначений = Новый ТаблицаЗначений;
   ТабЗначений.Колонки.Добавить("НаименованиеНоменклатурыКонтрагента",Новый ОписаниеТипов("Строка"));
   ТабЗначений.ЗагрузитьКолонку(СписокНоменклатуры.ВыгрузитьКолонку("НаименованиеНоменклатурыКонтрагента"),"НаименованиеНоменклатурыКонтрагента");
       
   Запрос = Новый Запрос;
   МенеджерВТ = Новый МенеджерВременныхТаблиц;
   Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
   Запрос.Текст =   "ВЫБРАТЬ
                | ТЗ.НаименованиеНоменклатурыКонтрагента
                |ПОМЕСТИТЬ ТЗ
                |ИЗ
                |    &ТЗ КАК ТЗ";  
  Запрос.УстановитьПараметр("ТЗ",ТабЗначений);  
  Запрос.Выполнить();
   
  Запрос.Текст = "ВЫБРАТЬ
                 |    НоменклатураКонтрагентов.Номенклатура КАК Номенклатура,
                 |    НоменклатураКонтрагентов.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                 |    НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента КАК НаименованиеНоменклатурыКонтрагента
                 |ИЗ
                 |    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
                 |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ
                 |        ПО (НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента ПОДОБНО ТЗ.НаименованиеНоменклатурыКонтрагента)
                 |ГДЕ
                 |    НоменклатураКонтрагентов.Контрагент = &Контрагент";
             Запрос.УстановитьПараметр("Контрагент",Контрагент);
             Рез = Запрос.Выполнить();
             Выборка = Рез.Выбрать();
             Пока Выборка.Следующий() Цикл
                 НовСтр = СписокНоменклатуры.Добавить();
                 НовСтр.Номенклатура                        = Выборка.Номенклатура;                                            
                 НовСтр.ХарактеристикаНоменклатуры          = Выборка.ХарактеристикаНоменклатуры;
                 НовСтр.НаименованиеНоменклатурыКонтрагента = Выборка.НаименованиеНоменклатурыКонтрагента;
             КонецЦикла;






ЧТО Я ТУТ НЕ ТАК ДЕЛАЮ. ИМПРАВЬТЕ ПОЖАЛУЙСТА!!!
35 m-serg74
 
04.04.12
14:43
(34) не хочешь читать книжки так хоть почитай что написал в (33)
36 Boudybuilder
 
04.04.12
14:46
(35)
ТЗ = Новый ТаблицаЗначений;
ТЗ = СписокНоменклатуры.Скопировать( ,"НаименованиеНоменклатурыКонтрагента")





Так не катит...
37 m-serg74
 
04.04.12
14:47
катит но достаточно просто
ТЗ = СписокНоменклатуры.Скопировать( ,"НаименованиеНоменклатурыКонтрагента")
38 ProProg
 
04.04.12
14:48
пишешь очередную нетленку по загрузке прайсов?
39 m-serg74
 
04.04.12
14:50
похоже писать ему придется очььььь долго)))
40 Boudybuilder
 
04.04.12
14:54
(38) Она готова , но запрос в цикле. Хочу от него избавиться...
41 FIXXXL
 
04.04.12
14:56
(40) у тебя поиск-сравнение по текстовому полю идет?
42 Boudybuilder
 
04.04.12
14:57
(37) Метод объекта не обнаружен (Скопировать)
   ТЗ = СписокНоменклатуры.Скопировать( ,"НаименованиеНоменклатурыКонтрагента");
43 Boudybuilder
 
04.04.12
14:58
(41) по строке ТЧ НаименованиеНоменклатурыКонтрагента это строка
44 FIXXXL
 
04.04.12
15:00
в ТЧ есть поле с типом СсылкаНоменклатура?
45 Boudybuilder
 
04.04.12
15:05
Да
46 FIXXXL
 
04.04.12
15:12
тогда попробуй
для каждого стр из ТЧ цикл
  стр.СсылкаНоменклатура = Справочники.Номенклатура.НайтиПоНаименованию(стр.НаименованиеНоменклатурыКонтрагента)
конеццикла
47 Boudybuilder
 
04.04.12
15:17
(46) ты посмотри рабочий код в цикле (0)
48 m-serg74
 
04.04.12
15:21
(42) Если у тебя СписокНоменклатуры - это ТабличнаяЧасть, тогда
ТЗ = СписокНоменклатуры.Выгрузить( ,"НаименованиеНоменклатурыКонтрагента");
49 FIXXXL
 
04.04.12
15:21
(47) а, у тебя там контрагент еще...
50 Boudybuilder
 
04.04.12
15:29
(49) Идет отбор по контрагенту , он же Реквизит в обработке
51 m-serg74
 
04.04.12
15:40
(50) так что (48) попробовал
52 Boudybuilder
 
04.04.12
17:02
ТЗ = СписокНоменклатуры.Выгрузить( ,"НаименованиеНоменклатурыКонтрагента");
       
   Запрос = Новый Запрос;
   МенеджерВТ = Новый МенеджерВременныхТаблиц;
   Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
   Запрос.Текст =   "ВЫБРАТЬ
                | ТЗ.НаименованиеНоменклатурыКонтрагента
                |ПОМЕСТИТЬ ТЗ
                |ИЗ
                |    &ТЗ КАК ТЗ";  
  Запрос.УстановитьПараметр("ТЗ",ТЗ);  
  Запрос.Выполнить();
   
  Запрос.Текст = "ВЫБРАТЬ
                 |    НоменклатураКонтрагентов.Номенклатура КАК Номенклатура,
                 |    НоменклатураКонтрагентов.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                 |    НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента КАК НаименованиеНоменклатурыКонтрагента
                 |ИЗ
                 |    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
                 |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ
                 |        ПО (НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента ПОДОБНО ТЗ.НаименованиеНоменклатурыКонтрагента)
                 |ГДЕ
                 |    НоменклатураКонтрагентов.Контрагент = &Контрагент";
             Запрос.УстановитьПараметр("Контрагент",Контрагент);
             Рез = Запрос.Выполнить();
             Выборка = Рез.Выбрать();
             Пока Выборка.Следующий() Цикл
                 НовСтр = СписокНоменклатуры.Добавить();
                 НовСтр.Номенклатура                        = Выборка.Номенклатура;                                            
                 НовСтр.ХарактеристикаНоменклатуры          = Выборка.ХарактеристикаНоменклатуры;
                 НовСтр.НаименованиеНоменклатурыКонтрагента = Выборка.НаименованиеНоменклатурыКонтрагента;
             КонецЦикла;










   Вот так уже работает. Только меня выбрка смущает. Выгрузить не быстрее будет работать?!
53 m-serg74
 
04.04.12
17:55
а что значит
>Пока Выборка.Следующий() Цикл
>    НовСтр = СписокНоменклатуры.Добавить();
ты снизу к существующим строчкам еще добавляешь строчки???
54 Boudybuilder
 
04.04.12
18:06
(53) Да... И Это глупость.
55 Boudybuilder
 
04.04.12
18:09
Перед этим очищаю таблицу  ,и мне возвращает только те которые есть в регистре. А в таблице до этого были строчки , которых в регистре пока нету. И мне надо чтобы они не пропадали.

Короче запрос работает ок!
Но надо теперь ко всем срочкам колонки НаименованиеНоменклатурыКонтрагента подставить значения в колонки Номенклатура и ХарактеристикаНоменклатуры.
Каким способом это сделать?
56 m-serg74
 
04.04.12
18:16
Пока Выборка.Следующий() Цикл
   НовСтр = СписокНоменклатуры.Найти(Выборка.НаименованиеНоменклатурыКонтрагента, "НаименованиеНоменклатурыКонтрагента");
   Если НовСтр = Неопределено Тогда
       НовСтр = СписокНоменклатуры.Добавить();
   КонецЕсли;
   ЗаполнитьЗначенияСвойств(НовСтр, Выборка);
КонецЦикла;
57 Boudybuilder
 
04.04.12
19:53
ТЗ = СписокНоменклатуры.Выгрузить( ,"НаименованиеНоменклатурыКонтрагента");
       
   Запрос = Новый Запрос;
   МенеджерВТ = Новый МенеджерВременныхТаблиц;
   Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
   Запрос.Текст =   "ВЫБРАТЬ
                | ТЗ.НаименованиеНоменклатурыКонтрагента
                |ПОМЕСТИТЬ ТЗ
                |ИЗ
                |    &ТЗ КАК ТЗ";  
  Запрос.УстановитьПараметр("ТЗ",ТЗ);  
  Запрос.Выполнить();
   
  Запрос.Текст = "ВЫБРАТЬ
                 |    НоменклатураКонтрагентов.Номенклатура КАК Номенклатура,
                 |    НоменклатураКонтрагентов.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                 |    ТЗ.НаименованиеНоменклатурыКонтрагента КАК НаименованиеНоменклатурыКонтрагента
                 |ИЗ
                 |    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
                 |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ
                 |        ПО (НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента ПОДОБНО ТЗ.НаименованиеНоменклатурыКонтрагента)
                 |ГДЕ
                 |    НоменклатураКонтрагентов.Контрагент = &Контрагент";
             Запрос.УстановитьПараметр("Контрагент",Контрагент);
             Рез = Запрос.Выполнить();
             Выборка = Рез.Выбрать();
             Пока Выборка.Следующий() Цикл
                 НовСтр = СписокНоменклатуры.Найти(Выборка.НаименованиеНоменклатурыКонтрагента, "НаименованиеНоменклатурыКонтрагента");
   Если НовСтр = Неопределено Тогда
       НовСтр = СписокНоменклатуры.Добавить();
   КонецЕсли;
   ЗаполнитьЗначенияСвойств(НовСтр, Выборка);
КонецЦикла;
             


Вроде работает...
58 Boudybuilder
 
04.04.12
20:44
Сделал замеры производительности. По запросу №1 в цикле который я создал самостоятельно у меня в (1) и №2 с вашей помощью (57). Разница есть

№1: Форма.Форма.Форма    444    РезЗап = Запрос.Выполнить();    24 749    152,169186    80,07
№2: Форма.Форма.Форма    444    Рез = Запрос.Выполнить();    1    96,134330    86,53

Но 96 секунд ждать - это тоже не интересно...
Могут ли быть решения побыстрее?
59 Boudybuilder
 
04.04.12
21:36
(58) Что скажете?
60 ProProg
 
04.04.12
22:59
(58) плюс  добавь еще потом время чтобы еще рузельтат по строкам запихать то на тои выйдет
61 ProProg
 
04.04.12
23:00
когда ты в цикле запрос делаешь у тебя уже обход есть и его размещение. Когда одни запросом получешь результат и его опять же в талицу теперь надо разместить это тоже время
62 ProProg
 
04.04.12
23:00
И вообще кто сказал что надо ставить ПОДОБНО
63 ProProg
 
04.04.12
23:02
(56) очень неоптимальный варинат! садтсь - два
64 Лефмихалыч
 
04.04.12
23:02
(61) ты код так же пишешь, как этот пост написал?
65 Boudybuilder
 
04.04.12
23:08
(62) Сравниваю строковые значения.
или надо все таки "=" ?
66 Boudybuilder
 
04.04.12
23:11
ТЗ = СписокНоменклатуры.Выгрузить( ,"НаименованиеНоменклатурыКонтрагента");
       
   Запрос = Новый Запрос;
   МенеджерВТ = Новый МенеджерВременныхТаблиц;
   Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
   Запрос.Текст =   "ВЫБРАТЬ
                | ТЗ.НаименованиеНоменклатурыКонтрагента
                |ПОМЕСТИТЬ ТЗ
                |ИЗ
                |    &ТЗ КАК ТЗ";  
  Запрос.УстановитьПараметр("ТЗ",ТЗ);  
  Запрос.Выполнить();


Тут первая строка  работает для ТЧ , а если СписокНоменклатуры у меня не ТЧ а ТЗ , то как тут быть? Как выгрузить колонку ТаблицыЗначений в ТЗ ?
Просто нужно то же где ТаблицаЗначений.
67 ProProg
 
04.04.12
23:16
(65) равно конечно!
68 Boudybuilder
 
04.04.12
23:20
(66) Затупил и исправился! Это действие просто не нужно!

(67)  Тогда для чего используется ПОДОБНО ?
69 Boudybuilder
 
05.04.12
09:01
(58)(63) Какой тогда оптимальный?
70 m-serg74
 
05.04.12
09:25
(69) попроси помощи у (63) он поможет с оптимальным вариантом)
71 m-serg74
 
05.04.12
09:31
(67) НаименованиеНоменклатурыКонтрагента неограниченной длины потому и ПОДОБНО!!!
72 hhhh
 
05.04.12
09:35
(71) надо говорить: НаименованиеНоменклатурыКонтрагента неограниченной длины потому и "="!
73 m-serg74
 
05.04.12
09:54
(72)
Если "=" Тогда
   Нельзя сравнивать поля неограниченной длины и поля несовместимых типов
Поэтому "ПОДОБНО"
КонецЕсли;
74 Boudybuilder
 
05.04.12
09:57
(67)(72) Респект и уважуха!
Четко , внятно , доступно!
75 m-serg74
 
05.04.12
09:58
(74) а ты пробовал?
76 m-serg74
 
05.04.12
10:01
{Форма.Форма.Форма(742)}: Ошибка при вызове метода контекста (Выполнить): {(18, 45)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
ПО ТЗ.НаименованиеНоменклатурыКонтрагента <<?>>= НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента
77 m-serg74
 
05.04.12
10:01
а вот запрос
ВЫБРАТЬ
   НоменклатураКонтрагентов.Номенклатура,
   НоменклатураКонтрагентов.ХарактеристикаНоменклатуры,
   НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента
ПОМЕСТИТЬ ТЗ
ИЗ
   РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   НоменклатураКонтрагентов.Номенклатура,
   НоменклатураКонтрагентов.ХарактеристикаНоменклатуры,
   ТЗ.НаименованиеНоменклатурыКонтрагента
ИЗ
   ТЗ КАК ТЗ
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
       ПО ТЗ.НаименованиеНоменклатурыКонтрагента = НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента
78 m-serg74
 
05.04.12
10:02
а с вот этим все ОК
ВЫБРАТЬ
   НоменклатураКонтрагентов.Номенклатура,
   НоменклатураКонтрагентов.ХарактеристикаНоменклатуры,
   НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента
ПОМЕСТИТЬ ТЗ
ИЗ
   РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   НоменклатураКонтрагентов.Номенклатура,
   НоменклатураКонтрагентов.ХарактеристикаНоменклатуры,
   ТЗ.НаименованиеНоменклатурыКонтрагента
ИЗ
   ТЗ КАК ТЗ
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
       ПО ТЗ.НаименованиеНоменклатурыКонтрагента ПОДОБНО НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента
79 Boudybuilder
 
05.04.12
10:03
(75) Я не пробовал. Мне в конструкторе сразу выдало ПОДОБНО , вот я и не парился ставить "=".
(78) Пересмотрю свои запросы. Спасибо.
80 m-serg74
 
05.04.12
10:15
(79)+ а (67)(72) колы!!!
81 Boudybuilder
 
05.04.12
11:11
m-serg74  
А что скажешь об этом? (58)
82 ProProg
 
05.04.12
14:10
(71) лол. так сделай в запросе его ограничение!
83 ProProg
 
05.04.12
14:11
Я прайсы по 10-20-50 тысяч строк гружу - все летает!
При этом 10 вариантов поиска.
84 ProProg
 
05.04.12
14:12
|ГДЕ
               |    (ВЫРАЗИТЬ(НоменклатураКонтрагентов.НаименованиеНоменклатурыКонтрагента КАК СТРОКА(1000))) = &НаименованиеНоменклатурыКонтрагента
85 ProProg
 
05.04.12
14:12
(80) тебе кол с минусом и родителей в школу!)))
86 ProProg
 
05.04.12
14:13
(81) вообще не парься. продам со скидкой для 1Сника http://subsystems.ru/catalog/27/158/
научишся сразу всему.
87 m-serg74
 
05.04.12
14:42
(85) вот в (84) для (0) понятно написано, а то что ты сказал вместо ПОДОБНО надо лепить "=" воспринял бы буквально, в результате снова - "А почему пишет ошибку?"

(81) пусть ProProg расскажет он все ж таки Про по загрузкам прайсов и по запросам)
88 Boudybuilder
 
06.04.12
03:12
Но все таки это меня интересует больше всего (58)
(81) Многофункциональными не интересуюсь. Ибо считаю что нужно для каждого дока иметь свою , заточеную под нужды заполнения ТЧ конкретного дока и своих нужд.
89 Boudybuilder
 
06.04.12
12:18
...
Закон Брукера: Даже маленькая практика стоит большой теории.