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