Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Можно ли открыть консоль серверов 1с из командной строки?

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

Есть код который работал в 8.2 надо перенести в 8.3
Смысл , в процедуре передЗаписью в объекте открывалась форма в которой вводились пара параметров и потом эти параметры обрабатывались в объекте.
Дабы в каждом объекте не дублировать эти параметры новыми реквизитами, не добавлять их на формы и простота обновления.
Теперь это надо перенести на управляемые формы.
и тут я в стопоре...
ОткрытьФорму() - ругается не дает открыть на сервере...
Как это реализовать?
Ответ: () Дык сказано же уже, что переучиваться надо.
Вопрос: Зависание при попытке открыть лист Excel-объекта.

Здравствуйте. Имеется следующий код:

Попытка
  Excel = Новый COMОбъект("Excel.Application");
Исключение
  Сообщить("Эксель не открылся");
  Возврат;
КонецПопытки;
 
WrkBook = Excel.Workbooks.Open(Объект.ПутьКФайлу);
НомерЛиста = Объект.НомерСтраницы;
.......
.......
.......
WrkBook.Close(Ложь);

На строке "WrkBook = Excel.Workbooks.Open..." 1с намертво зависает, никаких ошибок не выводит.

Если в отладчике посмотреть значение "Excel", то выводит следующее:

Т.е. возникает исключительная ситуация 0x800a03ec.

1С работает в клиент-серверном режиме. Пробовал ту же обработку на другой файловой базе - все кошерно отрабатывает.

Подскажите пожалуйста, в чем может быть проблема.:)
Спасибо.
Ответ: В общем так и не понял в чем была беда, но после перезагрузки сервера все работает.:D
Путь к файлу норм, эксель на сервере установлен.

По поводу сложностей с экселем на сервере - читал разве-что что должны быть расшарены папки "C:\Windows\SysWOW64\config\systemprofile\Desktop" и "C:\Windows\System32\config\systemprofile\Desktop".

В любом случае пока все работает, всем спасибо.
Вопрос: Передача с клиента на сервер пакет данных

Всем привет!

Подскажите пожалуйста,
есть файл-ексель с данными,
база работает в режиме клиент-сервер.

Хочу передать данные с экселя в табличную часть документа.

Так как на сервере не установлен эксель, создаю подключение на клиенте.
В клиенте циклом обхожу строки и изменяю тч документа.
работает это не очень быстро

Вопрос, как можно с клиента, считать данные в список значений и передать это на сервер.
Чтобы потом в документе при одном проходе изменить/создать табличную часть?

Заранее спасибо за советы!
Ответ: Trit5,
Кликните здесь для просмотра всего текста
Если не работает отладка в 1С 8.2 и 8.3

Остановить службу 1C:Enterprise 8.2 Server Agent
Запустить редактор системного реестра. Что бы открыть редактор реестра необходимо нажать Windows + R (или Пуск-Выполнить) ввести в командную строку regedit.
Найти ветку реестра [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\1C:Enterprise 8.2 Server Agent\]
Находим свойство «ImagePath»= , добавляем в строку «-debug».
Записываем и запускаем службу.
Пример:
До включения:
«»C:\Program Files (x86)\1cv82\8.2.18.109\bin\ragent.exe» -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d «C:\Program Files (x86)\1cv82\srvinfo»»
После включения отладки:
«»C:\Program Files (x86)\1cv82\8.2.18.109\bin\ragent.exe» -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d «C:\Program Files (x86)\1cv82\srvinfo» -debug»
Вопрос: Открыть, отредактировать и сохранить файл Excel

Как читать файл excel понятно, как создавать и записывать тоже, но как открыть существующий, внести некоторые изменения в определенную ячейку, сохранить и закрыть не могу понять.
Если я делаю так, то

    Попытка
        Эксель = Новый COMОбъект("Excel.Application"); 
        Эксель.WorkBooks.Open(ПутьКФайлу); 
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    Книга = Эксель.Workbooks.Add();
    Лист  = Книга.WorkSheets(1);
    
    Версия = Лев(Эксель.Version,Найти(Эксель.Version,".")-1);
    Если Версия = "8" Тогда
         КоличествоСтрокВФайле = Лист.Cells.CurrentRegion.Rows.Count;     
    Иначе
        КоличествоСтрокВФайле = Лист.Cells(1, 1).SpecialCells(11).Row;
    Конецесли;
    
    Для НомерСтроки=1 По КоличествоСтрокВФайле Цикл
        Лист.Cells(НомерСтроки, 2).Value   = 1;
    КонецЦикла;
    
    Попытка
        //Эксель.SaveAs(ПутьКФайлу);   // вот тут пытаюсь сохранять, но выбивает исключение

        Эксель.ActiveWorkBook.SaveAs(ПутьКФайлу);// тоже исключение

    Исключение
        Сообщить(ОписаниеОшибки() + " Файл не сохранен!");
    КонецПопытки;
