Имя: Пароль:
1C
 
Поиск строки в таблице значений по двум параметрам
0 Vika_22
 
05.03.11
11:42
Доброго всем дня.
Возникла такая задачка: Необходимо реализовать поиск строки в таблице значений по двум параметрам. То есть, допустим, структура таблицы значений: 1.Тип 2.Проба 3.Расход,
необходимо найти строку соответствующего Типа и Пробе.
P.S. Сама продумываю алгоритм с использованием Найти и сдвига строки.
1 1Сергей
 
05.03.11
11:43
(0) добавь колонку ТипПроба. Типа индекса. По ней ищи
2 azernot
 
05.03.11
11:44
Сортировка по 2 реквизитам, поиск 1-го, перебор строк начиная с найденной для поиска 2-го до момента изменния первого. Это так, навскидку.
3 ДенисЧ
 
05.03.11
11:44
ключевую составную колонку добавь...
4 AeDen
 
05.03.11
11:44
1. Индексированная таблица.
2. Создать свой "индекс" (служебную колонку, которая будет содержать сумму необходимых полей), искать по нему.
5 andrewks
 
05.03.11
11:47
(1) не типа индекса, а типа ключа )
6 1Сергей
 
05.03.11
11:51
(5) не знаю, мы академиев не кончали, выражовываемся как могём
7 Vika_22
 
05.03.11
11:52
(1)Это как я понимаю надо перебрать всю таблицу значений и создать новую колонку, в которой будет значение "ТипПроба".
То есть, например, у меня таблица значений:
новая-------925-----10--------новая925
новая-------963-----20--------новая963
пробная----925-----15--------пробная925
Нее, мне не подходит, мне тогда надо будет оббежать циклом таблицу значений, в которой я ищу, а также оббежать таблицу значений, откуда я беру значения поиска (в ней, кстати, тоже надо будет ключ добавить).
А объединить две таблицы значений никак нельзя?
8 1Сергей
 
05.03.11
11:53
(7) откуда взялась таблица? может на этапе её формирования создавать ключ?
9 1Сергей
 
05.03.11
11:54
(7) в общем, если не подходит, тогда (4).1
10 AeDen
 
05.03.11
11:57
(7) Почему нельзя? Можно. Если оне одинаковые.
11 povar
 
05.03.11
11:58
"а также оббежать таблицу значений, откуда я беру значения поиска (в ней, кстати, тоже надо будет ключ добавить). "
не надо
12 Vika_22
 
05.03.11
11:59
(8)У меня может быть две таблицы значений, они являются выгрузками из двух запросов. В одном запросе: тип----проба---приход; в другом запросе: тип----проба---расход
Вот надо бы объединить.
13 Vika_22
 
05.03.11
12:00
(11) Да. Точно не надо)
14 povar
 
05.03.11
12:00
(12) а в одном запросе разве нельзя получить и + и - ?
15 1Сергей
 
05.03.11
12:00
(12) тогда еще проще
16 1Сергей
 
05.03.11
12:01
ТЗ.КоличествоСтрок(...
ТЗ.Загрузить(...
ТЗ.Свернуть(...
17 Vika_22
 
05.03.11
12:01
(10) А точно, можно же «закинуть» одну таблицу значений в другую, а затем все свернуть)))
18 Vika_22
 
05.03.11
12:09
Спасибо Всем)
19 Vika_22
 
05.03.11
12:11
(17) Мне удобнее использовать Выгрузить
20 Vika_22
 
05.03.11
12:13
(19) Хотя без разницы вроде
21 1Сергей
 
05.03.11
12:16
(20) Загрузить быстрее
22 povar
 
05.03.11
12:17
зачем два запроса, чтобы получить Приход и Расход ?
23 Ёпрст
 
гуру
05.03.11
12:19
(21) Выгрузить быстрее..
24 Ёпрст
 
гуру
05.03.11
12:19
(19) и правильно делаешь.
25 Злопчинский
 
05.03.11
12:20
А Заполнить, говорят, еще быстрее
26 1Сергей
 
05.03.11
12:20
(23) а, точно
(21) сторно
27 Vika_22
 
05.03.11
12:21
(22) Приход берется по регистру, расход по документам. Скрестить никак нельзя, поскольку расход нужен только по одному виду документов, а приход по всем, кроме того в котором расход.
28 Ёпрст
 
гуру
05.03.11
12:23
(27) ты напиши оба текста запроса, а мы посмотрим..
Мот вообще всё что ты делаешь нужно коту под хвост..
:)
29 povar
 
05.03.11
12:25
(27) нее, в консерватории надо менять, что то...
30 Vika_22
 
