Имя: Пароль:
1C
1C 7.7
v7: Проблемы с индексированной таблицей
0 Альбатрос
 
16.04.13
10:52
Есть ИТЗ, которая получена из результата запроса. В ней находится информация по ТЧ документа, ссылка на документ и реквизит шапки. То есть такого вида:
  Ссылка   |   Клиент   | Товар  |   Колво     |   сумма
приходная1      клиент1    товар1       5             500
приходная1      клиент1    товар2       3             800
приходная2      клиент2    товар3       7             900
приходная2      клиент2    товар4       8             200


и т.д. Записей много. Задача: тащить из этой ТЗ ссылку на док, передавать ее в другую обработку, которая вернет ТЗ, заполненную на основе ТЧ переданного дока с ключевым полем "Товар". В мою ИТЗ мне нужно "догрузить" данную ТЗ. В частности создать еще 2 колонки и в них выгрузить значения, при этом поиск нужной строки ИТЗ нужно определять по двум параметрам: ссылка и товар. Как правильно это организовать?
1 Mikeware
 
16.04.13
10:57
Индекс, и - неожиданно - НайтиСтроку()
2 Альбатрос
 
16.04.13
11:07
(1) Ну в общем да =)

типо такой алгоритм:


ИндТаб.ДобавитьИндекс("Первый","Ссылочка,Товар");
номер = ИндТаб.НайтиСтроку("Первый", СписокЗн);

В описании Метод НайтиСтроку() вернет мне номерСтроки. А саму строку как получить? Или я неправильно понял смысл метода?

И второй вопрос: для получения ссылки дока мне нужно открыть выборку строк из ИТЗ. Не собьется ли выборка, когда я буду находить строки и изменять их?
3 viktor_vv
 
16.04.13
11:11
В найтиСтроку() есть еще параметры, можно сразу спозициоировать ИТЗ на найденной строке.
4 Альбатрос
 
16.04.13
11:16
(3) Вот вот. Цитирую оттуда:

"чСпозиционироваться - тип: Число. Если 1, то при успешном поиске индекс будет спозиционирован на найденной строке. Если перед выполнением метода была открыта выборка (методом ВыбратьСтроки), то она перепозиционируется на найденное значение. Если выборка не была открыта, то она открывается, и после успешного поиска могут быть использованы методы ПолучитьСтроку(), СледующаяСтрока() и ПредыдущаяСтрока(). Основной индекс также перепозиционируется."

То есть моя выборка собьется. Как этого избежать?
5 Альбатрос
 
16.04.13
11:18
+(4) Теоретически мне пофиг вроде на то, что выборка собьется. Но я не уверен, что не пропущу строки =)
6 viktor_vv
 
16.04.13
11:21
(5) Ну для надежности для поиска сделай копию ИТЗ.
Я правда не совсем понял зачем тебе искать в этой же таблице при обходе.
7 viktor_vv
 
16.04.13
11:22
(6)+ Не проще ли добавить строки в эту таблицу, а потом свернуть ее.
8 viktor_vv
 
16.04.13
11:24
И может сразу в запросе тянуть, то что ты в обработке потом получаешь ?
9 Альбатрос
 
16.04.13
11:24
(7) Действительно, наверное проще, щас буду пробовать. Спасибо!
10 Альбатрос
 
16.04.13
11:26
(8) Там очень сложная обработка идет, реализовать подобное в запросе если не невозможно, то у меня всяко тяму не хватит сделать =)
11 Mikeware
 
16.04.13
11:29
(2) совершенно необзательно позиуионироваться на строке, чтобы изменить значения.
12 Альбатрос
 
16.04.13
13:41
(11) Возможно =)

Вопрос ко всем: можно ли свернуть ИТЗ вот так
Есть:

Ссылка         |       товар      |       цена
Приходная1             Товар1  
Приходная1             Товар1             500

и получить  на выходе такую    

Ссылка         |       товар      |       цена
Приходная1             Товар1             500
13 Ёпрст
 
16.04.13
13:44
(12)
запросто
в цена должен быть 0 в явном виде.
14 Ёпрст
 
16.04.13
13:44
перед Свернуть
15 Альбатрос
 
16.04.13
13:45
Не, неправильно описал =)
Есть:
Ссылка         |       товар      |       цена   |    Клиент
Приходная1             Товар1                         Клиент1
Приходная1             Товар1             500

а получить

Ссылка         |       товар      |       цена   |    Клиент
Приходная1             Товар1           500           Клиент1
16 Альбатрос
 
16.04.13
13:47
(13) Блин, там куча полей полученных из запроса. Последняя колонка не заполнена. Я добавляю в конце строки с заполненной 1 и 2 колонкой и как раз 3 =) Хочу свернуть ) 1 и 2 колонка уникальны
17 Ёпрст
 