Ответ: Странно как то, сначала ты открываешь файл, после чего добавляешь новую книгу. Книга это и есть файл. Т.е. у тебя старый файл не измениться а все твои изменения будут в новом пустом файле. Нужно
Книга=Эксель.WorkBooks.Open(ПутьКФайлу);
...


а в конце Книга.Save();
Вопрос: УТ 11.3 Загрузка данных из Excel на стороне сервера

Добрый день!
Хочу с помощью внешней обработки под УТ 11.3 считывать данных из Excel на стороне сервера построчно, и обрабатывать. Но работа с эксель вроде как возможно только на клиенте.
Как решается такая задача? Очень хочу использовать именно xls, а не csv
Ответ:
С экселем вроде разобрался - он читается на сервере. Просто...пришлось перераспределить написанный код по процедурам сильно их переосмыслив....
Вопрос: Работа с Эксель. Ошибка при вызове метода контекста add()

Код процедуры

Код:
// СохранитьМногостраничныйФайл() Создаёт XLSX-файл с несколькими листами
//
// Параметры
//      ИмяФайла            - Имя выходного файла
//      СоответствиеЛистов  -
//                          (1) Соответствие:
//          Ключ            - Строка - Имя листа
//          Значение        - Табличный документ - Содержимое листа
//                          (2) Таблица значений с колонками Ключ и Значение.
//                              Может понадобиться, если требуется строгий порядок листов.
&НаКлиенте
Процедура СохранитьМногостраничныйФайл(ИмяФайла, СоответствиеЛистов) Экспорт
   
    Excel = Новый COMОбъект("Excel.Application");
    Excel.SheetsInNewWorkbook = 1;
    //Excel.Visible = Истина;
    Excel.Application.WorkBooks.Add();
       
    СводныйОтчет = Excel.ActiveWorkBook;
       
    Для каждого Лист Из СоответствиеЛистов Цикл
        ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");
        ТабДок = Лист.Значение;
        ТабДок.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.xlsx);
        Excel.Application.WorkBooks.Add(ИмяВременногоФайла);
        ВариантОтчета = Excel.ActiveWorkBook;
        ВариантОтчета.Sheets(1).Name = Лист.Ключ;
        ВариантОтчета.Sheets(1).Copy(, СводныйОтчет.Sheets(1));
        ВариантОтчета.Close(Ложь);
        Excel.ActiveWindow.DisplayGridlines = Ложь;
    КонецЦикла;
   
    СводныйОтчет.Sheets(1).Delete();
    СводныйОтчет.SaveAs(ИмяФайла);
    Excel.Application.Quit();
    Excel = Неопределено;

КонецПроцедуры
Падает на строке Excel.Application.WorkBooks.Add(ИмяВременногоФайла);

Скрин ошибки



Самое интересное что на тестовой базе когда я работаю на сервере и база находится на том же сервер то все ок. Код отрабатывает без ошибок. А когда сервер на котором я работаю и сервер на котором находятся база отличаются то я славливаю такую ошибку. Может и не в этом проблема но я не знаю в чем. Подскажите пожалуйста
Ответ:
Формируйте файл эксель полностью на сервере, с сервера уже передавайте файл в виде двоичных данных через временное хранилище на клиента и делайте запись двоичных данных в указанный путь на клиенте.
Вопрос: На Эксель = ПолучитьCOMОбъект(ИмяФайла); отладка завершается и дальше не идет.

Функция, которая возвращает ТЗ (считывая эксель);

На Эксель = ПолучитьCOMОбъект(ИмяФайла); отладка завершается и дальше не идет. Не могу понять  из-за чего.

Код функции:

Функция ПолучитьНужнуюТЗ (ИмяФайла);

    Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl"); 
    Скрипт.language = "javascript"; 
    
    ВремяНачала = Формат(Скрипт.eval("new Date().getTime()"),"ЧГ=0"); 
    Эксель = ПолучитьCOMОбъект(ИмяФайла); 
    ЛистЭксель = Эксель.WorkSheets(1); 
    ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row; 
    ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column; 
    
    Сообщить("Колонок: "+ Строка(ВсегоКолонок) + " Строк: "+ Строка(ВсегоСтрок)); 
    
    ТЗ = Новый ТаблицаЗначений; 
    Для Счетчик = 1 По ВсегоКолонок Цикл 
        ТЗ.Колонки.Добавить("Колонка"+Счетчик); 
    КонецЦикла; 
    
    Для Счетчик = 1 По ВсегоСтрок Цикл 
        НоваяСтрока = ТЗ.Добавить(); 
    КонецЦикла; 
    
    Область = ЛистЭксель.Range(ЛистЭксель.Cells(1,1), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок)); 
    Данные = Область.Value.Выгрузить(); 
    
    Для Счетчик = 0 По ВсегоКолонок-1 Цикл 
        ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик); 
    КонецЦикла; 
    ЛистЭксель = Неопределено; 
    Эксель = Неопределено; 
    
    ВремяОкончания = Формат(Скрипт.eval("new Date().getTime()"),"ЧГ=0"); 
    //ОчиститьСообщения(); 

    Сообщить("Выполнение скрипта заняло: " + Строка(ВремяОкончания - ВремяНачала) + " мсек. " + Символы.ПС + 
    "Обработано строк: " + Строка(ВсегоКолонок) + " колонок: " + Строка(ВсегоСтрок) + " итого ячеек; " + Строка(ВсегоКолонок * ВсегоСтрок)); 
    
    Возврат ТЗ;
    
