Скажи мне, брат трансформер…
Вступление
Я, конечно, слышал о том, что нейросеть теперь пишет рассказы, рисует картинки, а в свободное от этих хлопот время еще и немного программирует. Иногда какие-то примеры "творений" пробегали где-то на периферии внимания, но, что называется, не трогали душу.
Как то раз, просматривая очередной обзор https://habr.com/ru/company/first/blog/678848/, наткнулся на сообщение о том что GPT-ать теперь, усилиями Сбербанка, можно и по-русски. Да, скорее всего, и раньше об этом слышал, но благополучно забыл. В этот раз про русские GPT там было такое бодренькое: я вот, дескать, ввел затравку про Антарктиду и смотрите, что у меня вышло.
Говорят, что дурной пример заразителен. Уж не знаю, что меня "пробило" на этот раз, но я решил, что сам попробую ввести ровно такой же запрос. RuGPT3 не заставила себя долго ждать. Ответ был совершенно другой. Но это правильно. Хороший писатель не станет повторяться.
Все началось как-то чересчур культурно и скучно. Но через пару абзацев нейросеть все-таки сумела расшевелиться
Черт побери! Я хотел бы увидеть это фото! Но с этим надо уже на другой сервис сбербанка, а сил на это не было никаких. Вдоволь насмеявшись, я понял, что пришло время как-то встроить все это в свою картину мира.
Нейросеть не может создать ничего нового. Вообще или пока еще - вопрос философский. Зато она может невероятно старательно работать со старым, в том числе, хорошо забытым. И если так случилось, что она вас понимает (что бы это ни значило), а внутри у нее весь Stack Overflow, тогда куда следует податься простому 1С-нику? Правильно, простому 1С-нику надо спрашивать не про Антарктиду, а про SELECT.
Что я немедленно и сделал. Только на этот раз уже на сайте https://openai.com/. У RuGPT3 спрашивать про SELECT бесполезно. А у OpenAI есть раздел CODEX. Все еще полностью доступный, т.е. полностью бесплатный.
Лабораторные исследования
Мне нравится срез последних. Задача не совсем примитивная, а формулируется просто и коротко. Дай последние значения! Пишем:
Через несколько секунд получаем:
А неплохо! В 1С надо будет только вместо = поставить IN (В). Такое вот занудство, но мы про него знаем. Лично я всегда пользовался несколько иным методом, без коррелированного подзапроса. Но этот мне нравится больше. Идем дальше. Попробуем теперь получить накопительный итог
Мда! Окна нам в 1С пока не завезли. Так и сидим, можно сказать, в полной темноте. Я попробовал поговорить с нейросетью и строго (OVER prohibited) и просяще (I cannot use OVER). Бесполезно. Есть еще настройка случайности результата. Она почему-то называется Temperature (случайно?) Но и она вам не поможет. С другой стороны, результат-то вроде как правильный. Что-ж, подождем лучших времен. Я еще немного поэкспериментировал с выдуманными из своей головы запросами и перешел к полевым испытаниям.
Полевые испытания
Я решил найти на mista.ru парочку вопросов. Не совсем банальных, типа почему у меня соединение не работает, а чуть посложнее. Первый вопрос https://forum.mista.ru/topic.php?id=883998 звучал примерно так: хочу получить все документы, у которых одна табличная часть заполнена, а вторая нет. Пробуем в OpenAI
Обратите внимание. Там, в ветке на форуме, даны правильные ответы. Но этот не только правильный, но еще и компактный.
Второй вопрос https://forum.mista.ru/topic.php?id=826183 оказался посложнее. Для каждого товара надо сначала определить покупателя, который купил на самую большую сумму среди других покупателей этого товара, а потом вывести количество проданного этому покупателю этого товара. Спрашиваем:
И вертолет садится прямо на лед! Да, брат трансформер! Я тоже считаю, что всем нам необходимо вот это max(sum(val)) Но теневое мировое правительство, исходя из каких-то своих теневых мировых соображений наложило строгий запрет на такую конструкцию. И ее нет не только в 1С, но и вообще нигде. Жаль, но придется решать эту задачу самому.
Вывод
У нас, программистов, интересная работа. Вот только прежде, чем сделать немного интересного, надо сделать много, очень много неинтересного. Вернемся к самому первому примеру, он очень показателен. В 1С есть периодический регистр сведений. Для этого регистра определен метод (и соотвествующая виртуальная таблица) СрезПоследних(). Мы пользуемся всем этим, не особо задумываясь, а что там внутри. Но время от времени (и что важно, достаточно редко) возникают ситуации, когда надо построить срез последних самостоятельно. Нет соответствующего регистра и нет возможности вмешиваться в структуру базы. Или регистр есть, но, например, такой структуры:
период, товар, склад, цена
а вам потребовалось получить последние значения цены по товарам не важно на каком складе. На этом 1С-овский срез последних ломается и надо писать самому. Если вы думаете, что решение можно легко нагуглить, то вы ошибаетесь. Не знаю почему, но вот прямо сейчас и гугл и яндекс выдадут вам на нескольких страницах ссылки на что-то типа "срез последних на каждую дату". Придется потрудиться и поискать в результатах выдачи то, что вам действительно нужно. А потом еще придется потрудиться и вытащить рабочий текст запроса из статьи.
В общем, срез последних задача экзотическая и... неинтересная. Скорее всего вы будете решать ее в рамках чего-то по-настоящему интересного. И вам будет жаль тратить на нее больше 10 секунд своего времени. Прекрасно, что CODEX от OpenAI готов вам помогать в этом деле.