16.04.13
13:47
(15) тоже можно, только результат не гарантирован(что именно Клиент будет, а не Клиент2 из другой строки) - колонки, которые не в группируемых и суммируемых не удаляются из ИТЗ
18 Альбатрос
 
16.04.13
13:50
(17) Так вот вообще не получается:

ИндТаб.Свернуть("Ссылочка,Товар","ЦенаРозн");

Вообще никак не изменяет таблицу
19 Ёпрст
 
16.04.13
13:51
(18) не верю
:)
20 Ёпрст
 
16.04.13
13:54
значит в суммируемых строках разные значения или в колонках с числами - не числа (а строки, к примеру)
21 viktor_vv
 
16.04.13
13:55
(18) ты таки пустую Цену нулями не заполнил.
22 Альбатрос
 
16.04.13
13:55
(19) Проверяю методом показать(). Не изменяется.
Выдает первыми мою изначальную ТЗ со всеми заполненными полями, кроме ЦенаРозн, а в конце мои добавленные строки с заполненными Ссылочка, товар и ЦенаРозн. Все остальные поля пусты =) Может надо в первой части таблицы определить не заполненную ценуРОзн как 0?
23 Альбатрос
 
16.04.13
13:55
(20) Ага, похоже на то )
24 Альбатрос
 
16.04.13
13:56
(21) А если у меня тип ЦенаРоз - строка, мне надо заполнить не заполненными значением ""?
25 Альбатрос
 
16.04.13
13:56
мозги кипят =) Неясно выражаюсь
26 Альбатрос
 
16.04.13
14:00
Вообщем, перерыв до завтра. С Вашего позволения, завтра вернемся к этому вопросу. Спасибо за ответы!
27 Ёпрст
 
16.04.13
14:00
(24) нет, 0
28 Ёпрст
 
16.04.13
14:01
если строка, да ""..только зачем Цене быть строкой ?!
29 Альбатрос
 
17.04.13
05:19
Всем привет!
(27) Проставил везде 0, свертка не работает... ((( Вообще никак не работает. Выдает одну и ту же выходную ИТЗ независимо от того, что как я определю метод "Свернуть". Пробовал всяко разно. И с суммируемыми полями и без, ну всяко пробовал. "Свернуть" стоит непосредственно перед методом "показать". Где я что забыл?!

   ИндТаб.НоваяКолонка("Процент");
   ИндТаб.НоваяКолонка("ЦенаРозн");
   ИндТаб.НоваяКолонка("ТоварИД");
   ИндТаб.НоваяКолонка("КлиентИД");
   
   
   Если Вариант <> 3 тогда
       ИндТаб.ДобавитьИндекс("Первый","Ссылочка,Товар");    
   
   Если вариант = 1 тогда    
       ИндТаб.ЗаполнитьКолонку(,"ЦенаРозн",0);
       ИТЗВр.Загрузить(Индтаб,,"Ссылочка");
       ИТЗвр.Свернуть("Ссылочка",,);
       ИТЗВр.Показать();
       ИТЗВр.ВыбратьСтроки();  
       Пока ИТЗВр.ПолучитьСтроку() = 1 цикл
           Док = ИТЗВр.Ссылочка;          
           Док.ВыгрузитьТабличнуюЧасть(ТзТов);
           ПараметрыЦенников.Установить("Дата",Док.ДатаДок);
           ПараметрыЦенников.Установить("Документ",Док);
           ПараметрыЦенников.Установить("Спецификация",1); //что печатать
           ПараметрыЦенников.Установить("Ценник",1); //что печатать
           ПараметрыЦенников.Установить("ТаблицаДокумента",ТзТов); //передаем документ, как таблицу
           ПараметрыЦенников.Установить("ВыходнаяТаблица","");     //сюда возвращает таблицу с ценниками
           глОткрытьВнешнююОбработкуОтчет("ПечатьЦенников","D:\1C.Base\Work\Temp_Sin",0,ПараметрыЦенников);
           ТабЦен = ПараметрыЦенников.получить("ВыходнаяТаблица");
           ТабЦен.ВыбратьСтроки();
           Пока ТабЦен.ПолучитьСтроку() = 1 цикл
               
               ИндТаб.НоваяСтрока();
               Индтаб.ссылочка = док;
               ИндТаб.ЦенаРозн = Число(ТабЦен.Ценник);
               ИндТаб.Товар = ТабЦен.Товар;
               
           КонецЦикла;
           
       КонецЦикла;
       
       ;       КонецЕсли;
       ИндТаб.Свернуть("Ссылочка,Товар","ЦенаРозн",);
       ИндТаб.Показать();
       
       Форма.Параметр.Установить("ИД","");  
       СтатусВозврата(0);
30 Альбатрос
 
17.04.13
05:32
Вопрос снимается =) не совпали типы по колонке "Товар".
Как говорится, утро вечера мудренее =)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.