Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Отбор документов по контрагенту          
kot488 Подменю пользователя
сообщение 23.03.17, 17:18
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 205
Спасибо сказали: 3 раз
Рейтинг: 3.6

Имеется самописная конфигурация. В конфигурации есть документы с формой списка


Для всех пользователей отображается поле отбора test1, а для пользователей с ролью test отображается только поле отбора test. Это поле имеет ссылку на справочник контрагентов.

В документе есть поле Кто платит. Пользователи с ролью test всегда будут выбирать только одного плательщика Компания.
Теперь сама проблема, нужно что бы когда пользователь переходит на список документов у него автоматически подставлялся в поле отбора test контрагент Компания.


Как это можно очень просто реализовать, я далек от 1С

podcast Подменю пользователя
сообщение 23.03.17, 17:26
Сообщение #2

Оратор
Иконка группы
Группа: Местный
Сообщений: 306
Спасибо сказали: 74 раз
Рейтинг: 0

kot488 @ Сегодня, 17:18 * ,
Событие Выбор для списка. Там прописываете обработчик.
Примерно так.
&НаСервере
Процедура СписокВыборНаСервере()
    Контрагент = Справочники.Контрагенты.НайтиПоКоду("КодКонтрагента");
    РеквизитПлательщик = Контрагент;    
КонецПроцедуры

&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    СписокВыборНаСервере();
КонецПроцедуры

logist Подменю пользователя
сообщение 23.03.17, 17:30
Сообщение #3

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(kot488 @ 23.03.17, 17:18) *
В документе есть поле Кто платит. Пользователи с ролью test всегда будут выбирать только одного плательщика Компания.

Зачем тогда фильтр? Сделайте сразу в запросе списка условие, При создании формы устанавливайте параметр списка.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

kot488 Подменю пользователя
сообщение 23.03.17, 17:54
Сообщение #4

Завсегдатай
****
Группа: Пользователи
Сообщений: 205
Спасибо сказали: 3 раз
Рейтинг: 3.6

podcast @ Сегодня, 17:26 * ,

Такого события как Вы написали нет, вот что нашел похожее
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)


logist @ Сегодня, 17:30 * ,

Я думал так проще, так фильтр настроил, показывает правильно. Осталось только по умолчанию сделать только определенного плательщика
Вот так сделан отбор по плательщику, Если здесь можно прописать что брать такого то контрагента, то подскажите пожалуйста как
&НаКлиенте
Процедура УстановитьПараметрыОтбораПлательщикПользователя()    
    
    ЭлементыОтбора = Список.Отбор.Элементы;        
    ЭлементыОтбора.Очистить();                            
    
    Если Не Контрагент.Пустая() Тогда
        
        
        ГруппаКомпоновкиОтбор = ЭлементыОтбора.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
        ГруппаКомпоновкиОтбор.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
        
          ЭлементОтбораКурьеркаОтправитель = ГруппаКомпоновкиОтбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
          ЭлементОтбораКурьеркаОтправитель.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Плательщик");
          ЭлементОтбораКурьеркаОтправитель.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
          ЭлементОтбораКурьеркаОтправитель.Использование = Истина;
          ЭлементОтбораКурьеркаОтправитель.ПравоеЗначение = Контрагент;
          
    
    КонецЕсли;
    
КонецПроцедуры


podcast @ Сегодня, 17:26 * ,

Сделал вот так
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Если РольДоступна("Интерфейс_РабСтол_ПартнерыСД") Тогда
        ОпределитьДоступностьПартнерам(ЭтаФорма)
    КонецЕсли;    

    ДлиннаНомераДекларации = Метаданные.Документы.ДекларацияДоставкаТоваров.Реквизиты.НомерДекларации.Тип.КвалификаторыСтроки.Длина;
    
    Организация = Пользователи.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь, "ОсновнаяОрганизация");

    Если УправлениеДоступомКурьерскаяСлужба.ОграничиватьДоступКСуммамВДокументах() Тогда
        ЭтаФорма.Элементы.СуммаДокумента.Видимость = Ложь;
        ЭтаФорма.Элементы.Страховка.Видимость = Ложь;
        ЭтаФорма.Элементы.СуммаДопУслуг.Видимость = Ложь;
    КонецЕсли;
    
    //Определяем что и для кого выводим
        СписокВыборНаСервере();
КонецПроцедуры

Процедура СписокВыборНаСервере()
    Контрагент = Справочники.Контрагенты.НайтиПоКоду("000002643");
    РеквизитПлательщик = Контрагент;    
КонецПроцедуры


Контрагента подставляет правильно, но не происходит фильтр(

logist Подменю пользователя
сообщение 23.03.17, 18:19
Сообщение #5

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(kot488 @ 23.03.17, 17:54) *
Если здесь можно прописать что брать такого то контрагента, то подскажите пожалуйста как

так у вас же это уже написано:
 ЭлементОтбораКурьеркаОтправитель.ПравоеЗначение = Контрагент;


Цитата(kot488 @ 23.03.17, 17:54) *
Контрагента подставляет правильно, но не происходит фильтр(

Потому что выше вам не подсказали, что надо отбор списка устанавливать.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

kot488 Подменю пользователя
сообщение 23.03.17, 18:53
Сообщение #6

Завсегдатай
****
Группа: Пользователи
Сообщений: 205
Спасибо сказали: 3 раз
Рейтинг: 3.6

Цитата(logist @ 23.03.17, 18:19) *
так у вас же это уже написано:

Но не хватает строки что бы взять указанного контрагента, правильно?

logist Подменю пользователя
сообщение 23.03.17, 20:28
Сообщение #7

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

ЭлементОтбораКурьеркаОтправитель.ПравоеЗначение = Справочники.Контрагенты.НайтиПоКоду("000002643");


Signature
Личные бесплатные консультации не даю, для этого есть форум!

kot488 Подменю пользователя
сообщение 24.03.17, 9:40
Сообщение #8

Завсегдатай
****
Группа: Пользователи
Сообщений: 205
Спасибо сказали: 3 раз
Рейтинг: 3.6

logist @ Вчера, 20:28 * ,
Цитата(logist @ 23.03.17, 20:28) *
ЭлементОтбораКурьеркаОтправитель.ПравоеЗначение = Справочники.Контрагенты.НайтиПоКоду("000002643");



Вот такой вид должен иметь запрос?
Процедура УстановитьПараметрыОтбораПлательщикПользователя()    
    
    ЭлементыОтбора = Список.Отбор.Элементы;        
    ЭлементыОтбора.Очистить();                            
    
    Если Не Контрагент.Пустая() Тогда
        
        // Создадим группу компановки ИЛИ
        ГруппаКомпоновкиОтбор = ЭлементыОтбора.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
        ГруппаКомпоновкиОтбор.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
          //Отбор по отправителю
          ЭлементОтбораКурьеркаОтправитель = ГруппаКомпоновкиОтбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
          ЭлементОтбораКурьеркаОтправитель.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Плательщик");
          ЭлементОтбораКурьеркаОтправитель.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
          ЭлементОтбораКурьеркаОтправитель.Использование = Истина;
          ЭлементОтбораКурьеркаОтправитель.ПравоеЗначение = Справочники.Контрагенты.НайтиПоКоду("000002643");
        
    
    КонецЕсли;
    
КонецПроцедуры


ПРи проверке говорит что переменная не определена
{Документ.ДекларацияПочта.Форма.ФормаСписка.Форма(88,55)}: Змінна не визначена (Справочники)
ЭлементОтбораКурьеркаОтправитель.ПравоеЗначение = <<?>>Справочники.Контрагенты.НайтиПоКоду("000002643"); (Перевірка: Тонкий клієнт)


Вот что у меня в реквизитах формы


Сделал вот так
&НаКлиенте
Процедура УстановитьПараметрыОтбораПлательщикПользователя()    
    
    ЭлементыОтбора = Список.Отбор.Элементы;        
    ЭлементыОтбора.Очистить();                            
    
    Если Не Контрагент.Пустая() Тогда
        
        // Создадим группу компановки ИЛИ
        ГруппаКомпоновкиОтбор = ЭлементыОтбора.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
        ГруппаКомпоновкиОтбор.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
          //Отбор по отправителю
          ЭлементОтбораКурьеркаОтправитель = ГруппаКомпоновкиОтбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
          ЭлементОтбораКурьеркаОтправитель.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Плательщик");
          ЭлементОтбораКурьеркаОтправитель.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
          ЭлементОтбораКурьеркаОтправитель.Использование = Истина;
          ЭлементОтбораКурьеркаОтправитель.ПравоеЗначение = Контрагент.НайтиПоКоду("000002643");
        
    
    КонецЕсли;
    
КонецПроцедуры


Захожу в список документов, отбор не делает тоже. Пробую отобрать документы в ручную, и при выборе контрагента выскакивает ошибка Метод обьекта не обнаружен (НайтиПоКоду)

Vidocq05 Подменю пользователя
сообщение 24.03.17, 11:26
Сообщение #9

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 214
Из: Сумы
Спасибо сказали: 38 раз
Рейтинг: 0

Цитата(kot488 @ 24.03.17, 9:40) *
 ЭлементОтбораКурьеркаОтправитель.ПравоеЗначение = Контрагент.НайтиПоКоду("000002643");

НайтиПоКоду нужно выполнять НаСервере

kot488 @ Сегодня, 9:40 * ,
ЭлементОтбораКурьеркаОтправитель.ПравоеЗначение = НайтиКонтрагентСервер("000002643");

&НаСервереБезКонтекста
Функция НайтиКонтрагентСервер(Код)
  
    Контрагент = Справочники.Контрагенты.НайтиПоКоду(Код);
    Возврат Контрагент;

КонецФункции

Batchir Подменю пользователя
сообщение 24.03.17, 11:35
Сообщение #10

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1426 раз
Рейтинг: 0

Не вчитывался особо в тему, если что извините.
В УПП, например, есть общий модуль ОбщегоНазначенияКлиентСервер
в котором есть полезные процедуры и функции по отбору динамических списков.
Я например часто пользуюсь процедурой УстановитьЭлементОтбораДинамическогоСписка.
Может содрать от туда эти процедурки и будет Вам счастье по установке отборов.

Сообщение отредактировал Batchir - 24.03.17, 11:39

kot488 Подменю пользователя
сообщение 24.03.17, 11:44
Сообщение #11

Завсегдатай
****
Группа: Пользователи
Сообщений: 205
Спасибо сказали: 3 раз
Рейтинг: 3.6

Цитата(Vidocq05 @ 24.03.17, 11:26) *
ЭлементОтбораКурьеркаОтправитель.ПравоеЗначение = НайтиКонтрагентСервер("000002643");



А это куда вписвать?

&НаКлиенте
Процедура УстановитьПараметрыОтбораПлательщикПользователя()    
    
    ЭлементыОтбора = Список.Отбор.Элементы;        
    ЭлементыОтбора.Очистить();                            
    
    Если Не Контрагент.Пустая() Тогда
        
        // Создадим группу компановки ИЛИ
        ГруппаКомпоновкиОтбор = ЭлементыОтбора.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
        ГруппаКомпоновкиОтбор.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
          //Отбор по отправителю
          ЭлементОтбораКурьеркаОтправитель = ГруппаКомпоновкиОтбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
          ЭлементОтбораКурьеркаОтправитель.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Плательщик");
          ЭлементОтбораКурьеркаОтправитель.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
          ЭлементОтбораКурьеркаОтправитель.Использование = Истина;
          ЭлементОтбораКурьеркаОтправитель.ПравоеЗначение = НайтиКонтрагентСервер("000002643");
          
    КонецЕсли;
    
    КонецПроцедуры

&НаСервереБезКонтекста
Функция НайтиКонтрагентСервер(Код)
  
    Контрагент = Справочники.Контрагенты.НайтиПоКоду(Код);
    Возврат Контрагент;

КонецФункции

Vidocq05 Подменю пользователя
сообщение 24.03.17, 12:40
Сообщение #12

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 214
Из: Сумы
Спасибо сказали: 38 раз
Рейтинг: 0

kot488 @ Сегодня, 11:44 * ,
Цитата(kot488 @ 24.03.17, 11:44) *
А это куда вписвать?

Ну както так))
Цитата(kot488 @ 24.03.17, 11:44) *
Если Не Контрагент.Пустая() Тогда

Контрагент это что? По нему нужно делать отбор?

kot488 Подменю пользователя
сообщение 24.03.17, 13:39
Сообщение #13

Завсегдатай
****
Группа: Пользователи
Сообщений: 205
Спасибо сказали: 3 раз
Рейтинг: 3.6

Vidocq05 @ Сегодня, 12:40 * ,

Убрал строку, ошибок никаких нет, не знаю для чего оно


Прописал еще вот что, и заработало

&НаКлиенте
Процедура ПриОткрытии(Отказ)
        Если ЗначениеЗаполнено(Организация) Тогда
        УстановитьПараметрыОтбораПользователя();
    КонецЕсли;
    [b]УстановитьПараметрыОтбораПлательщикПользователя();[/b]
    
КонецПроцедуры


Но как только заходишь в базу под нужным пользователем его сеанс подвисает, много документом в базе. А есди сделать по автору документа, это не ускорит?

Или может можно сделать в отборе что бы не брались во внимание документы которые младше 01.01.2017?

Vidocq05 Подменю пользователя
сообщение 24.03.17, 13:44
Сообщение #14

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 214
Из: Сумы
Спасибо сказали: 38 раз
Рейтинг: 0

kot488 @ Сегодня, 13:33 * ,
А какой код здесь УстановитьПараметрыОтбораПользователя() ?

logist Подменю пользователя
сообщение 24.03.17, 13:45
Сообщение #15

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(kot488 @ 24.03.17, 11:44) *
А это куда вписвать?

Учите что такое Клиент/Сервер, у вас сейчас нет и этого понимания, поэтому вы пишите шо попало. Сори за резкость, но, я либо учился, либо просто попросил кого-то сделать, а так мучаете и себя и отвечающих тут...


Signature
Личные бесплатные консультации не даю, для этого есть форум!

kot488 Подменю пользователя
сообщение 24.03.17, 15:04
Сообщение #16

Завсегдатай
****
Группа: Пользователи
Сообщений: 205
Спасибо сказали: 3 раз
Рейтинг: 3.6

Цитата(Vidocq05 @ 24.03.17, 13:44) *
А какой код здесь УстановитьПараметрыОтбораПользователя() ?


Вот что там
Процедура УстановитьПараметрыОтбораПользователя()    
    
    ЭлементыОтбора = Список.Отбор.Элементы;        
    ЭлементыОтбора.Очистить();                            
    
    Если Не Организация.Пустая() Тогда
        
        // Создадим группу компановки ИЛИ
        ГруппаКомпоновкиОтбор = ЭлементыОтбора.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
        ГруппаКомпоновкиОтбор.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
          //Отбор по отправителю
          ЭлементОтбораКурьеркаОтправитель = ГруппаКомпоновкиОтбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
          ЭлементОтбораКурьеркаОтправитель.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОтправительСлужбаДоставки");
          ЭлементОтбораКурьеркаОтправитель.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
          ЭлементОтбораКурьеркаОтправитель.Использование = Истина;
          ЭлементОтбораКурьеркаОтправитель.ПравоеЗначение = Организация;
          //Отбор по получателю
          ЭлементОтбораКурьеркаОтправитель = ГруппаКомпоновкиОтбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
          ЭлементОтбораКурьеркаОтправитель.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПолучательСлужбаДоставки");
          ЭлементОтбораКурьеркаОтправитель.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
          ЭлементОтбораКурьеркаОтправитель.Использование = Истина;
          ЭлементОтбораКурьеркаОтправитель.ПравоеЗначение = Организация;
    
    КонецЕсли;
    
КонецПроцедуры


Посмотрел список документов, от пользователя которому не доступно поле Плательщик, у них тоже делается отбор по Вашему коду выше, и все отображается только список документов в которых контрагент 000002643

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 20.04.24, 0:53
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!