Ошибка при вызове метода контекста run

   ШримпРолл

06.09.16 — 16:33

Добрый день господа и дамы.

Прошу помочь в решении сей проблемы. Есть такой код:

Попытка

wshshell=Новый COMОбъект(«WScript.shell»);

wshshell.run(«telnet 192.168.1.2 3312»,2,0);

Сообщить(«Команду выполнил»);

Исключение

Сообщить(«Не удалось по причине: «+ОписаниеОшибки());

КонецПопытки;

Вылетает с ошибкой : Ошибка при вызове метода контекста (Run): Произошла исключительная ситуация (0x80070002)

Если в место telnet ввожу ping и убираю порт или просто ввожу notepad, например, то все работает. В чем может быть дело?

   orefkov

1 — 06.09.16 — 16:35

errorlookup выдает что 0x80070002 — «Не удается найти указанный файл».

   Метранпаж

2 — 06.09.16 — 16:36

А просто из командной строки работает?

А не вин7 и выше утебя ли?

   orefkov

3 — 06.09.16 — 16:37

Возможно, телнета нет. Возможно, надо указать полный путь. Возможно, не хватает прав на запуск телнета. Возможно, надо запускать как

cmd.exe /c telnet ….

или

runas

   sitex

4 — 06.09.16 — 16:37

(0) Возможно клиентская часть telnet не установлена.

   NorthWind

5 — 06.09.16 — 16:38

(0) телнетика по умолчанию в виндах нет, ставить надо

   ШримпРолл

6 — 06.09.16 — 16:46

Винда -Windows Server2012

Телнета не было, но подключил. Из командной строки работает. (3) — Сейчас проверю.

   ШримпРолл

7 — 06.09.16 — 16:54

Весьма странно.

wshshell.run(«cmd.exe /c telnet 192.168.1.2 3312»,2,0);

Срабатывает, но ничего не происходит. То -есть сообщение «Команду выполнил» есть, а окна открытого с телнетом нет.

   orefkov

8 — 06.09.16 — 17:00

ну, cmd стартует, о чем shell и говорит. А вот запустить телнет cmd не может. Права проверь. Если ты командную строку запускаешь через win+R, она запускается под админ-правами, потому и может телнет запустить. А 1С не может.

   NorthWind

9 — 06.09.16 — 17:01

(7) там была такая фишка, что wshell.run консольные приложения прятать умеет. Какой-то ключ у команды за это отвечает, могу даже посмотреть какой

   Метранпаж

10 — 06.09.16 — 17:03

(8) » Если ты командную строку запускаешь через win+R, она запускается под админ-правами»

С чего бы?

   orefkov

11 — 06.09.16 — 17:07

(10)

Я нажимаю Win+R и там русским языком написано:

«Это задание будет выполнено с правами администратора».

   NorthWind

12 — 06.09.16 — 17:07

Set Cmd = CreateObject(«WScript.Shell»)

Cmd.Run «telnet.exe», 1, True    

у меня вот так простартовывает, открывает окно. Win10.

   orefkov

13 — 06.09.16 — 17:07

+(11)

не «выполнено», а «создано», извиняюсь.

   Метранпаж

14 — 06.09.16 — 17:08

(11) У меня вин7 — и такой надписи нет

   ШримпРолл

15 — 06.09.16 — 17:08

(9) Я действительно использую этот ключ. Но команду пинг он у меня скрывает просто свернув. А тут ничего нет. Хотя сейчас проверю, выключив вообще этот ключ.

Строку я реально через win+R открываю.

   NorthWind

16 — 06.09.16 — 17:09

(15) -> (12). Только что проверил.

   ШримпРолл

17 — 06.09.16 — 17:13

У меня (12) не стартует(

Все та же ошибка.

Пойду права смотреть.

   orefkov

18 — 06.09.16 — 17:14

(14)

Всё может быть…

   Torquader

19 — 06.09.16 — 18:15

TelNet где лежит ?

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

Не забываем, что telnet в Windows после Xp ставится как дополнительная программа.

   ШримпРолл

20 — 06.09.16 — 19:01

Telnet лежал на диске С в папке system32. И это был еще один подводный камень.

Для запуска телнета помимо установки прав, пришлось перенести все его файлы в доступную папку. т.к. system32 командная строка из 1С (без прав) не видела.

Всем огромное спасибо!

С вашей помощью все получилось.

   NorthWind

21 — 07.09.16 — 07:48

(20) в 2012 все настолько круто с правами, что даже нельзя запускать утилиты командной строки, находящиеся по PATH?

   NorthWind

22 — 07.09.16 — 07:49

вроде даже в никсах под обычным пользователем телнетом по умолчанию можно пользоваться спокойно…

   ШримпРолл

23 — 07.09.16 — 18:10

(21) Видимо настолько.

А я пришел к новому тупику.

Я запускал telnet и командами типа:

wshshell.SendKeys(«сообщенька»);

засылал различные сообщеньки. Но обнаружил, что при смене раскладки клавиатуры ничего не работает. То-есть SendKeys  эмулирует нажатие на кнопку и чувствительна к раскладке.

Как это можно обойти? Знает кто-нибудь?

   ШримпРолл

24 — 07.09.16 — 18:15

Реально вообще адекватно управлять телнетиной из 1С?

   ШримпРолл

25 — 07.09.16 — 18:21

Или подскажите, как можно передать на определенный порт сервера простые строки?

Например, отправить на 192.168.1.2 3312 строку «привет» ?

   orefkov

26 — 07.09.16 — 18:56

ничего, кроме как создать временный файл с расширением cmd и с содержимым

echo привет|telnet args

и запуска этого файла — мне в голову не приходит.

Почитай справку к телнету, может он умеет из файла текст брать?

   NorthWind

27 — 07.09.16 — 19:04

(25) ВК какую-нибудь присмотреть для сокетов. Или свою написать. Как я понял, с произвольным сетевым взаимодействием (кроме почты и web) продукты 1С пока не особенно дружат.

   Torquader

28 — 07.09.16 — 20:08

(25) Телнет — консольный. Его через SendKey управлять сложно.

Можно запускать через потоки и давать команды.

   ШримпРолл

29 — 07.09.16 — 20:15

Большое спасибо за ваши предложенные варианты. Буду пробовать все. О результате отпишусь.

   ШримпРолл

30 — 07.09.16 — 20:15

(26) Где-то читал, что умеет. Проверю на практике.

   Torquader

31 — 07.09.16 — 20:36

   orefkov

32 — 08.09.16 — 12:32

Есть еще вариант кстати запускать не через .Run, а через Exec. Тогда возвращается объект, в котором есть StdIn StdOut StdErr потоки, и в StdIn поток делать Write.

   orefkov

33 — 08.09.16 — 12:35

+(32)

Вот так я запускал одну консольную прогу, которой надо было потом ввести пароль и прочитать вывод:

var run = ‘»‘ + myFolder + ‘cntlmcntlm.exe» -c «‘ + pathToCntlmIni + ‘» -I -M ‘ + remoteUrl + ‘ -u «‘ + proxyUser + ‘» ‘ + proxyAddress;

var exec = wsh.Exec(run);

exec.StdIn.Write(proxyPass + ‘n’);

var out = exec.StdOut;

var text = »;

while(!out.atEndOfStream)

    text += out.ReadAll();

   Torquader

34 — 08.09.16 — 21:15

(33) Ты (31) смотрел — там именно это и описано.

Хотя, согласен, некоторым нужно разжевать и проглотить.

   orefkov

35 — 08.09.16 — 21:20

(34)

Ясно.

ЗЫ: забавно, в (33) движок форума скушал один слэш в ‘cntlmcntlm.exe» — там два слэша, а не один.

   Torquader

36 — 08.09.16 — 21:53

(35) Как говорится, приятного ему аппетита — и пусть его создателю будет стыдно.

  

ШримпРолл

37 — 09.09.16 — 11:25

Torquader и orefkov : Супер! Большое спасибо! Таким методом реально можно управлять консольными программами. Класс) Задача решилась.

Спасибо)

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.

Already on GitHub?
Sign in
to your account

Closed

Templlg opened this issue

May 13, 2023

· 2 comments

Labels

question

Further information is requested

Comments

@Templlg

Надеюсь в тот раздел )
В серверной и файловой базе не запускается клиент тестирования.
К серверу подключаюсь по RDP
Галочка у пользователя «Защита от опасных действий» снята

Укажите:

  1. Версия Vanessa Automation — 1.2.040.15
  2. Версия платформы — 1С:Предприятие 8.3 (8.3.22.1750)
  3. Режим совместимости базы, где запускается Vanessa Automation — Версия 8.3.17
  4. Операционная система — windows server 2016

Конфигурация на сервере 1С:ERP Управление предприятием 2 (2.5.10.93) тонкий клиент
Конфигурация файловая база IRP (2021.43.2644) тонкий клиент


> Прикладывайте файлы скриншотов
![2023-05-13_19-52-00](https://github.com/Pr-Mex/vanessa-automation/assets/119128603/a683ea9a-21c0-41c2-9927-f2187a8e2add)

Сообщение об ошибке  13.05.2023 17:47:56 {ВнешняяОбработка.VanessaAutomation.Форма.ОбщегоНазначенияVA.Форма(642)}: Ошибка при вызове метода контекста (Run): Произошла исключительная ситуация (0xffffffff)

@Templlg
Templlg

changed the title
Не запускается клиент тестирования. «Ошибка при вызове метода контекста (Run)

Не запускается клиент тестирования. «Ошибка при вызове метода контекста (Run)»

May 13, 2023

@Pr-Mex

@Templlg
Если запустить 1С под правами администратора — проблема останется?

@Templlg

@Templlg Если запустить 1С под правами администратора — проблема останется?

Добавили права, все запустилось. Спасибо

Labels

question

Further information is requested

2 participants

@Pr-Mex

@Templlg

ОС: Windows x86 Microsoft Windows 2003 version 5.2 Service Pack 2 (Build 3790)
Платформа: 8.3.8.1964
Конфигурация: ()
Режим БД: клиент-серверный
Приложение: Обычное приложение 32б
Режим совместимости: Версия8_2_16
Инструменты разработчика: Портативные 4.08p

Попал на такую ошибку, при выполнении запроса:
{ВнешняяОбработка.ирПлатформа.МодульОбъекта(6117)}: Ошибка при вызове метода контекста (Run)
WshShell.Run(СтрокаЗапуска, 0, ОжидатьЗавершения);
по причине:
Произошла исключительная ситуация (0x80070002)

Ситуация вот в чем. Работаю удаленно на клиентском сервере — права ессно порезаны. Из-за этого сначала не мог пользоваться отложенной отладкой, т.к. ИР у меня в сессии клиента, а суперпользователь 1С в него писать не может. Потом осенило — расшарил папку с ир, стал писать путь к ИР для отложенной отладки через «//». При этом дал на папку все права для everyone. Получилось. Собрать данные для запроса получилось, а вот выполнить его — нет.. Несмотря на то, что контекст отладки был получен через сетевой путь, сам запрос почему-то открывается по локальному адресу. Т.е. в заголовке консоли запросов я вижу не «//..<Путь к папке ИР>», а «C:Documents and settings..<локальный путь к папке ИР>».

Добавлено (21.05.2017, 11:39)
———————————————
Сохранил запрос как внешний, открываю через сетевой путь, он мне опять такую же ошибку. Зашел в отладчик — а там в рун все-равно с рабочего стола запускает…

Добавлено (21.05.2017, 11:46)
———————————————
Судя по всему ИР при запуске использует метод «ИспользуемоеИмяФайла», от которого и строит все остальные пути.. Можно ли сделать настройку для переопределения этого параметра?

ropsa

0 / 0 / 0

Регистрация: 17.04.2015

Сообщений: 121

1

1C 8.x

Оповещения активных пользователей

28.06.2016, 11:07. Показов 6956. Ответов 13

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте! Необходимо оповещать пользователей, например о прекращении работы программы. Было найдено решение:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Сообщение="";
    Если ВвестиСтроку(Сообщение,"Сообщение:") Тогда  
        Попытка
            Shell=Новый COMОбъект("WScript.Shell");
            Если ИмяКомпьютера<>"" Тогда
                Shell.Run("net send "+ИмяКомпьютера+" "+Сообщение,0,0);
            Иначе  
                Отправленные=Новый Массив;
                ЭтотКомпьютер=ПолучитьИмяКомпьютера();
                Для Каждого Стр Из СписокПользователей Цикл
                    Если (Стр.ИмяКомпьютера<>"") И (Стр.ИмяКомпьютера<>ЭтотКомпьютер) И (Отправленные.Найти(Стр.ИмяКомпьютера)=Неопределено) Тогда
                        Shell.Run("net send "+Стр.ИмяКомпьютера+" "+Сообщение,0,0);
                        Отправленные.Добавить(Стр.ИмяКомпьютера);
                    КонецЕсли;
                КонецЦикла;
            КонецЕсли;
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
    КонецЕсли;

Но как выяснилось, «net send» не работает для Windows 7. Подскажите, как можно исправить, чтобы работало на Windows 7 или возможно есть какие-нибудь другие способы оповещения. Заранее спасибо!!



0



Модератор

Эксперт 1С

3722 / 2917 / 574

Регистрация: 10.03.2011

Сообщений: 11,489

Записей в блоге: 1

28.06.2016, 12:48

2



0



0 / 0 / 0

Регистрация: 17.04.2015

Сообщений: 121

28.06.2016, 14:00

 [ТС]

3

попробовала заменить «net send » на «msg » но ничего в 1с не получилось. Если пробовать отправку сообщений через командную строку, то отправляется только самой себе



0



Модератор

Эксперт 1С

3722 / 2917 / 574

Регистрация: 10.03.2011

Сообщений: 11,489

Записей в блоге: 1

28.06.2016, 15:36

4

ropsa, может доступа к сеансам нет? Ошибка то какая?

Добавлено через 2 минуты
ropsa, Не отсылаются сообщения командой msg



0



206 / 180 / 31

Регистрация: 24.10.2011

Сообщений: 739

28.06.2016, 15:39

5

msg работает исключительно с правами админа.



0



0 / 0 / 0

Регистрация: 17.04.2015

Сообщений: 121

28.06.2016, 16:03

 [ТС]

6

Ошибка такая:
Ошибка при вызове метода контекста (Run): Произошла исключительная ситуация (0x80070002)



0



Модератор

Эксперт 1С

3722 / 2917 / 574

Регистрация: 10.03.2011

Сообщений: 11,489

Записей в блоге: 1

28.06.2016, 17:43

7

Цитата
Сообщение от ropsa
Посмотреть сообщение

Ошибка при вызове метода контекста (Run): Произошла исключительная ситуация (0x80070002)

Команда для run «не съедобная»



0



0 / 0 / 0

Регистрация: 17.04.2015

Сообщений: 121

29.06.2016, 08:28

 [ТС]

8

Это как-то можно исправить?



0



Модератор

Эксперт 1С

3722 / 2917 / 574

Регистрация: 10.03.2011

Сообщений: 11,489

Записей в блоге: 1

29.06.2016, 20:56

9

Цитата
Сообщение от ropsa
Посмотреть сообщение

Это как-то можно исправить?

да проверить работоспособность команды вне 1С



0



0 / 0 / 0

Регистрация: 17.04.2015

Сообщений: 121

30.06.2016, 09:27

 [ТС]

10

отправляется только самой себе, но из 1с даже себе не могу отправить



0



Dethmontt

Модератор

Эксперт 1С

3722 / 2917 / 574

Регистрация: 10.03.2011

Сообщений: 11,489

Записей в блоге: 1

30.06.2016, 13:41

11

ropsa, я не знаю что вы там проверяете, все отлично работает

1C
1
2
3
4
5
6
7
8
    Сообщение= "Привет!";
    Команда = "msg /server:"+ИмяКомпьютера()+" * """+Сообщение+"""";
    Попытка
        Shell=Новый COMОбъект("WScript.Shell");
        Shell.Run(Команда,0,0);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;

Добавлено через 1 минуту

Цитата
Сообщение от ropsa
Посмотреть сообщение

отправляется только самой себе

Запускаться msg должен с правами АДМИНА, только АДМИН может отправлять ВСЕМ

тут все написано, читайте внимательнее

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

ropsa, cmd msg

Не отсылаются сообщения командой msg



2



0 / 0 / 0

Регистрация: 17.04.2015

Сообщений: 121

30.06.2016, 13:49

 [ТС]

12

Даже взяла и скопировала ваш код, но у меня все та же ошибка…

Добавлено через 52 секунды
Да вроде посмотрела, что у меня права админа, но еще поточнее посмотрю, может и правда все дело в этом



0



Модератор

Эксперт 1С

3722 / 2917 / 574

Регистрация: 10.03.2011

Сообщений: 11,489

Записей в блоге: 1

30.06.2016, 13:51

13

ropsa, замените в команде звездочку * на имя сеанса (имя пользователя)



2



0 / 0 / 0

Регистрация: 17.04.2015

Сообщений: 121

30.06.2016, 13:53

 [ТС]

14

Спасибо большое!!!



0



Доброго дня. Пытаюсь запустить стандартный просмотрщик Windows b из 1с код такой : WshShell = Новый COMОбъект(«WScript.Shell»);     WshShell.Run («»»C:WINDOWSsystem32
undll32.exe C:WINDOWSSystem32shimgvw.dll,ImageView_Fullscreen C:ФоноваяПечатьДля АХО 2.jpg»»»,0) — выдает ошибка при вызове контекста RUN  : Произошла исключительная ситуация (0x80070002) Причем командная строка из выполнить отрабатывает !!! что может быть подскажите…

неупотребление команды системы может быть. да точно

нажми ктрл+ф1 и отчётливо произнеси в него «команда». дальше по обстоятельствам

Не удается найти указанный файл. (0x80070002)

6) вроде нет : тестирую пока в файловой

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Вот тут чувак еще один способ предложил: «В итоге я понял, что нормальной реализации с помощью языка 1С нету, так как в большинстве случаев используется подключение Wscript.Wshell, и видимо не просто так. Но использовать первый вариант я совершенно не хотел, из за записи файла на диск.

У меня был небольшой опыт работы c VBScript, поэтому я знал, что в скрипт можно переадавать параметры. Этим я и воспользовался. Был написан простой скрипт ожидания, который принимал один параметр:

wscript.sleep wscript.arguments(0)

Сделать это очень просто: открываем блокнот, вставляем строчку , которая написана выше, жмем «Сохранить как…», и сохраням как sleep.vbs.

Этот файл необходимо положить на сервер(для вызова на сервере) и на клиент(для вызова на клиенте), в моём случае(сервер терминалов), я положил файл на оба сервера(терминальный и на сервер 1С).

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

Вызов происходит в две строчки кода:

Я положил процедуру в общий модуль на клиенте, и в общий модуль на сервере, так же в параметр задал ПутьХраненияФайла. Вот таким образом с помощью Wscript, без постоянного создания файлов скрипта можно реализовать паузу в работе кода с минимальным значением ~0,001 секунда.

Процедура ОбработкаОжидания(Секунда)

scr = Новый COMОбъект("WScript.Shell");

scr.Run("Wscript.exe ""C:tempsleep.vbs"" "+секунда*1000,0,1);

КонецПроцедуры[/pre]

 

i77

Пользователь

Сообщений: 13
Регистрация: 21.05.2016

Добрый день. Опять к Вам на поклон.
Такое дело… Из 1С я открываю Эксель-файл (как положено). И в этом файле запускаю сперва один макрос, затем второй. И начиная с определенных строк макроса №2, в 1С появляется сообщение об ошибке. Если закомментировать эти строки, сообщения об ошибке НЕ возникает, но это строки нужные и в рабочем файле они должны быть раскомментированы.
Причем, когда я запускаю этот макрос НЕ из 1С, а как обычно, открыв этот файл в Экселе, то все нормально отрабатывается, как и задумано. Эксель при этом ни на что не жалуется. Да и когда 1С жалуется на ошибку, Эксель—ни в одном глазу. Вот.

Сообщение 1С об ошибке такое:
  {Форма.Форма.Форма(116)}: Ошибка при вызове метода контекста (Run): Произошла исключительная ситуация (0x800a9c68)

Добрые люди, помогите, пожалуйста.
PS. В коде вложенного файла я отметил начало проблемных строк.

Изменено: i7727.05.2016 13:14:53

 

kuklp

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

#2

27.05.2016 14:28:15

А так?

Я сам — дурнее всякого примера! …

 

Doober

Пользователь

Сообщений: 2231
Регистрация: 09.04.2013

Скорее всего потеря связи 1с с excel.
Возможно книга сохраняется долго.
В винде сделано так,если сом объект не отвечает в течении минуты-получите ошибку.
Если результат приемлем, обработайте ошибку и все.

 

i77

Пользователь

Сообщений: 13
Регистрация: 21.05.2016

kuklp

,

Doober

, спасибо, что отозвались.
Ре

kuklp

. Не помогает. Все по прежнему.
Ре

Doober

. Книга маленькая. Вся работа в ней, вместе с сохранением занимает около 2-3 секунд.

Может ещё есть варианты?

 

Влад

Пользователь

Сообщений: 1189
Регистрация: 24.12.2012

Для 1С вот эта запись: Sheets(«Ф_Transit»).[L10].Value = NewFileName ни о чем не говорит. С точки зрения 1С «[L10]» — это непонятное свойство/метод, а для экселя — неявный вызов команды Evaluate.

 

i77

Пользователь

Сообщений: 13
Регистрация: 21.05.2016

#6

27.05.2016 16:23:36

Ре

Влад

. Я, к сожалению, не понял смысла Ваших слов, потому что аматор.
Хорошо, а как помочь? Попробовал  такое—

Код
Sheets("Ф_Transit").Range("L10").Value = NewFileName

Та же ошибка.

 

i77

Пользователь

Сообщений: 13
Регистрация: 21.05.2016

Я закомментировал только эту строчку. Появилось такое сообщение, как во вложении.
Ни одна из причин, указанных в нем НЕ подходят.

Прикрепленные файлы

  • Ошибка.png (7.52 КБ)

Изменено: i7727.05.2016 16:39:29

 

Влад

Пользователь

Сообщений: 1189
Регистрация: 24.12.2012

Как вариант: «xlExcel8» — это константа экселя, 1С про нее ничего не знает + попробуйте записать «Контрагент = Sheets(«Ф_Transit»).Range(«B1″).Value». И лучше использовать «ActiveWorkbook.Sheets» вместо «Sheets».

Изменено: Влад27.05.2016 16:47:27

 

i77

Пользователь

Сообщений: 13
Регистрация: 21.05.2016

#9

27.05.2016 16:57:48

Если закомментировать вот это, то сообщения об ошибке НЕ возникает.

Код
'    ActiveWorkbook.SaveAs Filename:=NewFileName _
'        , FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
'        ReadOnlyRecommended:=False, CreateBackup:=False
'    ActiveWorkbook.Close SaveChanges:=False 'закрытие сделанного Эксель-варианта Заказа.

(А «ActiveWorkbook.Sheets«—ничего не меняется.)
Как же иначе сохранить книгу?

 

Влад

Пользователь

Сообщений: 1189
Регистрация: 24.12.2012

#10

27.05.2016 17:04:25

Попробуйте просто

Код
ActiveWorkbook.SaveAs NewFileName
 

i77

Пользователь

Сообщений: 13
Регистрация: 21.05.2016

 

Doober

Пользователь

Сообщений: 2231
Регистрация: 09.04.2013

#12

27.05.2016 18:18:49

Цитата
i77 написал: в 1С появляется сообщение об ошибке.

Пришло время узнать как происходит открытие файлов и запуск макросов.
Если кодом,то код в студию.

 

i77

Пользователь

Сообщений: 13
Регистрация: 21.05.2016

#13

27.05.2016 18:58:34

Код из 1С:

Код
Процедура КнопкаВыполнитьНажатие(Кнопка)    
   Книга = "";

   Если ЗначениеЗаполнено(Регистратор) И ЗначениеЗаполнено(Поставщик) Тогда      
            Запрос = Новый Запрос ("ВЫБРАТЬ
                                   |   ЗаказПоставщикуТовары.Номенклатура,
                                   |   ЗаказПоставщикуТовары.Количество,
                                   |   НоменклатураКонтрагентов.НомерСтрокиЭксельПрайса,
                                   |   ЗаказПоставщикуТовары.Номенклатура.Код
                                   |ИЗ
                                   |   Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
                                   |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
                                   |      ПО ЗаказПоставщикуТовары.Номенклатура = НоменклатураКонтрагентов.Номенклатура
                                   |         И ЗаказПоставщикуТовары.Ссылка.Контрагент = НоменклатураКонтрагентов.Контрагент
                                   |ГДЕ
                                   |   ЗаказПоставщикуТовары.Ссылка = &Ссылка");
      Запрос.УстановитьПараметр("Ссылка",Регистратор);
      ТЗ = Запрос.Выполнить().Выгрузить();
      Для каждого ТекСтрока Из ТЗ Цикл
         Текст = "";
         Если ТекСтрока.НомерСтрокиЭксельПрайса = 0 Тогда
            Текст = Текст + ТекСтрока.Номенклатура + "..." + ТекСтрока.Номенклатура.Код + Символы.ПС 
         КонецЕсли;    
      КонецЦикла;    
      Если Текст <> "" Тогда
         Сообщить ("Формирование Эксель-Формы ОТМЕНЕНО, т.к. среди товаров в документе есть товары, для которых НЕ заполнено поле" + Символы.ПС + "''Номер СТРОКИ Эксель-прайса'' (в регистре сведений ''Номенклатура контрагентов'')." + Символы.ПС + "Либо НЕ верно был выбран поставщик в этой форме." + Символы.ПС + "Проблемные товары:" + Символы.ПС + Текст);
      Возврат;
   КонецЕсли;
   
    //Если для всех позиций есть НомерСтрокиЭксельПрайса, то формируем Заказ. 
   Попытка
      Контрагент = Регистратор.Контрагент;
      Дистрибьютор = Регистратор.Организация;
      АдресДоставки = "Склады";
      ДатаЗаказа = Формат(ТекущаяДата(), "ДЛФ=Д"); // 01.01.2005
      ДатаДоставкиЖелаемая = ДатаЗаказа;
      КонтактноеЛицоДляПолучения = Регистратор.Ответственный;
      Телефон = "(066) 777-77-77";
      НомерДока = Регистратор.Номер;
      
      //Сообщить (Организация);
      Попытка
         Эксель = Новый COMОбъект("Excel.Application"); // для v7 код будет: Эксель = СоздатьОбъект("Excel.Application");
      Исключение
         Эксель.Quit(); //закрыли приложение.
         Сообщить(ОписаниеОшибки());
         Возврат;
      КонецПопытки;
              
      ВыбратьШаблонЗаказа(Книга,Эксель);
      Эксель.Run("Очистить");
      Лист = Книга.WorkSheets("Ф_Transit");
      //////////////Лист.Cells.ClearContents();//очищаем весь лист (содержимое).
      //ЭксельЗначение  = ЭксельОбъект.Clean(ЭксельЛист.Cells(2,2).Value); //очищаем ячейку (содержимое).
      Лист.Cells(1, 2).Value = Строка(Контрагент);
      Лист.Cells(2, 2).Value = Строка(Дистрибьютор); // Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение;
      Лист.Cells(3, 2).Value = АдресДоставки;    
      Лист.Cells(4, 2).Value = Строка(ДатаЗаказа);    
      Лист.Cells(5, 2).Value = Строка(ДатаДоставкиЖелаемая); 
      Лист.Cells(6, 2).Value = Строка(КонтактноеЛицоДляПолучения); 
      Лист.Cells(7, 2).Value = Строка(Телефон);
      Лист.Cells(1, 3).Value = Строка(НомерДока);
      //Лист.Cells(8, 2).Value = Строка(Телефон);
      //Более 8-й строки нельзя (нет места). При необходимости писать в следующие колонки.
      
      i = 10; //заполняем, начиная с 10-й.
      Для Каждого Стр из ТЗ Цикл  
         Лист.Cells (i,2).Value = Строка(Стр.НомерСтрокиЭксельПрайса);
         Лист.Cells (i,3).Value = Число(Стр.Количество);
         i = i + 1;
      КонецЦикла;            

      Эксель.Visible = Истина;
      //'excel.run("testmacro.xls!SetColors",ActiveWorkbook,15,15395562);
      //Эксель.run("Вомонд_ШаблонЗаказаПоставщику_Форт.xlsb!Start",Книга,15,15395562);
      
      Эксель.Run("Start");// готовим файл-клон заказа. Если все Ок, то оба эксель-файла закрываем. 

      ФайлКлон = Книга.WorkSheets("Ф_Transit").Cells(10, 12).Value;
      Сообщить ("Эксель-вариант Заказа поставщику " + ФайлКлон + " создан.");      
      Эксель.Quit(); //закрыли приложение.
   Исключение
      Эксель.Quit(); //закрыли приложение.
      Сообщить(ОписаниеОшибки());
      Возврат;
   КонецПопытки;
Иначе
   Предупреждение("Заполните, пожалуйста, оба поля.");
   КонецЕсли
КонецПроцедуры

……..

Код
Процедура ВыбратьШаблонЗаказа(Книга,Эксель)
Если Поставщик = "ВОМОНД" Тогда
Книга = Эксель.WorkBooks.Open("C:1С_Форт_ШАБЛОНЫ_ЭкспортШаблоныПоставщиковВомонд_ШаблонЗаказаПоставщику_Форт.xlsb"); //ПолноеИмяФайла.
//Возврат
КонецЕсли;
КонецПроцедуры   

Изменено: i7727.05.2016 19:02:32

 

Doober

Пользователь

Сообщений: 2231
Регистрация: 09.04.2013

#14

27.05.2016 20:55:43

Цитата
Скорее всего потеря связи 1с с excel.

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

Скрытый текст

В 1С

Код
  Эксель = Новый COMОбъект("Excel.Application");
    Эксель.Visible = True;
//------------------------------
// много кода
//-------------------------------
    Эксель.Run ("Start");
    ФайлКлон = Книга.WorkSheets("Ф_Transit").Cells(10, 12).Value;
    Книга.Close (False);

Изменено: Doober27.05.2016 21:06:39

 

i77

Пользователь

Сообщений: 13
Регистрация: 21.05.2016

#15

27.05.2016 23:54:14

Doober

, я рад помощи. Спасибо большое за внимание.
Пока не могу попробовать код с Вашими правками. Жду пока раздуплится сервер.
Можно попросить Вас прокомментировать кое-что?
1) Ошибка была в том, что раз основная книга открывалась в 1С-ке, то и закрываться она должна в ней, а не в Экселе? Так?
2) А где в синтакс-помощнике «живет» «.Close» для Книги? Я поискал в функциях для работы с файлами и не нашел…
3) Насколько принципиально использовать именно Ваш кусок? Будет ли он поддерживать сохранение файла в другом экселевском формате?

Код
Set wb = ActiveSheet.Parent
    wb.SaveAs Filename:=NewFileName _
            , FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
              ReadOnlyRecommended:=False, CreateBackup:=False
    wb.Close SaveChanges:=False    'закрытие сделанного Эксель-варианта Заказа.
 

Doober

Пользователь

Сообщений: 2231
Регистрация: 09.04.2013

1.ДА.
Я ваш код забросил в ворд и  понял в чем дело.
2.Не совсем понял вопрос.
3.Я убрал закрытие книги с самого макроса книги и перенес в 1С.

 

i77

Пользователь

Сообщений: 13
Регистрация: 21.05.2016

#17

28.05.2016 01:25:39

Попробовал. Работает!!!
Спасибо.
По поводу «2.Не совсем понял вопрос.». Ну, я не нашел в 1С-ке такого метода или свойства. Потому спрашиваю. Теперь подозреваю, что 1С-ка просто использует «.Close», которое является «собственностью» Экселя.

Recommend Projects

  • React photo

    React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo

    Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo

    Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo

    TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo

    Django

    The Web framework for perfectionists with deadlines.

  • Laravel photo

    Laravel

    A PHP framework for web artisans

  • D3 photo

    D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Visualization

    Some thing interesting about visualization, use data art

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo

    Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo

    Microsoft

    Open source projects and samples from Microsoft.

  • Google photo

    Google

    Google ❤️ Open Source for everyone.

  • Alibaba photo

    Alibaba

    Alibaba Open Source for everyone

  • D3 photo

    D3

    Data-Driven Documents codes.

  • Tencent photo

    Tencent

    China tencent open source team.

Понравилась статья? Поделить с друзьями:

Не пропустите эти материалы по теме:

  • Яндекс еда ошибка привязки карты
  • Ошибка при вызове метода контекста rows
  • Ошибка при вызове метода контекста range
  • Ошибка при вызове метода контекста previewfile1c
  • Ошибка при вызове метода контекста open неизвестная ошибка

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии