Имя: Пароль:
1C
 
Как в COM-соединении преобразовать дату в строку по формату?
☑
0 Гений 1С
 
гуру
30.09.26
✎
20:30
Простой вопрос, а бьюсь долго.
v8.Format не работает
v8.String(d, "ДФ=dd.MM.yyyy") не работает
v8.Right, Substr тоже не работают
1 PR
 
30.09.26
✎
20:39
Испанский стыд
2 fram_
 
30.09.26
✎
20:40
а так

СтрокаДаты = COMПодключение.Вычислить("Формат(Дата(""" + Формат(ИсходнаяДата, "ДФ=ггггММддЧЧммсс") + """), """ + СтрокаФормата + """)")
3 Гений 1С
 
гуру
30.09.26
✎
20:55
(2) в контексте не будет исходной даты.
я кстати, в обновляторе скрипт использую

(1) поза гуру?
4 Гений 1С
 
гуру
30.09.26
✎
21:00
Почитал тут, что функции глобального контекста сохраняются:
https://infostart.ru/1c/articles/1777483/

Это натолкнуло меня писать не v8.Format, а просто Формат в обновляторе. Работает...
5 PR
 
30.09.26
✎
21:00
(3) Да я просто охуеваю с твоего уровня
Не говоря уже о том, нахуя тебе формат на той стороне и о том, чем тебя не устроил (2)
Кто те идиоты, которые платят тебе пятерку в час?
Те, кто не знает, что можно не платить, как в анекдоте чукчи, которые разговаривают по телефону, потому что не знают, как закончить разговор?
6 Гений 1С
 
гуру
30.09.26
✎
21:10
(5)
там в (2) не для обновлятора, контекст другой
у гениев, видишь ли, могут быть проблемы в простом, зато они работают в сложном так круто, что им платят как раз пятерку в час.
7 PR
 
30.09.26
✎
21:12
(6) Идиот, раз у тебя есть d в v8, значит у тебя есть d и в COMПодключение.Вычислить
А про сложное ну не надо пиздеть, мы тут все про тебя все знаем
8 Гений 1С
 
гуру
30.09.26
✎
22:01
(7) ты демонстрируешь классическую манипуляцию "послезнание"
9 Гений 1С
 
гуру
30.09.26
✎
22:12
А вот что-то не могу определить тип массив:

    Попытка
        Количество = Организация.Количество();
        ЭтоМассив = истина;
    Исключение
        ЭтоМассив = ложь;
    КонецПопытки;
    Если ЭтоМассив Тогда //ТипЗнч(Организация) = Тип("Массив") Тогда
        Для Каждого ТекОрганизация ИЗ Организация Цикл
            СформироватьОтчет(ИмяОтчета, Дата1, Дата2, ТекОрганизация, Каталог);
        КонецЦикла;
        Возврат;
    КонецЕсли;
    


ТипЗнч - ComОбъект
10 maxab72
 
30.09.26
✎
22:14
(9) вроде бы одинаковые объекты на стороне приемника и на стороне передатчика имеют разные типы. это азбука.
11 PR
 
30.09.26
✎
22:33
(10) Да он вечный первогодка, не знает нихрена
Он даже не понимает, что ТипЗнч нужно выполнять на стороне COM, чтобы вернулся тип "Массив", а иначе все верно, будет COMОбъект возвращаться
12 Гений 1С
 
гуру
01.10.26
✎
00:28
(11) и как же получать, если v8.TypeoF пишет, что нет такого метода TypeoF. Выйди уже из позы Гуру
13 H A D G E H O G s
 
01.10.26
✎
01:42
(11) Наша кочерыженька так то права, многие функции глобального контекста не видны во внешнем соединении. Но это не значит, что не надо включать голову.

&НаСервере
Функция ПроверитьТипCOMОбъекта(Значение,ТипСтрокой,Соединение)
    ПроверочноеОписаниеТипов=Соединение.NewObject("ОписаниеТипов",ТипСтрокой);
    ПриведенноеЗначение=ПроверочноеОписаниеТипов.ПривестиЗначение(Значение);
    Сравнение=Соединение.NewObject("СравнениеЗначений");
    Результат=Сравнение.Сравнить(Значение,ПриведенноеЗначение)=0;
    Возврат Результат;
КонецФункции

&НаСервере
Процедура Команда1НаСервере()
    КОМКоннектор = Новый COMОбъект("V83.COMConnector");
    Соединение=КОМКоннектор.Connect(СтрокаСоединенияИнформационнойБазы());
    ПроверяемыйМассив=Соединение.NewObject("Массив");
    
    Результат=ПроверитьТипCOMОбъекта(ПроверяемыйМассив,"Массив",Соединение);
    Сообщить("Проверяемый COM объект является массивом -"+Результат);
    Результат=ПроверитьТипCOMОбъекта(ПроверяемыйМассив,"Структура",Соединение);
    Сообщить("Проверяемый COM объект является Структурой -"+Результат);
КонецПроцедуры
14 H A D G E H O G s
 
01.10.26
✎
01:44
15 H A D G E H O G s
 
01.10.26
✎
02:03
Ну или вообще - просто. Глобальный Сериализатор они оставили доступным.

&НаСервере
Процедура Команда1НаСервере()
    КОМКоннектор = Новый COMОбъект("V83.COMConnector");
    Соединение=КОМКоннектор.Connect(СтрокаСоединенияИнформационнойБазы());
    ПроверяемыйМассив=Соединение.NewObject("Массив");
    Сериализатор=Соединение.СериализаторXDTO;
    Тип=Сериализатор.XMLТипЗнч(ПроверяемыйМассив);
    Сообщить("Проверяемый COM объект является -"+Тип.TypeName);
КонецПроцедуры
16 H A D G E H O G s
 
01.10.26
✎
02:10
Автор рождает очередное поделие

https://vkvideo.ru/video-56332541_456239184
17 PR
 
01.10.26
✎
04:32
В (13) в итоге так и нет получения типа значения в COM
А предлагаемое в интернете COMСоединение.XMLТипЗнч(COMЗначение).TypeName для массива вернет Неопределено
Так что остается только (15)

COMКоннектор = Новый COMОбъект("V85.COMConnector");
COMСтрокаСоединения = СтрШаблон("Srvr=""%1"";Ref=""%2"";Usr=""%3"";Pwd=""%4"";", Объект.Сервер, Объект.База, Объект.Пользователь, Объект.Пароль);
COMСоединение = COMКоннектор.Connect(COMСтрокаСоединения);

COMДата = COMСоединение.CurrentSessionDate();
COMМассив = COMСоединение.NewObject("Массив");
COMСправочник = COMСоединение.Catalogs[Объект.Справочник].ПустаяСсылка();

COMОписаниеТипов = COMСоединение.NewObject("ОписаниеТипов", СтрШаблон("Массив, СправочникСсылка.%1", Объект.Справочник));
COMТипМассив = COMОписаниеТипов.Типы().Get(0);
COMТипСправочник = COMОписаниеТипов.Типы().Get(1);

COMСериализатор = COMСоединение.СериализаторXDTO;

ОтформатированнаяДата = Формат(COMДата, "ДЛФ=DDT");
Сообщить(СтрШаблон("Отформатированная дата: %1", ОтформатированнаяДата));

COMОписаниеТипов = COMСоединение.NewObject("ОписаниеТипов", СтрШаблон("%1, %2", COMСериализатор.XMLТипЗнч(COMМассив).TypeName, COMСериализатор.XMLТипЗнч(COMСправочник).TypeName));
COMТипЗначенияМассив = COMОписаниеТипов.Типы().Get(0);
COMТипЗначенияСправочник = COMОписаниеТипов.Типы().Get(1);

Сообщить(СтрШаблон("Массив = массив: %1", COMТипЗначенияМассив = COMТипМассив));
Сообщить(СтрШаблон("Массив = справочник: %1", COMТипЗначенияМассив = COMТипСправочник));
Сообщить(СтрШаблон("Справочник = массив: %1", COMТипЗначенияСправочник = COMТипМассив));
Сообщить(СтрШаблон("Справочник = справочник: %1", COMТипЗначенияСправочник = COMТипСправочник));
18 PR
 
01.10.26
✎
04:52
А, ну и да, что там у него с форматом не срослось, я так и не понял, видимо, не дано ему
19 Гений 1С
 
гуру
01.10.26
✎
08:48
(18) я вызывал Формат через v8.Формат, хотя в скриптах обновлятора на OneScript в глобальном контексте строковые функции реализованы, то бишь можно просто писать Формат, без v8.

(17) Вот видишь, а начинал с позы гуру, оказалось вопрос не для джунов. ггг
20 Конструктор1С
 
01.10.26
✎
09:34
(0) пробуй документацию читать
21 PR
 
01.10.26
✎
11:16
(19) Ну молодец, че, документация не для слабаков, ага
Так-то в СП черным по белому написано, что Формат в COM не работает
Да и непонятно, зачем форматировать дату в COM, когда она уже и так не COMОбъект, видимо, это что-то непонятное генитальное
22 PLUT
 
гуру
01.10.26
✎
11:30
генитальное - использовать эту "тихналогию" COM-соединения в 2026 году

ну может легася какая-нибудь древняя и нужно героически поддерживать

всё не читал!

Программа «Обновлятор-1С» использует COM-коннектор (библиотеку comcntr.dll) для программного управления и выполнения операций внутри информационной базы без запуска полноценного графического интерфейса 1С

В «Обновляторе» можно писать свои скрипты автоматизации (например, на OneScript). Через объект V83.COMConnector администратор может программно залезть в базу, чтобы перед обновлением или после него очистить кэш, пересчитать итоги, запустить тестирование и исправление или выполнить произвольный код на встроенном языке 1С

©пижжено отсюда https://helpme1s.ru/obnovlyator-1s-uchimsya-pisat-skripty-na-onescript
23 PR
 
01.10.26
✎
11:23
(19) Геня, дело в том, что вопрос-то непростой, да
Но во-первых, тут даже говнорешений есть несколько штук, а ты даже до них не докопался
А во-вторых, кто-то разбирается и ищет, а кто-то выкабенивается, какой он неебаться гений, а по факту даже дату отформатировать не может
Так что не нужно важно топорщить моську, все понятно и так
24 Кирпич
 
01.10.26
✎
11:46
(9) вот так можно
Если v8.СтрШаблон("%1",Организация) = "Массив" Тогда
....
КонецЕсли;

Если Организация создано в v8
25 Кирпич
 
01.10.26
✎
11:49
+(24) или
v8.String(Организация) = "Массив"
26 Garykom
 
гуру
01.10.26
✎
12:02
Только для меня странно что до сих пор путают клиент и сервер?
Да технология COM клиент-серверная...
27 Кирпич
 
01.10.26
✎
12:05
капитана разбудили
28 PR
 
01.10.26
✎
12:13
(26) Только для тебя
29 Garykom
 
гуру
01.10.26
✎
12:25
Для меня странно что пытаются извращаться напрямую через COM/OLE
Когда можно создать внешнюю обработку (с нативным кодом без COM), закинуть ее если надо через COM и тупо выполнить там
Будет похоже на работу через http-сервисы
30 PLUT
 
гуру
01.10.26
✎
12:35
(29) все не читал

Г1С мучает обновлятор
31 Garykom
 
гуру
01.10.26
✎
12:47
(30) я понимаю что мучает
не понимаю что мешает создать внешнюю обработку
и выполнять код из нее через обновлятор
32 Garykom
 
гуру
01.10.26
✎
12:50
еще лучше сваять расширения с нужным кодом
и подсунуть в нужные базы
через тот же обновлятор
33 Кирпич
 
01.10.26
✎
12:56
вот еще извращение. только на массивах не прокатит
Функция COMТип(v8, Значение)  
    Запрос = v8.NewObject("Запрос","ВЫБРАТЬ ТИПЗНАЧЕНИЯ(&Объект) КАК Т");  
    Запрос.УстановитьПараметр("Объект",Значение);
    Выборка = Запрос.Выполнить().Выбрать();  
    Выборка.Следующий();    
    Возврат v8.String(Выборка.Т);    
КонецФункции
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший