• Mobile apps - просто как 2х2!

    Рост количества информации и ускорение темпов жизни все сильнее требует постоянного присутсвия в рабочей сети, в том числе и в пути. Именно поэтому такю большую популярность приобретают смартфоны, КПК и планшеты, представляющие собой мобильные компьютеры для доступа к рабочей и личной информации.

    Сегодня довольно сложно встретить человека без мобильного телефона или смартфона. Это уже не просто средство связи, но также и инструмент для работы, управления личными данными, общения в интернете, а также разного вида развлечений.

     
     
  • Аналитические данные

    Для иллюстрации разнообразных аналитических и научных данных довольно удобно использовать красивые диаграммы. Табличный редактор  от Microsoft Excel 2010 предлагает огромное количество как стандартных так и довольно редких диаграмм и позволяет создавать сложные комбинации из уже существующих шаблонов.

    Создать диаграмму в программе Excel 2010 довольно просто, так как, открывая эту программу, вам потребуется нажать всголишь пару кнопок. Остается всего лишь их заполнить таблицу с данными. Как же это сделать?Вы узнаете из статей нашего сайта.

     
  •  E-mail и рассылки

    Не секрет, что на сегодняшний день E-mail рассылка всё еще является эффективным рекламным средством, признанным во всей интернет среде, по соотношению цена качество. Охват массовой рассылки соизмерим, разве, что с рекламой по телефону

    Маркетинг путем рассылок по электронной почте позволяет создать необходимую программу регулярных рассылок для продвижения своего бренла и развития бизнеса в целом. Наконец, правильно построенный интернет маркетинг по почте может укрепить положительные взаимоотношения клиентов и организации.

     
  • Мобильные устройства

    Новости, обзоры и тесты портативной техники и мобильных устройств. Современные смартфоны, КПК и планшеты содержат в себе довольно взрослый функционал, аналогичный такому же у своих «старших братьев». Удаленное администрирование, браузеры с технологиями flash и java-script, синхронизация электронной почты, заметок, обмен различными файлами. Обо всем этом и не только подробнее на нашем сайте.

Запрос в 1С УТ 8.1

Категория Помощь

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

Запрос.Текст = "ВЫБРАТЬ
| Ссылка.Дата,
| Ссылка.Номер,
| Номенклатура,
| Цена,
| Количество,
| Сумма
|ИЗ
| Документ.ПоступлениеТоваровУслуг.Товары
|ГДЕ
| Ссылка.Контрагент = &Поставщик
| И Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
|";

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

//показать результат
Пока РезультатЗапроса.Следующий() Цикл
Сообщить(Строка(РезультатЗапроса.Номер));
Сообщить(Строка(РезультатЗапроса.Дата));

Но в конце он ничего не выдает. Подскажите пожалуйста, почему. Ведь если запрос делается к табличной части справочника или документа, то обращение к реквизитам шапки документа или обычным реквизитам справочника производится через поле Ссылка

