8.х Регистр сведений

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем Dmitrij, 16 июн 2008.

  1. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    УТ 10.3
    Подскажите кто знает, как можно вытащить любое значение из любого поля регистраСведений КонтактнаяИнформация если известно Представление :unsure:
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    По представлению найти все записи, которые найдутся... :)
  3. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Код:
    Запрос=новый запрос();
    Запрос.Текст="Выбрать
    |   КонтактнаяИнформация.Поле10 КАК Адрес
    |ИЗ
    |   РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |ГДЕ
    |   КонтактнаяИнформация.Представление=&Представление";
    
    
    
    
    Правельно мыслю или нет?
  4. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Правильно понял.
  5. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Проблема, неполучается преравнять представение к адресу доставки, может кто сможет помочь.
    Мне нужно чтоб выводилось в отчете Поле 2 из регистра сведений контактная информация, но поле 2 должно соответствовать полю представление, а поле представление должно соответствовать полю адресДоставки документа реализация товаров и услуг.
  6. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Насколько я помню, Поле2 есть Регион (например, Москва) - это касается HRM. В УТ, думаю, аналогично.
    Я правильно понимаю то, что:
    1. Ты получаешь представление адреса из документа "Реализация товаров и услуг";
    2. Делаешь запрос в регистр сведений с параметром &Представление, равным вышеуказанному значению;
    3. Получаешь значение ресурса Поле2, которое и хочешь вывести в отчет?
  7. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Да, правильно понимаете, но проблема в том что я не могу создать параметр &Представление, не получается загрузить значение как у справочников:

    Код:
    ЗапросК=новый запрос();
    ЗапросК.текст="ВЫБРАТЬ
    |     Номенклатура.Ссылка
    |ИЗ
    |     Справочник.Номенклатура КАК Номенклатура";
    СписокОтбораНоменклатуры=запросК.Выполнить().Выгрузить();
    
    
    Так я делал у справочников, а как в регистрах незнаю.
  8. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Код:
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Представление", СтрокаАдреса);
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    КонтактнаяИнформация.Поле1,
    |    КонтактнаяИнформация.Поле2,
    |    КонтактнаяИнформация.Поле3,
    |    КонтактнаяИнформация.Поле4,
    |    КонтактнаяИнформация.Поле5,
    |    КонтактнаяИнформация.Поле6,
    |    КонтактнаяИнформация.Поле7,
    |    КонтактнаяИнформация.Поле8,
    |    КонтактнаяИнформация.Поле9,
    |    КонтактнаяИнформация.Поле10,
    |    КонтактнаяИнформация.Представление
    |ИЗ
    |    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |ГДЕ
    |    КонтактнаяИнформация.Представление ПОДОБНО &Представление";
    ТаблицаЗначений = Запрос.Выполнить().Выгрузить();
    
    
    
    Собственно, то, что тебе необходимо, насколько я тебя понял.
    Значение переменной СтрокаАдреса есть то самое Представление, как ты его называешь, из документа Реализация..
    Важно, чтобы оно соответствовало формату записей РС.
  9. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Необходимо учесть, что использование ПОДОБНО отрицательно влияет на производительность.
  10. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Я не думаю, что товарищ в массовом порядке собирается обрабатывать документы.
    А в целом, согласен.
  11. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Из Вашего примера следует что адрес доставки должен быть уже известен, а если адрес "находится" в этом же запросе? Можно чтоб сразу сравнивался с РС или адрес должен быть известен в любом случае до запроса

    Нет, документы будут обрабатываться в массовом порядке
  12. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Код:
        ЗапросР = Новый Запрос;
    ЗапросР.УстановитьПараметр("Представление",стр.АдресДоставки);
    ЗапросР.Текст = "ВЫБРАТЬ
    |    КонтактнаяИнформация.Поле2,
    |    КонтактнаяИнформация.Поле3,
    |    КонтактнаяИнформация.Поле4,
    |    КонтактнаяИнформация.Поле5,
    |    КонтактнаяИнформация.Поле6,
    |    КонтактнаяИнформация.Поле7,
    |    КонтактнаяИнформация.Поле8,
    |    КонтактнаяИнформация.Поле9,
    |    КонтактнаяИнформация.Поле10,
    |    КонтактнаяИнформация.Представление
    |ИЗ
    |    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |ГДЕ
    |    КонтактнаяИнформация.Представление ПОДОБНО &Представление";
    ЗапросР = Запрос.Выполнить().Выбрать();
    Представление=Новый ТаблицаЗначений;
    Представление.Колонки.Добавить("Поле");
    Представление.Колонки.Добавить("Поле3");
    Представление.Колонки.Добавить("Поле4");
    Представление.Колонки.Добавить("Поле5");
    Представление.Колонки.Добавить("Поле6");
    Представление.Колонки.Добавить("Поле7");
    Представление.Колонки.Добавить("Поле8");
    Представление.Колонки.Добавить("Поле9");
    Пока ЗапросР.Следующий()Цикл
    пр=Представление.Добавить();
    пр.поле=ЗапросР.поле2; //сообщение 
    пр.поле3=ЗапросР.поле3;
    пр.поле4=ЗапросР.поле4;
    пр.поле5=ЗапросР.поле5;
    пр.поле6=ЗапросР.поле6;
    пр.поле7=ЗапросР.поле7;
    пр.поле8=ЗапросР.поле8;
    пр.поле9=ЗапросР.поле9;
    КонецЦикла;
    
    
    LxS я попробовал запустить код в программе выходит сообщение "Поле объекта не обнаружено (поле2)" не могу найти в чем ошибка в регистре это поле есть ресурсы и далее поля УТ, БП, ЗУП во всех конфигурациях этот регистр одинаковый.
    И мне еще подсказали что в 1С есть оператор который может выводить данные как укажут например: 5 знаков до запятой и 3 после. Вы что нибудь о таком слышали?
  13. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Почитай литературу по составлению запросов. Ты перемешиваешь понятия.
    Результат запроса сразу можно выгрузить в ТЗ. Даже без определения.(То самое твое Представление)
    Код:
        ЗапросР = Новый Запрос;
    ЗапросР.УстановитьПараметр("Представление",стр.АдресДоставки);
    ЗапросР.Текст = "ВЫБРАТЬ
    |    КонтактнаяИнформация.Поле2,
    |    КонтактнаяИнформация.Поле3,
    |    КонтактнаяИнформация.Поле4,
    |    КонтактнаяИнформация.Поле5,
    |    КонтактнаяИнформация.Поле6,
    |    КонтактнаяИнформация.Поле7,
    |    КонтактнаяИнформация.Поле8,
    |    КонтактнаяИнформация.Поле9,
    |    КонтактнаяИнформация.Поле10,
    |    КонтактнаяИнформация.Представление
    |ИЗ
    |    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |ГДЕ
    |    КонтактнаяИнформация.Представление ПОДОБНО &Представление";
    
    Представление=ЗапросР.Выполнить().Выгрузить();
    
    
    По поводу "оператора" не скажу, не помню. Гляну, скажу тогда, если меня кто-либо не опередит. Скорее, одна из функций общих модулей.
  14. AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    Этот волшебный оператор называет Формат :)
  15. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Точняк. Невнимательно прочитал вопрос.
  16. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Хорошо, а как мне вывести тогда в печатную форму все эти поля если к ним нельзя обратится так как я делал
  17. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    К уже описанному коду добавляешь:

    Код:
    ТабДок = Новый ТабличныйДокумент;
    Макет  = ПолучитьМакет("Макет"); //Макет обработки
    Шапка  = Макет.ПолучитьОбласть("Шапка");//Если есть
    СтрокаДанных = Макет.ПолучитьОбласть("СтрокаДанных");
    ТабДок.Вывести(Шапка);
    Для каждого ТекущаяСтрока Из Представление Цикл;
    СтрокаДанных.Параметры.Заполнить(ТекущаяСтрока);//Подразумевается, что в данной области имена 
    ТабДок.Вывести(СтрокаДанных);                   //параметров совпадают с синонимами из запроса;
    КонецЦикла;
    ТабДок.Показать();
    
    
    
    
    
    Надеюсь, работу с табличными документами описывать не надо?
  18. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Я не знаю, может не правильно что то объяснил, но в конечном итоге мне нужно чтоб у меня выводилось в отчете в одной колонке регион в другой город в третьей улица и т.д.
    Код:
    Запрос.Текст="ВЫБРАТЬ
    |   РеализацияТоваровУслугТовары.Ссылка,
    |   РеализацияТоваровУслугТовары.Ссылка.Номер,
    |   РеализацияТоваровУслугТовары.Ссылка.Контрагент,
    |   РеализацияТоваровУслугТовары.Ссылка.Организация,
    |   РеализацияТоваровУслугТовары.Ссылка.АдресДоставки,
    |   РеализацияТоваровУслугТовары.Ссылка.Ответственный,
    |	РеализацияТоваровУслугТовары.Номенклатура,
    |	РеализацияТоваровУслугТовары.Количество КАК Количество,
    |	ЕдиницыИзмерения.Ссылка КАК ЕдИзм,
    |	ЕдиницыИзмерения.Вес КАК СуммарныйВес,
    |   РеализацияТоваровУслугТовары.Номенклатура.Артикул КАК Код,
    |   РеализацияТоваровУслугТовары.Ссылка.Контрагент.СпрФорматов КАК Формат,
    |   РеализацияТоваровУслугТовары.Ссылка.Контрагент.СпрГК КАК Клиент
    |ИЗ
    |	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения  
    |ПО РеализацияТоваровУслугТовары.Номенклатура = ЕдиницыИзмерения.Владелец
    |ГДЕ
    |   РеализацияТоваровУслугТовары.Ссылка.Организация = &Организация
    |   И РеализацияТоваровУслугТовары.Ссылка.Контрагент В(&СписокКонтрагентов)
    |   И РеализацияТоваровУслугТовары.Ссылка.Проведен
    |   И РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца
    |   И РеализацияТоваровУслугТовары.Номенклатура в(&СписокНоменклатуры)";
    
    
    
    Выборка=Запрос.выполнить().выбрать();
    ТЗ=Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Документ");
    ТЗ.Колонки.Добавить("Номер");
    ТЗ.Колонки.Добавить("Код");
    //ТЗ.Колонки.Добавить("Адрес");
    ТЗ.Колонки.Добавить("Формат");
    ТЗ.Колонки.Добавить("Клиент");
    ТЗ.Колонки.Добавить("Ответственный");
    //ТЗ.Колонки.Добавить("Представление");
    ТЗ.Колонки.Добавить("СуммарныйВес");
    ТЗ.Колонки.Добавить("Контрагент");
    ТЗ.Колонки.Добавить("Номенклатура");
    ТЗ.Колонки.Добавить("АдресДоставки");
    ТЗ.Колонки.Добавить("Количество");
    Макет = ПолучитьМакет("Макет");
    ТабДокумент = Новый ТабличныйДокумент;
    Шапка  = Макет.ПолучитьОбласть("Шапка");
    Заглавие=Макет.ПолучитьОбласть("Заглавие");
    Шапка.Параметры.ДатаНачала=ДатаНачала;
    Шапка.Параметры.ДатаОкончания=ДатаКонца;
    ТабДокумент.Вывести(шапка);
    ТабДокумент.Вывести(заглавие);
    строка=Макет.ПолучитьОбласть("Строка");
    Пока Выборка.следующий() цикл
    Стр=ТЗ.Добавить();
    Стр.Документ=Выборка.Ссылка;
    стр.Номер=Выборка.Номер;
    Стр.Ответственный=Выборка.Ответственный;
    Стр.Код=Выборка.Код;
    Стр.Формат=Выборка.Формат;
    Стр.Клиент=Выборка.Клиент;
    стр.Контрагент=Выборка.Контрагент;
    стр.АдресДоставки=Выборка.АдресДоставки;
    Стр.Номенклатура=Выборка.номенклатура;
    Стр.Количество=Выборка.Количество;
    стр.СуммарныйВес=Выборка.СуммарныйВес*Стр.Количество;
    КонецЦикла;
    Для к=0 по  тз.количество()-1 цикл
    стр=тз.получить(к);
    Строка.Параметры.ДатаДок=Лев(стр.Документ.Дата,10);
    Строка.Параметры.Артикул=стр.Номер;
    Строка.Параметры.Код=Стр.Код;
    Строка.Параметры.Клиент=Стр.Клиент;
    Строка.Параметры.Формат=Стр.Формат;
    Строка.Параметры.Контрагент=стр.Контрагент;
    Строка.Параметры.Номенклатура=стр.Номенклатура;
    Строка.Параметры.Количество=Стр.СуммарныйВес;
    Строка.Параметры.Адрес=стр.АдресДоставки;
    Строка.Параметры.Отв=Стр.Ответственный;
    ТабДокумент.Вывести(строка);
    КонецЦикла;
    ТабДокумент.ТолькоПросмотр=Истина;
    ТабДокумент.Показать();
    ТабДокумент.ТолькоПросмотр=Истина
    
    это код который выводит все нужные поля в отчете кроме раздельного адреса,
    Код:
    Для каждого ТекущаяСтрока Из Представление Цикл
    СтрокаДанных.Параметры.Заполнить(ТекущаяСтрока);//Подразумевается, что в данной области имена 
    ТабДок.Вывести(СтрокаДанных);                   //параметров совпадают с синонимами из запроса;
    КонецЦикла;
    
    этот код подставлял, цикл не выполняется
  19. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Курите в типовых функции из модуля КонтактнаяИнформация и УправлениеКонтактнойИнформацией - там все есть.
  20. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Дело в том, что используя функцию ПолучитьСтруктуруАдресаИзСтроки(Знач СтроковыйАдрес) общего модуля УправлениеКонтактнойИнформацией, мы никогда практически не получим возможности разбить строковый адрес на поля. Успешными подобные попытки будут только тогда, когда представление адреса будет содержать ровно 9 запятых, согласно структуре адреса. Думаю, мало кто помнит, а даже если и помнит, то указывает значения всех полей, составляющих адресную строку. Поэтому считаю, что проще делать запрос в РС, пусть и с потерей времени и производительности. По крайней мере так больше шансов получить искомые значения.

    То Dmitrij: чувак, недостаточно просто воткнуть мой код в свою процедуру. Наверное, надо посмотреть и сравнить, как я получаю данные и куда выгружаю, и ПЕРЕДЕЛАТЬ под себя. в твоем макете есть область Строка - я в примере назвал эту область СтрокаДанных. Далее, для того, чтобы получить то, что ты хочешь, надо воткнуть мой запрос в свою процедуру, параметр &Представление приравнять к значению АдресДоставки из своей выборки, и, учитывая то, что я вытаскиваю в запросе все поля с их оригинальными названиями, в макете, в области Строка (читай, твоей области), указать одноименные параметры и только тогда ты сможешь использовать конструкцию <ИмяОбласти>.Параметры.Заполнить(...) и получить желаемое.

Поделиться этой страницей