Имя: Пароль:
1C
1С v8
Вопрос по определению типа контрагентов (отбор)
,
0 Sefuirosu
 
01.07.14
14:39
Всем добрый день!

Подскажите, как правильно отобрать контрагентов, которые используют реализацию товаров и услуг. А именно как правильно написать такой запрос.

Требуется определить из списка контрагентов "покупателей" , определить их нужно по пользованию документом "реализация товаров и услуг" (например) и другим документам.

Все остальное уже сделал, но не могу понять, как правильно отобрать только нужных мне контрагентов. Куда правильно обратиться в запросе?

Большое спасибо за помощь!
1 wanderer_ица
 
01.07.14
14:41
Выбрать Различные Контрагент
Из Ддокумент.РеализацияТоваровУслуг...
2 Jokerman
 
01.07.14
14:41
(0) Выбираешь запросом контрагентов из документа "Реализация товаров и услуг", делов то ..
3 Fish
 
01.07.14
14:42
(2) Или из регистра, по которому этот док движения делает.
4 Sefuirosu
 
01.07.14
14:57
Запрос = Новый Запрос("ВЫБРАТЬ
    |    РеализацияТоваровУслуг.Контрагент.Ссылка КАК Контрагент
    |ИЗ
    |    Документ.РеализацияТоваровУслуг КАК Контрагенты
    |");

    Результат = Запрос.Выполнить();

    Выборка = Результат.Выбрать();
    ДоговораСпр = Справочники.ДоговорыКонтрагентов;
    Пока Выборка.Следующий() Цикл
        Контрагент = Выборка.Контрагент.ПолучитьОбъект();
        ДоговорДляПроверки = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("Тестовый договор",,,Контрагент.Ссылка);
        Если ПустаяСтрока(ДоговорДляПроверки) Тогда
            ДоговорК = ДоговораСпр.СоздатьЭлемент();
            ДоговорК.Организация = Справочники.Организации.НайтиПоКоду("00001");
            ДоговорК.Владелец = Контрагент.Ссылка;
            ДоговорК.Наименование = "Тестовый договор";
            ДоговорК.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;              
            ДоговорК.ВалютаВзаиморасчетов = Справочники.Валюты.НайтиПоКоду("643");
            ДоговорК.Записать();
            Контрагент.ОсновнойДоговорКонтрагента = ДоговорК.Ссылка;
            
            //Контрагент = Выборка.Ссылка.ПолучитьОбъект();
            ДоговорК = ДоговораСпр.СоздатьЭлемент();
            ДоговорК.Организация = Справочники.Организации.НайтиПоКоду("00002");
            ДоговорК.Владелец = Контрагент.Ссылка;
            ДоговорК.Наименование = "Тестовый договор";
            ДоговорК.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;              
            ДоговорК.ВалютаВзаиморасчетов = Справочники.Валюты.НайтиПоКоду("643");
            ДоговорК.Записать();
            
            Контрагент.Записать();
        КонецЕсли;
    КонецЦикла;


Выдает ошибку:

{Форма.Форма.Форма(1497)}: Ошибка при вызове метода контекста (Выполнить)
    Результат = Запрос.Выполнить();
по причине:
{(2, 2)}: Поле не найдено "РеализацияТоваровУслуг.Контрагент"
<<?>>РеализацияТоваровУслуг.Контрагент КАК Контрагент

Ага, я так и думал, спасибо!
Вот сделал такое. Выдает ошибку. Ошибка точно в запросе... Если сделать выполнение по всем контрагентам в базе, то работает все нормально. Можете посмотреть, или поправить мой запрос?
Еще раз спасибо!
5 Sefuirosu
 
01.07.14
14:58
Делается под БП 2.0 на 8.3
6 Jokerman
 
01.07.14
15:10
(4) а что подправить? Посмотрите как в шапке реквизит называется
7 Jokerman
 
01.07.14
15:11
КАК РеализацияТоваровУслуг замени
8 Jokerman
 
01.07.14
15:12
Что вручную запрос делаете, конструктором пользуйтесь лучше
9 Sefuirosu
 
01.07.14
15:20
Запрос = Новый Запрос("ВЫБРАТЬ
    |    РеализацияТоваровУслуг.Ссылка КАК Ссылка,
    |    РеализацияТоваровУслуг.Контрагент КАК Контрагент
    |ИЗ
    |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |ГДЕ
    |    РеализацияТоваровУслуг.Дата >= &ДатаНач
    |    И РеализацияТоваровУслуг.Дата <= &ДатаКон
    |    И РеализацияТоваровУслуг.ПометкаУдаления = ЛОЖЬ
    |    И РеализацияТоваровУслуг.Организация = &Организация
    |");
    
    Запрос.УстановитьПараметр("ДатаНач", ЭлементыФормы.ДатаНач.Значение);
    Запрос.УстановитьПараметр("ДатаКон", ЭлементыФормы.ДатаКон.Значение);
    Запрос.УстановитьПараметр("Организация", ЭлементыФормы.Организация.Значение);

    Результат = Запрос.Выполнить();


Сделал так... Вроде работает. Буду тестировать. Всем большое спасибо за помощь и подсказки!
10 Sefuirosu
 
01.07.14
16:09
Вопрос, а чтобы добавить к отбору по РеализацииТоваровИУслуг еще и отбор по контрагентам, которые осуществляли возврат товара - надо новый запрос делать, со всеми вытекающими, или можно как-нибудь компактно сюда прикрутить остальные требуемые условия?
11 Sefuirosu
 
01.07.14
17:51
Вроде разобрался, но уперся в следующую часть задания:

Теперь надо во всех документах, где используется договор с видом "С покупателем" заменить на созданный новый договор. Куда бы это все втиснуть, и в каком виде?