Комментарии  

 
0 #23 evgenij 30.07.2013 15:58
Ms Sql сам по себе поддерживет разименование. Единственный вариант узнать истину - взять на перевес Profiler и query analyser и испробовав все варианты попыриться в планы выполнения запросов.
 
 
0 #22 tatjana 29.07.2013 21:57
#21: Можно писать через точку, но только во вложенных запросах.
И получится что номер тащим из регистратора, а дата - это скорее врего период регистра будет. И левое соединение с документом-перв оисточником делать не надо.
#22: Я думаю рекомендации 1С по поводу написания запросов не просто принимают во внимание работу SQL, но и основываются на ней. По скольку сами не раз наверно сталкивались с замечательным ограничением в 256 таблиц. Отсюда вывод: чем меньше таблиц тащит запрос, тем лучше.
 
 
0 #21 aljona 27.07.2013 02:35
Все равно отличие есть в полях запроса обращаться к таблице документа или сразу обратиться ко всей таблице документа. Мне еще интересно а как это в SQL интерпретируетс я? Разница определенно будет
 
 
0 #20 dmitrij 25.07.2013 04:49
Потому что в таблице регистра храниться GUID документа... и когда вы будете писать запрос вам все равно придется соединятся с таблицей документов что бы получить номер и дату. Запрос может выглядеть примерно так:
ВЫБОРКА
Регистр.Номенклатура,
Документ.Номер,
Документ.Дата
ИЗ РегистрНакоплен ия.Товары КАК Регистр
ЛЕВОЕ СОЕДИНЕНИЕ Документ<ИмяДок умента КАК Документ
ПО РегистрНакоплен ия.Регистратор = Документ<ИмяДок умента>.Ссылка
как видите все равно не избежать того что бы обращаться к таблице документов, (либо писать поля через точку, в чем вы два дня назад меня разубедили)
 
 
0 #19 tatjana 24.07.2013 03:09
#18: согласна, регистр будет правильнее.
#19: ...
Зачем документ то тащить, если можно получить номер из регистратора?
 
 
0 #18 dmitrij 22.07.2013 16:04
#17: Плюс пару прочитанных книжек... похоже вам придется поизучать еще пару предметов.
#16: В любом случае не избежать того что бы обращаться к таблице документов ведь надо еще номер и дату получить.
 
 
0 #17 aljona 22.07.2013 00:41
#16 К сожалению страничку вам подсказать не могу. Но в случае обращения через точку запрос на уровне платформы к таблице документа будет делаться столько раз сколько к нему будет обращений. А в случае с вложенным запросом один раз.
Товарищи, а вам не кажется что мы спорим из-за неправильно поставленной задачи? Зачем делать запрос к документам ПоступлениеТова ровУслуг, если у него есть движения по регистрам. Если конфа типовая, то регистр "Закупки" скорее всего присутствует - по нему и делать запрос.
 
 
0 #16 tatjana 18.07.2013 08:48
#16: Дмитрий, Вы пытатесь спорить как я поняла. Только не правильными методами. Учить "первоклашек" изначально работать не верно - это не метод, согласитесь.
По поводу полей через точку. Их не избежать, сами знаете. Но как раз их следует использовать во вложенных запросах, чтобы избежать лишних ссылок (извините, опыт курсы).
 
 
0 #15 dmitrij 16.07.2013 10:29
#14:Зато так проще будет понять человеку, который только начал изучать 1С, ведь как правило при разработке в приложении только оптимизация 20% кода позволяет увеличить быстродействие на 80%.
#15:Что то я не нашел это в профессионально й разработке, может подскажете на какой странице это написано, я нашел только пункт, где описывается, что не следует задавать поля через точку, т.к. это создаст дополнительную ссылку на таблицу документов (да и пример приводится не из нашей оперы), хотя эту таблицу запрос все равно будет дергать.
 
 
0 #14 aljona 14.07.2013 22:22
Вложенный запрос - оптимальнее по производительно сти в данном случае. Запрос на большом количестве документов быстрее отработает. Читайте "Профессиональн ую разработку" там все написано ))))
 
 
0 #13 tatjana 13.07.2013 02:51
#13: судя по комментарию, Вы не обременяли себя изучением запросов.
 
 
0 #12 dmitrij 07.07.2013 07:01
Аналогично, но зачем вложенный запрос если можно все сделать проще:
"ВЫБРАТЬ
| ПоступлениеТоваровУслугТовары.Номенклатура,
| ПоступлениеТоваровУслугТовары.Количество,
| ПоступлениеТоваровУслугТовары.Цена,
| ПоступлениеТоваровУслугТовары.Сумма,
| ПоступлениеТова ровУслугТовары. Ссылка.Номер КАК Номер,
| ПоступлениеТова ровУслугТовары. Ссылка.Дата КАК Дата
|ИЗ
| Документ.Поступ лениеТоваровУсл уг.Товары КАК |ПоступлениеТоваровУслугТовары
|ГДЕ
| ПоступлениеТова ровУслугТовары. Ссылка.Контраге нт = &ВыбранныйКонтрагент
| И ПоступлениеТова ровУслугТовары. Ссылка.Дата МЕЖДУ &НачПериода И &КонПериода"
Такой запрос будет более понятнее, хотя результат он дает один и тот же. Единственное что еще можно добавить так это группировку, что бы исключить дубли строк в табличных частях
 
 
0 #11 aljona 05.07.2013 03:58
Просмотр результата запроса, конечно, личное дело каждого ))). Можно и консолькой попользоваться.
Но я так понимаю что кроме количества, цены и суммы надо получить дату и номер документа.
Предлагаю такой вариант:
"ВЫБРАТЬ
| ВложенныйЗапрос .Номенклатура,
| ВложенныйЗапрос .Количество,
| ВложенныйЗапрос .Цена,
| ВложенныйЗапрос .Сумма,
| ПоступлениеТова ровУслуг.Номер,
| ПоступлениеТова ровУслуг.Дата
|ИЗ
| Документ.Поступ лениеТоваровУсл уг КАК ПоступлениеТова ровУслуг
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ПоступлениеТова ровУслугТовары.Ссылка КАК Ссылка,
| ПоступлениеТова ровУслугТовары.Номенклатура КАК Номенклатура,
| ПоступлениеТова ровУслугТовары.Количество КАК Количество,
| ПоступлениеТова ровУслугТовары.Цена КАК Цена,
| ПоступлениеТова ровУслугТовары.Сумма КАК Сумма
| ИЗ
| Документ.Поступ лениеТоваровУсл уг.Товары КАК ПоступлениеТова ровУслугТовары) КАК ВложенныйЗапрос
| ПО ПоступлениеТова ровУслуг.Ссылка = ВложенныйЗапрос .Ссылка
|ГДЕ
| ПоступлениеТова ровУслуг.Контрагент = &ВыбранныйКонтр агент
| И ПоступлениеТова ровУслуг.Дата МЕЖДУ &НачПериода И &КонПериода"
 
 
0 #10 dmitrij 01.07.2013 01:25
Запрос.Выполнит ь().Выбрать().В ыгрузить().Выбр атьСтроку() - слишком долго и не практично, проще написать Запрос.Выполнит ь().Выгрузить() в окне просмотра переменных и результаты уже можно просмотреть в отладчике, зачем тратить лишнее время на перезапуск. А запрос должен выглядеть вот так:
Запрос.Текст =
"ВЫбрать
|Номенклатура,
|Цена,
|Сумма
|ИЗ
|Документ.ПоступлениеТоваровУслуг.Товары КАК Товары
|ГДЕ Товары.Ссылка.К онтрагент = &Поставщик
|И Товары.Дата Между &НачалоПериода И &КонецПериода";

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

Строка Сообщить(Резуль татЗапроса.Влож енныйЗапрос) просто выдаст ошибку.
Сори за кривоватость запроса т.к. 8 под рукой не было
 
 
0 #9 aljona 26.06.2013 17:02
Хорошо бы в запросе конечно вложенный запрос и ПоступлениеТова ровУслуг объединить по ссылке ))). И вот здесь:
Сообщить(Строка(РезультатЗапроса.Количество));
Сообщить(Строка(РезультатЗапроса.Сумма));
Полей "Сумма" и "количество" в запросе нет. Их надо тоже во вложенном запросе выбрать
Еще такой совет: если хотите посмотреть результат запроса пишите "Запрос.Выполни ть().Выбрать(). Выгрузить().Выб ратьСтроку()"
 
 
0 #8 tatjana 25.06.2013 12:21
Запрос криво написан. Используйте конструктор, если руками писать не получается.
Чисто из любопытства, вот здесь:
Сообщить(Строка(РезультатЗапроса.ВложенныйЗапрос));
Вы что хотите увидеть?
 
 
0 #7 elena 22.06.2013 06:23
Спасибо.
Мне нужно сделать запрос такой, чтобы он просматривал все поступления от данного поставщика за данный период и выдавал номенклатуру, цену в рознице, количество и сумму.
To Алена Маятская: я переделала этот запрос так как вы посоветовали в (2). Получилось:
Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ
| ПоступлениеТова ровУслуг.Номер КАК Номер,
| ПоступлениеТова ровУслуг.Дата КАК Дата,
| (ВЫБРАТЬ
| Номенклатура
| ИЗ
| Документ.Поступ лениеТоваровУсл уг.Товары)
| КАК ВложенныйЗапрос
| ИЗ Документ.Поступ лениеТоваровУсл уг КАК ПоступлениеТова ровУслуг
| ГДЕ ПоступлениеТова ровУслуг.Контрагент = &Поставщик
| И ПоступлениеТова ровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода";


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

Пока РезультатЗапрос а.Следующий() Цикл
Сообщить(Строка(РезультатЗапрос а.ВложенныйЗапрос));
Сообщить(Строка(РезультатЗапрос а.Дата));
Сообщить(Строка(РезультатЗапрос а.Количество));
Сообщить(Строка(РезультатЗапрос а.Сумма));
КонецЦикла;
Выдает синтаксическую ошибку при 2-ом ВЫБРАТЬ..(
 
 
0 #6 tatjana 21.06.2013 21:35
Чо придумываете то? Ошибка явно тут:
Запрос.УстановитьПараметр("Поставщик",ВыборКонтрагента.Наименование);
- нельзя сравнивать ссылку со строкой.
--
Макаров прав.
 
 
0 #5 aljona 21.06.2013 17:16
1. Проблема может быть в периоде. Допустим, если значение КонецПериода не заполнено, то оно считается равным 1.01.0001. Или просто в заданном периоде нет документов.

2. Запрос сам лучше было строить немного по-другому: сделать запрос по таблице документов и вложенным запросом - по табличной части. Но это уже на любителя и зависит от задачи
 
 
0 #4 anton 21.06.2013 01:55
Следует открыть список д-в ПТиУ , установить отбор по интервалу дат и по Контрагенту.

Вторая причина проблемы : Таб часть в Ваших д-х пуста.
 
 
0 #3 alexandr 20.06.2013 01:15
(3) Согласен...для начала нужно определить что она вообще хотела)
 
 
0 #2 dmitrij 18.06.2013 08:51
(2) может человеку и нужен список номенклатуры по всем табличным частям. Запрос написан правильно.
(1) Елена:
("Поставщик",Вы борКонтрагента. Наименование); - откуда тут ".Наименование" ??
Правильно по всей видимости:
("Поставщик",Вы борКонтрагента) ; или
("Поставщик",Вы борКонтрагента. Ссылка);
 
 
0 #1 alexandr 18.06.2013 02:23
А написать РезультатЗапрос а = Запрос.Выполнит ь().Выгрузить() и посмотреть что ты получаешь в результате уже не в моде? На вскиду скажу что у тебя не получаеться потому что ты и получаешь кучу табличных частей а не конкретные строки.
 

You have no rights to post comments