Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Два разных модуля проведения документа? (число прочтений - 6993 )
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Два разных модуля проведения документа?
29. Июня 2011 :: 12:45
Печать  
Есть задача, сделать 2 разных модуля проведения, в зависимости от даты документа? Может есть какие уже решения? Переписывать все модули как не хочеться, было бы хорошо, просто, чтобы подгружать Или модуль 1 или Модуль 2 в Зависимости от значения ДатаДок.

(Под модулем документа подразумевается все процедуры и функции модуля, а также предопределенные ОбработкаПроведения и ОбработкаУдаленияПроведения).
  
Наверх
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Два разных модуля проведения документа?
Ответ #1 - 30. Июня 2011 :: 02:15
Печать  
у формекса(?) есть глобальное событие "при загрузке формы" и "при загрузке модуля формы", в которых, можно подменить форму и модуль открываемого объекта.
Может, есть аналогичное событие "при загрузке модуля документа"?
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Два разных модуля проведения документа?
Ответ #2 - 30. Июня 2011 :: 02:28
Печать  
Ну и второй вариант:
Я так понимаю, ты предполагаешь хранить "старый" и/или "новый" модуль документа во внешнем файле (аналогично использованию стандартной директивы 1С #ЗагрузитьИзФайла)?

Тогда можно попробовать сделать так:
натравливаешь перехватчик на события ОбработкаПроведения() и ОбработкаУдаленияПроведения()
Внутри решаешь - какой модуль использовать.
Создаешь объект ВыполняемыйМодуль, компилируешь модуль из файла, ..., ПРОФИТ.
Хотя тут фиг знает - я даже не проверял, может ли класс-перехватчик, например, в своем обработчике двигать регистры от имени документа? Подозреваю, что должен мочь.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Два разных модуля проведения документа?
Ответ #3 - 30. Июня 2011 :: 05:09
Печать  
У тебя как минимум 2 варианта:

1. Тупо вставляешь условие в сам модуль документа и в зависимости от даты 2 разных алгоритма проведения
2. Используешь свой класс на основе класса-Перехватчика и там уже в зависимости от даты делаешь своё "другое" проведение, а код в модуле документа не трогаешь вообще.

  
Наверх
 
IP записан
 
Rainbow
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 3
Местоположение: Tomsk
Зарегистрирован: 03. Марта 2010
Пол: Мужской
Re: Два разных модуля проведения документа?
Ответ #4 - 16. Июля 2011 :: 20:10
Печать  
Глобальный модуль совсем убрал из МД.

Весь существующий Глобальный модуль разбил на отдельные блоки, соответствующие определенным задачам. Эти блоки сохраняю в текстовых файлах, которые загружаю при загрузке 1С.

Разбивка облегчает работу с текстом. Лазать по огромному МД то ещё удовольствие.

Так что в данном случае написал бы два текстовых файла для разных дат, а в модуле проведения что-то типа

Код
Выбрать все
Процедура ОбработкаПроведения()
          Если ДатаДок=Дата1 Тогда
                 ОбработкаПроведения1()  // Первый модуль
          Иначе//Если ДатаДок=Дата2 Тогда
                 ОбработкаПроведения2()  // Второй модуль
          КонецЕсли;
КонецПроцедуры
 



при помощи 1СPP и TurboMD удалось выгрузить из MD всю программную часть. Это позволяет проводить 95% работы по переделке 1С, не выгоняя всех пользователей из базы.

MD нужен теперь только для реструктуризации базы
  
Наверх
 
IP записан
 
mash
1c++ donor
Отсутствует


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Два разных модуля проведения документа?
Ответ #5 - 18. Июля 2011 :: 06:40
Печать  
Предложу свой вариант -

- делаешь два класса (при этом можно применять наследование, что важно если код частично повторяется), в которых реализуешь модуль проведения, при этом  метод ОбработкаПроведения с параметрами делаешь открытым

- вне процедур внизу модуля проведения пишешь код подобный этому
Код
Выбрать все
_оПерехватчик = СоздатьОбъект("Перехватчик");

Если ДатаДок < Константа.НужнаяДата Тогда
	_оДокумент = СоздатьОбъект("ДокументПроведение.ПоСтарому");
Иначе
	_оДокумент = СоздатьОбъект("ДокументПроведение.ПоНовому");
КонецЕсли;

_оПерехватчик.ПерехватитьСобытияГК(Контекст, _оДокумент);

 



  

Поспешность наносит ущерб
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Sergio
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 19. Июля 2011
Re: Два разных модуля проведения документа?
Ответ #6 - 19. Июля 2011 :: 22:52
Печать  
pvase писал(а) 29. Июня 2011 :: 12:45:
Есть задача, сделать 2 разных модуля проведения, в зависимости от даты документа? Может есть какие уже решения? Переписывать все модули как не хочеться, было бы хорошо, просто, чтобы подгружать Или модуль 1 или Модуль 2 в Зависимости от значения ДатаДок.

(Под модулем документа подразумевается все процедуры и функции модуля, а также предопределенные ОбработкаПроведения и ОбработкаУдаленияПроведения).


А чем #ЗагрузитьИзФайла плохо? Храни два разных текста МД в разных файлах, например "МД_до_15_07_2011.txt" и "МД_после_15_07_2011.txt", а перед проведением копируй нужный текст в "МодульПроведенияТакоготоДокумента.txt" (ФС.КопироватьФайл(<?>,,)) с перезаписью, а в МД пусть стоит

#ЗагрузитьИзФайла МодульПроведенияТакоготоДокумента.txt

Так ты можешь наваять любое количество текстов МД и ни в чем себе не отказывать. И редактируй их, не перезагружая работников.
Там, по-моему, даже весь старый текст удалять не надо. Прописываешь первой строкой, и 1С остальное игнорирует... Могу и ошибиться - проверить надо.
  
Наверх
 
IP записан
 
Sergio
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 19. Июля 2011
Re: Два разных модуля проведения документа?
Ответ #7 - 19. Июля 2011 :: 22:58
Печать  
Sergio писал(а) 19. Июля 2011 :: 22:52:
Так ты можешь наваять любое количество текстов МД и ни в чем себе не отказывать. И редактируй их, не перезагружая работников.


В принципе, так можно хранить тексты МД на разные случаи жизни прямо в базе, а перед проведением записывать их в тот самый файл по различным условиям.
  
Наверх
 
IP записан
 
novichek
Экс-Участник


Re: Два разных модуля проведения документа?
Ответ #8 - 20. Июля 2011 :: 02:24
Печать  
#ЗагрузитьИзФайла плохо лишь тем что модуль будет каждый раз подгружаться и "компилироваться". Для случая массового перепроведения это может оказаться неприемлемым.
  
Наверх
 
IP записан
 
Sergio
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 19. Июля 2011
Re: Два разных модуля проведения документа?
Ответ #9 - 24. Июля 2011 :: 21:19
Печать  
Цитата:
Для случая массового перепроведения это может оказаться неприемлемым.


Не понял мысль. О чем идет речь? Поделись: что за технология такая, при которой требуется массовое перепроведение? И часто оно у вас?
  
Наверх
 
IP записан
 
novichek
Экс-Участник


Re: Два разных модуля проведения документа?
Ответ #10 - 25. Июля 2011 :: 07:47
Печать  
Sergio писал(а) 24. Июля 2011 :: 21:19:
Цитата:
Для случая массового перепроведения это может оказаться неприемлемым.


Не понял мысль. О чем идет речь? Поделись: что за технология такая, при которой требуется массовое перепроведение? И часто оно у вас?

При чем здесь "у вас"? Оно есть "объективная реальность, данная нам в ощущениях" Улыбка и тем кто её пользует надо это учитывать. А остальным достаточно просто иметь в виду что при хранении модулей в *.txt, возможно замедление проведения документов.
  
Наверх
 
IP записан
 
Sergio
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 19. Июля 2011
Re: Два разных модуля проведения документа?
Ответ #11 - 25. Июля 2011 :: 08:22
Печать  
Цитата:
При чем здесь "у вас"? Оно есть "объективная реальность, данная нам в ощущениях" Улыбка и тем кто её пользует надо это учитывать. А остальным достаточно просто иметь в виду что при хранении модулей в *.txt, возможно замедление проведения документов.


Оно (т.е. массовое перепроведение) - это совсем не "объективная реальность, данная нам в ощущениях", а всего лишь попытка исправить чьи-то проколы.
Расскажу историю про "объективную реальность", имевшую место в моей практике. Главбух одного из моих клиентов некоторое время назад решила реорганизовать склады в своем предприятии (вместо учета по двум большим решено вести учет по пяти маленьким, на которые разделили условно два больших). Это мероприятие потребовало "массовое перепроведение", что и выполнил с блеском работавший там программист. Только он не учел, что за годы своей деятельности он уже успел внести изменения в модули проведения ключевых документов, влияющих на расчет себестоимости и, как следствие, на сумму остатка на 41 счете. Складской учет при этом не пострадал. В очередной отчетный период главбух видит, что его суммы отличаются от ожидаемых. А предприятие уже отработало пару месяцев, и документов за это время набили не щадя себя. Специалист по программному обеспечению предложил повторить "массовое перепроведение", полагая, что таким образом все встанет на свои места. Результат оказался таким: цифры еще раз изменились.
Разбор полетов был очень серьезный. Исправляли только исправительными проводками...

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

Топикстартер русским по белому написал: "Переписывать все модули как не хочется". А мы ему: напиши класс, натрави перехватчик...

Но если такое сложное решение, как #ЗагрузитьИзФайла pvase не устраивает, то он может набросать простенький Перехватчик.
  
Наверх
 
IP записан
 
Sergio
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 19. Июля 2011
Re: Два разных модуля проведения документа?
Ответ #12 - 25. Июля 2011 :: 09:06
Печать  
А вот, кстати, хранение модулей проведения в базе, упорядоченных по времени, позволит:
- хранить историю изменений МД;
- выполнить "массовое перепроведение" наиболее безболезненно.

Сделать что-нибудь, типа Справочник.МодулиПроведения:
- ТипДокумента (строка, 30,0);
- МД (неограниченная строка);
- ДатаМД (дата);
Использовать ненавистный #ЗагрузитьИзФайла, заполнить базу и написать процедуру при вызове Провести().

Вспомнил еще одну засаду массового перепроведения. Пользователи обладают одной нехорошей слабостью: время от времени править документы в прошлом (как-то они это делают талантливо: лезут в Костанты, меняют ДатуЗапретаРедактирования, если это им недоступно, звонят по внутреннему замГлавбуха, просят ее, возвращают потом Дату на место, Главбух не знает, все в неведении... - знакомая, наверно, картина). Ессно, 1С в этом случае настаивает на массовом перепроведении. Но главбухи не любят, когда ломается Бухгалтерский учет, а я всегда на их стороне - они наиболее платежеспособны!
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Два разных модуля проведения документа?
Ответ #13 - 25. Июля 2011 :: 10:43
Печать  
Sergio писал(а) 25. Июля 2011 :: 08:22:
В моих проектах отсутствует всякий намек на "массовое перепроведение", ибо я считаю его "неизбежным злом".


В торговле, поди, работаешь?
А с несвоеверменным вводом документов никогда не сталкивался?
Ну и не всегда в текущий момент работают люди, начинавшие проект. И не всегда есть возможность изменить существующие БП так, что избавиться от массового перепроведения.
Массовое перепепроведение месяца перед его закрытием - так вообще обычное дело для множества (в том числе и стандартных) конфиг.

Что не отменяет, конечно, его "абсолютность зла" - хоть и, зачастую, неизбежного.
  
Наверх
 
IP записан
 
Sergio
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 19. Июля 2011
Re: Два разных модуля проведения документа?
Ответ #14 - 25. Июля 2011 :: 11:52
Печать  
Satans Claws писал(а) 25. Июля 2011 :: 10:43:
В торговле, поди, работаешь?


Я надеюсь, тебя это не сильно покоробило? У моего любимого Жванецкого есть: "Ну как можно с лысым говорить об искусстве Герберта фон Караяна!".
Я работаю не в торговле, меня заказывает в том числе и торговля.
Месяц - это не массовое перепроведение. Там работает обычное групповое проведение или даже проведение по ОсновнойПоследовательности. И не думаю, что метод, что я предложил, может стать "неприемлемым" на месяце. Я под массовым перепроведением понимаю проведение всех доков с начала эксплуатации или там за последние несколько лет...
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать