Группа: Пользователи
Сообщений: 52
Из: Санкт-Петербург
Спасибо сказали: 12 раз
Рейтинг: 0
Доброго времени суток!
Ситуация: Есть регистр сведений "Номера ГТД" с измерениями: Инвойс / Номенклатура / СерияНоменклатуры и ресурсом ГТД. В документе ПоступлениеТоваров в ТЧ заполняются поля Инвойс / Номенклатура / СерияНоменклатуры. Поле ГТД должно подставиться автоматически, исходя из приоритета совпадений: Ищем по условию Инвойс / Номенклатура / СерияНоменклатуры. Если ГТД найдено, подставляем в ТЧ. Если ГТД не найдено по этим условиям, ищем по Номенклатура / СерияНоменклатуры. Если ГТД не найдено по этим условиям, ищем по Инвойс / Номенклатура. Если ГТД не найдено по этим условиям, ищем по Инвойс.
Можно, конечно, делать несколько запросов, проверяя их на наличие результата. Но наверное эти приоритеты можно отследить и в одном запросе (что-нибудь вроде использования конструкции: Выбрать Выбор Когда). Подскажите пожалуйста, как оптимально реализовать эту задачу.
Группа: Пользователи
Сообщений: 52
Из: Санкт-Петербург
Спасибо сказали: 12 раз
Рейтинг: 0
2Vofka Да,вероятно это будет самый "компактный" вариант..
2LOGIST А хотела сделать нечто подобное (пишу уже из дома, так что код будет самый приблизительный):
Выбрать НомераГТД.ГТД Выбор Когда <ПервыйПриоритет> Тогда 1 Иначе ВЫБОР Когда <ВторойПриоритет> Тогда 2 ................. КОНЕЦ КАК Приоритет ИЗ РегистрСведений.НомераГТД ГДЕ бла-бла-бла = & бла-бла
УПОРЯДОЧИТЬ ПО Приоритет
А в <скобочках> либо еще один запрос собиралась рисовать (поиск по заданным условиям приоритета), либо рассчитывала каким-либо способом указать "условия совпадений". Вот как-то так.
Группа: Пользователи
Сообщений: 52
Из: Санкт-Петербург
Спасибо сказали: 12 раз
Рейтинг: 0
Цитата
Вообще странно, должно и без порядка работать.
(в инвойсе две строки, в регистре соответсвенно тоже) Я тоже считала, что сработает, ради эксперимента меняла запросы местами - результат один: в выборке всего два значения А когда добавила упорядочивание - в выборке стало пять значений - т.е результаты всех запросов...Вот такая ерунда.
А платформа случайно не делает автоматическую (без явного указания) группировку результатов?
Группа: Основатель
Сообщений: 13982
Из: Киев
Спасибо сказали: 4550 раз
Рейтинг: 3679.4
Цитата(Small sa @ 05.03.12, 12:47)
А платформа случайно не делает автоматическую (без явного указания) группировку результатов?
Делает конечно. В этом и прикол. Если результатов в вашем случае 5, а в случае как я изначально говорил всего 2, значит из ваших 5 уникальных записей 2. И вам как раз надо взять первую из этих 2. В общем, эффект получиться должен такой как надо и без порядка.
Группа: Пользователи
Сообщений: 52
Из: Санкт-Петербург
Спасибо сказали: 12 раз
Рейтинг: 0
В том-то и проблема, что первый результат в выборке без упорядочивания для меня не будет первым результатом запроса. Первым в выборке будет первый по порядковому номеру строки ГТД (поля, которое я выбираю), а мне нужны результаты по порядку прохождения запросов (и номер строки ГТД у него может быть каким угодно).
Группа: Пользователи
Сообщений: 52
Из: Санкт-Петербург
Спасибо сказали: 12 раз
Рейтинг: 0
Итак. Суть задачи состоит в том, чтобы в документах (допустим ПоступлениеТоваров) автоматически подставлять ГТД и номера позиций в ГТД. ГТД и номера позиций хранятся в регистре сведений НомераГТД. В строке документа заполняются Инвойс, Номенклатура, Характеристика или Серия. При записи док-та (и в некоторые другие моменты) должны автоматически заполняется ГТД и номер позиции в ГТД исходя из приоритета совпадений: 1. Совпали Инвойс+Номенклатура+Хар-ка/Серия. 2. Совпали Номенклатура+Характеристика/Серия. 3. Совпали Инвойс и Номенклатура. 4. Нашли только Инвойс. Т.е. если нашли по первому приоритету, то подставили первое ГТД, нашли по второму и третьему приоритету - подставили ГТД из второго приоритета
В регистре по Инвойсу такому-то есть записи:
Будем иммитировать ввод в строку и в обработке введем Инвойс и Номенклатуру. По кнопке <Выполнить> выполняется запрос и его результат для наглядности выгружается в табличное поле на форме.
1 вариант: предложенный Vofka запрос.
2 вариант: тот же запрос, но с добавлением Приоритета и упорядочиванием по нему.
При выполнении первого варианта запроса первой строкой результата будет являться результат последнего запроса из блока "Выбрать .... ОБЪЕДИНИТЬ", т.е поиск только по инвойсу и в номер позиции ГТД попадет позиция не той номенклатуры..
Группа: Основатель
Сообщений: 13982
Из: Киев
Спасибо сказали: 4550 раз
Рейтинг: 3679.4
Цитата(Small sa @ 06.03.12, 7:08)
Суть задачи состоит в том, чтобы в документах (допустим ПоступлениеТоваров) автоматически подставлять ГТД и номера позиций в ГТД. ГТД и номера позиций хранятся в регистре сведений НомераГТД.
Вы правильно выделили ключевую фразу. Только покажите мне пожалуйста, где про это сказано в первом посте? Т.к. про это ничего сказано не было, то я не мог знать, что оно там есть, поєтому предложил вариант, который предложил. И если бы на самом деле номера позиций в ГТД не было, то в результате и моего запроса была бы только 1 строка с верным инвойсом, номенклатурой, серией и ГТД. А так получается, вы не совсем корректно поставили задачу .
И из приведенных вами данных, я честно говоря всеравно не всё понял. В результате выполнения вашего запроса у вас должно получиться 10 строчек, т.к. каждому условия в запросе соответствует 2 строки в регистре, т.е. 2 строчки с порядком 1, 2 строчки с порядком 2 и т.п., причем скорее всего внутри порядков они будут отсортированы по номеру строки, т.е. первые 2 строчки будут такими:
Группа: Пользователи
Сообщений: 52
Из: Санкт-Петербург
Спасибо сказали: 12 раз
Рейтинг: 0
Цитата
А так получается, вы не совсем корректно поставили задачу
Вы правы. Прошу прощения!
Цитата
у вас должно получиться 10 строчек, т.к. каждому условия в запросе соответствует 2 строки в регистре
неа, только в последнем запросе будет две строки, тк отбор идет только по условию, что инвойс = чему-то, а остальное не важно. Во всех других случаях в отборе участвует еще и номенклатура, а в строках регистра она только один раз "участвует" в паре с этим инвойсом и имеет порядковый номер 2. (Порядковый номер 1 уже у "краска желтая"). Строк будет больше, когда в регистре будет больше строк с такой позицией номенклатуры, тк "в игру вступит" этот кусок запроса:
|ВЫБРАТЬ | НомераГТД.ГТД, | НомераГТД.НомСтрГТД, | 2 как Порядок |ИЗ | РегистрСведений.НомераГТД КАК НомераГТД |ГДЕ | НомераГТД.Номенклатура = &Номенклатура | И НомераГТД.СерияНоменклатуры = &Серия | И НомераГТД.ХарактеристикаНоменклатуры = &Характеристика | |ОБЪЕДИНИТЬ
Группа: Основатель
Сообщений: 13982
Из: Киев
Спасибо сказали: 4550 раз
Рейтинг: 3679.4
Я не заметил, что номенклатура разная. Но даже, если номенклатура все же разная (а я это учитывал при построении запроса), то по идее в результате моего запроса по вашим данным должен получиться такой результат.
ГТД | Номер строки | Инвойс | Номенклатура | Серия
Группа: Пользователи
Сообщений: 52
Из: Санкт-Петербург
Спасибо сказали: 12 раз
Рейтинг: 0
Не... =) Поэтому и спрашивала про автоматическую группировку запроса платформой... или здесь автосортировка... Вообщем результат без "насильного упорядочивания" по приоритету будет выглядеть как на скрине первого варианта запроса, т.е. 1009194/090810/0013872 | 1 | Заказ 1 | Краска желтая 1009194/090810/0013872 | 2 | Заказ 1 | Краска черная
а если допустим поменять у желтой краски порядковый номер на 3 и искать по ней (по желтой краске), то результат будет таким:
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!