Имя: Пароль:
1C
1С v8
Достать из КИ Организации WebСайт и Email
,
0 Александр43
 
25.07.19
09:26
Есть запрос, который вытаскивает все типы из контактной информации (КИ). Необходимо достать WebСайт и Email организации по типу данных, с привязкой к определенной организации.
Еще новичок в 1с, поэтому испытываю некоторые трудности. В параметрах "Тип" нужно использовать массив, чтобы в дальнейшем через выборку реализовать поиск нужной информации. Пожалуйста разъясните, как правильно сделать массив и выборку. Или может это можно сделать как-то проще?




Запрос.Текст = "ВЫБРАТЬ
                         |  КонтактнаяИнформация.Тип КАК Тип,
                         |  КонтактнаяИнформация.Представление КАК Представление
                         |ИЗ
                         |  РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
                         |ГДЕ
                         |  КонтактнаяИнформация.Объект = &Организация
                         |  И КонтактнаяИнформация.Тип В(&Типы)
                         |ИТОГИ ПО
                         |  Тип" ;
        
        
         Запрос.УстановитьПараметр("Организация", Организация);
         Запрос.УстановитьПараметр("Тип",  );
         Результат = Запрос.Выполнить();
1 Мимохожий Однако
 
25.07.19
09:29
Посмотри какой тип значения у параметра Тип в твоём запросе. Его и добавить в массив.
2 Александр43
 
25.07.19
09:42
(1) МассивТипыДанных = Новый Массив;
         МассивТипыДанных.Добавить(Тип("Перечисления.ТипыКонтактнойИнформации.ЭлектроннойПочты"));
         МассивТипыДанных.Добавить(Тип("Перечисления.ТипыКонтактнойИнформации.ВебСтраница"));
        
         Запрос.Текст = "ВЫБРАТЬ
                         |  КонтактнаяИнформация.Тип КАК Тип,
                         |  КонтактнаяИнформация.Представление КАК Представление
                         |ИЗ
                         |  РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
                         |ГДЕ
                         |  КонтактнаяИнформация.Объект = &Организация
                         |  И КонтактнаяИнформация.Тип В(&Типы)
                         |ИТОГИ ПО
                         |  Тип" ;
        
        
         Запрос.УстановитьПараметр("Организация", Организация);
         Запрос.УстановитьПараметр("Тип", МассивТипыДанных);
         Результат = Запрос.Выполнить();
Т.е получается как-то так?
3 Мимохожий Однако
 
25.07.19
09:46
(2) Ну так и проверь )
4 Мимохожий Однако
 
25.07.19
09:47
Возможно правильнее как-то так  МассивТипыДанных.Добавить(Перечисления.ТипыКонтактнойИнформации.ЭлектроннойПочты);
5 Александр43
 
25.07.19
09:58
(4) А выборка такая будет? Или что-то не так делаю?
Пока Выборка.Следующий() Цикл
            
            ВебСтраница = "";
            АдресЭлектроннойПочты = "";
            ВыборкаКИ = Выборка.Выбрать();
         Пока ВыборкаКИ.Следующий() Цикл
                ВебСтраница = ВебСтраница + ВыборкаКИ.Представление;
                АдресЭлектроннойПочты = АдресЭлектроннойПочты + ВыборкаКИ.Представление;
         КонецЦикла;
6 Мимохожий Однако
 
25.07.19
10:00
(5) Отладчиком пользоваться умеешь? Консоль запросов? Быстрее посмотреть у себя, чем гадать на форуме. Не надо стесняться. Сначала на консоли отладь. Потом воткни запрос в код обработки и смотри отладчиком.
7 Александр43
 
25.07.19
10:57
(6) Данные получает, ноо их заменяет потом на последние полученные данные. Тоесть я получил данные веб страницы, а они потом заменились Майлом
Пока Выборка.Следующий() Цикл
            ВебСтраница = "";
            АдресЭлектроннойПочты = "";
            ВыборкаКИ = Выборка.Выбрать();
             Пока ВыборкаКИ.Следующий() Цикл
                ВебСтраница = ВебСтраница + ВыборкаКИ.Представление;
                АдресЭлектроннойПочты = АдресЭлектроннойПочты + ВыборкаКИ.Представление;
             КонецЦикла;    
                    
         КонецЦикла;
8 catena
 
25.07.19
11:18
(7)А зачем два цикла? А зачем обнулять переменный на каждой итерации? А зачем писать одно и то же в две разные переменные? А где проверка - майл это или веб?
9 Александр43
 
25.07.19
12:05
(8) Еще только обучаюсь и не все нюансы знаю, по этому сюда и написал, чтобы помогли разобраться
10 Александр43
 
25.07.19
12:08
(8) Научите пожалуйста, как правильно это реализовать
11 catena
 
25.07.19
12:32
(10)По предыдущим вопросам все исправил?
12 Александр43
 
25.07.19
12:47
(11) Если я убираю 2 цикл, то данные вообще тогда не находит. Пока так и осталось

Запрос.Текст = "ВЫБРАТЬ
                         |  КонтактнаяИнформация.Тип КАК Тип,
                         |  КонтактнаяИнформация.Представление КАК Представление
                         |ИЗ
                         |  РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
                         |ГДЕ
                         |  КонтактнаяИнформация.Объект = &Организация
                         |  И КонтактнаяИнформация.Тип В(&Типы)
                         |ИТОГИ ПО
                         |  Тип" ;
         Запрос.УстановитьПараметр("Организация", Организация);
         Запрос.УстановитьПараметр("Типы", МассивТипыДанных);
         Результат = Запрос.Выполнить();
         Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
         Пока Выборка.Следующий() Цикл
            ВебСтраница = "";
            АдресЭлектроннойПочты = "";
            ВыборкаКИ = Выборка.Выбрать();
             Пока ВыборкаКИ.Следующий() Цикл
                ВебСтраница = ВебСтраница + ВыборкаКИ.Представление;
                АдресЭлектроннойПочты = АдресЭлектроннойПочты + ВыборкаКИ.Представление;
             КонецЦикла;    
      
         КонецЦикла;
13 catena
 
25.07.19
12:49
(12)Прошу прощения, я не увидела, что там итоги. Тогда еще вопрос: Для чего в запросе итоги?
14 hhhh
 
25.07.19
12:51
(12) а где тип тут проверяете?

если выборка.тип = хрензнаетчему тогда
ВебСтраница = ВыборкаКИ.Представление;
15 Александр43
 
25.07.19
13:09
(13) Мне в пакет нужно вывести Сайт и Mail, конкретной организации. Запрос их по типу данных находит и выводит
16 hhhh
 
25.07.19
13:12
(15) тогда в чем вопрос? если выводит?
17 catena
 
25.07.19
13:13
(15)Я задачу еще из первого поста поняла. Итоги как в этом помогают?
18 Александр43
 
25.07.19
14:00
(16) С запросом я сам разбираюсь, проблемы с Выборкой, не умею ее правильно оформлять, поэтому столько ошибок и далее получается охинеяя. Мне бы какой-нибудь пример, как оформить правильно, чтобы дальше самому по сидеть и по разбираться.
19 catena
 
25.07.19
14:43
(18) нормально у тебя выборка оформлена. У тебя проблема с логикой и переменными. Запиши по-русски, как должно работать, а поттм уже на одинэсовский пепеводи.
20 Александр43
 
25.07.19
15:00
(19) Я непонимаю, как сделать проверку то что Mail это Mail, а то если я даже оставлю одну переменную Mail адрес, то при повторном заходе в цикл, он Mail заменит Сайтом, так и выведет.
21 catena
 
26.07.19
04:48
(20) Тебе в (14) сказали, как.

Если ВыборкаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.ЭлектроннойПочты Тогда
                АдресЭлектроннойПочты = ВыборкаКИ.Представление;
Иначе
                ВебСтраница = ВыборкаКИ.Представление;
КонецЕсли;
22 ДенисЧ
 
26.07.19
07:24
Ну ты хотя бы Митичкина прочти... Или на худой конец Радченко...
Чего гадать-то?
23 Александр43
 
26.07.19
15:11
(21) Спасибо, разобрался и всё работает. Если не трудно, то подскажите как сделать чтобы переменная не заменялась при условии если сайтов указано больше 2х. Чтобы по выходу в макете отображались все сайты и страницы
24 Has
 
26.07.19
16:20
(23) как вариант - добавлять строку в макет (или туда, откуда ты там потом выводишь) при каждом получении из Выборка

зы: и зачем тогда разные переменные?
25 Александр43
 
