Версия для печати темы (https://pro1c.org.ua/index.php?s=9df54254f6435963a712430615f2af26&showtopic=661)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Платформа 8 _ Запросы в 1С8

Автор: MATEVI 06.07.09, 16:15

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|Продажи.Номенклатура,
|Продажи.Валюта,
|Продажи.Регистратор КАК Регистратор1,
|Продажи.Стоимость
|ИЗ
|РегистрНакопления.Продажи КАК Продажи

Как в запросе можно (и можно ли) сразу сделать перерасчет из например из гривни в другую валюту?

Автор: Fynjy 06.07.09, 17:29

Можно. В запросе допустимы конструкции типа А*Б/В.

Автор: MATEVI 06.07.09, 17:46

Вопрос как. В 1С8 я не силен пока... Так что даже представления не имею 32542390.gif
Поэтому пожалуйста объясните как для чайников smile.gif Или где посмотреть можно реализацию.
Я так понимаю мне надо сначала получить Курс и кратность а потом ???

Автор: Batchir 06.07.09, 18:52

Можно как-то так



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

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

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



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

Автор: MATEVI 06.07.09, 23:09

Цитата(Batchir @ 06.07.09, 20:52) *
Можно как-то так

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

Спасибо.Попробую. В регистре суммы в гривне как валюте рег. учета и только в одной валюте.

Автор: zetovich 07.07.09, 7:19

Цитата(Batchir @ 06.07.09, 20:52) *
Можно как-то так



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

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

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



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


небольшое замечание...пакетных запросов в 8.0. нет...они принминимы для 8.1

Автор: MATEVI 07.07.09, 18:51

Цитата(Batchir @ 06.07.09, 20:52) http://pro1c.org.ua/index.php?act=findpost&pid=2071

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

Автор: MATEVI 20.08.09, 13:39



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

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

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

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


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

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

Автор: zetovich 20.08.09, 19:12



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

не?


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

Автор: MATEVI 20.08.09, 20:11

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


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

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

сделал так

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

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

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

ЗЫ За мысль спасибо.

Автор: Fynjy 20.08.09, 20:14

Курим IS NULL

Автор: zetovich 20.08.09, 20:17

там 2 кавычки
у меня работает.
хм..

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

Автор: MATEVI 20.08.09, 20:22

Цитата(Fynjy @ 20.08.09, 22:14) *
Курим IS NULL

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

Автор: zetovich 20.08.09, 20:25



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

Автор: MATEVI 20.08.09, 20:27

Цитата(zetovich @ 20.08.09, 22:17) *
там 2 кавычки
у меня работает.
хм..

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

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

Та только что то Ув. Fynjy мало говорит. smile.gif

Автор: zetovich 20.08.09, 20:30

все правельно он делает....направлени показал...вперед
+для себя более узнаешь.

Автор: MATEVI 20.08.09, 20:42

Да это работает

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

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

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

Сорри за офтоп

Автор: Fynjy 21.08.09, 8:15

Достаточно прочитать последовательно 5 книг и будет тебе счастье ... Букварь по админству, радченко, курсы от 1с (4 шт), огромный букварь по 8, сложные отчеты - и бушь в шоколаде ...
PS: странно и почему ни кто не кричит, когда преходит с турбо си на вижуал студию, как тяжелая система ...

Автор: Fynjy 21.08.09, 8:16

PS: а что бы не выдумывать велосипед - еще книжку по учету в твоей типовой конфигурации ...

Автор: MATEVI 21.08.09, 9:02

И шо прочитав пару книг асом по 8-ке стану? smile.gif Опыт! Вот что главное.
Собственно все что написали я читал. Но там примеры детские и не всегда подходят в практике. Например Есть NULL я так и не нашел вчера.
Плачут, плачут. Тока на других своих форумах... Хотя если сравнивать получение опыта в семерке в свое время то все проходит побыстрее, но все равно не достаточно.

По поводу "великов" то изобретениями не занимаюсь. Но когда клиенту хочетца то почему и нет? Надо вот им вести учет "конвертов" в отдельной базе. По типу екселя. Ну и мне дополнительный опыт не помешает.
Или вот еще пример из жизни расчет зарплаты на основании данных о реализации товаров и услуг. Считают вот менеджерам зарплату таким образом. Так что в типовых решениях не всегда есть то что надо. Спасаю разве что "кусками кода" smile.gif Например для того что бы не писать движения регистров конструктором...
Так что я не плачу. А тихонечко скрипя зубами грызу icon_cuss.gif платформу 81 smile.gif))))

Автор: Fynjy 21.08.09, 10:42

Опыт = применение знаний
Опыт <> метод научного тыка ...
PS: в типовых есть все просто кое какие нюансы можно упрощать ...
PSS: такая зп реализована кури схемы мотивации ...

Автор: Batchir 21.08.09, 11:15

Цитата(MATEVI @ 21.08.09, 10:02) http://pro1c.org.ua/index.php?act=findpost&pid=4162

Автор: MATEVI 21.08.09, 14:38

Цитата(Fynjy @ 21.08.09, 12:42) http://pro1c.org.ua/index.php?act=findpost&pid=4163
Дык на ссыльwink.gif

Еще раз спасибо. Сохранил страницу. А то раз прочитал и мало что осталось в голове...

Автор: zetovich 21.10.09, 13:06

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



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


вопрос: КАКОЕ УСЛОВИЕ.
з.ы. этот пример простой......реально мне нужно в другом запросе...на много сложнее.
спс

Автор: Fynjy 21.10.09, 14:31

= null не правильно
есть null правильно - но то же не всегда корректно ...

Автор: zetovich 21.10.09, 15:06

я так понял это не совсем ответ на мой вопрос...тип рекомендация для использования null
з.ы. пропробовал Ваше предложение...неа..тож самое sad.gif

Автор: Vofka 21.10.09, 15:19

В форме можно проверить так:
ЭлементыФормы.Контрагент.ОтметкаНезаполненного = истина (или ложь, смотря по ситуации)

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

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

Автор: zetovich 21.10.09, 15:27

Цитата(Vofka @ 21.10.09, 17:19) *
В форме можно проверить так:
ЭлементыФормы.Контрагент.ОтметкаНезаполненного = истина (или ложь, смотря по ситуации)

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

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

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

Автор: MATEVI 21.10.09, 18:15



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



УправлениеЗапасамиПартионныйУчет - ТорговляДляЧастныхПредпринимателейУкраины

Автор: zetovich 21.10.09, 20:19

все равно как то некрасиво.....если добалять еще виды документов ,справочников то можно и забыть sad.gif
но мысль понятна.
спс.

Автор: Fynjy 21.10.09, 22:19

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

Автор: Fynjy 21.10.09, 22:21

При этом в поле запроса помещать типы агрегатные и булево очень большая ошибка ... Я написал, грубо потом стер со второго раза вроде по лучше ...

Автор: zetovich 22.10.09, 7:30

спасибо друзяка, просветил неучей. smile.gif
"При этом в поле запроса помещать типы агрегатные и булево очень большая ошибка"
не совсем уловил ....

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

тип это зло? вчем именно зло?

Автор: Кузьмич 22.10.09, 8:44

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

Автор: zetovich 22.10.09, 8:56

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

да нормально все wink.gif

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua