Имя: Пароль:
1C
1С v8
Ошибка в запросе нельзя использовать вложенные таблицы, хелп
0 Da D
 
28.03.17
07:40
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(18)}: Ошибка при вызове метода контекста (Выполнить)
    таблица = запрос.Выполнить().Выбрать();
по причине:
{(3, 2)}: В запросе с предложениями РАЗЛИЧНЫЕ или ОБЪЕДИНИТЬ нельзя использовать вложенные таблицы
<<?>>ПоступлениеНаСчет.РасшифровкаПлатежа.(



Запрос = Новый Запрос;
    Запрос.Текст =  "ВЫБРАТЬ различные
    |    ПоступлениеНаСчет.Ссылка,
    |    ПоступлениеНаСчет.РасшифровкаПлатежа.(
    |        ПризнакАванса
    |    )
    |ИЗ
    |    Документ.ПоступлениеНаСчет КАК ПоступлениеНаСчет
    |ГДЕ
    |    ПоступлениеНаСчет.Проведен
    |    И ПоступлениеНаСчет.Дата МЕЖДУ &Дата1 И &Дата2
    |    И ПоступлениеНаСчет.РасшифровкаПлатежа.ПризнакАванса = ИСТИНА";
    Запрос.Параметры.Вставить("Дата1", Реквизит1.ДатаНачала);
    Запрос.Параметры.Вставить("Дата2", КонецДня(Реквизит1.ДатаОкончания));
таблица = запрос.Выполнить().Выбрать();
1 Мимохожий Однако
 
28.03.17
07:42
Убери Различные
2 Мимохожий Однако
 
28.03.17
07:42
Используй пакетный запрос
3 Da D
 
28.03.17
07:42
(2) Просто этот запрос неделей ранее не выдавал ошибки и отрабатывал..
4 arishkaKlimova
 
28.03.17
07:43
(0) Возьми в качестве основной таблицы  ПоступлениеНаСчетРасшифровкаПлатежа
5 bodri
 
28.03.17
07:44
Примерно так:

Запрос.Текст =  "ВЫБРАТЬ различные
    |    ПоступлениеНаСчет.Ссылка,
    |    ПоступлениеНаСчет.ПризнакАванса
    |    
    |ИЗ
    |    Документ.ПоступлениеНаСчет.РасшифровкаПлатежа КАК ПоступлениеНаСчет
    |ГДЕ
    |    ПоступлениеНаСчет.Проведен
    |    И ПоступлениеНаСчет.Дата МЕЖДУ &Дата1 И &Дата2
    |    И ПоступлениеНаСчет.ПризнакАванса";
6 Мимохожий Однако
 
28.03.17
07:45
(3) ОФФ: Категориями было и стало мыслят пользователи. Тебе надо плясать от того, что есть в данный момент.
7 bodri
 
28.03.17
07:45
Поправлю (5)
Запрос.Текст =  "ВЫБРАТЬ различные
    |    ПоступлениеНаСчет.Ссылка,
    |    ПоступлениеНаСчет.ПризнакАванса
    |    
    |ИЗ
    |    Документ.ПоступлениеНаСчет.РасшифровкаПлатежа КАК ПоступлениеНаСчет
    |ГДЕ
    |    ПоступлениеНаСчет.Ссылка.Проведен
    |    И ПоступлениеНаСчет.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2
    |    И ПоступлениеНаСчет.ПризнакАванса";
8 Da D
 
28.03.17
08:19
А подскажите ещё, мне нужно проверять
Если в поступлении на счет Документов отгрузки(Актов) больше 1, то документ пропускать, а если 1, то выбирать его и проводить
9 2dolist
 
28.03.17
08:22
(8) в том же запросе? Тогда временную таблицу с привязанными документами, свёрнутыми по КоличествоРазличных - и соединять по ссылке
10 Da D
 
28.03.17
08:24
(9) Вообще у меня так:
11 Da D
 
28.03.17
08:25
Запрос = Новый Запрос;
    Запрос.Текст =  "ВЫБРАТЬ различные
    |    ПоступлениеНаСчет.Ссылка,
    |    ПоступлениеНаСчет.ПризнакАванса
    |    
    |ИЗ
    |    Документ.ПоступлениеНаСчет.РасшифровкаПлатежа КАК ПоступлениеНаСчет
    |ГДЕ
    |    ПоступлениеНаСчет.Ссылка.Проведен
    |    И ПоступлениеНаСчет.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2
    |    И ПоступлениеНаСчет.ПризнакАванса";    
    
    Запрос.Параметры.Вставить("Дата1", Реквизит1.ДатаНачала);
    Запрос.Параметры.Вставить("Дата2", КонецДня(Реквизит1.ДатаОкончания));
    таблица = запрос.Выполнить().Выбрать();
    Пока таблица.Следующий() цикл
        
        запрос2 = Новый Запрос;  
        запрос2.Текст =  "ВЫБРАТЬ
        |    АктВыполненныхРабот.Ссылка                              
        |ИЗ
        |    Документ.АктВыполненныхРабот КАК АктВыполненныхРабот
        |ГДЕ
        |    АктВыполненныхРабот.Проведен
        |    И АктВыполненныхРабот.РаботыИУслуги.Сумма = &Сумма
        |    И АктВыполненныхРабот.Контрагент = &Контрагент
        |    И АктВыполненныхРабот.Дата МЕЖДУ &Дата1 И &Дата2";
        запрос2.Параметры.Вставить("Сумма",таблица.ссылка.СуммаДокумента);
        запрос2.Параметры.Вставить("Контрагент",таблица.ссылка.контрагент);
        Запрос2.Параметры.Вставить("Дата1", Реквизит1.ДатаНачала);
        Запрос2.Параметры.Вставить("Дата2", КонецДня(Реквизит1.ДатаОкончания));
        
        ТЗАктов=запрос2.выполнить().выгрузить();
        
        НужныйАкт=неопределено;
        Для каждого СтрТЗАктов из ТЗАктов цикл
            Запрос = Новый Запрос;
            Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
            |    ПоступлениеНаСчетРасшифровкаПлатежа.Ссылка
            |ИЗ
            |    Документ.ПоступлениеНаСчет.РасшифровкаПлатежа КАК ПоступлениеНаСчетРасшифровкаПлатежа
            |ГДЕ
            |    ПоступлениеНаСчетРасшифровкаПлатежа.Ссылка.Проведен
            |    И ПоступлениеНаСчетРасшифровкаПлатежа.Документ = &Акт
            |    И ПоступлениеНаСчетРасшифровкаПлатежа.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2";
            //|И ПоступлениеНаСчет.Ссылка.ДокументОтгрузки =&Акт";
            запрос.установитьпараметр("Акт",СтрТЗАктов.Ссылка);
            Запрос.Параметры.Вставить("Дата1", Реквизит1.ДатаНачала);
            Запрос.Параметры.Вставить("Дата2", КонецДня(Реквизит1.ДатаОкончания));
            
            если запрос.выполнить().выгрузить().количество()>0 Тогда
                продолжить;
            иначе
                НужныйАкт=СтрТЗАктов.ссылка;
                прервать;
            конецесли
        КонецЦикла;
        если НужныйАкт <>неопределено тогда
            МоёПоступление=таблица.ссылка.получитьобъект();
            для каждого СтрТЧ из МоёПоступление.РасшифровкаПлатежа цикл        
                СтрТЧ.Документ=нужныйакт;
                СтрТЧ.ПризнакАванса = ложь;
            КонецЦикла;
            МоёПоступление.записать(режимзаписидокумента.проведение);
            Сообщить("Исправлен документ "+МоёПоступление.номер);
        иначе
            Сообщить("ошибка ");
        конецесли
    КонецЦикла;
12 Da D
 
28.03.17
08:26
Но это я делал чтобы он выбирал из Актов выбирал акт с суммой равной сумме поступления
13 Da D
 
28.03.17
08:28
Сейчас выяснилось, что пропускать нужно доки, где больше 1 акта, а где 1 - выбирать его, ставить Аванс НЕТ и записывать так
14 Da D
 
28.03.17
08:36
Мне если честно немного непонятно, опыта ни фига нет, может кто подсказать, как поправить запрос, чтобы пропускать доки, где актов больше 1, а где 1 - подставлять его ?
15 Мимохожий Однако
 
28.03.17
08:53
(14) Используй консоль запросов, а потом отладчик
16 Da D
 
28.03.17
08:56
(15) Я понял это, не совсем понятно что нужно делать для того, чтобы выбирать поступление на счет, там смотреть документ отгрузки, если он один - ставить, записывать, а если больше - пропускать
17 bodri
 
28.03.17
09:33
(11) запрос в цикле крайне не правильно.
(15) в (9) написано направление куда копать.
18 2dolist
 
28.03.17
11:03
(11) не делай так. Надо всё в один запрос написать и желательно вообще отвязаться от документов, а запросы по регистру делать.
19 2dolist
 
28.03.17
11:04
Посмотри что такое Конструктор запросов и Временные таблицы.