Имя: Пароль:
1C
1С v8
Как производится поиск по колонкам?
,
0 LivingStar
 
19.08.13
12:50
Имеется Тз, выгруженная из запроса, в ней, есть номенклатура, торговые точки, обороты. Мне нужно составить столбец из торговых точек, где колонки будут равны наименованию номенклатуре а значения в номенклатуре оборотам. В данной тз, всего 2 вида номенклатуры и 15 точек торговых. Как  производить поиск в колонках по наименованию, если я его так задаю. А то получается у меня ни одна колонка не находится, а они все разворачиваются в право, с идентификаторами Колонка_1, Колонка_2, Колонка_3....Колонка_N ...
1 LivingStar
 
19.08.13
12:51
Для каждого Стр Из Тз Цикл
        СущСтрока = ТзНов.Найти(Стр.ТорговаяТочка, "ТорговаяТочка");
        Если СущСтрока = Неопределено Тогда
            НоваяСтрока               = ТзНов.Добавить();
            НоваяСтрока.ТорговаяТочка = Стр.ТорговаяТочка;
            НоваяСтрока.Адрес         = Стр.Адрес;
            СущКолонка = ТзНов.Колонки.Найти(Стр.Номенклатура.Наименование);
            Если СущКолонка = Неопределено Тогда
                ТзНов.Колонки.Добавить(ИмяКолонки, ОписаниеТиповЧ, Стр.Номенклатура.Наименование);
                НоваяСтрока[ИмяКолонки] = Стр.Оборот;
                н                         = н + 1;
                ИмяКолонки              = "Колонка_" + н;
            Иначе
                СущКолонка[ИмяКолонки]  = Стр.Оборот;    
            КонецЕсли;
        Иначе
            СущКолонка = ТзНов.Колонки.Найти(Стр.Номенклатура.Наименование);
            Если СущКолонка = Неопределено Тогда
                ТзНов.Колонки.Добавить(ИмяКолонки, ОписаниеТиповЧ, Стр.Номенклатура.Наименование);
                НоваяСтрока[ИмяКолонки] = Стр.Оборот;
                н                         = н + 1;
                ИмяКолонки              = "Колонка_" + н;
            Иначе
                СущКолонка[ИмяКолонки]  = Стр.Оборот;    
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
2 Тролль главный
 
19.08.13
12:52
а не проще ли узнать какая номенклатура попадает в выборку заранее, потом строить динамически запрос с полями, полученными из UID ссылок номенклатуры
3 LivingStar
 
19.08.13
12:55
(2) может проще я не сообразил, что за UID ссылок
4 LivingStar
 
19.08.13
12:57
так а методы что в (1) Колонки.Найти() почему не ищет? Я же при создании указываю номенклатуру.Наименование
5 LivingStar
 
19.08.13
13:04
Я реально сейчас в тупике, как мне (1) разложить
6 LivingStar
 
19.08.13
13:07
(2) Можно поподробнее ваш метод? Если не трудно?
7 Тролль главный
 
19.08.13
13:11
не трудно, но так как ты уже всех тут зае..., то это стоит денег
8 LivingStar
 
19.08.13
13:12
(7) тогда пикидай ветку мою.....
9 LivingStar
 
19.08.13
13:13
(7) видать скоро вообще в падлу будет сюда зайти
10 mikecool
 
19.08.13
13:14
(0) я ну.уя не понял. Думаю НайтиСтроки решит проблему или нет!
11 LivingStar
 
19.08.13
13:15
(10) Попробую сейчас, так она же несколько их ищет, я думал точно срабатывает наименование, но оказывается не ищет по самому наименованию, которое используется только для визуального представления.....
12 mistеr
 
19.08.13
13:16
(0) СКД тебе поможет.
13 LivingStar
 
19.08.13
13:18
(12) Как то её не использую, в ней разбираться нужно. А если я её не использую то не для меня она.
14 Тролль главный
 
19.08.13
13:25
(13\) не используй уже 1С
15 LivingStar
 
19.08.13
13:27
(10) да не, дело в поиске колонок по созданному наименованию, в поиске строк то нет проблем
16 LivingStar
 
19.08.13
13:28
(12) мне надо быстро разработать эту форму, с СКД мне нужно разбираться, давно не смотрел её
17 Wobland
 
