Всем привет. До вчерашнего дня я не был связан с 1с никоим боком, так что уровень моих познаний стремится к нулю.
Однако начальнику понадобилось, чтобы я извлек данные из всех таблиц какого-то dt файла.
Почесал репу, погуглил, нашел какой-то код, вставил, сохраняю - пишет ошибку про тонкий клиент.
Ну ладно, это я понял, что в 1с функции могут выполняться на клиенте, на сервере и, возможно, еще где-то, и что на стороне клиента нельзя делать запросы. Ну ок, прибавил к своей функции "&НаСервере". Вызываю ее из обработчика события "&После("ПриНачалеРаботыСистемы")", а мне пишет, что моя функция не найдена...

Что делать, как быть?..
---
Вот как создать внешнюю обработку http://somych.me/?p=1051. там все просто.
Если не хотите тогда процедуру &НаСервере нужно вынести в отдельный общий модуль на сервере, сделать ее экспортной и вызывать уже её через ИмяОбщегоМодуля.SaveTbl(). Но там тоже есть нюансы и это будет сложнее создания обработки
---
Обработки

```1c
    ВыгрузкаЗагрузкаДанныхXML82.epf
```
 или
```1c
    ВыгрузкаЗагрузкаДанныхXML83.epf
```
---
До вчерашнего дня я не был связан с 1с никоим боком
начальнику понадобилось, чтобы я извлек данные из всех таблиц какого-то dt файла

ну если с 1с не работали совсем
возьмите ToolCD и откройте им файл вашей базы 1Cv8.1CD
там есть функция экспорта таблиц в xml
---
Обработки

```1c
    ВыгрузкаЗагрузкаДанныхXML82.epf
```
 или
```1c
    ВыгрузкаЗагрузкаДанныхXML83.epf
```
---
До вчерашнего дня я не был связан с 1с никоим боком
начальнику понадобилось, чтобы я извлек данные из всех таблиц какого-то dt файла

ну если с 1с не работали совсем
возьмите ToolCD и откройте им файл вашей базы 1Cv8.1CD
там есть функция экспорта таблиц в xml
---
Точно не уверен, но, возможно, в данном модуле нельзя создавать серверные функции.
Зачем делать данный код при старте системы? может проще вынести во внешнюю обработку и запускать по необходимости?
---
А это обычное или управляемое приложение?
Если обычное, то директиву &НаСервере объявлять не надо
---
зачем такие сложности ?... сделайте внешнюю обработку
---
Надо чтобы она была экспортной
Процедура НазваниеПроцедуры() Экспорт
---
В одном модуле не надо
---
Пожалуйста, говорите попроще... Я вообще ничего не знаю об 1с.
Я без понятия, что такое "внешняя обработка", проще оно или не проще, мне нужно просто хоть как-то экспортировать таблицы в XML и забыть про все эти ужасы.
"при старте системы" потому что это единственная точка входа, которая мне понятна, и она точно работает для меня и выводит какое-то сообщение, значит, должен и экспорт работать.

