#0
by NikePopov
Добрый день! Столкнулся с задачей: Есть документ "Заявка", в котором указывается какой контрагент сколько продукции будет потреблять. При проведении документ пишет запись в регистр сведений "АктуальнаяЗаявка"(доступен СрезПоследних). Сделано это потому, что по умолчанию, завтра требуется поставить столько же продукции, сколько поставили вчера(если не было подано новой заявки). Требуется определить, сколько материалов требуется для выпуска продукции за год. Остальные вещи описывать не буду(как устроен справочник "Спецификации", какие дополнительные реквизиты есть), так как к вопросу они не имеют отношения. Сейчас код выглядит так: Пока ТекущаяДата <= ДатаОкончания Цикл Выполняем запрос к регистру(срез последних)... Такой цикл проходит 365 или 366 раз подряд. Что вызывает 365 или 366 раз запрос, что довольно долго. Пытаюсь составить запрос, в котором можно было бы выполнить аналогичные действия "СрезПоследних", но за один вызов. Имея опыт работы с другими базами данных, запрос бы выглядел так: dates inner join requests Проблема в том, что в конструкции "ГДЕ" нельзя использовать поля группировка "МАКСИМУМ", а в конструкции "ИМЕЮЩИЕ" нельзя использовать не группированные поля. То есть в языке запросов 1С не может ни в какой части запроса быть выражение "АктуальнаяЗаявка.Период = МАКСИМУМ(АктуальнаяЗаявка.Период)" Кто-нибудь знает способ реализовать вариант как в обычном запросе?
#3
by NikePopov
У меня обратная ситуация. Я знаю, как написать запрос SQL, а вот как обратно? Есть идея для запроса? МАКСИМУМ надо взять для МоментВремени, а не для Дата! Потому что регистр по позиции регистратора! А максимум по МоментВремени взять нельзя! Уже пробовал.
#4
by Serginio1
Можно использовать прямой запрос. Можно использовать Top Правда по сравнению с той платформой можно использовать только одно поле. Но в примере вмето нужно использовать просто РеализацияТоваровУслугТовары.НомерСтроки В
#5
by Vladal
Есть такая идея. Ниже запрос. Если что лишнего - я просто выкинул шелуху, оставил только основное для понимания. ВЫБРАТЬ
#7
by Vladal
> У меня обратная ситуация. Я знаю, как написать запрос SQL, а вот как обратно? Этот запрос к базе 1С или сторонней базе? Если сторонней, то подключайся к той базе по АДО и выполняй свой запрос. А как перевести - можешь и латинские литералы использовать, вроде select - 1С-ный язык запросов их понимает.
#8
by NikePopov
У меня все данные в регистре сведений. Внешних данных нет. Я попытался перевести с "языка SQL" на язык запросов 1С, но либо я плохо перевел, либо у 1С не умеет работать с ИМЕЮЩИЕСЯ в полном объеме, как это возможнго с SQL. Пытаюсь вникнуть.
#9
by NikePopov
На простом примере(из головы): Есть торги. Есть покупатели, есть номенклатуры. Победитель - тот кто предложил максимальную стоимость. Дано: -----------------------------------------| Клиент | Номенклатура | Предложенная цена| -----------------------------------------| Клиент1| Номенклатура1|10 | Клиент2| Номенклатура1|20 | Клиент1| Номенклатура2|30 | Клиент2| Номенклатура2|40 | ------------------------------------------ Задача: запросом определить победителей по номенклатурам. Ответ для SQL: select max(dano.client), dano.nom AS nom , max(dano.price) from dano group bu nom Результат запроса: -----------------------------------------| Клиент | Номенклатура | Предложенная цена| -----------------------------------------| Клиент2| Номенклатура1|20 | Клиент2| Номенклатура2|40 | ------------------------------------------ Нужен запрос для 1С...
#11
by DmitrO
А в каком это SQL, в предложении HAVING можно использовать поля по которым не группировали? Приведите пример с указанием конкретного сервера (языка запросов SQL). :)
#13
by Vladal
Чтобы использовать ИМЕЮЩИЕ в запросе, надо это поле сгруппировать. Пример: "ВЫБРАТЬ | ПартииТоваровНаСкладах.Склад,
#14
by Vladal
выбрать максимум(dano.client), dano.nom как nom, максимум(dano.price) из dano сортировать по nom так пройдет в твоей базе?
#15
by mistеr
Ссылку на "срез последних на каждый день уже дали". Но для твоей задачи > Требуется определить, сколько материалов требуется для выпуска продукции за год. лучше использовать регистр накопления и не иметь этих проблем.
#16
by NikePopov
в конструкции "ИМЕЮЩИЕ" недопустимо использовать поля, не входящие в группировку (для этого примера - "dano.client") Это вопрос архитектуры конфигурации, на которое я повлиять не могу. Я только пишу внешнюю обработку. говорить "надо снимать конфигурацию с поддержки" не имеет смысла. Ведь можно выполнять запрос в цикле на каждый день. Ну и регистром накопления встает вопрос: кто будет туда писать данные? Заявка - тогда вопрос, до какого периода писать туда данные? На месяц? А если завтра поменяются данные? В общем, в конфигурации сделано довольно разумно.
#17
by mistеr
Если конфа на поддержке, тогда другое дело. Я полагал, что архитектура в твоих руках. > Заявка - тогда вопрос, до какого периода писать туда данные? На месяц? Ну заявка ведь на какой-то период делается?
#18
by NikePopov
Нет. Звонит клиент и говорит, что с сегодняшнего дня мне надо 15 шт/день. Потом позвонит через два с половиной месяца скажет, что привози 18 шт/день
#20
by Simod
Пример запроса получения курса валюты на дату каждого документа выборки: ИЗ (ВЫБРАТЬ ПЕРВЫЕ 1 МАКСИМУМ(Т.Период) ИЗ
#21
by NikePopov
Отличный вариант! Я его уже пробовал, но у меня " МАКСИМУМ(Т.Период)" надо заменить на МАКСИМУМ(Т.МоментВремени) , и тут платформа возмутилась на невозможность сравнения "строк неограниченной длинны и составных значений). Вероятнее всего, Момент времени является "составным значением"(структура Дата+НомерЗаписи). У меня регистр сведений по позиции регистратора , так что использовать дату не совсем корректно. Вероятность ошибки, конечно, довольно мала. Но если вдруг получится, что этим воспользуются, то в результате будет 2 записи на одну дату.
#24
by Serginio1
Момент времени это Дата+Ссылка. То есть В (ВЫБРАТЬ последние 1 Т.Период ИЗ РегистрСведений.КурсыВалют КАК Т И Т.Период <= ПоступлениеТоваровУслугТовары.Ссылка.Дата Сортировать По Т.Период)) Но у регистра сведений нет регистра сведений. И ты можешь получить несколько документов на одну дату. Опять можешь применить выбрать первые или максимум.
#25
by NikePopov
Неа. Для каждой даты. Пример: Мне нужен срез последних на даты: 01.01.2015 00:00:00 02.01.2015 00:00:00 03.01.2015 00:00:00 ... Возможна ситуация, при которой Есть 2 документа: Документ Заявка №00-00125 от 01.01.2015 15:32:15(была создана первой) Документ Заявка №00-00126 от 01.01.2015 15:32:15(была создана второй) При этом количество продукции на 02.01.2015 00:00:00 надо взять из "Документ Заявка №00-00126 от 01.01.2015 15:32:15", так как именно его выберет срез последних.
#28
by NikePopov
Нельзя. Уже определились в , что вариант сравнения "строк неограниченной длинны и составных значений" недопустимо.
#29
by Serginio1
А какой у регистра курса валют МоментВремени? Если он и есть то там не нужен максимум. И (КурсыВалют.Регистратор В (ВЫБРАТЬ ПЕРВЫЕ 1 Т.Регистратор ИЗ
#31
by kittystark
может поможет ? как пример для анализа для того, чтобы построить отчет на СКД по оборачиваемости товаров мне нужны были конечные остатки на КАЖДЫЙ день, идти надо не от документа, а от регистра, и обрати внимание какие регистры задействованы для ВТ Движения, он там один, но один раз остатки, второй обороты
#33
by Aprobator
СКД в помощь. 2 набора данных, один - требуемые даты (с производственного календаря их раз плюнуть получить). Второй - сам срез последних. Ну и связь между наборами по дате. Метода известная и довольно несложная.
#34
by kittystark
да метода известная и один из первых отчетов на СКД по оборачиваемости сделал по ней, но отчет получился тормознутым на больших периодах, то что описано в работает гораздо быстрее, а на выходе результат один и тот же
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- УПП 1.3 РАУЗ Добровольное личное страхование
- Опубликовал конфу на вэб сервере, а она не работает.
- Выгрузка-загрузка заказов из 1С на сайт
- Субконто у документа ПКО
- Размер таблицы _INFORG более 4гб
- Какой аналог функции Сообщить() в веб-клиенте 1с 8.3?
- ЗУП 2.5 Как загрузить банки из классификатора?
- Счетчики посетителей rcount (megacount)
- Сохранение варианта отчета для всех пользователей УТ 10.3
- Не заполняется ДокументОснование
- Как правильно сторнировать документ возврата от покупателя?
- При считывании ШК сканером в терминальном режиме, цифры на другие символы.
- Модификация запроса по значению параметра в СКД
- Больничный в Бухгалтерия 3.0. Как не формировать проводки 69.01 70?
- Аварийное закрытие программы при закрытии и при выгрузке базы
- ПолучитьЗначениеРеквизитаНаСервере
- Расширения конфигурации
- О блокировках данных
- 1c. Бухгалтерия 3.0 Недостаточно прав для использования модуля документооборота
- После записи документа он остается измененным