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

Хранилище

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

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



> А можно ли это сделать запросом?          
pablo Подменю пользователя
сообщение 22.07.11, 12:26
Сообщение #1

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

Имеется таблица значений с полями НомерКарточкиПоБазе (Код справочника Контрагенты) и НомерДоговора (Реквизит Номер справочника Договоры контрагентов). Один номер договора может присутствовать для разных контрагентов. Нужно каждой строке в этой таблице поставить в соответствие ссылку на договор.
Есть вот такой код:
    Для каждого Догов из НомераДоговоров цикл
        Контр=Справочники.Контрагенты.НайтиПоКоду(Догов.НомерКарточкиПоБазе);    
            Договора=Справочники.ДоговорыКонтрагентов.Выбрать(,Контр);                        
            Пока Договора.Следующий() Цикл
                Если Договора.ВидДоговора=Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком
                    И СокрЛП(Договора.Номер)=СокрЛП(ВыборкаНомерПлатежки.НомерДоговора) тогда
                    Догов.СсылкаНаДоговор=Договора.ПолучитьОбъект().Ссылка;
                КонецЕсли;    
            КонецЦикла;    
    КонецЦикла;

А можно ли как-то заменить его неким запросом?


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Vofka Подменю пользователя
сообщение 22.07.11, 12:48
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Можно. Насколько я понял - как-то так:

// ...
Запрос.Текст = "
|ВЫБРАТЬ
|   НомераДоговоров.НомерКарточкиПоБазе,
|   ДоговорыКонтрагентов.Ссылка КАК Договор
|ИЗ
|   &НомераДоговоров КАК НомераДоговоров
|   ЛЕВОЕ СОЕДИНЕНИЕ Справоник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|      ПО НомераДоговоров.НомерКарточкиПоБазе = ДоговорыКонтрагентов.Владелец.Код
|";
Запрос.УстановитьПараметр("НомераДоговоров", НомераДоговоров);
// Выборка и обработка результата

Спасибо сказали: pablo,

pablo Подменю пользователя
сообщение 22.07.11, 13:11
Сообщение #3

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

Немного доработал запрос:
    ЗапросДоговора = Новый Запрос;
    ЗапросДоговора.Текст = "ВЫБРАТЬ
                           |    НомераДоговоров.НомерКарточкиПоБазе,
                           |    НомераДоговоров.НомерДоговора,
                           |    ДоговорыКонтрагентов.Ссылка КАК Договор
                           |ПОМЕСТИТЬ Договора
                           |ИЗ
                           |    &НомераДоговоров КАК НомераДоговоров
                           |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
                           |        ПО НомераДоговоров.НомерКарточкиПоБазе = ДоговорыКонтрагентов.Владелец.Код
                           |            И НомераДоговоров.НомерДоговора = ДоговорыКонтрагентов.Номер";
    ЗапросДоговора.Параметры.Вставить("НомераДоговоров", НомераДоговоров);

Но в результате напоролся на ошибку:

{Документ.ЦСМ_КлиентБанк.Форма.ФормаТолстая.Форма(319)}: Ошибка при вызове метода контекста (Выполнить)
РезультатДоговоров=ЗапросДоговора.Выполнить().Выбрать();
по причине:

по причине:
Содержимое объекта данных может быть выбрано только во временную таблицу

Хотя МенеджерВременныхТаблиц мне здесь не нужен... Придется переписывать основной запрос.


Signature
Правильно поставленный вопрос содержит до 90% ответа.

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

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

По-моему надо просто добавить:

Запрос.МенеджерВременныхтаблиц = Новый МенеджерВременныхТаблиц


Ну или смотреть в эту сторону. Там точно есть какой-то нюанс небольшой.

pablo Подменю пользователя
сообщение 22.07.11, 13:24
Сообщение #5

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

Проблему уже решил другими путями. А МенеджерВременныхТаблиц не может напрямую данные отдавать sad.gif Он может их просто помещать в другой запрос в качестве источника данных.

ТО есть в итоге будет как-то так:
    МенеджерДоговоров=Новый МенеджерВременныхТаблиц;
    ЗапросДоговора = Новый Запрос;
    ЗапросДоговора.Текст = "ВЫБРАТЬ
                           |    НомераДоговоров.НомерКарточкиПоБазе,
                           |    НомераДоговоров.НомерДоговора,
                           |    ДоговорыКонтрагентов.Ссылка КАК Договор
                           |ПОМЕСТИТЬ Договора
                           |ИЗ
                           |    &НомераДоговоров КАК НомераДоговоров
                           |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
                           |        ПО НомераДоговоров.НомерКарточкиПоБазе = ДоговорыКонтрагентов.Владелец.Код
                           |            И НомераДоговоров.НомерДоговора = ДоговорыКонтрагентов.Номер";
    ЗапросДоговора.Параметры.Вставить("НомераДоговоров", НомераДоговоров);
    ЗапросДоговора.МенеджерВременныхТаблиц=МенеджерДоговоров;
    ЗапросДоговора.Выполнить();
    ЗапросНовый=Новый Запрос;
    ЗапросНовый.Текст = "ВЫБРАТЬ
                           |    *
                           |
                           |ИЗ
                           |    Договора";
    ЗапросНовый.МенеджерВременныхТаблиц=МенеджерДоговоров;
    Результат=ЗапросНовый.Выполнить();


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Vofka Подменю пользователя
сообщение 22.07.11, 13:31
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Цитата
А МенеджерВременныхТаблиц не может напрямую данные отдавать Он может их просто помещать в другой запрос в качестве источника данных.

Я просто не знаю, что вам конкретно надо. Но я вам со сто процентной уверенностью говорю, что можно сделать запрос к таблице значений и потом по результату сделать выборку (и обработать её как надо). Я делал один отчет, который принимает 3 эксэль файла, связывает их между собой в кучу и привязывает это всё к данным в 1С.

Ну, в принципе, правильно вы сделали, как-то так оно и есть. нО По-моему можно сделать даже так:
Добавлю ещё, что можно сделать всё это так:

  МенеджерДоговоров=Новый МенеджерВременныхТаблиц;
    ЗапросДоговора = Новый Запрос;
    ЗапросДоговора.Текст = "ВЫБРАТЬ
                           |    НомераДоговоров.НомерКарточкиПоБазе,
                           |    НомераДоговоров.НомерДоговора,
                           |    ДоговорыКонтрагентов.Ссылка КАК Договор
                           |ПОМЕСТИТЬ Договора
                           |ИЗ
                           |    &НомераДоговоров КАК НомераДоговоров
                           |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
                           |        ПО НомераДоговоров.НомерКарточкиПоБазе = ДоговорыКонтрагентов.Владелец.Код
                           |            И НомераДоговоров.НомерДоговора = ДоговорыКонтрагентов.Номер";
    ЗапросДоговора.Параметры.Вставить("НомераДоговоров", НомераДоговоров);
    ЗапросДоговора.МенеджерВременныхТаблиц=МенеджерДоговоров;
    ЗапросДоговора.Выполнить();

    //ЗапросНовый=Новый Запрос;
    //ЗапросНовый.Текст = "ВЫБРАТЬ
    //                       |    *
    //                       |
    //                       |ИЗ
    //                       |    Договора";
    //ЗапросНовый.МенеджерВременныхТаблиц=МенеджерДоговоров;
    //Результат=ЗапросНовый.Выполнить();

    ЗапросДоговора.Текст = "ВЫБРАТЬ
                           |    *
                           |
                           |ИЗ
                           |    Договора";

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

pablo Подменю пользователя
сообщение 22.07.11, 13:35
Сообщение #7

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

Тогда самый короткий вариант будет таким smile.gif
ЗапросДоговора = Новый Запрос;
    ЗапросДоговора.Текст = "ВЫБРАТЬ
                           |    НомераДоговоров.НомерКарточкиПоБазе,
                           |    НомераДоговоров.НомерДоговора,
                           |    ДоговорыКонтрагентов.Ссылка КАК Договор
                           |ПОМЕСТИТЬ Договора
                           |ИЗ
                           |    &НомераДоговоров КАК НомераДоговоров
                           |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
                           |        ПО НомераДоговоров.НомерКарточкиПоБазе = ДоговорыКонтрагентов.Владелец.Код
                           |            И НомераДоговоров.НомерДоговора = ДоговорыКонтрагентов.Номер;
                           |ВЫБРАТЬ
                           |    *
                           |
                           |ИЗ
                           |    Договора";
    ЗапросДоговора.Параметры.Вставить("НомераДоговоров", НомераДоговоров);
    ЗапросДоговора.Выполнить();


Signature
Правильно поставленный вопрос содержит до 90% ответа.

DartRomanius Подменю пользователя
сообщение 22.07.11, 13:46
Сообщение #8

Ветеран
Иконка группы
Группа: Местный
Сообщений: 824
Из: Запорожье
Спасибо сказали: 145 раз
Рейтинг: 0

Цитата(pablo @ 22.07.11, 14:35) *
Тогда самый короткий вариант будет таким smile.gif
ЗапросДоговора = Новый Запрос;
    ЗапросДоговора.Текст = "ВЫБРАТЬ
                           |    НомераДоговоров.НомерКарточкиПоБазе,
                           |    НомераДоговоров.НомерДоговора,
                           |    ДоговорыКонтрагентов.Ссылка КАК Договор
                           |ПОМЕСТИТЬ Договора
                           |ИЗ
                           |    &НомераДоговоров КАК НомераДоговоров
                           |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
                           |        ПО НомераДоговоров.НомерКарточкиПоБазе = ДоговорыКонтрагентов.Владелец.Код
                           |            И НомераДоговоров.НомерДоговора = ДоговорыКонтрагентов.Номер;
                           |ВЫБРАТЬ
                           |    *
                           |
                           |ИЗ
                           |    Договора";
    ЗапросДоговора.Параметры.Вставить("НомераДоговоров", НомераДоговоров);
    ЗапросДоговора.Выполнить();


Эм... а зачем такие сложности?


Signature
-----------------------------------------------------------------------------------
Единственный, интуитивно понятный интерфейс - мамкина сиська!
Всему остальному надо учиться! (с) Не знаю кто....

pablo Подменю пользователя
сообщение 22.07.11, 13:56
Сообщение #9

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

Цитата
Эм... а зачем такие сложности?

смотреть пост №3


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Vofka Подменю пользователя
сообщение 22.07.11, 14:12
Сообщение #10

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Цитата
Тогда самый короткий вариант будет таким smile.gif

Помимо того, что самый короткий - самый лаконичный и удобно читаемый smile.gif

Цитата
Эм... а зачем такие сложности?

Предложите вариант по проще.

DartRomanius Подменю пользователя
сообщение 22.07.11, 14:27
Сообщение #11

Ветеран
Иконка группы
Группа: Местный
Сообщений: 824
Из: Запорожье
Спасибо сказали: 145 раз
Рейтинг: 0

Цитата(pablo @ 22.07.11, 14:56) *
смотреть пост №3


Прошу прощения. Действительно проглядел.


Signature
-----------------------------------------------------------------------------------
Единственный, интуитивно понятный интерфейс - мамкина сиська!
Всему остальному надо учиться! (с) Не знаю кто....

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


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

 

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