"А это обычное или управляемое приложение"
Я без понятия, я даже без понятия, что такое "обычное" и "управляемое" приложения.
---
Пошлите начальника самого это делать.
Если завтра потребуется перевод договоров с китайского, вы же не будете за ночь учить китайсткий?
Это тоже самое.
---
Вот как создать внешнюю обработку http://somych.me/?p=1051. там все просто.
Если не хотите тогда процедуру &НаСервере нужно вынести в отдельный общий модуль на сервере, сделать ее экспортной и вызывать уже её через ИмяОбщегоМодуля.SaveTbl(). Но там тоже есть нюансы и это будет сложнее создания обработки
---
Еще нюанс: если функция выполняется на сервере, то могут быть проблемы с записью файла: если база серверная, а не файловая, то и файл у вас будет писаться на диск серверного компьютера, а не на локальный. Потому, что код выполняется на сервере и сервер не видит ваших дисков.
Придется вам еще и с этим разбираться.
Внешняя обработка проще, потому, что не придется каждый раз перезапускать программу.
---
Спасибо, это более-менее понятно. Буду разбираться.
---
Если вы правда хотите разобраться, начните хотя бы с изучения основ - почитайте книгу Радченко - "1с предприятие 8.3 практическое пособие разработчика".
Методом тыка вы много не навоюете.
---
Вы правда считаете, что человеку, не знакомому с 1с в принципе, будет достаточно нескольких комментариев в форуме, чтобы во всем разобраться?
Зачем тогда все эти десятки книг, документаций, статей и прочего?))
Зачем тогда я их читал, нарабатывал опыт и прочее >_<
---
Нет, но раз ему руководство сказало делать, то я думаю, лучше подсказать направление, в котором копать и возможные проблемы (хотя бы те, которые сразу пришли в голову), чем советовать послать руководство, нанять нормального программиста, курить мануалы, учить матчасть и т.д.
Если вам завтра руководство скажет, разобраться в языке, который вы вообще не знаете, вы наверное им скажите: "Подождите полгода, я тут книгу нашел на 2000 страниц. нужно ее прочитать, изучить..."
---
Если вам завтра руководство скажет, разобраться в языке, который вы вообще не знаете, вы наверное им скажите: "Подождите полгода, я тут книгу нашел на 2000 страниц. нужно ее прочитать, изучить..."
Естественно. Если вы полезете делать что-то сразу, будет не сильно лучше, чем у ТС.
---
Это же не армия.
Если, вам скажут с китайского переводить книгу (любую другую работу, которая вне вашей компетенции) - чего бы не объяснить начальству, что это вне вашей компетенции, и если результат нужен не через год (другой период для получения необходимой компетенции), то лучше поручить задачу тому, кто в ней понимает?
---
Не хочу спорить, чтобы не засорять ветку.
Все зависит от начальства и от ситуации конкретного человека. кто-то может послать, кто-то нет.
Зачем здесь говорить вещи, которые первыми пришли в голову ТСу (про найм нормального программиста и про посыл начальства). Может лучше попробовать помочь? я думал форум для этого, а не для засирания людей.
ТС сразу сказал, что 1с он знает только 1 день. и уже сделал больше, чем некоторые изучающие 1с в течение нескольких недель, которые тут задают элементарные вопросы.
По поводу китайского: если начальство скажет, то я как минимум закину текст в гугл переводчик и скажу, что если нужно более качественный перевод, то ищи переводчика, а от меня только это
---
Если вам завтра руководство скажет, разобраться в языке, который вы вообще не знаете, вы наверное им скажите: "Подождите полгода, я тут книгу нашел на 2000 страниц. нужно ее прочитать, изучить..."
А как еще? О_о
Или вы считаете, что молча принять задачу в работу, не предоставить результат начальству когда он будет нужен, сорвать сроки и другие задачи, которые от этого зависят - это лучше?
---
Вы ведь не знаете всей ситуации. может ТС сейчас на северном полюсе и рядом только начальник, ставящий такие задачи. Это конечно утрировано, но всё же...
Опять же, всё зависит от начальства. может ему сказали "Делай, или уволим." смысл в том, что это не тема для данной ветки форума
---
Все может быть, конечно, но вряд ли Саратов перенесли на северный полюс ;)
Но имхо, советовать по задаче и рассказывать какие - то особенности работы платформы нет смысла пока ТС не изучит хотя бы основы.
---
ну так я его и направил на основы (как сделать Hello World через внешние обработки) и дополнительно сказал, что будут еще проблемы. может после этого он и пойдет к начальству и скажет, что не будет этим заниматься.
---
Спасибо всем, кто помогал. Начальника экспорт в XML не устроил (да и меня), там вместо значений какие-то GUID иногда проскакивали в полях. Типа вместо "Агуша" была какая-то хрень "{sadqwsdf-gdsgfwerewfsd-fggh-fjhj}".

Воспользовался ссылкой http://somych.me/?p=1051 и создал внешнюю обработку (предварительно попробовав метод с общим модулем, и убедившись, что он тоже не канает, ибо функция невидна и там...).

Запрогал это сам:

```1c
    query = Новый Запрос("ВЫБРАТЬ * ИЗ РегистрСведений.Данные_Компании");
    query_result = query.Выполнить().Выгрузить();

    columns_count = query_result.Колонки.Количество();
    rows_count = query_result.Количество();
    file_stream = Новый ЗаписьТекста("d:\query_result.txt");

    columns_count = columns_count - 1;
    rows_count = rows_count - 1;

    Для i = 0 По rows_count Цикл
    temp_row = query_result.Получить(i);
    temp_row_str = ";

    Для j = 0 По columns_count Цикл
    temp_cell = temp_row.Получить(j);
    temp_row_str = temp_row_str + temp_cell;

    Если j < columns_count тогда
    temp_row_str = temp_row_str + Символы.Таб;
    КонецЕсли;
    КонецЦикла;

    temp_row_str = temp_row_str + Символы.ПС;
    file_stream.Записать(temp_row_str);
    КонецЦикла;

    file_stream.Закрыть();
    Сообщить("Файл создан...");
```

Все пашет, я доволен, что наконец-то отвязался от этой хрени.