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


1C++ rocks!

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


Такая штука для торговли - вещь обыденная: приходную в бумажном виде привезли через два дня, товар уже разгрузили и вовсю торгуют, в партиях товара прописывается уже не приходный, а расходный документ и идём в минус по остаткам, потом вводим приход и надо перепроводить весь расход.
Так вот я сделал это так:
- приход - определяет первый расход, уводящий остаток в минус (ищется по всем строкам);
- определяются все товары, по которым надо перепроводиться;
- приход - путешественник по времени, кочует на 2 секунды раньше самого первого расхода;
- при проведении он проводит расходы только тех позиций, по которым был уход в минус.

Это - не массовое перепроведение.

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


1C++ rocks!

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


Об этом я уже писал:
http://www.1cpp.ru/forum/YaBB.pl?num=1309351522/11#11
2-й абзац
  
Наверх
 
IP записан
 
Sergio
Junior Member
**
Отсутствует


1C++ rocks!

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

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


Мне довелось искать ошибку при проведении в какой-то из типовых конфигураций. В конце концов была задействована функция из глобального модуля строк эдак на 1000, изобилующая различными ответвлениями по условиям. Условия, в основном, строились на анализе реквизитов проводимого документа.

Я вспомнил это потому, что пока добирался домой от клиента в голове сложилась технология, которую я хочу предложить pvase для решения его задачи.

Итак:
1. В справочнике МодулиПроведения со структурой:
- имя МД или блока МД (строка, 30, 0);
- тип документа (строка, 30, 0);
- текст МД или блока МД (неограниченная строка);
- дата МД (дата);
- условия применения (неограниченная строка)
хранить МД, очищенные от всяких условий. Условия применения этого модуля описать в пятом реквизите. Таким образом модули очень "облегчатся" и уже не будут сильно тормозить при компилировании. На самом деле вы сами удивитесь, насколько небольшая часть гигантских функций реально отрабатывает в реальных условиях!
Но хочу предложить самым смелым пойти дальше: разбить реальные, очищенные МД на типовые составляющие, которые "склеивать" по мере необходимости. Тут уже - простор фантазии.
2. Создать примитивненький редактор, позволяющий изменить МД, хранящийся в справочнике (собственно, это просто форма элемента).
3. В модуле проведения перед всеми существующими уже строками записать заветное #ЗагрузитьИзФайла. Наиболее педантичным - предлагаю дальше в МД описать все модули, хранящиеся в справочнике, имеющие отношение к данному документу со всеми условиями их применения (своего рода справка).
4. В глобальнике создать функцию, типа МоеПроведениеДокумента() и применить его везде вместо Провести().

Кажется, ничего не упустил. Если что - подредактирую позже.
  
Наверх
 
IP записан
 
shmalevoz
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 55
Зарегистрирован: 23. Апреля 2009
Re: Два разных модуля проведения документа?
Ответ #18 - 25. Июля 2011 :: 14:44
Печать  
В примере один документ с различным проведением в зависимости от переключателя. Можно сделать хоть вагон модулей для одного документа.
  

tmp_005.zip ( 56 KB | Загрузки )
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Два разных модуля проведения документа?
Ответ #19 - 25. Июля 2011 :: 15:18
Печать  
shmalevoz писал(а) 25. Июля 2011 :: 14:44:
В примере один документ с различным проведением в зависимости от переключателя. Можно сделать хоть вагон модулей для одного документа.

Качать и разбираться не хочется, решение опиши, плиз.
Перехватчик или ЗагрузитьИзФайла или условие в модуле проведения?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Sergio
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 19. Июля 2011
Re: Два разных модуля проведения документа?
Ответ #20 - 25. Июля 2011 :: 15:50
Печать  
shmalevoz писал(а) 25. Июля 2011 :: 14:44:
В примере один документ с различным проведением в зависимости от переключателя. Можно сделать хоть вагон модулей для одного документа.


Посмотрел. Заявленных возможностей не увидел. Чего я не разглядел? И правда, нужно какое-то описание.
  
Наверх
 
IP записан
 
shmalevoz
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 55
Зарегистрирован: 23. Апреля 2009
Re: Два разных модуля проведения документа?
Ответ #21 - 25. Июля 2011 :: 17:07
Печать  
Работает через перехватчик. Раз получен контекст проведения, значит можно вызывать ОчиститьДвижения("Что надо очистить") контекста и добавлять собственные записи. Причем после вызова стандартной процедуры проведения имеем записанные движения по документу, что удобно для анализа и последующей модификации.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Два разных модуля проведения документа?
Ответ #22 - 26. Июля 2011 :: 04:41
Печать  
Ну вот еще Примерчик на базе перехватчика для любого проведения..

А так, универсальность проведения нужно выстраивать на своих классах, а не на справочниках с разными мд.
  
Наверх
 
IP записан
 
Sergio
Junior Member
**
Отсутствует


1C++ rocks!

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

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


Накидал пример, где постарался показать решение, по-возможности наиболее удовлетворяющее просьбе топикстартера.

Eprst, Примерчик посмотрю обязательно - очень интересно! Честно - просто некогда, в субботу сдача проекта... Потом выскажусь.

PS
Исправил найденные косяки. Не обессудьте - на скорую руку...
« Последняя редакция: 28. Июля 2011 :: 19:58 - Sergio »  

Test_015.rar ( 29 KB | Загрузки )
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать