Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 ноя 2024, 06:49

Возможно ли это реализовать запросом?

Автор lakykherson, 29 янв 2023, 08:24

0 Пользователей и 2 гостей просматривают эту тему.

Максим75

Afinogen, почти так, в таблице серийные номера вообще может не быть записей.

и надо получить на выходе такую таблицу

Товар  Серийный номер
Мышка     1111
Мышка     2222
Мышка      NULL
Мышка      NULL
Монитор     333
Монитор     444
Монитор     NULL

и т.д.

весь вопрос развернуть строку табличной части Товары вида
Мышка  4 (где 4 - кол-во)
Монитор  3 (где 3 - кол-во)

в строки
Мышка
Мышка
Мышка
Мышка - 4 строки каждая со своим КлючомСвязи (одинаковый для всех мышек)
Монитор
Монитор
Монитор - 3 строки каждая со своим КллючомСвязи (одинаковый для всех мониторов)

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

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

Afinogen

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

а в данном случае нет такого?

Если нет то тогда по-моему прежде чем вести  речь про отчеты нужно саму конфигурацию доработать

Максим75

Afinogen, есть такое.
задача немного другая, посмотрите самое начало.

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

мышка  1111
мышка  2222
мышка   нету номера
мышка   нету номера

если связывать только по КлючуСвязи, не получается.
у мышки КлючСвязи допустим 3
у серийных номеров КлючСвязи тоже 3.
как получить вот то, что сверху написал?

Максим75

Afinogen, если просто запросом, то к одной строке с мышками из Товаров, присоединится 2 строки с мышками из СЕрийных номеров.
а надо иметь 4 строки с мышками из Товаров и каждую соединить только со своей строкой из Серийных номеров (т.е. КлючаСвязи мало, надо еще что-то)

Afinogen

все теперь я понял о чем речь, вы имеете в виду ситуацию  что по связи мышка-код строки для мышки в строке 1 вытянуться все серийники и т.д

Afinogen

ну тут получается для каждой новой мышки нужно предваритетно урезать диапазон серийников

Максим75

Afinogen,
Цитата: Afinogen от 30 янв 2023, 11:14все теперь я понял о чем речь, вы имеете в виду ситуацию  что по связи мышка-код строки для мышки в строке 1 вытянуться все серийники и т.д

именно.
а по какой-то мышке вообще серийников не назначили, а они вылезут.
если бы задача была просто показать серийники каждому товару - это да, одним запросом раскрутить и делов то.

Максим75

Цитата: Afinogen от 30 янв 2023, 11:16ну тут получается для каждой новой мышки нужно предваритетно урезать диапазон серийников
тут вопрос упирается в то, каким образом из набора записей

Мышка   КОдСвязи  Кол-во

получить набор записей
Мышка  КодСвязи
Мышка  КодСвязи
...
и т.д. количество строк равно значению Кол-во

можно ли это сделать просто запросом? может есть какой алгоритм?
или таки надо обходить результат запроса и делать второй цикл по кол-ву, и все пихать в таблицу значений?

Afinogen

тогда я согласен что  тут одним запросом не отделаешься

тогда действительно лучше товары развернуть в таблицу значений и потом для каждой мфшки искать свой серийник

|ВЫБРАТЬ * ПОМЕСТИТЬ ВТТовары ИЗ Реализация
таб = Запрос.Выполнить().Выгрузить();


|ВЫБРАТЬ * ПОМЕСТИТЬ ВТСерийники ИЗ СерийныеНомера
Запрос.Выполнить();

НоваяТЗ  =Новый ТаблицаЗначений;

Для Каждого СтрТовар ИЗ Таб Цикл
 МассивСерийники = Новый Массив;
Для Н=1 ПО СтрТовар.Количество Цикл

НоваяСтрока = НоваяТЗ.Добавить();
ЗапонитьЗначенияствойств(Новаястрока,СтрТовар);

Запрос.Текст = "Выбрать ПЕРВЫЕ 1 * ИЗ ВТТовары ГДЕ ВТТовары.Номенклатура = &Номенклатура И ВтТовары.КлючСвязи = &Ключсвязи И НЕ ВТТовары.серийныеНомера В (&МассивСерийники)";

Запрос.установитьпараметр("Номенклатура",Стр.Номенклатура);
Запрос.установитьпараметр("Ключсвязи ",Стр.Ключсвязи );
Запрос.установитьпараметр("МассивСерийники ",МассивСерийники );

Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
новаястрока.Серийныйномер = Выборка.серийныйномер;
МассивСерийники.Добавить(Выборка.серийныйномер)
КонецЕсли;
Конеццикла;




Afinogen

Цитата: Максим75 от 30 янв 2023, 11:22можно ли это сделать просто запросом? может есть какой алгоритм?
или таки надо обходить результат запроса и делать второй цикл по кол-ву, и все пихать в таблицу значений?
не думаю, тут по любому полчается ужно проверять что серийники уже добавлены в набор при выводе каждой новой строки набора и такие серийники отрезать

Теги: запросы 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск