Имя: Пароль:
1C
 
Обработка для вывода GUID-ей. Что сделать?
🠗Ø (Волшебник 22.04.2025 08:15)
0 lazybird
 
naïve
21.04.25
15:40
Не фурычит, тут явно какая-то простая ошибка. Нужно вывести номенклатуру из группы и спецификации по ней с кодами.

Клод написал простой код, дал какое-то объяснение, но не работает.

https://cloud.mail.ru/public/FTuz/zahS4Jmo6

Зачем оно так спрятано не могу понять.
1 lazybird
 
naïve
21.04.25
15:41
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    СформироватьОтчет();
КонецПроцедуры

&НаСервере
Процедура СформироватьОтчет()
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |   СправочникНоменклатура.Ссылка КАК Номенклатура,
    |   СправочникНоменклатура.Наименование КАК НаименованиеНоменклатуры,
    |   СправочникНоменклатура.УникальныйИдентификатор КАК GUIDНоменклатуры,
    |   СпецификацииНоменклатуры.Ссылка КАК Спецификация,
    |   СпецификацииНоменклатуры.Наименование КАК НаименованиеСпецификации,
    |   СпецификацииНоменклатуры.УникальныйИдентификатор КАК GUIDСпецификации
    |ИЗ
    |   Справочник.Номенклатура КАК СправочникНоменклатура
    |       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СпецификацииНоменклатуры КАК СпецификацииНоменклатуры
    |       ПО СпецификацииНоменклатуры.Владелец = СправочникНоменклатура.Ссылка
    |ГДЕ
    |   СправочникНоменклатура.Родитель.Наименование = ""Насосные части (запас)""";
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    // Очистка таблицы перед заполнением
    ТаблицаНоменклатуры.Очистить();
    
    // Заполнение таблицы результатами запроса
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        НоваяСтрока = ТаблицаНоменклатуры.Добавить();
        НоваяСтрока.НаименованиеНоменклатуры = ВыборкаДетальныеЗаписи.НаименованиеНоменклатуры;
        НоваяСтрока.GUIDНоменклатуры = Строка(ВыборкаДетальныеЗаписи.GUIDНоменклатуры);
        НоваяСтрока.НаименованиеСпецификации = ВыборкаДетальныеЗаписи.НаименованиеСпецификации;
        
        Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.GUIDСпецификации) Тогда
            НоваяСтрока.GUIDСпецификации = Строка(ВыборкаДетальныеЗаписи.GUIDСпецификации);
        Иначе
            НоваяСтрока.GUIDСпецификации = "";
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры
2 Волшебник
 
21.04.25
15:43
А какой был промт?!
3 Михаил Козлов
 
21.04.25
15:44
Попробуйте:
УникальныйИдентификатор(СправочникНоменклатура.Ссылка)
4 Волшебник
 
21.04.25
15:45
(3) Может там GUID вообще не нужен. Может там достаточно СпецификацииНоменклатуры.Код

Хотелось бы понять задачу.
5 lEvGl
 
гуру
21.04.25
15:53
(0) а что значит не работает, как должно быть когда "работает"?
6 Волшебник
 
21.04.25
16:01
Меня ещё вот это смущает:
ГДЕ Родитель.Наименование = "Насосные части (запас)"

Кстати, запрос можно упростить

"ВЫБРАТЬ
    |   Спеки.Владелец КАК Номенклатура,
    |   Спеки.Ссылка КАК Спецификация,
    |   Спеки.Наименование КАК НаименованиеСпецификации,
    |   УникальныйИдентификатор(Спеки.Ссылка) КАК GUIDСпецификации
    |ИЗ
    |   Справочник.СпецификацииНоменклатуры КАК Спеки
    |ГДЕ
    |   Спеки.Владелец В ИЕРАРХИИ (&Группа)"

Запрос.УстановитьПараметр("Группа", ГруппаНасосныеЧасти);
7 lEvGl
 
гуру
21.04.25
16:15
это тоже интересно
  Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.GUIDСпецификации) Тогда
            НоваяСтрока.GUIDСпецификации = Строка(ВыборкаДетальныеЗаписи.GUIDСпецификации);
        Иначе
            НоваяСтрока.GUIDСпецификации = "";
        КонецЕсли;
8 Волшебник
 
21.04.25
16:22
(7) А Вас не смутило, что в ТаблицаНоменклатуры нет ссылок на номенклатуру и спецификацию? Там почему-то только строковые поля. Это ж стрёмно
9 программистище
 
21.04.25
16:25
В запросе нужно использовать: УНИКАЛЬНЫЙИДЕНТИФИКАТОР(СправочникНоменклатура.Ссылка) КАК GUIDНоменклатуры
10 lEvGl
 
гуру
21.04.25
16:27
(8) да смутило, тут много такого, например еще

НоваяСтрока.НаименованиеСпецификации = ВыборкаДетальныеЗаписи.НаименованиеСпецификации;
        
        Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.GUIDСпецификации) Тогда


но я не понял главного - что не работает то
11 Волшебник
 
21.04.25
16:36
А меня ещё смутило, что элемент формы ТаблицаНоменклатуры не связан с реквизитом формы, которых попросту нет



Может лучше сделать вот так?

12 Волшебник
 
21.04.25
16:32
(1) Кстати, этого программного кода нет в файле из (0). От слова совсем
13 Волшебник
 
21.04.25
16:33
Всё это очень странно. Мне кажется, что здесь мы имеем ситуацию "ТБ".
14 mikecool
 
21.04.25
16:39
а главное - кто такой клод?
15 Волшебник
 
21.04.25
16:43
(14) нейронка wiki:Claude от Anthropic AI.
16 lEvGl
 
гуру
21.04.25
16:48
(12) ну это совсем лол
(14) писал Моне, Мане тоже писал, но этот не Клод
17 mikecool
 
21.04.25
16:47
(15) блин, да сколько уже их? )))
18 Волшебник
 
21.04.25
17:02
(17) Я даже больше скажу. Скоро (или уже) они начнут вызывать друг друга, создаваться на основе друг друга. Например, DeepSeek был создан как дистиллят ChatGPT. Потом они научатся обмениваться кусочками своих моделей, что-то типа экспорта/импорта предметных областей.

Например, нейронка1 знает 1С, но не умеет управлять вертолётом. Она обращается к нейронке2, которая умеет управлять вертолётом, платит ей копеечку (возможно, из кошелька своего мистера-подписчика) и теперь мистер-подписчик с помощью нейронки1 может написать программу на 1С для управления вертолётом.
Хотели б полетать на таком?

19 Djelf
 
21.04.25
17:08
(18) Это плохое предложение, так это работать не будет.

> Если взять, поймать чижа,
> Аккуратно, не спеша
>  Перья выщипать - в итоге
> Вы получите мыша.

Теоретически и с ИИ так можно, но кого вы получите в результате?
20 Волшебник
 
21.04.25
17:10
(19) Только так и будет работать. Более того, это УЖЕ работает. Я же написал, как создавался DeepSeek, как дистиллят от ChatGPT, поэтому его разработка обошлась в 100 раз дешевле.
21 lazybird
 
naïve
21.04.25
17:43
Так. Друзья, господа и товарищи. Дипсик это не дистиллят, в принципе вообще не стоит так думать. Промпт был такой:

----------
код обработки для 1с:унф, который выведет отчет с именем номенклатуры, его GUID, спецификации по ней и GUID спецификаций, если спецификаций больше одной, то выведет номенклатуру два раза
выводить только номенклатуру в группе "Насосные части (запас)"

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

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

Это был второй вариант, на первом он мне нахреначил кода для каких-то кнопок "выгрузить в эксель" и т.п. Клод вообще любит делать то, что его не просили. Но иногда это работает на пользу. Я за день сделал бота телеграм, который добавляет данные от пользователя в базу mssql, так мне надо было добавлять только в половину таблицы, а этот жук не спросясь написал код, который добавляет и во вторую половину, т.е. сам понял, что задачу надо завершить, выбрать второго исполнителя и т.д. Поразительная сообразительность. Теперь вот я хотел сохранять документ (производство) в 1с и встрял не по детски.

Они все, и Клод и Грок, легко пишут какой-то код для 1С. ЧатГПТ не прбовал. Я ее не особо люблю, я вот за день сваял бота и не смог за день создать обработку на 1С -- а это показатель. Разница в том, что для нормальных систем (cursor) они сразу делают все, а тут они пишут что сделать... впрочем, можете прочитать сами.

https://claude.ai/share/7c51f14f-cdac-4b21-bdfb-918645d2181d

Я долго тупил (точнее тупо сделано так, что ступить невозможно) и не мог добавить таблицу в форму. оказуется, ее надо в правой части создавать, а зачем она в левой я так и не понял. интуитивность, как я вижу, сдохла лет 10 назад.

По обработке.

Оно у меня открывает пустую таблицу, не заполняет, даже не понимаю, работает ли. Я не могу понять, я тупой, старый, и так далее -- как это вообще все работает? Я за день разобрался с node.js, запустил IIS сервер, опубликовал базу, на второй день создал бота, отладил, запустил, и просто тупо сижу и смотрю и не могу понять что вообще делать с этой 1с? Целый, б, день. Какой-то сюр. Мне что, документацию читать? Серьезно?)) Тут не что не интуитивно, тут контр-интуитивно, тут кто-то специально все запутал. Я последний раз программил лет 20 назад, я умел и, надеюсь, умею это делать. Но вот тут я просто недоумеваю, как можно было так все усложнить? Я видел 1С для DOS, я в 6 версии ковырялся, тут я просто не могу понять, что i5-13500 делает все это время, пока что-то там считает для нее? Полет на Луну быстрее рассчитать)))

Прошу прощеня за несвязанный текст, выпил полбутылки вина на ужин с горя)

Задача такая, у меня в mssql падает выполненная работа, а я хотел сразу создавать агентом, n8n или подобным, еще не решил, документ, в него пулять сделанные запасы и спецификации по ним. Потом проводить его руками и списывать материалы. Спеки можно, конечно, искать по имени, но меня вымораживает писать код для этого всего, я проще GUID поле сделаю и через odata попробую создать док. (ТА ЕЩЕ ПЕСТНЯ). Структуру документа я вроде бы вижу, и, может быть, получится его создать. Но это не точно)) Поэтому и нужен ГУАЙДИ, который, с какого-то, не достать и не увидеть. Видимо, секретный. Из ссылки его получать ручками не хочется, думал, вдруг? Хрена.

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

Ооох...
22 shuhard
 
21.04.25
17:53
(21) говорливый бот попался (с)
23 Михаил Козлов
 
21.04.25
17:58
(22) Сейчас вторую половину выпьет и запоет.
24 lazybird
 
naïve
21.04.25
18:08
По теме есть что, сказать, профессионалы (22) и (23)? Нет? Ну и смысл тратить буквы?
25 lazybird
 
naïve
21.04.25
18:14
(11) Не работает все равно
26 Мультук
 
гуру
21.04.25
18:19
(25)

Так и говорит -- не буду работать!

Запрос нужно переписать с учетом замечаний (3) и (9)

P.S.
Если не осилите эту обработку, то

>>через odata попробую создать док

сильно сомневаюсь
27 lazybird
 
naïve
21.04.25
18:22
28 lazybird
 
naïve
21.04.25
18:26
(26)

> Запрос нужно переписать с учетом замечаний (3) и (9)

Запрос вообще не вернет строки без этого? Мне кажется, что тут где-то в простом проблема, для вас в простом)

> сильно сомневаюсь

Ой, тоже мне rocket science)
29 lazybird
 
naïve
21.04.25
18:40
(4) по уже записанному документу отдается:

Продукция: {
  Продукция.0: {
    Продукция.0.Ref_Key: 5b4c41f3-f9a7-11ef-b74e-00155d59fc19
    Продукция.0.LineNumber: 1
    Продукция.0.Номенклатура_Key: 5b4c41fe-f9a7-11ef-b74e-00155d59fc19
    Продукция.0.СерииНоменклатуры:
    Продукция.0.Количество: 6
    Продукция.0.Резерв: 0
    Продукция.0.ЕдиницаИзмерения: 8e2734b4-b1fe-11ed-b72f-00155d59fc13
    Продукция.0.ЕдиницаИзмерения_Type: StandardODATA.Catalog_КлассификаторЕдиницИзмерения
    Продукция.0.Спецификация_Key: 5b4c41ff-f9a7-11ef-b74e-00155d59fc19
    Продукция.0.КлючСвязи: 1
    Продукция.0.СтруктурнаяЕдиница_Key: 69cdc12f-b1fe-11ed-b72f-00155d59fc13
    Продукция.0.ИдентификаторСтроки:
    Продукция.0.ПрослеживаемыйТовар: false
    Продукция.0.ПрослеживаемыйКомплект: false
  }

где видно, что нужен будет guid
30 Rovan
 
гуру
21.04.25
18:46
НоваяСтрока = ТаблицаНоменклатуры.Добавить();
        НоваяСтрока.НаименованиеНоменклатуры = ВыборкаДетальныеЗаписи.НаименованиеНоменклатуры;
        НоваяСтрока.GUIDНоменклатуры = Строка(ВыборкаДетальныеЗаписи.GUIDНоменклатуры);
        НоваяСтрока.НаименованиеСпецификации = ВыборкаДетальныеЗаписи.НаименованиеСпецификации;

***
короче
НоваяСтрока = ТаблицаНоменклатуры.Добавить();
ЗаполнитьЗначенияСвойств( НоваяСтрока, ВыборкаДетальныеЗаписи);
31 Rovan
 
гуру
21.04.25
18:58
(27) там только пустая форма !
32 DimVad
 
21.04.25
18:59
Собственно что надо :

1. Отладить запрос в консоли запросов, убедиться что всё работает вне формочек.
2. Впендюрить всё в формочку и тут же влезть в отладчик - смотреть по шагам что в запрос передаётся и что он возвращает.
3. Ежели он вернул всё как в п1, тогда смотреть как заполняются элементы на форме.

Всё это делается очень быстро, но надо делать в конфигураторе без этого вот "догадайся что тут не так". Собственно время догадывания обычно потеренное время - нужно идти последовательно, по конфигуратору...

Ну а как там с клодами жить - понятия не имею.
33 Волшебник
 
21.04.25
19:25
Ну это же бот, ей богу
34 ILM
 
гуру
21.04.25
19:28
Пора делать пистолет, который будет стрелять в экран. На экране будет хлестать кровь, разлетаться кишки и кусочки мозга. Через 5 секунд, всё растворяется и снова на экране чатбот, который говорит - Вижу предыдущая реализация вас не устроила.  Тогда посмотрите на вот это)))
35 Волшебник
 
21.04.25
19:39
(34) 👍 красивое
36 Волшебник
 
21.04.25
19:41
(21) используйте толстый клиент и обычные формы
37 lazybird
 
naïve
21.04.25
20:14
(31) Я извиняюсь, еще раз загрузил, проверил, вроде загружено то, что получилось.

https://cloud.mail.ru/public/vF6h/q7iy4nBds
38 Волшебник
 
21.04.25
20:21
(37) Зачем Вам гуиды? Чем не устраивает ссылка?
39 Волшебник
 
21.04.25
20:22
(37) Ваша процедура не вызывается. Нет ни команды, ни кнопки.
40 Волшебник
 
21.04.25
20:30
Зато сколько кода сгенерировано! Это ж пипец!
Сначала создайте кнопку и выведите "Привет, мир!"
С этого начинается изучение языков программирования, а не с запросов на 3 экрана
41 Волшебник
 
21.04.25
20:26
(40) Потом создайте цикл от 1 до 10.
Потом посчитайте сумму чётных чисел. Появится условие внутри цикла.
Потом сделайте ещё что-то простое.

Куда вы попёрли? В объектно-ориентированную учётную систему! Там надо таким багажом знаний обладать, до которого Вам ещё расти и расти!
42 Волшебник
 
21.04.25
20:28
И форум Вам тут не поможет! У нас не школа для обучения программированию. Тут серьёзные люди сидят.
43 Волшебник
 
21.04.25
20:36
(24) Нам Ваша единица измерения "буквы" (или токены) вообще не интересна. Мы можем тратить буквы бесконечно. Они для нас ничего не стоят. Это просто символы и вектора на экране. Вы думайте над смыслом своих слов и понятий, которые вы составляете из букв и слов. И ещё больше думайте над своим программным кодом, который состоит из слов и понятий, адресованных вообще не людям! Программный код запускается на машине-компиляторе! Вот о нём думайте! Думайте об 1С, а не о форуме 1С. Думай про программу!
44 lazybird
 
naïve
21.04.25
20:51
Э... Ув. Волшебник! Я очень давно знаком с программированием, лет 30 назад начинал,  не надо мне основ, мне надо бысто сделать фигню, чтобы получить коды. Не надо мне основ этого всего, это слишком, жизнь коротка, я лучше уж питон какой)

> Зачем Вам гуиды?

Мне надо писать в базу документы. И тут либо с COM мудиться в JS, либо просто через ODat-у, данные по ней я читаю, осталось записать. А там для записли гуайдеи вижу используются (а как же иначе?).

(32) DimVad мерсю, запрос был крив, переписал, данные получил)

Статор 6-4М;Статор 6-4М;5b4c41f1-f9a7-11ef-b74e-00155d59fc19;1,06/26;1,06/26;5b4c41f2-f9a7-11ef-b74e-00155d59fc19;

(39) > Ваша процедура не вызывается. Нет ни команды, ни кнопки.

Я это тоже предполгаю, но там есть код вида

Подробности
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    СформироватьОтчет();
КонецПроцедуры

&НаСервере
Процедура СформироватьОтчет()
    
    Запрос = Новый Запрос;      
    // СправочникНоменклатура.УникальныйИдентификатор КАК GUIDНоменклатуры
    Запрос.Текст =    
    
    "ВЫБРАТЬ    
    |СправочникНоменклатура.Ссылка КАК Номенклатура,
    |   СправочникНоменклатура.Наименование КАК НаименованиеНоменклатуры,
    |   УНИКАЛЬНЫЙИДЕНТИФИКАТОР(СправочникНоменклатура.Ссылка) КАК GUIDНоменклатуры ,    
    |   СпецификацииНоменклатуры.Ссылка КАК Спецификация,
    |   СпецификацииНоменклатуры.Наименование КАК НаименованиеСпецификации,
    |   УНИКАЛЬНЫЙИДЕНТИФИКАТОР(СпецификацииНоменклатуры.Ссылка) КАК GUIDСпецификации
    |ИЗ
    |   Справочник.Номенклатура КАК СправочникНоменклатура
    |       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Спецификации КАК СпецификацииНоменклатуры
    |       ПО СпецификацииНоменклатуры.Владелец = СправочникНоменклатура.Ссылка
    |ГДЕ
    |   СправочникНоменклатура.Родитель.Наименование = ""Насосные части (запас)""";    
    
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    // Очистка таблицы перед заполнением
    ТаблицаНоменклатуры.Очистить();
    
    // Заполнение таблицы результатами запроса
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        НоваяСтрока = ТаблицаНоменклатуры.Добавить();            
        ЗаполнитьЗначенияСвойств( НоваяСтрока, ВыборкаДетальныеЗаписи);
        НоваяСтрока.НаименованиеНоменклатуры = ВыборкаДетальныеЗаписи.НаименованиеНоменклатуры;
        НоваяСтрока.GUIDНоменклатуры = Строка(ВыборкаДетальныеЗаписи.GUIDНоменклатуры);
        НоваяСтрока.НаименованиеСпецификации = ВыборкаДетальныеЗаписи.НаименованиеСпецификации;
        
        Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.GUIDСпецификации) Тогда
            НоваяСтрока.GUIDСпецификации = Строка(ВыборкаДетальныеЗаписи.GUIDСпецификации);
        Иначе
            НоваяСтрока.GUIDСпецификации = "";
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры


видимо тут где-то собака порылась.
45 Волшебник
 
21.04.25
20:51
(44) Вы врёте! Вы вообще не программист, потому что Вы даже не вызвали процедуру типа "Привет, мир!"
Вы не связали свой код с кнопкой. Вы его НИ РАЗУ не запускали, так что засуньте его себе в жопу!
46 Волшебник
 
21.04.25
20:52
Зачем нам анализировать Ваш программный код, который НИ РАЗУ не запускался автором?
Вы генератор говнокода! И идите нахрен с этого форума!
47 Lama12
 
21.04.25
20:52
Если я буду так разработку вести, пристрелите меня.🤦‍♂️
48 Волшебник
 
модератор
21.04.25
20:52
Могу и пожёстче выразиться. Я просто стесняюсь немного. Нас много людей читает.
49 Волшебник
 
21.04.25
21:06
(44) Какой блять COM? Какой нахуй OData в (29)? Научись писать "Hello, world!" по кнопке!
50 Волшебник
 
21.04.25
20:57
(49)+ Извините, не сдержался...
51 lazybird
 
naïve
21.04.25
21:07
(45) Зачем мне врать? Ну давайте я Вам пришлю свой 25-ти летний код, у меня тогда была своя учетная система с бухгалтерией на ms sql, два уровня аналитики по счетам, даже у 1С еще не было версии для sql)

