Имя: Пароль:
1C
1C 7.7
v7: Вопросы про обновления и не только
,
0 o1o1
 
26.05.12
07:40
Здравствуйте!

Я уже давно программирую, но конкретно с 1С пришлось начать работать лишь недавно, вопросов, связанных с программированием у меня нет, но есть вопросы по логике работы "платформы", т.е. вопросы такие:
1. Если я создал свою "обработку", или, допустим, создал свою процедуру в глобальном модуле, или допустим, изменил одну из процедур в глобальном модуле — надо ли их специальным образом "переносить вручную" из одной версии в другую при установке официальных обновлений? Я не знаю, как этот процесс происходит, никогда этого не делал, читал про некие "слияния" конфигураций и всякие шаманства с бубнами при обновлениях "кастомных" конфигураций...
2. Если ответ на предыдущий вопрос — "да", то можно ли сделать этот процесс полностью прозрачным, чтобы не таскать из одной версии в другую весь добавленный функционал, а чтобы "платформа" переносила и его тоже?
3. Есть ли способ запускать 1с 7.7 из командной строки или без вмешательства пользователя с помощью, например, какого-нть планировщика, так, чтобы выполнять регулярно нужную мне процедуру и завершать выполнение программы?
4. Можно ли сделать то, что написано в предыдущем пункте так, чтобы это не "пропадало" после обновлений? (если этот вопрос актуален)
1 Мимохожий Однако
 
26.05.12
07:46
1.Да.
2.Помещай свой код не в глобальную процедуру, а в твой добавленный объект.
3.Запускать можно. Есть в документации. Нужную процедуру можно запускать, если в глобальной процедуре ПриНачалеРаботы() будет ссылка на неё.
4.Надо документировать свои настройки, ставить пароль и тогда вспомнишь при обновлении, внесешь изменения по оставленному плану.
2 o1o1
 
26.05.12
07:58
Ок, всё понятно, хотел только уточнить... Правильно ли я понял, что ответ на п. 4 — "нет"? То есть, сделать так, чтобы это запускалось и выполнялось без участия человека, но при этом не приходилось переносить дополнительный функционал из версии в версию руками — это на 7.7 сделать нельзя? Никаких hooks, ничего такого нет?
3 Мимохожий Однако
 
26.05.12
08:02
Переходи на 8-ку ))) Там можно. Однако при обновлении вписать одну строчку не представляем труда. Или использовать обработку reklama.ert из квартальной отчетности. Она зачастую вызывается при запуске программы. ИМХО, глубоко нырнул. Начни с простых шагов.
4 o1o1
 
26.05.12
08:05
Я не из познавательных побуждений — прикладную задачу поставили, вот, надо решить, как всегда "вчера" ) Саму процедуру нужную я написал, а вот автоматизация хромает ) Ладно, придётся поморочиться, видимо )
5 Мимохожий Однако
 
26.05.12
08:07
Если бы назвал конфигурацию, то народ что-нибудь мог подсказать. А так партизанство.
6 o1o1
 
26.05.12
08:14
Пардон, вроде типовая "Бухгалтерский учёт, редакция 4.5". От этого сильно зависит?
7 Мимохожий Однако
 
26.05.12
08:35
Например,
Добавь одну строку в процедуру ПриНачалеРаботыСистемы()
Если ....здесь условия запуска Тогда
ОткрытьФорму("Обработка",,КаталогМоихОбработок + "\МояВолшебнаяОбработка.ert");
ЗавершитьРаботуСистемы();
КонецЕсли;
....
При обновлении не забывай добавлять эту строчку в код и всё.
8 o1o1
 
26.05.12
09:33
Ых... Спасибо за ответ!

Жаль, что всё с расширяемостью так сурово... Дело в том, что не мне её обновлять, а админу, мне этой рутиной регулярно лень заниматься... И даже если я инструкцию напишу ему, как что делать, он все равно где-нибудь накосячит, это уже проходили... Неужели никак нельзя это без постоянного рукоприкладства решить?

А может быть можно как-то к ней извне подключаться регулярно и выполнять эту обработку? Ну то есть, запускать её каким-нибудь образом снаружи, не в начальной процедуре в 1с?
9 Мимохожий Однако
 
26.05.12
09:54
Скажи, что делает обработка. Может и 1С не нужна? Тому, кто обновляет - оставь инструкцию. Дальше - проблемы его и руководства. Однако странное положение - программирует в конторе один, а обновляет другой.
10 SnarkHunter
 