19.08.13
13:29
поиск по колонкам производится внезапно методом Найти(). что дальше?
18 mistеr
 
19.08.13
13:30
(16) Значит в следующий раз не бери задачи не по силам.
19 mistеr
 
19.08.13
13:31
(17) Не засоряй тему, ему ж готовый код нужен. Бесплатно.
20 LivingStar
 
19.08.13
13:32
(18) у меня об этом не спрашивают
(19) код готовый мне не нужен
(17) передаю наименование в поиск по колонкам, не ищет, так как там их нет наименований....
21 Wobland
 
19.08.13
13:34
(20) ты произвёл поиск //я (0) не осилил
22 LivingStar
 
19.08.13
13:35
(21) в колонках у меня не наименования, а "Колонка_1", "Колонка_2" и т.п. При добавлении наименование задаю, но оно не устанавливается....
23 Wobland
 
19.08.13
13:36
(22) ну вот, ты уже знаешь причину, это уже пол-дела
24 LivingStar
 
19.08.13
13:40
(23) Я думал наименования встают при добавлении и потом по ним можно осуществлять поиск. А если нет то нельзя ...
25 Wobland
 
19.08.13
13:41
(24) встают. "Колонка_1", "Колонка_2" и т.п. - твои наименования
26 V01tk2010
 
19.08.13
13:42
ТзНов.Колонки.Добавить(ИмяКолонки, ОписаниеТиповЧ, Стр.Номенклатура.Наименование);
А чему равно ИмяКолонки?
27 V01tk2010
 
19.08.13
13:43
ТзНов.Колонки.Добавить(Стр.Номенклатура.Наименование, ОписаниеТиповЧ, Стр.Номенклатура.Наименование);
Может так?
28 LivingStar
 
19.08.13
13:46
(26) Так первый параметр идентификатор колонки, он не может содежжать пробелов и символов что содержится в наименовании номенклатуры
29 Wobland
 
19.08.13
13:47
какую-то ересь автор затеял.. СКД уже предлагали?
30 LivingStar
 
19.08.13
13:50
(29) не умею я ей пользоваться.....
31 V01tk2010
 
19.08.13
13:50
тогда нужен массив соответствий именам колонки к номенкдатуре. Типа если номенклатура такая то колонка1
32 V01tk2010
 
19.08.13
13:54
А для 2 номенклатур вообще лучше так. Если Номенклатура1 то
НоваяСтрока[1]
33 hhhh
 
19.08.13
13:54
надо отдельный раздел в книге знаний завести. И туда все эти темы. Типа запредельное программирование. Решение задач без использования КД, СКД и прочих там Д.
34 LivingStar
 
19.08.13
13:57
(31) Ок, учту ваш совет, а то уже думал про объекты в 1с, что нет возможности для такого алгоритма....

(33) Хотел обойтись штатными средствами ...
35 LivingStar
 
19.08.13
14:00
(31) Да точно, массив или соответствие...Буду двигаться в этом направлении....
36 LivingStar
 
20.08.13
05:00
(35+) Список значений самый лучший объект для этого, с его применением как то и обрабатывал такую ситуацию
37 LivingStar
 
20.08.13
05:28
(36) А вот и нет!!! Не в этом случае, так как нужно получать идентификатор колонки, как говорили нужен двумерный массив. Но я думаю воспользоваться ещё одной таблицей значений....
38 Wobland
 
20.08.13
05:51
соо[НаименованиеНоменклатуры] - имя колонки
39 LivingStar
 
20.08.13
06:56
(38) Вот код который, формирует таблицу в нужном виде..

Но как мне сейчас её вывести? Имея вертикальные секции Шапка, Строка и горизонтальные ТорговаяТочка, Адрес, Номенклатура... Сделал параметром секцию "Шапка|Номенклатура", а как в неё помещать название номенклатуры? Которое имеется в таблице соответствий ТзКолонок?
40 LivingStar
 
