Последние сообщения

#1
Дружественные проекты / ИТЗ: заполнить колонку по выра...
Последний ответ от Злоп - 20 февраля 2026, 21:03
Можно ли как-то заполнить колонку по выражению..?
Например, есть колонка, и хочу заполнить нечетными числами, начиная с 1...?
#2
7.7 / Re: Склеить две ИТЗ - какое со...
Последний ответ от Злоп - 20 февраля 2026, 16:51
И насколько я понял - для InnerJoin не играет роли какая таблица левая, какая правая.
Если таблицы поменять местами - результат не изменится?
Так?
#3
7.7 / Re: Склеить две ИТЗ - какое со...
Последний ответ от Злоп - 20 февраля 2026, 07:06
Получается InnerJoin - это перемножение таблиц, в результате будут все возможные комбинации (лево, право) для указанного значения ключа.
Так?
#4
7.7 / Re: Склеить две ИТЗ - какое со...
Последний ответ от Злоп - 20 февраля 2026, 07:04
Цитата: trad от 19 февраля 2026, 07:34Ты в (0) не сказал самое главное - что нужно получить если артикула нет в левой либо в правой таблице
От этого и зависит тип соединения
В таком случае такой артикул не попадает результат.
#5
7.7 / Re: Склеить две ИТЗ - какое со...
Последний ответ от trad - 19 февраля 2026, 07:34
Ты в (0) не сказал самое главное - что нужно получить если артикула нет в левой либо в правой таблице
От этого и зависит тип соединения
#6
7.7 / Re: Склеить две ИТЗ - какое со...
Последний ответ от Злоп - 19 февраля 2026, 01:13
Проверил на боевых данных ИТЗ.ВнутреннееСоединение, результат совпал с результатом ручной склейки кодом.
#7
7.7 / Re: Склеить две ИТЗ - какое со...
Последний ответ от Злоп - 18 февраля 2026, 22:39
Есть, что-то что не учел?
#8
7.7 / Re: Склеить две ИТЗ - какое со...
Последний ответ от Злоп - 18 февраля 2026, 22:39
Во, вроде получилось!

//*******************************************
Процедура ЗлопЛучший()
   
   ИТЗбаза = СоздатьОбъект("ИндексированнаяТаблица");
      ИТЗбаза.НоваяКолонка("Артикул");
      ИТЗбаза.НоваяКолонка("БрендБаза");
      
   ИТЗпрайс = СоздатьОбъект("ИндексированнаяТаблица");
      ИТЗпрайс.НоваяКолонка("Артикул");
      ИТЗпрайс.НоваяКолонка("БрендПрайс");
   
    ИТЗбаза.НоваяСтрока(); ИТЗбаза.Артикул = "Арт1"; ИТЗбаза.БрендБаза = "АААА";
    ИТЗбаза.НоваяСтрока(); ИТЗбаза.Артикул = "Арт1"; ИТЗбаза.БрендБаза = "СССС";
    ИТЗбаза.НоваяСтрока(); ИТЗбаза.Артикул = "Арт2"; ИТЗбаза.БрендБаза = "ВВВВ";
    ИТЗбаза.НоваяСтрока(); ИТЗбаза.Артикул = "Арт3"; ИТЗбаза.БрендБаза = "АААА";
    ИТЗбаза.НоваяСтрока(); ИТЗбаза.Артикул = "Арт3"; ИТЗбаза.БрендБаза = "СССС";
    ИТЗбаза.НоваяСтрока(); ИТЗбаза.Артикул = "Арт4"; ИТЗбаза.БрендБаза = "ЖЖЖЖ";
   
    ИТЗпрайс.НоваяСтрока(); ИТЗпрайс.Артикул = "Арт1"; ИТЗпрайс.БрендПрайс = "ББББ";
    ИТЗпрайс.НоваяСтрока(); ИТЗпрайс.Артикул = "Арт1"; ИТЗпрайс.БрендПрайс = "ДДДД";
    ИТЗпрайс.НоваяСтрока(); ИТЗпрайс.Артикул = "Арт2"; ИТЗпрайс.БрендПрайс = "ГГГГ";
    ИТЗпрайс.НоваяСтрока(); ИТЗпрайс.Артикул = "Арт3"; ИТЗпрайс.БрендПрайс = "ГГГГ";
    ИТЗпрайс.НоваяСтрока(); ИТЗпрайс.Артикул = "Арт3"; ИТЗпрайс.БрендПрайс = "ЕЕЕЕ";
    ИТЗпрайс.НоваяСтрока(); ИТЗпрайс.Артикул = "Арт5"; ИТЗпрайс.БрендПрайс = "ЗЗЗЗ";
      
    ИТЗпрайс.ДобавитьИндекс("Артикул","^#Артикул",0);   
   
    ИТЗбаза.ВнутреннееСоединение("Артикул",ИТЗПрайс,"Артикул","БрендПрайс");
    ИТЗбаза.Показать();

КонецПроцедуры // ЗлопЛучший()

такие пары и показываются
АААА-ББББ
АААА-ДДДД
СССС-ББББ
СССС-ДДДД
ВВВВ-ГГГГ
АААА-ГГГГ
АААА-ЕЕЕЕ
СССС-ГГГГ
СССС-ЕЕЕЕ
#9
7.7 / Re: Склеить две ИТЗ - какое со...
Последний ответ от Злоп - 18 февраля 2026, 22:06
Вроде ВнутреннееСоединение для ИТЗ подходит?
.

ВнутреннееСоединение / InnerJoin
Синтаксис: ВнутреннееСоединение(стрКолонкиЛевойИТ, ПраваяИТ, ИндексПравойИТ, стрКолонкиПравойИТ)

Параметры:
стрКолонкиЛевойИТ - тип: Строка. Колонки, значения которых будут использованы для поиска строки в правой таблице.
ПраваяИТ - тип: ИндексированнаяТаблица. Присоединяемая таблица.
ИндексПравойИТ - тип: Строка, Число. Имя или номер индекса, по которому будут искаться строки в правой таблице. Количество колонок индекса должно быть равно количеству колонок поиска (см. параметр стрКолонкиЛевойИТ).
стрКолонкиПравойИТ - тип: Строка. Список колонок, которые будут копироваться из правой таблицы в левую. Список задаётся в формате "<ИмяКолИст>|<ИмяКолИст:ИмяКолНазн> [,...]". <ИмяКолИст> - имя колонки в правой таблице; если такой колонки нет в левой таблице, то она будет создана. <ИмяКолНазн> - если указана, то значение из колонки правой таблицы с названием <ИмяКолИст> будет скопировано в колонку левой таблицы <ИмяКолНазн>.

Описание: Выполняет операцию, аналогичную команде SQL Inner Join. Для каждой строки из левой таблицы (левой таблицей является текущий объект) добавляются все строки из правой таблицы, соответствующие ключевому выражению. Ключевое выражение определяется параметром стрКолонкиЛевойИТ. Из правой таблицы в левую переносятся значения колонок, указанных в параметре стрКолонкиПравойИТ. Если строка левой таблицы не найдена в правой, то строка в левой таблице удаляется.

?
#10
7.7 / Re: Склеить две ИТЗ - какое со...
Последний ответ от Грузчик - 18 февраля 2026, 13:26
CROSS JOIN в sqlite. Но уложить ИТЗ в базу мне не удалось, только обычную ТаблицуЗначений.

Процедура Злоп()
    
    ТаблицаЗначений1 = СоздатьОбъект("ТаблицаЗначений");
    ТаблицаЗначений1.НоваяКолонка("Артикул", "Строка");
    ТаблицаЗначений1.НоваяКолонка("БрендБаза", "Строка");
    
    ТаблицаЗначений1.НоваяСтрока();
    ТаблицаЗначений1.Артикул = "Арт1";
    ТаблицаЗначений1.БрендБаза = "АААА";
    
    ТаблицаЗначений1.НоваяСтрока();
    ТаблицаЗначений1.Артикул = "Арт1";
    ТаблицаЗначений1.БрендБаза = "СССС";
    
    ТаблицаЗначений2 = СоздатьОбъект("ТаблицаЗначений");
    ТаблицаЗначений2.НоваяКолонка("Артикул", "Строка");
    ТаблицаЗначений2.НоваяКолонка("БрендПрайс", "Строка");
    
    ТаблицаЗначений2.НоваяСтрока();
    ТаблицаЗначений2.Артикул = "Арт1";
    ТаблицаЗначений2.БрендПрайс = "ББББ";
    
    ТаблицаЗначений2.НоваяСтрока();
    ТаблицаЗначений2.Артикул = "Арт1";
    ТаблицаЗначений2.БрендПрайс = "ДДДД";
    
    База = СоздатьОбъект("SQLiteBase");
    База.Открыть(":memory:");
    База.УложитьТЗ(ТаблицаЗначений1, "Таблица1");
    База.УложитьТЗ(ТаблицаЗначений2, "Таблица2");
    
    Запрос = База.НовыйЗапрос();
    Ответ = Запрос.ВыполнитьЗапрос("
    |SELECT
    |     Артикул [Артикул :Строка]
    |    ,БрендБаза [БрендБаза :Строка]
    |    ,БрендПрайс [БрендПрайс :Строка]
    |FROM
    |    Таблица1
    //|CROSS JOIN Таблица2 USING(Артикул) -- так чуть проще читается, и изменение структуры ТЗ ничего не погнёт
    |CROSS NATURAL JOIN Таблица2 -- чтобы никто не догадался
    |");
    
    База.Закрыть();
    Ответ.ВыбратьСтроку();
    
КонецПроцедуры // Злоп