26.05.12
09:55
Что в этом странного?
11 Мимохожий Однако
 
26.05.12
09:58
(10)Ничего нет странного для приходящего программиста. Странно, когда в одной конторе два программиста обслуживают одну программу.
12 Мимохожий Однако
 
26.05.12
09:59
+(11)У семи нянек дитя без глазу.
13 BlackSeaCat
 
26.05.12
10:04
Зато у семи нянек - четырнадцать сисек!
14 o1o1
 
27.05.12
00:18
Ок, а можно ли создать инстанс v77.application и запустить мою обработку из VB или любым другим средством, т.е. написать внешний враппер на OLE/COM/хз ?

Быть может, это позволит не править конфигурацию вовсе?

Или, может, где-нибудь уже есть примеры как кто решал такую задачу?

Уж очень не хочется вносить такую зависимость в типовую конфигурацию, хотелось сделать какое-то "модульное" решение, которое не надо было бы таскать за собой в новые версии...
15 o1o1
 
27.05.12
00:24
P.S. обработка дёргает проводки по 51 счету и сливает их в CSV, т.е. это очень простая процедура. Сейчас она реализована на встроенном языке. Возможно, следует реализовать её на VB или "внешнем" по отношению к 1с языке...

Обработка нужна для передачи данных о проводках из 1с в параллельно существующую систему финпланирования, зачем так и почему не планировать в 1с — не спрашивайте )

Мне подойдёт любое решение, которое позволит мне получить извне 1с информацию о проводках в CSV (получить не изнутри с помощью пользовательского интерфейса, а программно извне, без участия пользователя).
16 maip1
 
27.05.12
02:12
можно скрипт написать, который можно поставить в расписание на запуск.
содержание для запуска 1с и в ней запуска своей обработки напр.:
Set v7 = CreateObject("V1CEnterprise.Application")
v7.Initialize(v7.RMTrade, "/d""ПутьКБазе""/nИмяПользователя /pПароль","NO_SPLASH_SHOW") 
v7.ExecuteBatch("ОткрытьФорму(""Отчет"",""ИмяПроцедурыНаИчполнение"",КаталогИБ()+""ExtForms\ИмяФайлаНаЗапуск.ert"")")Set v7 = Nothing
17 o1o1
 
27.05.12
03:41
maip1, спасибо за подсказку!
В итоге моя задача так и решается — путём написания VBScript, который запускается планировщиком из командной строки, создаёт инстанс объекта 1c 7.7 и запускает на нём внешнюю обработку, не придётся руками постоянно доправлять конфигурацию после обновлений.
Всем спасибо за ответы, надеюсь, кому-нибудь этот топик пригодится, сэкономит время...
18 o1o1
 
27.05.12
04:00
МимохожийОднако, offtopic, на самом деле в том, что один программирует, а обновляет другой, ничего странного нету.  Это и есть суть разделения на программистов и администраторов. Есть разные прикладные уровни в конце концов, то есть, программисты пишут то, чем пользуются администраторы и пользователи. Иначе были бы сплошные админопрограмюзеры "всё-в-одном".
В данном случае принцип "кто девушку обедает, тот её и танцует" не совсем уместен, наверное. Есть разделение труда, разные уровни компетенций ну и так далее... Всё это моё личное мнение, не претендую ни на что )
19 Sedoy
 
27.05.12
06:43
(18) Это сразу бы, в свое время, лишило кучу 1с-ников по 77 постоянного гарантированного заработка...
20 ЧеловекДуши
 
27.05.12
08:13
(18)Все нормально будет, для админа, он даже сверять написание не будет  :)
По сути, если я правильно вник в свои опасения, то какое обнову ты для конфы (БД) подготовишь, так все и обновится :)

Т.е. может ты и не будешь сам обновлять БД, но по сути подготовить МД файл для обновления обязан :)
21 ЧеловекДуши
 
27.05.12
08:14
+(20)>>> свои опасения,

В твои опасения (описался малось)
22 o1o1
 
27.05.12
10:02
ЧеловекДуши, дык, а зачем? Куда проще из VBS это делать, и не надо даже навешивать на себя какие-то дополнительные обязанности ) Для админа это будет полностью прозрачно... Он даже и знать забудет про то, что есть какая-то внешняя обработка, которую я запускаю периодически.
А готовить какие-то файлы при каждом обновлении — это, я считаю, просто полный нонсенс, автоматизация обновлений была придумана, чтобы как раз не готовить никаких файлов, т.е. уйти от рутинного повторяющегося (и в основном неблагодарного) труда.
23 ЧеловекДуши
 
27.05.12
10:30
(22)>>> файлы при каждом обновлении — это, я считаю, просто полный нонсенс

Детская наивность :)
24 ЧеловекДуши
 
27.05.12
10:31
+ >> Куда проще из VBS это делать

Удачи... Пиши, как сделаешь, мы оценим ;)
25 Sedoy
 
27.05.12
10:47
(22) Обновление нестандартной конфигурации, это далеко не рутина. Часто это очень даже творческий процесс...пока не подготовил мд-шник. Потом рутина.
26 Туц
 
27.05.12
10:50
Гм...
Если Константа.НомерРелиза <> Лев(Метаданные.Комментарий, 8) Тогда
27 Мимохожий Однако
 
27.05.12
10:51
(22)Не забудь отписаться, как реализовал. А потом как обновление прошло...Переживаем )))
28 BlackSeaCat
 
27.05.12
11:14
Эммм... А была где-то когда-то примочка типа "Конвертор ERT в EXE" - по моему, автору она бы подошла.
29 o1o1
 
27.05.12
17:15
В итоге создал реализацию из двух файлов:

1. Создаём где угодно на диске файл MyVBScript.vbs следующего содержания:


Set v7 = CreateObject("V1CEnterprise.Application")
Open = v7.Initialize(v7.RMTrade,"/D\\serv1\путь\к\моей\базе\", "NO_SPLASH_SHOW")
If Open = -1 Then
   v7.ExecuteBatch("ОткрытьФорму(""Отчет"",""Выполнить"",""E:\Путь\к\моей\обработке.ert"")")
End If
Set v7 = Nothing


Обработка может лежать, где угодно, необязательно держать её внутри файлового дерева в базе.

2. Создаём внешнюю обработку (ert) с помощью Конфигуратора и вставляем в код модуля следующий кусок:


//*******************************************
Процедура ПриОткрытии() Экспорт
   ТекстДок = СоздатьОбъект("Текст");
   ТекстДок = СоздатьОбъект("Текст");
   'даты от балды, (для примера просто)
   НачДата = Дата("01.01.2012");
   КонДата = Дата("01.01.2013");
   Опер = СоздатьОбъект("Операция");
   Опер.ВыбратьОперацииСПроводками(НачДата,КонДата,"51",,ПланыСчетов.Основной);
   'наполняем текст в цикле, текст от балды (для примера)
   Пока Опер.ПолучитьПроводку()=1 Цикл    
       ТекстДок.ДобавитьСтроку (Опер.ПредставлениеПроводки());
   КонецЦикла;
   ТекстДок.Записать("C:\путь\к\файлу\куда\выводить\текст.txt");
КонецПроцедуры


3. Запускаем MyVBScript.vbs двойным щелчком мыши или из консоли или с помощью планировщика. После отработки скрипта появится файл текст.txt с нужным содержанием внутри. Полезной работы в этом коде мало, но это уже детали каждой конкретной задачи, кто какую решает. Я просто вставил этот кусок для примера.

Вот, примерно так... и работает ) И я даже админу ничего говорить не буду, зачем ему знать про внутренние детали реализации, пусть обновляет себе конфигурации свои, как и обновлял раньше, результат моей работы этому не мешает, да и свою задачу я таким образом решил, не создавая проблем и дополнительных задач для других сотрудников )
30 o1o1
 
27.05.12
17:27
Админ просто не обязан править какие-то строчки в каком-то коде, это не его компетенция просто и никто не убедит меня в обратном ) Он не должен создавать программы, он должен настраивать программы и уметь их использовать. И уже тем более, админ не должен лезть в код процедур глобального модуля для вставки каких-то строк туда... Даже copy-paste не должен делать. Поэтому моё решение (предложенное maip1) мне кажется более элегантным, чем то, которое предложили МимохожийОднако и ЧеловекДуши.
31 o1o1
 
27.05.12
17:31
Справедливости ради, следует сказать, что все предложенные в этой теме решения в той или иной степени решают поставленную задачу, просто разными способами, и наименее трудоёмким и наиболее гибким мне показался способ запуска посредством VBScript
32 ЧеловекДуши
 
27.05.12
17:32
Ты как быстро это, не спеши :)
Сделай, а потом защити. А то получается мы видим весь процесс твоих, мыслей и ошибок :)
33 o1o1
 
27.05.12
17:34
Дык, я уже сделал и работает )
34 ЧеловекДуши
 
27.05.12
17:35
(30)Давай еще раз, что такое 1С?
Что такое конфигуратор?
...и самое главное...
Что значит, в твоем понимает, обновление?
А то судя по (29), ты для чего-то за пускаешься в режиме предприятия и запускаешь обработку. Зачем? :)
35 ЧеловекДуши
 
27.05.12
17:37
(33)Молодец :)
36 bushd
 
27.05.12
17:37
(34) Ему надо было проводки в текстовик выгрузить и все. Конфигурация типовая.
37 o1o1
 
27.05.12
17:38
Не понял вопроса "зачем?"... Затем, чтобы решить задачу (свою, прикладную).
38 bushd
 
27.05.12
17:43
(37) Надо было сразу цель написать.
39 Sedoy
 
27.05.12
17:45
Оказывается можно очень сложно решить простейшую задачу...
40 ЧеловекДуши
 
27.05.12
17:45
(36)Понятно, я бы не смог даже предположить :)
Ты телепат ? ;)
41 ЧеловекДуши
 
27.05.12
17:46
(37)Ну ты и усложнил, простой механизм выгрузки операций в файл :)

...боюсь спрашивать, нахрена?...
42 o1o1
 
27.05.12
17:48
Каюсь, там в середине темы где-то я писал, зачем именно эта обработка и что она делает. Телепатия не нужна, нужно внимание к мелочам, просто невнимательно пролистали тему вместо внимательного чтения )

Но, согласитесь, в контексте того вопроса, который я задал, реализация обработки — дело не принципиальное и вторичное. Эта обработка могла бы делать что угодно, и неважно, типовая или нетиповая конфигурация, главное, чтобы "нетиповость" была учтена в процедуре, если она конфигурация не типовая. Т.е. что делает обработка в контексте моего вопроса неважно — важнее, как она запускается и не влечёт ли она необходимость регулярных рутинных ручных действий (при обновлениях).

Чем усложнил? Есть способ проще?
43 ЧеловекДуши
 
27.05.12
17:53
(42)Я подобное делаю под "Автоматом", существует некий пользователь с галочкой "Может выполнять задания". Данный автомат задействует некий, и несложный, механизм, который основан на "ОбработкаОжидания" и при достижения "ТекущееВремя()" и "ТекущаяДата" определенного параметра, запускает различные обработки. Количество обработок, как и количество запусков их, зависит только от времени выполнения самих обработок и выставленного "Часового механизма" :)

По сути тоже самое, что тебе надо в (29), но более гибко и настраиваемый в режиме предприятия. От программиста или админа надо только одно, запуск самого 1С по пользователем "Автоматом" :)
44 ЧеловекДуши
 
27.05.12
17:55
+(42) >>> Чем усложнил? Есть способ проще?

Простота, это понятие относительно, все зависит от программиста, решающего задачу. :)
45 o1o1
 
27.05.12
18:01
ЧеловекДуши, проще — значит, меньше времени на достижение результата при одинаковом качестве результата. Результат получен, и я не уверен, что тот же результат выглядел бы короче и лаконичнее, если бы я завёл отдельного пользователя и наворотил целый каскад вызовов разных процедур.
46 ЧеловекДуши
 
27.05.12
18:04
(45)Вы молоды? Время в жизни относительно ;)
Там не целый каскад, там искусство и жизненный интерес программиста.
Я писал от души ;)
47 o1o1
 
27.05.12
18:10
Мне 28, хотелось бы верить, что молод ) Время относительно, это очевидно, только я с большим удовольствием проведу его со своей девушкой, чем с 1С ) У меня как-то сошёл "на нет" тот идеализм, чтобы на каждую частную задачу пытаться придумать универсальное общее решение )
Мне платят за решение задач, а не за то, как круто я могу их решать за неограниченное время )
48 o1o1
 
27.05.12
18:34
ЧеловекДуши, я, тем не менее, благодарен Вам, за то, что поучаствовали в обсуждении и предложили свой вариант решения — это бесценно, безусловно, и я буду рад если эта тема поможет еще хотя бы одному человеку )
Спасибо! от души )
Независимо от того, куда вы едете — это в гору и против ветра!