Что так нервничать, не понимаю. Ну не хотите -- не говорите, пусть я мучаться буду. Сделаю же все равно, времени просто на  это жаль, не мой хлеб)
52 lazybird
 
naïve
21.04.25
21:10
(49) > Какой нахуй OData

Ну вот такой на***):

getProductionDocuments
async function getProductionDocuments() {
    try {
        // Формируем URL для запроса документов "Производство"
        const queryUrl = `${serviceUrl}Document_СборкаЗапасов?$format=json`;

        // Добавляем заголовки для авторизации (если требуется)
        const headers = {
            'Content-Type': 'application/json',
            'Accept': 'application/json',
            // Если нужна авторизация, раскомментируйте и укажите логин/пароль
            'Authorization': 'Basic ' + Buffer.from('СИ:klmn556556').toString('base64')
        };

        // Выполняем запрос
        const response = await fetch(queryUrl, {
            method: 'GET',
            headers: headers
        });

        // Проверяем успешность ответа
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }

        // Получаем данные в формате JSON
        const data = await response.json();

        // Формируем текст для ответа бота
        let botResponseText = 'Список документов "Производство":\n\n';
        
        // Выводим список документов в консоль и формируем текст для бота
        console.log('Список документов "Производство":');

        /*
        data.value.forEach(doc => {
            const docInfo = {
                Номер: doc.Number,
                Дата: new Date(doc.Date).toLocaleDateString(),
                Сумма: doc.Total,
                Проведен: doc.Posted ? 'Да' : 'Нет'
            };
            
            console.log(docInfo);
            
            // Добавляем информацию в текст для бота
            botResponseText += `📄 Документ №${doc.Number}\n`;
            botResponseText += `📅 Дата: ${new Date(doc.Date).toLocaleDateString()}\n`;
            //botResponseText += `💰 Сумма: ${doc.Total}\n`;
            //botResponseText += `✅ Проведен: ${doc.Posted ? 'Да' : 'Нет'}\n\n`;
        });
        return botResponseText;
        */


        // Добавляем проверку на наличие документов
        if (data.value && data.value.length > 0) {
            const firstDoc = data.value[0];
            console.log('Структура первого документа:');
            botResponseText += 'Структура первого документа:\n\n';
            
            // Рекурсивная функция для обхода структуры документа
            const traverseStructure = (obj, indent = 0, prefix = '') => {
                let structureText = '';
                const nullUuid = "00000000-0000-0000-0000-000000000000"; // Define null UUID constant
                Object.entries(obj).forEach(([key, value]) => {
                    // Skip keys with null UUID value
                    if (value === nullUuid) {
                        return; // Skip this iteration
                    }

                    const formattedKey = prefix ? `${prefix}.${key}` : key;
                    if (value && typeof value === 'object') {
                        console.log('  '.repeat(indent) + formattedKey + ': {');
                        structureText += '  '.repeat(indent) + formattedKey + ': {\n';
                        const nestedText = traverseStructure(value, indent + 1, formattedKey);
                        structureText += nestedText;
                        console.log('  '.repeat(indent) + '}');
                        structureText += '  '.repeat(indent) + '}\n';
                    } else {
                        console.log('  '.repeat(indent) + formattedKey + ': ' + value);
                        structureText += '  '.repeat(indent) + formattedKey + ': ' + value + '\n';
                    }
                });
                return structureText;
            };
            
            // Выводим структуру первого документа
            const structureText = traverseStructure(firstDoc);
            botResponseText += structureText;

            // Записываем структуру в файл
            try {
                fs.writeFileSync('document_structure.log', structureText);
                console.log('Структура документа успешно записана в файл document_structure.log');
            } catch (err) {
                console.error('Ошибка при записи структуры документа в файл:', err);
            }

        } else {
            botResponseText += 'Документы не найдены.\n';
            console.log('Документы не найдены.');
        }

        return botResponseText;


    } catch (error) {
        console.error('Ошибка при получении данных:', error);
        return 'Ошибка при получении данных из 1С';
    }
}
53 Волшебник
 
21.04.25
21:10
(50) Врун! Тупой ботовод! Я ж тебя чувствую через эту прослойку-ник. И свой json (51) засунь себе в жопу.
Научи своего бота выполнять программный код по кнопке.
54 Волшебник
 
21.04.25
21:11
(51) А чей хлеб?! Чей это хлеб? Кто платит тебе за твою тупизну?
55 Волшебник
 
21.04.25
21:13
А кто заплатит нам за анализ сообщений этого тупого бота? Я поднимаю встречный меркантильный вопрос. КТо заплатит нам?!
56 lazybird
 
naïve
21.04.25
21:19
(54) > Кто платит тебе за твою тупизну?

Никто не платит, нет денег нанимать зажравшегося))) 1С-ника, приходится самому делать. Мне для себя, мелкий бизнес у нас, люди работают, буха держать, чтобы разносить данные пока нет средств, вот сами люди и будут в боте телеграм данные закидывать.

> Я ж тебя чувствую через эту прослойку-ни

Хорошо Вам, мне был так, чувстовать людей.

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

Так вот, б***, в чем прикол, я тупо не могу эту логику вкурить! Я кнопку вроде как создал, а как ее на форму засунуть?)) Она не перетягивается. Это что-то с чем-то)
57 Волшебник
 
21.04.25
21:20
(56) тупой бот
58 Волшебник
 
21.04.25
21:21
Просто признай, что тупой бот и соврал, когда регистрировался. Там была галочка "Я человек", а ты её поставил, соврал.
59 lazybird
 
naïve
21.04.25
21:22
А зачем в окне-редакторе форм существует возможность создать, например, кнопку, если ее  нельзя перетащить на форму? А если создать справа через "комманду", то появляется?
60 Волшебник
 
21.04.25
21:24
(59) Наконец ты начал работать! Пишется "команда", с одной "м"
61 Волшебник
 
21.04.25
21:25
Щас он дойдёт до свойств и осознает причинно-следственные связи.
62 Волшебник
 
21.04.25
21:26
А почему, блять, мы мистяне должны этому учить? Кто нам заплатит? Кто заплатит за анализ программного кода, который даже не запускался автором? Уроды!
63 lazybird
 
naïve
21.04.25
21:27
(58) а ты её поставил, соврал.

Ну извините, так хотелось побыть человеком...

Нашел как кнопку поставить, заработало бл**ское оное!
64 Волшебник
 
21.04.25
21:29
(63) Пошёл ты нахрен с этого форума! Теперь твоя репутация подмочена твоим ботоводом, который выше тебя и просто дал тебе доступ в этот форум. Ты угнал ник. Вы оба моральные уроды!
65 lazybird
 
naïve
21.04.25
21:29
(62) > Кто заплатит за анализ программного кода

Какой анализ, ну серьезно? Я этот запрос типа-sql первый раз в жизни в руки взял, и то разобрался, хоть и тупой бот.

Сколько я вам должен?
66 Волшебник
 
21.04.25
21:29
(65) Миллиард рублей.
67 Волшебник
 
21.04.25
21:30
Ещё чё-то вякни по поводу миллиарда рублей и в бан пойдёшь. Я предупредил.
68 lazybird
 
naïve
21.04.25
21:38
Я тут глянул, вижу кучку расширений для 1С в cursor-е, а это значит, что есть подсветка синтаксиса и прочие удобства, в т.ч. создание кода ассистентами, правда, судя по всему, нужно что-то предварительно выгружать, а потом, видимо, загружать в конфиг обратно.

Не знаю, как картинко вставлять.
https://cloud.mail.ru/public/Pdh7/Ymzp5KWX6

Ну, рано или поздно кто-то напишет MCP сервер для 1С, и кое-кто будет потихоньку терять работу)

Кому надо могу подсказать что и как поставить, чтобы посмотреть/попробовать.
69 Волшебник
 
21.04.25
21:56
(68) Дисбаланс технологий. Бот не умеет делать кнопку "Привет, мир". Зато пошёл в расширения, курсоры...
70 Волшебник
 
21.04.25
23:08
(68) Моя цитата:
"Профессия программиста 1С не умрёт никогда! Это я вам гарантирую."


Видео: https://wizard.mista.ru/video/2025-02-26-Mista_vs_Infostart.html
отметка 24:43
71 lazybird
 
naïve
22.04.25
05:54
(69) Вот когда (если) напишут MCP сервер для 1С, агенты будут создавать кнопки, делать формы и писать код. Код они уже пишут, думаю, что уже можно выгружать код конфы и они по нему будут видеть структуру и писать сразу работающее. 1С это очень простой язык, зачем изобретали - не очень понятно. Агент в курсоре читает файлы проекта для анализа. Помнится делал скрипт для авито, чтобы он перестал моргать иконкой (грузит процессор) - агент с Клодом прошерстил сохраненную страницу, нашел там функции, похожие на требуемые, потом пробовал ставить observer-ы на измненения, перепробовал все варианты и сделал вариант инжекции скрипта в код загружаемого скрипта с авито и все это работает. По началу завораживает смотреть на такое.

Какие-то люди "программисты" останутся, конечно, но все это здорово прижмет хотелки. Остальные, значит, с нормальными, большими языками (настоящими :) почувствуют, а с 1С нет) Вы попробуйте сразу, потом будете прогнозы делать.

Ну и никогда не умрут слесари 1С. Вроде меня.
72 DimVad
 
22.04.25
08:12
(71) Знал я одного молодого чудика. Чудик 1С почти не знал - но зато умел хорошо гуглить, из-за чего его взяли на работу и поручили работать с бухгалтерией.

Ну, что-то у них там было и молодая бухгалтерша предложила внести изменения в документы за прошлый год ну и заодно и перепровести их все... за прошлый год... на рабочей базе...

Ну он и "рад стараться", погуглил как это делается обработкой - гугль ему всё объяснил, ну он и перепровёл :-) История приобрела известность где-то через месяц, когда подошла пора сдавать отчёты и главбух заметили что "то-то не то"... :-)

Т.е. все эти модели учатся по текстам в интернете, что хорошо работает для всяких питонов с джавастриптизёрами. А вот в 1С есть нюансы. Мало того что объектные модели разных конфигураций сильно отличаются друг от друга так ведь ещё и бизнес-процессы кругом разные. Вот например в некоторой организации характеристики номенклатур используются для того что хранить такие данные как "Дата выпуска", "Дата печати", "Страна", "Особенности" и т.д. И есть механизм что колдует с характеристиками при проведении документа "Отчёт производства за смену" и не только. И что интересно - интернету никто ничего не сообщал :-)

Таким образом мало того что всё что говорит интернет про работу с характеристиками тут мало приемлемо - даже и анализ конфигурации этот чат гопоты мало чему научит. Ибо если чат проанализирует всю конфигурацию то он увидит много-много типового кода который не используется, и совсем немного "местного" кода, что и работает...

Поэтому обработка написанная "чатом гопоты" просто загадит данные и сломает работу.

Ну а тренировать своего собственного клода на местную конфу будет сильно дороже даже пожизненного содержания программиста.