Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Запросы в 1С8
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Пользователю 1С 8.3, 8.2, 8.1, 8.0 > Платформа 8
MATEVI
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|Продажи.Номенклатура,
|Продажи.Валюта,
|Продажи.Регистратор КАК Регистратор1,
|Продажи.Стоимость
|ИЗ
|РегистрНакопления.Продажи КАК Продажи

Как в запросе можно (и можно ли) сразу сделать перерасчет из например из гривни в другую валюту?
Fynjy
Можно. В запросе допустимы конструкции типа А*Б/В.
MATEVI
Вопрос как. В 1С8 я не силен пока... Так что даже представления не имею 32542390.gif
Поэтому пожалуйста объясните как для чайников smile.gif Или где посмотреть можно реализацию.
Я так понимаю мне надо сначала получить Курс и кратность а потом ???
Batchir
Можно как-то так



Запрос = Новый Запрос;

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

Запрос.УстановитьПараметр("Валюта", );// указываем валюту в которой нужно получить стоимость



Но в этом запросе подразумевается что в регистрах хранятся суммы в гривне, иначе нужно ещё делать корректный пересчет. Курс берется последний на текущую дату.
MATEVI
Цитата(Batchir @ 06.07.09, 20:52) необходимо зарегистрироваться для просмотра ссылки
Можно как-то так

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

Спасибо.Попробую. В регистре суммы в гривне как валюте рег. учета и только в одной валюте.
zetovich
Цитата(Batchir @ 06.07.09, 20:52) необходимо зарегистрироваться для просмотра ссылки
Можно как-то так



Запрос = Новый Запрос;

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

Запрос.УстановитьПараметр("Валюта", );// указываем валюту в которой нужно получить стоимость



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


небольшое замечание...пакетных запросов в 8.0. нет...они принминимы для 8.1
MATEVI
Цитата(Batchir @ 06.07.09, 20:52) необходимо зарегистрироваться для просмотра ссылки
Можно как-то так
.....

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

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

(из СКД)
и конечном итоге такой отчет.
необходимо зарегистрироваться для просмотра ссылки

С меня пиво icon_beer17.gif
MATEVI


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

Запрос.УстановитьПараметр("ДатаДок",Дата);
Запрос.УстановитьПараметр("Организация",Организация);

СотрудникиОрганизации = Запрос.Выполнить().Выбрать();

Пока СотрудникиОрганизации.Следующий() Цикл
Если НЕ ПустаяСтрока(СотрудникиОрганизации.ВидУдержания) Тогда
НоваяСтрока = Удержания.Добавить();
НоваяСтрока.ФизЛицо = СотрудникиОрганизации.ФизЛицо;


"Намучал" такой вот запрос smile.gif
Не нравится вот эта строка:
Если НЕ ПустаяСтрока(СотрудникиОрганизации.ВидУдержания) Тогда
т.е. если нет удержаний по сотруднику тогда новую строку в документе не добавлять.
Хочетца сразу такую ситуацию фильтровать в запросе и не обрабатывать данного сотрудника.

Как это условие должно выгладеть в запросе? В 77 для этого можно применить "когда".
Тут я так понимаю что то типа Выбор когда... Но что то не получается у меня блин никак.
zetovich


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

не?


ээээ... а Удержания.ВидУдержания что там строка?
MATEVI
не smile.gif выдает ошибку
И (НЕ ВидУдержания = <<?>>")
СотрудникиОрганизации = Запрос.Выполнить().Выбрать();
по причине:
{(14, 25)}: Строка, не закрывающаяся кавычкой
И (НЕ ВидУдержания = <<?>>")


"а Удержания.ВидУдержания что там строка? "

это справочник

сделал так

| И (НЕ ВидУдержания = &Пустой)
...
Запрос.УстановитьПараметр("Пустой",Справочники.ВидыНачисленийУдержаний.ПустаяСсылка());

Вроде работает.

Но что то кажется что все равно как то через одно место ... smile.gif

ЗЫ За мысль спасибо.
Fynjy
Курим IS NULL
zetovich
там 2 кавычки
у меня работает.
хм..

а ваще ув. Fynjy дело говорит.
MATEVI
Цитата(Fynjy @ 20.08.09, 22:14) необходимо зарегистрироваться для просмотра ссылки
Курим IS NULL

Не ну а подсказать по человечески? Нашел вот в типовой УТ например ее использование но ни фига не пойму как правильно использовать в моем примере. Буду рыться в книжках
zetovich


"ВЫБРАТЬ
| СведенияОРаботе.ФизЛицо КАК ФизЛицо,
| Удержания.ВидУдержания КАК ВидУдержания,
| Удержания.Валюта КАК Валюта,
| Удержания.СтатьяЗатрат КАК СтатьяЗатрат,
| Удержания.Сумма КАК Сумма
|ИЗ
| РегистрСведений.СведенияОРаботе КАК СведенияОРаботе
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Удержания КАК Удержания
| ПО СведенияОРаботе.ФизЛицо = Удержания.ФизЛицо
|ГДЕ
| СведенияОРаботе.ДатаПриема <= &ДатаДок
| И СведенияОРаботе.Организация = &Организация
| И (НЕ ВидУдержания ЕСТЬ NULL)
|
|СГРУППИРОВАТЬ ПО
| СведенияОРаботе.ФизЛицо,
| Удержания.ВидУдержания,
| Удержания.Валюта,
| Удержания.СтатьяЗатрат,
| Удержания.Сумма";
MATEVI
Цитата(zetovich @ 20.08.09, 22:17) необходимо зарегистрироваться для просмотра ссылки
там 2 кавычки
у меня работает.
хм..

а ваще ув. Fynjy дело говорит.

Та я тоже думал што из буфера что то не то "вставило". Переписал руками. Но ошибко выдавало smile.gif

Та только что то Ув. Fynjy мало говорит. smile.gif
zetovich
все правельно он делает....направлени показал...вперед
+для себя более узнаешь.
MATEVI
Да это работает

| И (НЕ ВидУдержания ЕСТЬ NULL)

Цитата(zetovich @ 20.08.09, 22:30) необходимо зарегистрироваться для просмотра ссылки
все правельно он делает....направлени показал...вперед
+для себя более узнаешь.

Та знаю. Но блин свое обучение 1С8 сейчас оцениваю как icon_cuss.gif . Когда было время надо было не ленится а изучать. А сейчас то что в принципе на семерке делаешь за 15-20 минут. Тут роешся и изачаешь 64000000.gif по нескольку часов Очень это все обидно. 47046430.gif
Тем более что все равно %80 работы у меня на 77. медленно это все идет. Хотя не могу сказать что вабще не фига не знаю но вот бывает.
Думаю вот пойти на язык запросов наверно В методе по запросам вобще нифига не понятно самому... Вот и тыкаюсь "як сліпе кошеня".

Сорри за офтоп
Fynjy
Достаточно прочитать последовательно 5 книг и будет тебе счастье ... Букварь по админству, радченко, курсы от 1с (4 шт), огромный букварь по 8, сложные отчеты - и бушь в шоколаде ...
PS: странно и почему ни кто не кричит, когда преходит с турбо си на вижуал студию, как тяжелая система ...
Fynjy
PS: а что бы не выдумывать велосипед - еще книжку по учету в твоей типовой конфигурации ...
MATEVI
И шо прочитав пару книг асом по 8-ке стану? smile.gif Опыт! Вот что главное.
Собственно все что написали я читал. Но там примеры детские и не всегда подходят в практике. Например Есть NULL я так и не нашел вчера.
Плачут, плачут. Тока на других своих форумах... Хотя если сравнивать получение опыта в семерке в свое время то все проходит побыстрее, но все равно не достаточно.

По поводу "великов" то изобретениями не занимаюсь. Но когда клиенту хочетца то почему и нет? Надо вот им вести учет "конвертов" в отдельной базе. По типу екселя. Ну и мне дополнительный опыт не помешает.
Или вот еще пример из жизни расчет зарплаты на основании данных о реализации товаров и услуг. Считают вот менеджерам зарплату таким образом. Так что в типовых решениях не всегда есть то что надо. Спасаю разве что "кусками кода" smile.gif Например для того что бы не писать движения регистров конструктором...
Так что я не плачу. А тихонечко скрипя зубами грызу icon_cuss.gif платформу 81 smile.gif))))
Fynjy
Опыт = применение знаний
Опыт <> метод научного тыка ...
PS: в типовых есть все просто кое какие нюансы можно упрощать ...
PSS: такая зп реализована кури схемы мотивации ...
Batchir
Цитата(MATEVI @ 21.08.09, 10:02) необходимо зарегистрироваться для просмотра ссылки
Например Есть NULL я так и не нашел вчера.


необходимо зарегистрироваться для просмотра ссылки
MATEVI
Цитата(Fynjy @ 21.08.09, 12:42) необходимо зарегистрироваться для просмотра ссылки
Опыт = применение знаний
Опыт <> метод научного тыка ...
PS: в типовых есть все просто кое какие нюансы можно упрощать ...
PSS: такая зп реализована кури схемы мотивации ...


К сожалению примеры в учебных пособиях мало чем помогают. Очень редко в типовом коде используются те методы которые там описаны. Тесты с ИТС по 8 прохожу в среднем 5-7 правильных ответов, но я не считаю их показателем опыта. Толку от них, разве что мозги развивают. Поэтому изучаю все на примере типового кода. И один из методов получения опыта вопросы на форумах. По большому счету то что сделал в начале тоже работало, но ведь на этом не остановлся и сделал как было бы правильно.

Можно упрощать. Где то даже вижу бока. Где то делаю по своему.

И шо мне в торговлю для чп надо было из УТП передирать схемы мотивации данных? Или даже допустим в УТ в которой даже и зарплаты нету.. ИМХО Проще было добавить регистр. Общий модуль, пару запросов по таб частям и пару отчетов на СКД и все прекрасно работает.

Цитата(Batchir @ 21.08.09, 13:15) необходимо зарегистрироваться для просмотра ссылки
Дык на ссыльwink.gif

Еще раз спасибо. Сохранил страницу. А то раз прочитал и мало что осталось в голове...
zetovich
а теперь вопрос по делу. smile.gif
есть простой запрос. нужно выбрать документы "ВозвратТоваровОтПокупателяТовары" у которых не заполено "Себестоиостть" или "ДокументПартии", т.к. реквизит "ДокументПартии" имеет состовной тип (т.е. несолько видов документов)
вопрос как?


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


вопрос: КАКОЕ УСЛОВИЕ.
з.ы. этот пример простой......реально мне нужно в другом запросе...на много сложнее.
спс
Fynjy
= null не правильно
есть null правильно - но то же не всегда корректно ...
zetovich
я так понял это не совсем ответ на мой вопрос...тип рекомендация для использования null
з.ы. пропробовал Ваше предложение...неа..тож самое sad.gif
Vofka
В форме можно проверить так:
ЭлементыФормы.Контрагент.ОтметкаНезаполненного = истина (или ложь, смотря по ситуации)

Как это проверить в запросе - хз.

А при проведении реквизит ДокументПартии делает где-то движения? Если да, то по соответствующему регистру может быть запрос делать?
zetovich
Цитата(Vofka @ 21.10.09, 17:19) необходимо зарегистрироваться для просмотра ссылки
В форме можно проверить так:
ЭлементыФормы.Контрагент.ОтметкаНезаполненного = истина (или ложь, смотря по ситуации)

Как это проверить в запросе - хз.

А при проведении реквизит ДокументПартии делает где-то движения? Если да, то по соответствующему регистру может быть запрос делать?

1. да то понятно...у меня запрос.
2. сильно муторно. (да и конечная цель не связана не с документами, ни с движениями)
MATEVI


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



УправлениеЗапасамиПартионныйУчет - ТорговляДляЧастныхПредпринимателейУкраины
zetovich
все равно как то некрасиво.....если добалять еще виды документов ,справочников то можно и забыть sad.gif
но мысль понятна.
спс.
Fynjy
По поводу нулл ... Блин читайте хоть иногда книжки умные ...
"Любая операция сравнения с NULL (даже операция «NULL = NULL»), даёт в результате значение «неизвестность» (UNKNOWN). Окончательный результат при этом зависит от полного логического выражения в соответствии с таблицей истинности логических операций. Если сравнение с NULL есть вся логическая операция целиком (а не её часть), то результат её аналогичен FALSE (выражение вида IF <что-то> = NULL THEN <действие1> ELSE <действие2> END IF всегда будет приводить к выполнению действия2)." - какие еще вопросы могут быть?
По сему: что то = null - бред ...
Для проверки Неопределенно/пустого существует IS NULL
Можно об этом прочитать на ИТС ...
Fynjy
При этом в поле запроса помещать типы агрегатные и булево очень большая ошибка ... Я написал, грубо потом стер со второго раза вроде по лучше ...
zetovich
спасибо друзяка, просветил неучей. smile.gif
"При этом в поле запроса помещать типы агрегатные и булево очень большая ошибка"
не совсем уловил ....

| И ВозвратТоваровОтПокупателяТовары.Себестоимость = 0
| И ВозвратТоваровОтПокупателяТовары.ДокументПартии = ИСТИНА

тип это зло? вчем именно зло?
Acid
Fynjy, своим "is null" ты человека больше в прострацию ввел, чем разъяснил. smile.gif Проще было Истину ему указать.
----------
А в стандартных языках "is null" проверяется как:
if (переменная) { }
это наверное проще, чем в языке программирования "1С".
zetovich
Цитата(Кузьмич @ 22.10.09, 10:44) необходимо зарегистрироваться для просмотра ссылки
Fynjy, своим "is null" ты человека больше в прострацию ввел, чем разъяснил. smile.gif Проще было Истину ему указать.
----------
А в стандартных языках "is null" проверяется как:
if (переменная) { }
это наверное проще, чем в языке программирования "1С".

да нормально все wink.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.