20.08.13
06:56
(39+)

    Для каждого Стр Из Тз Цикл
        СущСтрока = ТзНов.Найти(Стр.ТорговаяТочка, "ТорговаяТочка");
        Если СущСтрока = Неопределено Тогда
            НоваяСтрока               = ТзНов.Добавить();
            НоваяСтрока.ТорговаяТочка = Стр.ТорговаяТочка;
            НоваяСтрока.Адрес         = Стр.Адрес;
            Если ТзНов.Колонки.Количество() < 3 Тогда
                //
                СтрТзКолН                       = ТзКолонок.Добавить();
                СтрТзКолН.ИмяКолонки          = ИмяКолонки;
                СтрТзКолН.НаименованиеКолонки = Стр.Номенклатура.Наименование;
                //
                ТзНов.Колонки.Добавить(ИмяКолонки, ОписаниеТиповЧ, Стр.Номенклатура.Наименование);
                НоваяСтрока[СтрТзКолН.ИмяКолонки] = Стр.Оборот;
                н                                   = н + 1;
                ИмяКолонки                        = "Колонка_" + н;
            Иначе        
                НайденаКолонка = ТзКолонок.Найти(Стр.Номенклатура.Наименование,"НаименованиеКолонки");
                Если НайденаКолонка = Неопределено Тогда
                    //
                    СтрТзКолН                       = ТзКолонок.Добавить();
                    СтрТзКолН.ИмяКолонки          = ИмяКолонки;
                    СтрТзКолН.НаименованиеКолонки = Стр.Номенклатура.Наименование;
                    //
                    ТзНов.Колонки.Добавить(ИмяКолонки, ОписаниеТиповЧ, Стр.Номенклатура.Наименование);
                    НоваяСтрока[СтрТзКолН.ИмяКолонки] = Стр.Оборот;
                    н                         = н + 1;
                    ИмяКолонки              = "Колонка_" + н;
                Иначе
                    НоваяСтрока[НайденаКолонка.ИмяКолонки] = Стр.Оборот;    
                КонеЦЕсли;
            КонецЕсли;
        Иначе
            НайденаКолонка = ТзКолонок.Найти(Стр.Номенклатура.Наименование,"НаименованиеКолонки");
            Если НайденаКолонка = Неопределено Тогда
                //
                СтрТзКолН                       = ТзКолонок.Добавить();
                СтрТзКолН.ИмяКолонки          = ИмяКолонки;
                СтрТзКолН.НаименованиеКолонки = Стр.Номенклатура.Наименование;
                //
                ТзНов.Колонки.Добавить(ИмяКолонки, ОписаниеТиповЧ, Стр.Номенклатура.Наименование);
                СущСтрока[СтрТзКолН.ИмяКолонки] = Стр.Оборот;
                н                                 = н + 1;
                ИмяКолонки                      = "Колонка_" + н;
            Иначе
                СущСтрока[НайденаКолонка.ИмяКолонки] = Стр.Оборот;    
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
41 Rie
 
20.08.13
07:01
(40) Выкинь каку. Напрочь.
42 LivingStar
 
20.08.13
07:06
(41) И к чему ты это говоришь? С людьми вывели решение, я его реализовал, сейчас думаю как вывести это.....
43 Rie
 
20.08.13
07:09
(42) В исходном запросе -
УПОРЯДОЧИТЬ ПО
    ТорговаяТочка,
    Номенклатура
И не потребуется таблица значений.
Потом циклом идёшь по выборке из результата запроса.

Что касается "вывести" - какие трудности при этом испытываешь?
В (39) насчёт вывода ничего не сказано.
44 LivingStar
 
20.08.13
07:44
(43) Честно хотелось бы допилить то что имею. А потом уже рассмотреть ваш вариант, как более адекватный, так как в своем слишком далеко защел.

Трудность с выводом заголовков номенклатуры у меня, в выводимой таблице они есть как Колонка_1, Колонка2... Колонка_N. Я могу их находить по Колонка_N в таблице соответствий, но как мне выводить в макет это в поле Номенклатура который как параметр в шапке...... Так как это поле динамически меняется, и у каких то строк там значение 0
45 LivingStar
 
20.08.13
07:45
(43) вот исходный запрос, чем это легде я не понимаю...
46 LivingStar
 