05.03.11
12:27
(28) ЗАПРОС1:
   ТекстЗапроса =
   "//{{ЗАПРОС
   |Период с (ДатаНачала) по (ДатаКонца);    
   |Номенклатура                     = Регистр.Производство.Номенклатура;
   |Количество                         = Регистр.Производство.Количество;
   |ОбщВес                             = Регистр.Производство.ОбщВес;
   |ОбщВесЧист                         = Регистр.Производство.ОбщВесЧист;
   |Фирма                             = Регистр.Производство.Фирма;
   |Склад                             = Регистр.Производство.Склад;
   |Тип                             = Регистр.Производство.Номенклатура.ТипНоменклатуры;
   |Проба                             = Регистр.Производство.Номенклатура.Проба;
   |Функция НачОстКоличество         = НачОст(Количество);
   |Функция НачОстОбщВес             = НачОст(ОбщВес);
   |Функция НачОстОбщВесЧист         = НачОст(ОбщВесЧист);
   |Функция ПриходКоличество           = Приход(Количество);
   |Функция ПриходОбщВес               = Приход(ОбщВес);
   |Функция ПриходОбщВесЧист           = Приход(ОбщВесЧист);
   |Функция КонОстКоличество         = КонОст(Количество);
   |Функция КонОстОбщВес             = КонОст(ОбщВес);
   |Функция КонОстОбщВесЧист         = КонОст(ОбщВесЧист);
   |Группировка Тип;  
   |Группировка Проба;
   |Условие(Фирма = ВыбФирма);
   |Условие(Склад = ВыбСклад);
   |"//}}ЗАПРОС
   ;

ЗАПРОС2:
"//{{ЗАПРОС(Расход)
   |Период с (ДатаНачала) по (ДатаКонца);
   |ОбрабатыватьДокументы Проведенные;
   |Фирма                            = Документ.Наряд.Фирма;
   |Склад                            = Документ.Наряд.СкладПолучатель;    
   |ВидДокумента                    = Документ.Наряд.ВидДокумента;    
   |Номенклатура                    = Документ.Наряд.Номенклатура;
   |Тип                            = Документ.Наряд.Номенклатура.ТипНоменклатуры;
   |Проба                            = Документ.Наряд.Номенклатура.Проба;
   |Количество                        = Документ.Наряд.Количество;    
   |ОбщВес                            = Документ.Наряд.ОбщВес;
   |ОбщВесЧист                        = Документ.Наряд.ОбщВесЧист;    
   |Функция РасходКоличество        = Сумма(Количество);
   |Функция РасходОбщВес            = Сумма(ОбщВес);
   |Функция РасходОбщВесЧист        = Сумма(ОбщВесЧист);
   |Группировка Тип;
   |Группировка Проба;
   |Условие (СокрЛП(ВидДокумента)    = ""Выполнение наряда"");
   |Условие (Фирма    = ВыбФирма);
   |Условие (Склад = ВыбСклад);
   |"//}}ЗАПРОС
31 Ёпрст
 
гуру
05.03.11
12:29
(30) документ Наряд, толкает регистр.Производство при проведении ??
32 Vika_22
 
05.03.11
12:31
(31)Да. У него два вида: "Заказ-наряд"; "Выполнение наряда".
33 Ёпрст
 
гуру
05.03.11
12:38
(32) расход делает ?
Тогда так: второй запрос выкидываешь, в первый добавляешь:
|Док = Регистр.Производство.ТекущийДокумент;
|Функция РасходКоличество           = Расход(Количество) Когда(Док.Вид() = ""Наряд"");
|Функция РасходОбщВес               = Расход(ОбщВес) Когда(Док.Вид() = ""Наряд"");
|Функция РасходОбщВесЧист           = Расход(ОбщВесЧист) Когда(Док.Вид() = ""Наряд"");
34 Ёпрст
 
гуру
05.03.11
12:39
+35 ну, можешь еще условие на ВидДокумента    = ""Выполнение наряда"" туда воткнуть..
35 Vika_22
 
05.03.11
14:05
(33) и (34) Данный вариант мне не подходит, поскольку Приход, остатки определяются по складу, который записан в регистре, а вот Расходы определяются по складу, который не записан в регистре.
36 Ёпрст
 
гуру
05.03.11
14:19
(35)Ну и бери склад с документа наряд:
|СкладПолучатель = Регистр.Производство.ТекущийДокумент.Наряд.СкладПолучатель;  

или имей его в результатах обхода группировок.
37 Vika_22
 
09.03.11
11:30
В общем, сделала, работает, забыла поблагодарить за участие)
Спасибо Всем.