1c7. черный запрос

Тема в разделе "1C и всё что с ней связано", создана пользователем KiR, 10 июл 2008.

  1. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Пожалуйста помогите - всю голову поламал!
    Есть запорос
    Код (Text):
    ТекстЗапроса = "//{{ЗАПРОС(ЗапросСчет)
    |Период с ТЗ_ДатаДок по ТЗ_ДатаДок;
    |ОбрабатыватьДокументы все;
    |Без итогов;
    |ДатаДок = Документ.Счет.ДатаДок;
    |Контрагент = Документ.Счет.Контрагент;
    |Всего = Документ.Счет.Всего;
    |Условие(ДатаДок = ТЗ_ДатаДок);
    |Условие(Контрагент = ТЗ_Контрагент);
    |Условие(Всего = ТЗ_суммаДокумента + ТЗ_Сумма2);
    |"//}}ЗАПРОС;
    Если Запрос.Выполнить(ТекстЗапроса) = 1 Тогда
    Запрос.Выгрузить(ТаблицаЗапроса,0,0);
    Если ТаблицаЗапроса.КоличествоСтрок() <> 0 Тогда
    Сообщить("Счет для "+ТЗ_Контрагент+" на сумму: "+Строка(ТЗ_СуммаДокумента)+" уже есть в системе!");
    Иначе
    СоздатьДокумент(ТЗ_ДатаДок, ТЗ_Сумма2, ТЗ_СуммаДокумента, ТЗ_Контрагент, ТЗ_Товар);  
    КонецЕсли;
    КонецЕсли;
    По идее должен отобрать существующие Счета и выгрузить их потом в табличку и вывалить ошибку. Табличка получается пустая. Хотя после этого создается документ с такой же датой, суммой на того же контрагента, что были переданны в запрос. Такое происходит только в случае если в документе есть 2 и более строчки. где я ошибся?
     
  2. Zab

    Zab Well-Known Member
    1C Team

    Регистрация:
    7 авг 2006
    Сообщения:
    583
    Симпатии:
    0
    Группировку добавь, да?
     
  3. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    группировко однозначно!
     
  4. LSH

    LSH Гость

    Или вот так:
    Запрос.Выгрузить(ТаблицаЗапроса,1,0);
     
  5. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    LSH, такой вариант не сработал(((

    vitfil, Zab, а можно поподробнее про группировку? Написал так - не помогло:
    Код (Text):
    "//{{ЗАПРОС(ЗапросСчет)
    |Период с ТЗ_ДатаДок по ТЗ_ДатаДок;
    |ОбрабатыватьДокументы все;
    |Без итогов;
    |ДатаДок = Документ.Счет.ДатаДок;
    |Контрагент = Документ.Счет.Контрагент;
    |Всего = Документ.Счет.Всего;
    |Группировка Всего;
    |Условие(ДатаДок = ТЗ_ДатаДок);
    |Условие(Контрагент = ТЗ_Контрагент);
    |Условие(Всего = СуммаДокумента);
    |"//}}ЗАПРОС
     
  6. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    "//{{ЗАПРОС(ЗапросСчет)
    |Период с ТЗ_ДатаДок по ТЗ_ДатаДок;
    |ОбрабатыватьДокументы все;
    |Без итогов;
    |ДатаДок = Документ.Счет.ДатаДок;
    |Контрагент = Документ.Счет.Контрагент;
    |Всего = Документ.Счет.Всего;
    |Группировка Документ;
    |Условие(ДатаДок = ТЗ_ДатаДок);
    |Условие(Контрагент = ТЗ_Контрагент);
    |Условие(Всего = СуммаДокумента);
    |"//}}ЗАПРОС
     
  7. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Не работает((((
    Для проверки поставил ТаблицаЗапроса.выбратьстроку();
     
  8. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    "//{{ЗАПРОС(ЗапросСчет)
    |Период с ТЗ_ДатаДок по ТЗ_ДатаДок;
    |ОбрабатыватьДокументы все;
    |Без итогов;
    //|ДатаДок = Документ.Счет.ДатаДок; Ересь!

    |Документ = Документ.Счет.ТекущийДокумент;

    |Контрагент = Документ.Счет.Контрагент;
    |Всего = Документ.Счет.Всего;
    |Группировка Документ;
    //|Условие(ДатаДок = ТЗ_ДатаДок); Это тоже ересь!
    |Условие(Контрагент = ТЗ_Контрагент);
    |Условие(Всего = СуммаДокумента);
    |"//}}ЗАПРОС

    И бегом арш читать ЖКК! Там про запросы довольно популярно с примерами написано.
     
  9. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Так может, в этом диапазоне просто нет документов ?
    Vitfil прав
    Период с ТЗ_ДатаДок по ТЗ_ДатаДок; - уже достаточно для отслеживания дат, я как-то невнимательно посмотрел на запрос, только на группировку
     
  10. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    vitfil прямая ссылка на ЖКК есть?
    Код (Text):
        "//{{ЗАПРОС(ЗапросСчет)
    |Период с ТЗ_ДатаДок по ТЗ_ДатаДок;
    |ОбрабатыватьДокументы все;
    |Без итогов;
    //  |ДатаДок = Документ.Счет.ДатаДок;
    |Контрагент = Документ.Счет.Контрагент;
    |Всего = Документ.Счет.Всего;
    |ТекущийДокумент = Документ.Счет.ТекущийДокумент;
    |Группировка Документ;
    //  |Условие(ДатаДок = ТЗ_ДатаДок);
    |Условие(Контрагент = ТЗ_Контрагент);
    |Условие(Всего = СуммаДокумента);
    |"//}}ЗАПРОС
    Тоже не отрабатывает. Никак не могу понярть почему счет, в котором есть одна строка - отбирается нормально, а в котором 2 - не отбирается??? Может ли на это влиять как-то номер счета? Счета с одной строкой подобны 00000100, а с двумя 0000010В
    Причем со счетами-фактурами все нормально работает, а счета не отбирает
     
  11. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Поставьте 1С++ и напишите прямой запрос.
    А у вас итог по колонке "Всего"?

    Вообще, с точки зрения банальной эрудиции, запросы 1С ересь полнейшая... Кто-нить когда-нить смотрел, как она их переводит в T-SQL? Хочется обнять и плакать!

    Еще смущает условие (Всего = Сумма документа).
    Мот документов с такой сумой нетуть.
     
  12. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Насколько я понял рассматривая документ Счета - это сумма строк + сумма НДС всех строк. самое удивительное что счетах-фактурах отрабатывает нормально, а со Счетами ни в какую. Где взять 1С++?
     
  13. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Ну дык в счете реквизит Всего - табличный, то есть при таком запросе ПОСЛЕДНЕЕ строчное значение табличной части документа сравнивается в суммой документа, что лажа. вариант - суммировать функцией и отлавливать по условию на выходе. Добавить типа |Функция СумВсего = Сумма(Всего);

    а отлов пока Запрос.Группировка() = 1 Цикл
    Если Запрос.СумВсего = СуммаДокумента тогда
    Таб. вывестисекцию - ни или добавить в ТЗ или список - энто уже по желанию;
    КонецЕсли;
    конецЦикла;

    Удачи!
     
  14. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    puh14, а можешь полностью плиз текст запроса написать, а то я запутался совсем?
     
  15. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Перем Запрос, ТекстЗапроса, Таб;//надо, ну если по другому называется - то иначе
    Запрос = СоздатьОбъект("Запрос");
    текстзапроса =
    "//{{ЗАПРОС(ЗапросСчет)
    |Период с ТЗ_ДатаДок по ТЗ_ДатаДок;
    |ОбрабатыватьДокументы все;
    |Без итогов;
    |Контрагент = Документ.Счет.Контрагент;
    |Всего = Документ.Счет.Всего;
    |ТекущийДокумент = Документ.Счет.ТекущийДокумент;
    |Группировка Документ;
    |Условие(Контрагент = ТЗ_Контрагент);
    |Функция СумВсего = Сумма(Всего);
    |"//}}ЗАПРОС

    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    Пока запрос.Группировка() = 1 Цикл
    Если Запрос.СумВсего = СуммаДокумента тогда
    \\тут - что делать с строчкой
    КонецЕсли;
    КонецЦикла;


    Кроме того - рекомендую добавить вместо |Контрагент = Документ.Счет.Контрагент;

    |Контрагент = Документ.Счет.Контрагент,Справочник.Клиенты.ТекущийЭлемент;
    - Тогда выдаст по всем контрагентам, а то пока его не выберешь - ничего не покажет.
    синтаксис проверь - мож где ошибся в буквах.
     
  16. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    НЕ... никак не выходит(((
    Как еще кроме запроса можно получить документы Счета с отбором по дате, контрагенту и общей сумме документа?
     
  17. jj_mail

    jj_mail Гость

    А ничего, что нужно сделать выборку с точностью до строки документа ?
     
  18. kaa

    kaa Гость

    Код (Text):
    ТекстЗапроса = "//{{ЗАПРОС(ЗапросСчет)
    |Период с ТЗ_ДатаДок по ТЗ_ДатаДок;
    |ОбрабатыватьДокументы все;
    //   |Без итогов;
    |Счет = Документ.Счет.ТекущийДокумент;
    |Контрагент = Документ.Счет.Контрагент;
    |Всего = Документ.Счет.Всего;
    //   |Условие(ДатаДок = ТЗ_ДатаДок);
    |Функция ВсегоСумма = Сумма(Всего);
    |Условие(Контрагент = ТЗ_Контрагент);
    |Условие(ВсегоСумма = ТЗ_суммаДокумента + ТЗ_Сумма2);
    |Группировка Счет;
    |"//}}ЗАПРОС;
    Если Запрос.Выполнить(ТекстЗапроса) = 1 Тогда
    Запрос.Выгрузить(ТаблицаЗапроса,0,0);
    Если ТаблицаЗапроса.КоличествоСтрок() <> 0 Тогда
    Сообщить("Счет для "+ТЗ_Контрагент+" на сумму: "+Строка(ТЗ_СуммаДокумента)+" уже есть в системе!");
    Иначе
    СоздатьДокумент(ТЗ_ДатаДок, ТЗ_Сумма2, ТЗ_СуммаДокумента, ТЗ_Контрагент, ТЗ_Товар);  
    КонецЕсли;
    КонецЕсли;
     
  19. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    jj_mail , опиши подробнее плиз.

    kaa
    ВСЕГОСУММА<<?>>
    Переменная не определена (ВСЕГОСУММА)
    Если Запрос.Выполнить(ТекстЗапроса) = 1 Тогда
    {V:\СЧЕТА.ERT(520)}: Условие(ВсегоСумма <<?>> = ТЗ_суммаДокумента + ТЗ_Сумма2);
    Запрос[9] : Ошибка в выражении 'ВсегоСумма'
     
  20. kaa

    kaa Гость

    Протупил Я :rolleyes:
    Строчку с условием убери

    Если Запрос.Выполнить(ТекстЗапроса) = 1 Тогда
    Нашли = 0;
    Пока Запрос.Группировка(1)= 1 Цикл
    Если Запрос.ВсегоСумма = ТЗ_суммаДокумента + ТЗ_Сумма2 Тогда
    Нашли =1;
    Прервать;
    КонецЕсли;
    КонецЦикла;
    Если Нашли =1 Тогда
    Сообщить("Счет для "+ТЗ_Контрагент+" на сумму: "+Строка(ТЗ_СуммаДокумента)+" уже есть в системе!");
    КонецЕсли;
    Иначе
    СоздатьДокумент(ТЗ_ДатаДок, ТЗ_Сумма2, ТЗ_СуммаДокумента, ТЗ_Контрагент, ТЗ_Товар);
    КонецЕсли;
    КонецЕсли;
     
Загрузка...
Похожие Темы - 1c7 черный запрос
  1. KiR
    Ответов:
    11
    Просмотров:
    6.786
  2. KiR
    Ответов:
    1
    Просмотров:
    2.707
  3. KiR
    Ответов:
    6
    Просмотров:
    4.911
  4. vbs
    Ответов:
    7
    Просмотров:
    2.372
  5. vbs
    Ответов:
    8
    Просмотров:
    4.009

Поделиться этой страницей