КонецФункции
Ответ:
Эксель.Visible = 1;    

вот еще
Вопрос: Внешняя обработка ComОбъект Excel 1C сервер, ошибка или передать функцию...

Всем привет! Столкнулся с такой траблой, был файловый режим работы с базой данных, моя обработка с получением данных из ексель работала хорошо. База выросла, решили перейти на сервер 1С (WinServ2003, MSSQL 5) и тут стала появляться ошибка на строку Excel = Новый COMОбъект("Excel.Application");
Ведь эта функция записана НаСервере, почитал кучу форумов, попробовал потыкать DCOM и права пользователей и прочее, запарился. И тут пришла идея - а если эту функцию вызвать НаКлиенте а потом передать переменную в функцию НаСервер и после обработки вернуть ее обратно клиенту? Кто-нить заморачивался так?

что-то типа
Код:
&НаКлиенте
Процедура Команда1(Команда)
    // Вставить содержимое обработчика.
    Excel = Новый COMОбъект("Excel.Application");
    Excel = ОбработатьФайл(Excel);    
   
КонецПроцедуры

&НаСервере
Функция ОбработатьФайл(Excel1)    

 Excel1.WorkBooks.Open(ИмяФайла);

 и прочая обработка ведется тут, а потом все это клинту возвратить

Возврат Excel1;   
КонецФункции
Ответ:
Ну само собой сначала поместил на клиенте. Где-то когда сюда закидывал или пропустил этот кусок, или вырезал нечаяно.
Вопрос: Получить форму "На Сервере"

Есть следующая проблема нужно передать форму на сервер. Так понимаю нужно получить на клиенте структуру и передавать ее на сервер. Помогите подредактировать следующий код
Код 1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
&НаКлиенте
Процедура Уведомить(Команда)
    МассивВыделенныхСтрок = Элементы.Уведомления.ВыделенныеСтроки;
    СоздатьДокументУведомление(МассивВыделенныхСтрок);
 КонецПроцедуры
 
&НаСервере
Процедура СоздатьДокументУведомление(ПациентыМассивИдентификаторов, НеУведомлять = Ложь)    
    
    НовыйДокумент = Документы.ст_Уведомление.СоздатьДокумент();
    ФормаДокумента = НовыйДокумент.ПолучитьФорму("Документ.ст_Уведомление.ФормаОбъекта");
    НовыйДокумент = ФормаДокумента.Объект;
    
    НовыйДокумент.НеУведомлять = НеУведомлять;
    Если НеУведомлять Тогда
        НовыйДокумент.Текст = "Не уведомлять никогда";
    Иначе
        НовыйДокумент.Текст = "Уведомлен (ы)";
    КонецЕсли;
    
    НовыйДокумент.Дата = НачалоДня(ТекущаяДата());
    
    Для Каждого ИдентификаторСтроки Из ПациентыМассивИдентификаторов Цикл
        НоваяСтрока = НовыйДокумент.Пациенты.Добавить();
        НоваяСтрока.Пациент = Уведомления.НайтиПоИдентификатору(ИдентификаторСтроки).Пациент;
    КонецЦикла;
    
    ФормаДокумента.Открыть();
КонецПроцедуры
Ответ: Сделал так и заработало :
Код 1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
&НаКлиенте
Процедура Уведомить(Команда)
    
    МассивВыделенныхСтрок = Элементы.Уведомления.ВыделенныеСтроки;
    СоздатьДокументУведомление(МассивВыделенныхСтрок);
 
  КонецПроцедуры
 
&НаКлиенте
Процедура СоздатьДокументУведомление(ПациентыМассивИдентификаторов, НеУведомлять = Ложь)    
    
    ФормаДокумента = ПолучитьФорму("Документ.ст_Уведомление.ФормаОбъекта");
    НовыйДокумент = ФормаДокумента.Объект;
    
    НовыйДокумент.НеУведомлять = НеУведомлять;
    Если НеУведомлять Тогда
        НовыйДокумент.Текст = "Ніколи не здійснювати нагадування";
    Иначе
        НовыйДокумент.Текст = "Повідомлений (а)";
    КонецЕсли;
    
    НовыйДокумент.Дата = НачалоДня(ТекущаяДата());
    
    Для Каждого ИдентификаторСтроки Из ПациентыМассивИдентификаторов Цикл
        НоваяСтрока = НовыйДокумент.Пациенты.Добавить();
        НоваяСтрока.Пациент = Уведомления.НайтиПоИдентификатору(ИдентификаторСтроки).Пациент;
    КонецЦикла;
    
    ФормаДокумента.Открыть();
    
    
КонецПроцедуры