Т.е. зная Пользователя (владельца), волшебным образом счтываются данные по Контрагентам и заполняются данные.
У меня стоит задача обратная.
Имеется Контрагент, который хранится в ХранилищеЗначений регистра СохраненныеНастройки. Зная этого Контрагента мне нужно получить Пользователя из этого регистра.
Имеется документ ПКО, в нем есть реквизит "Агент". В документе прописан "Контрагент", зная его нужно заполнить реквизит "Агент" полем выбора, т.к. Контрагенту могут соответствовать несколько Пользователей (владельцев, Агентов) в регистре Сохраненные настройки.
Как можно обратится к ХранилищуЗначений, получить от туда Контрагента и сопоставить его с данными СохраненнойНастройки, как Пользователя (Владельца) и вставить значение Агента в реквизит документа ПКО?
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 320 раз
Рейтинг: 0
Constantus @ Сегодня, 7:48
, Сразу напрямую не найдете. Сначала нужно вычитать все эти настройки запросом, а дальше в цикле получать из хранилища данные и сравнивать контрагента. Как-то так:
Запрос = Новый Запрос; Запрос.ТЕкст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ * ИЗ РегистрСведений.СохраненныеНастройки КАК СохраненныеНастройки |ГДЕ | СохраненныеНастройки.НаименованиеНастройки = &ИмяНастройки |";
ПользовательСсылка = Неопределено; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий Цикл ХранилищеНастройки = Выборка.СохраненнаяНастройка; ЗначениеНастройки = ХранилищеНастройки.Получить(); Если ЗначениеЗаполнено(ЗначениеНастройки) И ТипЗнч(ЗначениеНастройки) = Тип("СправочникСсылка.Контрагенты") Тогда Если ЗначениеНастройки = ВАШКОНТРАГЕНТ Тогда ПользовательСсылка = Выборка.Пользователь; Прервать; КонецЕсли; КонецЕсли; КонецЦикла;
Дописываю конфигурации на платформе 8.х. - Управление торговым предприятием для Украины - Управление производственным предприятием для Украины - Управление небольшой фирмой для Украины - Бухгалтерия для Украины; - Общепит для Украины - Ресторан (Рарус) - Розница
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 320 раз
Рейтинг: 0
Constantus @ Сегодня, 10:27
, раз у вас там таблица, вы можете чтобы не перебирать все строки воспользоваться поиском по таблице, функцией "Найти"
ХранилищеНастройки = Выборка.СохраненнаяНастройка; ТаблицаКонтрагентов = ХранилищеНастройки.Получить(); СтрокаКонтрагента = ТаблицаКонтрагентов.Найти(ВАШКОНТРАГЕНТ,"Контрагент"); Если СтрокаКонтрагента <> Неопределено Тогда // ВЫ НАШЛИ СВОЕГО КОНТРАГЕНТА ПользовательСсылка = Выборка.Пользователь; КонецЕсли;
Дописываю конфигурации на платформе 8.х. - Управление торговым предприятием для Украины - Управление производственным предприятием для Украины - Управление небольшой фирмой для Украины - Бухгалтерия для Украины; - Общепит для Украины - Ресторан (Рарус) - Розница
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0
попробовал
Для Каждого ЭлемОтбора Из ЗначениеНастройки Цикл
Сообщить(ЭлемОтбора.Значение); КонецЦикла;
Вроде вывел всех Контрагентов, но проблема всплыла в том, что при назначении Контрагентов используется "В группе из списка" и на экран вывело только наименование групп Контрагентов... причем длинным списком:
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 320 раз
Рейтинг: 0
Constantus @ Сегодня, 10:40
, получается у вас в таблице список хранится? тогда надо по списку поиском пройти:
ХранилищеНастройки = Выборка.СохраненнаяНастройка; ЗначениеНастройки = ХранилищеНастройки.Получить(); Для Каждого ЭлемОтбора Из ЗначениеНастройки Цикл СписокКонтрагентов = ЭлемОтбора.Значение; Если СписокКонтрагентов.НайтиПоЗначению(Вашконтрагент) <> Неопределено Тогда ПользовательСсылка = Выборка.Пользователь; КонецЕсли; КонецЦикла;
Дописываю конфигурации на платформе 8.х. - Управление торговым предприятием для Украины - Управление производственным предприятием для Украины - Управление небольшой фирмой для Украины - Бухгалтерия для Украины; - Общепит для Украины - Ресторан (Рарус) - Розница
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0
Bernet @ Сегодня, 13:15
,
Хуже... там хранится список групп? Т.е. "В группе из списка"...
В приведенном мною списке укзаны именно группы контрагентов...
В Моби-С имеется кнопка, которая выводит список всех контрагентов в макет. Я не смог разобраться, там все построено на ПостроителеОтчета... но как-то универсально выводит спиок контрагентов независимо как составлен список контрагентов...
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 320 раз
Рейтинг: 0
Constantus @ Сегодня, 11:23
, ну блин, геморойно конечно получается, но я хз, тогда так: после того как получили список с группами, в каждой группе ищем нашего контрагента...
ХранилищеНастройки = Выборка.СохраненнаяНастройка; ЗначениеНастройки = ХранилищеНастройки.Получить(); Для Каждого ЭлемОтбора Из ЗначениеНастройки Цикл СписокКонтрагентов = ЭлемОтбора.Значение; Для Каждого ЭлементГруппа Из СписокКонтрагентов Цикл Если ЭлементГруппа.ЭтоГруппа Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | СпрКонтрагенты.Ссылка |ИЗ | Справочник.Контрагенты КАК СпрКонтрагенты |ГДЕ | СпрКонтрагенты.Ссылка В ИЕРАРХИИ (&Группа) | И СпрКонтрагенты.Ссылка = &ВашКонтрагент | "; Запрос.УстановитьПараметр("Группа", ЭлементГруппа); Запрос.УстановитьПараметр("ВашКонтрагент", ВашКонтрагент);
Если НЕ Результат.Пустой() Тогда ПользовательСсылка = Выборка.Пользователь; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла;
но честно говоря этот код уже начинает попахивать гавнецом... запрос в цикле это херово, тут возникнет вопрос производительности при большой нагрузке...
Дописываю конфигурации на платформе 8.х. - Управление торговым предприятием для Украины - Управление производственным предприятием для Украины - Управление небольшой фирмой для Украины - Бухгалтерия для Украины; - Общепит для Украины - Ресторан (Рарус) - Розница
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 320 раз
Рейтинг: 0
Constantus @ Сегодня, 12:17
, Отладчиком посмотрите в коде, там где получаете строку
Цитата
Если ЭлементГруппа.ЭтоГруппа Тогда
в ЭлементГруппа какой тип? Справочник.Контрагенты или что-то другое?
Дописываю конфигурации на платформе 8.х. - Управление торговым предприятием для Украины - Управление производственным предприятием для Украины - Управление небольшой фирмой для Украины - Бухгалтерия для Украины; - Общепит для Украины - Ресторан (Рарус) - Розница
форма = ПолучитьФорму("ФормаВыводТаблДок", , "Контрагенты_" + ТекАгент); макет = ПолучитьМакет("МакетКонтрагенты"); областьШапка = макет.ПолучитьОбласть("Шапка"); областьШапка.Параметры.Заголовок = "Контрагенты агента " + ТекАгент; форма.Заголовок = "Контрагенты агента " + ТекАгент; тдСоставСегмента = новый ТабличныйДокумент(); тдСоставСегмента.Вывести(областьШапка); тзРезультат = РезультатЗапроса.Выгрузить(); для каждого стр из тзРезультат Цикл область = макет.ПолучитьОбласть("Строка"); область.Параметры.Контрагент = стр.Контрагент; тдСоставСегмента.Вывести(область); КонецЦикла;
Это часть кода из СформироватьПостроительОтчетаКонтрагенты
ТаблСОтбором = ПрочитатьОтбор(ПарамАгент,"Контрагенты"); //прочитаем из регистра отбор
ЗаполнитьОтборПостроителя(ТаблСОтбором,Построитель,БланкПостроителяОтчетаКонтрагенты); Построитель.Выполнить(); Если ТолькоСсылки Тогда Возврат Построитель.Результат; КонецЕсли;
Функция ПрочитатьОтбор(Агент,НазваниеОтбора) Экспорт ТаблСОтбором = ПрочитатьИзРегистраСохраненныеНастройки(Агент,"Отбор."+НазваниеОтбора); Если ТипЗнч(ТаблСОтбором) <> Тип("ТаблицаЗначений") Тогда //нет настройки ТаблСОтбором = СоздатьТаблицуОтбор(); //создаем пустую КонецЕсли; возврат ТаблСОтбором; КонецФункции
И почти как у Вас
Функция ПрочитатьИзРегистраСохраненныеНастройки(Агент,НаименованиеНастройки) Экспорт
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СохраненныеНастройки.СохраненнаяНастройка |ИЗ | РегистрСведений.СохраненныеНастройки КАК СохраненныеНастройки |ГДЕ | СохраненныеНастройки.Пользователь = &Агент | И СохраненныеНастройки.ИмяОбъекта = &ИмяОбъекта | И СохраненныеНастройки.НаименованиеНастройки = &НаименованиеНастройки";
Запрос.УстановитьПараметр("Агент" ,Агент); Запрос.УстановитьПараметр("ИмяОбъекта" ,РССохраненныеНастройкиИмяОбъекта); Запрос.УстановитьПараметр("НаименованиеНастройки",НаименованиеНастройки); Результат = Запрос.Выполнить();
СохраненнаяНастройка = Неопределено; Если НЕ Результат.Пустой() Тогда Выборка = Результат.Выбрать(); Выборка.Следующий(); Попытка СохраненнаяНастройка = Выборка.СохраненнаяНастройка.Получить(); Исключение ДобавитьВЛогФайл( "Не удалось загрузить настройку " + НаименованиеНастройки + " для объекта " + РССохраненныеНастройкиИмяОбъекта + " у агента " + Агент, Агент, , СтатусСообщения.Важное); КонецПопытки; КонецЕсли; возврат СохраненнаяНастройка;
Цитата(Bernet @ 20.07.17, 14:21)
в ЭлементГруппа какой тип? Справочник.Контрагенты или что-то другое?
Скорее всего да, ибо другие данные не используются. Но нужно наверное учесть в каком типе эти данные храняться в Хранилище...
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 320 раз
Рейтинг: 0
Constantus @ Сегодня, 15:37
, Не за что, я попытался помочь
Дописываю конфигурации на платформе 8.х. - Управление торговым предприятием для Украины - Управление производственным предприятием для Украины - Управление небольшой фирмой для Украины - Бухгалтерия для Украины; - Общепит для Украины - Ресторан (Рарус) - Розница
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0
Час от часу не легче...
До этого момента пытались вытащить Контрагентов из Хранилища по Агенту... Т.е. из РС "Сохраненные настройки", зная Пользователя (Агента) из Хранилища вытаскивали список Контрагентов. Здесь получается типа Один(Агент)-к-Многим(Контрагенты)
Сейчас встала обратная задача. Мы знаем Контрагента, который получается хранится в ХранилищеЗначений. Зная его, теперь нужно выяснить, кто Пользователь этого Контрагента из РС "Сохраненные настройки".
Как вытащить данные их Хранилища по определенному критерию? Где вообще находится это хранилище?
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!