20.08.13
07:45
ЫБРАТЬ
    ПродажиОбороты.Номенклатура                                     КАК Номенклатура,
    ПродажиОбороты.Регистратор.ТорговаяТочка                     КАК ТорговаяТочка,
    ПродажиОбороты.КоличествоОборот                              КАК Оборот,
    ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(100)) КАК Адрес
ИЗ
РегистрНакопления.Продажи.Обороты(&НачДата, &КонДата, Регистратор, Номенклатура В ИЕРАРХИИ (&SKU) И ДокументПродажи.Склад = &Склад) КАК ПродажиОбороты    
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
        ПО ПродажиОбороты.Регистратор.ТорговаяТочка = КонтактнаяИнформация.Объект
            И (КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес))
            И (КонтактнаяИнформация.Вид.Код = "000000027")
УПОРЯДОЧИТЬ ПО
    ПродажиОбороты.Регистратор.ТорговаяТочка,
    ПродажиОбороты.Номенклатура.Наименование
47 LivingStar
 
20.08.13
07:47
сама проблема сейчас с выводом заголовков номенклатуры
48 Rie
 
20.08.13
07:49
(47) О запросе - потом.
В чём состоит проблема с выводом заголовков номенклатуры?
49 LivingStar
 
20.08.13
08:04
(48) Проблема с выводом в том что у меня вот такая таблица, и есть таблица соответствий где именам колонок соответствуют наименования номенклатуры. Но вывожу то я эту таблицу, как наименования колонок то ей устанавливать выводя её,

http://i038.radikal.ru/1308/6a/b66d9dd2c586.jpg
50 Rie
 
20.08.13
08:07
(49) Установи свойство ТекстШапки колонки табличного поля.
51 LivingStar
 
20.08.13
08:15
(50) Ок, сейчас буду пробовать!!! Это можно делать в процессе вывода строк? Я не пойму как я могу устанавливать свойство шапки когда я вывожу строки, не дойдет никак все это в совокупности...

Пока вот так вывел но без наименования колонок в табличном поле

    //
    ЭлементыФормы.ТабРезультат.Вывести(ОбластьШапка1);    
    ЭлементыФормы.ТабРезультат.Присоединить(ОбластьШапка2);    
    //
    Для Каждого Стр Из ТабЗнач Цикл
        ОбластьСтроки1.Параметры.ТорговаяТочка  = Стр.ТорговаяТочка;
        ЭлементыФормы.ТабРезультат.Вывести(ОбластьСтроки1);    
        ОбластьСтроки2.Параметры.Адрес          = Стр.Адрес;
        ЭлементыФормы.ТабРезультат.Присоединить(ОбластьСтроки2);    
        Для г = 2 По ТабЗнач.Колонки.Количество()-1 Цикл
            ОбластьСтроки3.Параметры.Обороты = Стр[ТабЗнач.Колонки[г].Имя];
            ЭлементыФормы.ТабРезультат.Присоединить(ОбластьСтроки3);    
        КонецЦикла;
    КонецЦикла;
52 Rie
 
20.08.13
08:18
(51) Ты выводишь в табличное поле или в табличный документ?
В (50) - это для _табличного поля_ сказано.
В (51) - речь явно идёт о _табличном документе_.
Для табличного документа - не так.
53 Rie
 
20.08.13
08:19
+(52) В табличном документе - там цикл. С Присоединить().
54 LivingStar
 
20.08.13
08:19
(52)  да я делаю вывод таблицы значений в табличный документ, тогда мне у него как то нужно устанавливать свойство шапки....
55 LivingStar
 
20.08.13
08:20
(54+) думал это у меня табличное поле....
56 Rie
 
20.08.13
08:20
(54) Не надо устанавливать никаких текстов шапок - их нет у табличного документа.
Выводишь шапку аналогично строкам.
57 LivingStar
 
20.08.13
08:20
(53) С присоединить можно устанавливать текст шапки? присоединить вызывается же столько раз сколько колонок и строк???
58 LivingStar
 
20.08.13
08:21
(56) понял, спасибо за поддержку, сейчас буду собираться с мыслями.......
59 LivingStar
 
20.08.13
08:22
кажется в (56) меня осенило....
60 Rie
 
20.08.13
08:24
(57) Столько, сколько _колонок_! Строки-то тут чем виноваты?
Независимо от того, куда вы едете — это в гору и против ветра!