26.07.19
16:42
(24) Ну да можно и одну переменную, но вроде строку нельзя в макет добавлять (могу ошибаться). Но если сделать одну переменную, он же сплошняком будет выводить всю информацию? Хотелось бы чтобы если переменная содержит уже сайт, в нее еще добавлялись другие сайты, при этом чтобы самый первый сайт не пропадал. А то у меня сейчас получается когда  1 сайт нашелся, он заменяется 2 сайтом и по итогу 2 на макет уходит.
26 Has
 
26.07.19
16:52

    ТабДокумент = Новый ТабличныйДокумент;
    //ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ИнвентаризацияТоваровНаСкладе_ИНВ3";
    
    Макет = ПолучитьМакет("НазваниеМакетаОтчета");
    
    //{вывод шапки отчета
    ОбластьМакета = Макет.ПолучитьОбласть("ОтчетШапка");
    //ОбластьМакета.Параметры.Заполнить(Шапка);
    ОбластьМакета.Параметры.НазваниеПечатнойФормы = "Отчет о ...";
    ОбластьМакета.Параметры.ЗаПериод = мойОбщийМодуль.Сформировать_ОписаниеПериода(ДатаНачПериода,ДатаКонПериода);
    //ОбластьМакета.Параметры.   =   ;    
    
    ТабДокумент.Вывести(ОбластьМакета);
    //}
    
    //{вывод шапки таблицы
    ОбластьМакета = Макет.ПолучитьОбласть("ТаблицаШапка");
    //ОбластьМакета.Параметры.Заполнить(ШапкаТаблицы);
    //ОбластьМакета.Параметры. = ;
    
    ТабДокумент.Вывести(ОбластьМакета);
    //}    
    
    
    //{вывод СтрокаДанных таблицы
    
    
    ОбластьМакета = Макет.ПолучитьОбласть("ТаблицаСтрокаДанных");
    
    тзДляВывода_КолСтрок=тзДляВывода.Количество();
    
    Для ш=0 По тзДляВывода_КолСтрок-1 Цикл
        
        //    Состояние(""+ш, Окр(ш/КолСтрок*100,0));    
        //Для ш=1 По 1     Цикл //отладка
        стр_тзДляВывода = тзДляВывода.Получить(ш);
        
        
        //ОбластьМакета.Параметры.НомерПоПорядку  = ш+1;
        //ОбластьМакета.Параметры. = ;
        
        ОбластьМакета.Параметры.Заполнить(стр_тзДляВывода);
        
        ТабДокумент.Вывести(ОбластьМакета);
        
    КонецЦикла;
    //}
    
    
    //{вывод ТаблицаПодвал
    
    ОбластьМакета = Макет.ПолучитьОбласть("ТаблицаПодвал");
    
    //ОбластьМакета.Параметры.ИтогоКоличествоОборотДт = тзДляВывода.Итог("КоличествоОборотДт");
    
    
    ТабДокумент.Вывести(ОбластьМакета);
    
    //}
    
    //{вывод ОтчетПодвал
    
    ОбластьМакета = Макет.ПолучитьОбласть("ОтчетПодвал");
    
    //ОбластьМакета.Параметры. = ;
    
    ТабДокумент.Вывести(ОбластьМакета);
    
    //}
    
    //{ Зададим параметры макета
    ТабДокумент.АвтоМасштаб = Истина;
    ТабДокумент.ПолеСверху = 10;
    ТабДокумент.ПолеСлева  = 10;
    ТабДокумент.ПолеСнизу  = 10;
    ТабДокумент.ПолеСправа = 10;
    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    //ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    ТабДокумент.ТолькоПросмотр=Истина;
    ТабДокумент.ПовторятьПриПечатиСтроки = Макет.ПолучитьОбласть("ТаблицаШапка");
    
    //{колонтитулы
    //верхний
    ТабДокумент.ВерхнийКолонтитул.Выводить=Истина;
    НачальнаяСтраница = 1 ;
    ТабДокумент.ВерхнийКолонтитул.ТекстСлева="";
    //ТабДокумент.ВерхнийКолонтитул.ТекстВЦентре="["+Склад+"] ["+тОписаниеПериода+"]";
    ТабДокумент.ВерхнийКолонтитул.ТекстСправа="[&Дата] [&Время]";
    //ТабДокумент.ВерхнийКолонтитул.Шрифт    
    
    //нижний
    ТабДокумент.НижнийКолонтитул.Выводить=Истина;
    ТабДокумент.НижнийКолонтитул.ТекстВЦентре="[&НомерСтраницы] из [&СтраницВсего]";
    //}
    
    //}
    ТабДокумент.Показать();