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

Как заполнить пустые ячейки в табличной части результатом запроса.

Автор llirik_87, 12 июн 2015, 09:32

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

llirik_87

Здравствуйте!
Помогите, пожалуйста, в таком вопросе:
У меня есть ТабличнаяЧасть1, которая заполняется результатом Запроса:








АртикулОригинальныйНОМЕРПроизводитель
333A0007201335
ATT7213A0007201335AutoTechteile
96205-010096205-0100GERMANY
ATT5016A9015051655AutoTechteile
111A9015050655
ATT5016A9015051655TEXTAR

Далее мне нужно как-то найти все строки в полученной таблице, в которых в ячейке Производитель пусто. И заполнить их данными из Справочника "Наличие", на основании данных из таблицы из ячейки Артикул . Справочник Наличие состоит из двух реквизитов"АртикулНаличие" и "Бренд". Берем значение из Бренд и подставляем в ячейку "Производитель" в ТабличнуюЧасть1.

Например, у меня пустой Производитель в первой строке:
находим пустую ячейку Производитель (1 строка) - берем значение из колонки Артикул ( 333 ) - идем в Справочник "Наличие" :




АртикулНаличиеБренд
333Satilit
ATT5016AutoTechteile

Далее, берем данные из реквизита "Бренд"  где "АртикулНаличие"  =  333, т.е. получим Satilit  и подставляем в первую строку ЧабличнаяЧасть1 в ячейку "Производитель". Получаем:








АртикулОригинальныйНОМЕРПроизводитель
333A0007201335Satilit
ATT7213A0007201335AutoTechteile
96205-010096205-0100GERMANY
ATT5016A9015051655AutoTechteile
111A9015050655
ATT5016A9015051655TEXTAR

Подскажите,пожалуйста, как это сделать?

cska-fanat-kz

1. Обходим таблицу, получаем массив артикулов с пустым Производитель плюс получаем массив таких строк
2. запросом к справочнику Наличие получаем пары Артикул-Производитель, складываем в соответствие
3. обходим массив строк из п.1 и по Артикулу достаем из соответствия Производителя
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

vitasw

А зачем вообще выгружать первый запрос в таб часть, чтобы потом тр***ся,эээ заниматься сэксом, пытаясь дозаполнить пустую колонку? Делайте сразу полное заполнение в первом запросе.

llirik_87

Цитата: cska-fanat-kz от 12 июн 2015, 09:53
1. Обходим таблицу, получаем массив артикулов с пустым Производитель плюс получаем массив таких строк
2. запросом к справочнику Наличие получаем пары Артикул-Производитель, складываем в соответствие
3. обходим массив строк из п.1 и по Артикулу достаем из соответствия Производителя

Здравствуйте!
я не смог,к сожалению, это сделать. Можете,пожалуйста, привести код?

cska-fanat-kz

Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

vitasw

Цитата: llirik_87 от 21 июн 2015, 12:33я не смог,к сожалению, это сделать. Можете,пожалуйста, привести код?

Ну, как бы, неплохо бы увидеть ваш первоначальный запрос. и конечная цель задания?

llirik_87

Цитата: vitasw от 22 июн 2015, 09:32
Цитата: llirik_87 от 21 июн 2015, 12:33я не смог,к сожалению, это сделать. Можете,пожалуйста, привести код?

Ну, как бы, неплохо бы увидеть ваш первоначальный запрос. и конечная цель задания?

Просто там такой многоэтажный запрос, что я не могу дописать его так, чтобы заполнялось все запросе. Но приведу текст:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
   | ОригинальныеЗапчасти.МаркаАвто,
   | ОригинальныеЗапчасти.МодельАвто,
   | ОригинальныеЗапчасти.ГруппаЗапчастей,
   | ОригинальныеЗапчасти.Подгруппа,
   | ОригинальныеЗапчасти.ДопПараметры,
   | ОригинальныеЗапчасти.БазаНомер,
   | t3.Примечание,
   | ОригинальныеЗапчасти.РасширенноеПрименение,
   | ОригинальныеЗапчасти.ДополнительноеОписание,
   | t3.Артикул КАК Артикул,
   | t3.БрендСтандарт КАК БрендСтандарт,
   | t3.Количество КАК Количество,
   | t3.Цена КАК Цена,
   | t3.Поставщик КАК Поставщик,
   | t3.Валюта КАК Валюта,
   | ЕСТЬNULL(ОригинальныеЗапчасти.БазаНомер, ""Нет"") КАК БазовыйНомер
   |ИЗ
   | (ВЫБРАТЬ
   | t2.НаличиеКод КАК НаличиеКод,
   | t2.Наименование КАК Наименование,
   | t2.Артикул КАК Артикул,
   | t2.Производитель КАК Производитель,
   | t2.Количество КАК Количество,
   | t2.Цена КАК Цена,
   | t2.Поставщик КАК Поставщик,
   |    t2.Валюта КАК Валюта,
   | t2.INDстандарт КАК INDстандарт,
   | t2.БрендСтандарт КАК БрендСтандарт,
   |     t2.Примечание как Примечание,
   | t2.ОригинальныйНомер КАК ОригинальныйНомер,
   | сон.Ссылка КАК Ссылка,
   | сон.ПометкаУдаления КАК ПометкаУдаления,
   | сон.Предопределенный КАК Предопределенный,
   | сон.Код КАК Код,
   | сон.Наименование КАК Наименование1,
   | сон.ОригинальныйНомер1 КАК ОригинальныйНомер1,
   | сон.ОригинальныйНомер2 КАК ОригинальныйНомер2,
   | сон.ОригинальныйНомер3 КАК ОригинальныйНомер3,
   | сон.ОригинальныйНомер4 КАК ОригинальныйНомер4,
   | сон.ОригинальныйНомер5 КАК ОригинальныйНомер5
   | ИЗ
   | (ВЫБРАТЬ
   | t1.НаличиеКод КАК НаличиеКод,
   | t1.Наименование КАК Наименование,
   | t1.Артикул КАК Артикул,
   | t1.Производитель КАК Производитель,
   | t1.Количество КАК Количество,
   | t1.Цена КАК Цена,
   | t1.Поставщик КАК Поставщик,
   | t1.Валюта КАК Валюта,
   | t1.INDстандарт КАК INDстандарт,
   | t1.БрендСтандарт КАК БрендСтандарт,
   |         Заменители.Примечание как Примечание,
   | Заменители.ОригинальныйНомер КАК ОригинальныйНомер
   | ИЗ
   | (ВЫБРАТЬ
   | НаличиеСклада.Код КАК НаличиеКод,
   | НаличиеСклада.Наименование КАК Наименование,
   | НаличиеСклада.Артикул КАК Артикул,
   | НаличиеСклада.Производитель КАК Производитель,
   | НаличиеСклада.Количество КАК Количество,
   | НаличиеСклада.Цена КАК Цена,
   | НаличиеСклада.Поставщик КАК Поставщик,
   | НаличиеСклада.Валюта КАК Валюта,
   | Соответствия.INDстандарт КАК INDстандарт,
   | Соответствия.БрендСтандарт КАК БрендСтандарт
   | ИЗ
   | Справочник.НаличиеСклада КАК НаличиеСклада
   | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Соответствия КАК Соответствия
   | ПО (НаличиеСклада.Артикул = Соответствия.INDисходный)
   | И (НаличиеСклада.Производитель = Соответствия.БрендИсходный)) КАК t1
   | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Заменители КАК Заменители
   | ПО (Заменители.Артикул = t1.Артикул
   | И Заменители.Производитель = t1.Производитель
   | ИЛИ Заменители.Артикул = t1.INDстандарт
   | И Заменители.Производитель = t1.БрендСтандарт)) КАК t2
   | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СоответствияОригинал КАК сон
   | ПО (t2.ОригинальныйНомер В (сон.ОригинальныйНомер1, сон.ОригинальныйНомер2, сон.ОригинальныйНомер3, сон.ОригинальныйНомер4, сон.ОригинальныйНомер5))) КАК t3
   | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОригинальныеЗапчасти КАК ОригинальныеЗапчасти
   | ПО (ОригинальныеЗапчасти.БазаНомер В (t3.ОригинальныйНомер, t3.ОригинальныйНомер1, t3.ОригинальныйНомер2, t3.ОригинальныйНомер3, t3.ОригинальныйНомер4, t3.ОригинальныйНомер5))
   |ГДЕ
   | ОригинальныеЗапчасти.БазаНомер ЕСТЬ НЕ NULL
   |
   |СГРУППИРОВАТЬ ПО
   | ОригинальныеЗапчасти.МаркаАвто,
   | ОригинальныеЗапчасти.МодельАвто,
   | ОригинальныеЗапчасти.Подгруппа,
   | ОригинальныеЗапчасти.ГруппаЗапчастей,
   | ОригинальныеЗапчасти.ДопПараметры,
   | ОригинальныеЗапчасти.БазаНомер,
   | t3.Примечание,
   | ОригинальныеЗапчасти.РасширенноеПрименение,
   | ОригинальныеЗапчасти.ДополнительноеОписание,
   | t3.Артикул,
   | t3.БрендСтандарт,
   | t3.Количество,
   | t3.Цена,
   | t3.Поставщик,
   |    t3.Валюта";


Результат=Запрос.Выполнить();
ТабличнаяЧасть1.Загрузить(Результат.Выгрузить());

vitasw

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

llirik_87

Цитата: vitasw от 22 июн 2015, 22:21
Ничего сложного цевляйте левым соединением артикулы к основной таблице, к таблице артикулов, опять же левым соединением таблицу брендов
Спасибо за помощь!  Я уже методом проб дописал запрос , так что б, как Вы и говорили, заполнялось все сразу. Очень не уверен что получилось оптимально, но вроде работает)

vitasw

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

Теги:

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

Рейтинг@Mail.ru

Поиск