Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Очень популярная тема (более 25 ответов) Покритикуйте идею (число прочтений - 6516 )
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Покритикуйте идею
23. Декабря 2009 :: 08:27
Печать  
Есть бух. база по ведению страхового учета. Хочу создать оборотный регистр, который бы показывал Прибыль/убыток по: ВидуСтрахования, Страхователю, ДоговоруСтрахования.
Эту информацию накладно получать в текущей базе, потому что есть несколько счетов которые отражают картину по договору страхования (оплата агентом, оплата страхователем, комиссия по договору, взаиморасчеты с филиалами, выплата по страховому случаю, выплата по расторжениям и т.д). Ес-но всё это заносится многими документами в том числе и бухгалтерской справкой.

Самый простой способ реализации - добавить во все модули проведения документов, которые могут "двигать" нужные счета, соответствующие движения по моему регистру. Но это очень утомительно и можно пропустить какие-либо документы, и тогда информация будет недостоверной.

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

Вроде бы всё красиво. А что думаете вы по поводу такой схемы?

  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Покритикуйте идею
Ответ #1 - 23. Декабря 2009 :: 09:05
Печать  
База dbf, sql ?
База УРБД да,нет ?
Перехват проведения идет в той же самой транзакции или новой ?
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Покритикуйте идею
Ответ #2 - 23. Декабря 2009 :: 09:09
Печать  
Делал книгу доходов/расходов с свое время, сначала в каждом документе делал нужные проводки на забалансовый счет, который потом анализировал в отчете. Проблемы была в том, что при изменении логики попадания документа в книгу приходилось перепроводить соответствующий вид документов за весь период..

В итоге пришел к варианту пост-обработки - отчет просто сканирует все нужные мне документы и формирует записи в таблицу..

Тебе как вариант можно прото сделать отчет, который будет периодически запускаться и писать данные например в табличку SQLite, которая потом будет анализироваться в отчете..
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Покритикуйте идею
Ответ #3 - 23. Декабря 2009 :: 10:26
Печать  
Из собственного опыта могу сказать, что создавать документ в 1С автоматом, при каких-то действиях пользователя с другим документом, не есть хорошо. Т.е. всегда, сколько встречал, такая реализация приносила проблемы.
В этом случае, во-первых получаем длинную транзакцию(если дбф, то еще вопрос целостности), дублируется лишняя информация, т.е. есть информацию для проведения по оборотному регистру можем взять просто из исходного документа.
Во-вторых, нужно делать синхронизацию этих двух документов при изменениях того или другого. В-третьих, движения по оборотному регистру не видим для исходного документа, а видим для "Служебного".
Вообщем, имхо, все же не красиво. Красивей было бы добавить соответствующую логику, скажем в функцию глПроводка(...) или т.п.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Покритикуйте идею
Ответ #4 - 23. Декабря 2009 :: 11:00
Печать  
Z1 писал(а) 23. Декабря 2009 :: 09:05:
База dbf, sql ?
База УРБД да,нет ?
Перехват проведения идет в той же самой транзакции или новой ?

ДБФ, УРБД - нету.
Транзакции вроде как разные. В перехвате сначала делаем ВыполнитьОригинальноеСобвтиеГК(Конт, "ОбработкаПроведения"), а затем и допроведение по регистрам
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Покритикуйте идею
Ответ #5 - 23. Декабря 2009 :: 11:03
Печать  
CaBaT писал(а) 23. Декабря 2009 :: 09:09:
Делал книгу доходов/расходов с свое время, сначала в каждом документе делал нужные проводки на забалансовый счет, который потом анализировал в отчете. Проблемы была в том, что при изменении логики попадания документа в книгу приходилось перепроводить соответствующий вид документов за весь период..

В итоге пришел к варианту пост-обработки - отчет просто сканирует все нужные мне документы и формирует записи в таблицу..

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

Да, тоже думал на предмет периодического скнирования базы, но здесь тоже есть много нюансов: как часто это делать (если редко - то теряется смысл всей затеи)? автоматом? за какой период сканировать (наши бухи любят лазить в прошлые периоды)?
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Покритикуйте идею
Ответ #6 - 23. Декабря 2009 :: 11:07
Печать  
alexdd писал(а) 23. Декабря 2009 :: 10:26:
Из собственного опыта могу сказать, что создавать документ в 1С автоматом, при каких-то действиях пользователя с другим документом, не есть хорошо. Т.е. всегда, сколько встречал, такая реализация приносила проблемы.
В этом случае, во-первых получаем длинную транзакцию(если дбф, то еще вопрос целостности), дублируется лишняя информация, т.е. есть информацию для проведения по оборотному регистру можем взять просто из исходного документа.
Во-вторых, нужно делать синхронизацию этих двух документов при изменениях того или другого. В-третьих, движения по оборотному регистру не видим для исходного документа, а видим для "Служебного".
Вообщем, имхо, все же не красиво. Красивей было бы добавить соответствующую логику, скажем в функцию глПроводка(...) или т.п.

Я просто не знаю получиться ли сделать движения по регистру этим же документом (контекстом). Если нет, то от служебного документа никуда не деться.
Да, глПроводка(...) - это вариант (но у меня её нету). Я так понимаю, что вызов этой ф-ии надо вставлять в конец процедуры ОбработкиПроведения.
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: Покритикуйте идею
Ответ #7 - 23. Декабря 2009 :: 11:30
Печать  
JohnyDeath писал(а) 23. Декабря 2009 :: 11:03:
Да, тоже думал на предмет периодического скнирования базы, но здесь тоже есть много нюансов: как часто это делать (если редко - то теряется смысл всей затеи)? автоматом? за какой период сканировать (наши бухи любят лазить в прошлые периоды)?


Ну например с помощью перехватчика ты можешь зафиксировать факт проведения документа и добавить его в список обработки..
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Покритикуйте идею
Ответ #8 - 23. Декабря 2009 :: 11:32
Печать  
Ну а почему не получится, все штатные возможности 1С. Только придется галку поставить "Оперативный учет" для всех документов, которые могут двигать этот регистр(да и по логике правильно - они же его таки двигают).
глПроводка() - не обязательно, можно просто и сердито - добавить в модуль каждого документа, который может двигать регистр, функцию глДвиженияРегистрСтрахование(). Ну т.е. как во многих типовых конфах.
Решение, конечно, не технологичноеУлыбка, зато, так сделал и забыл, просто и понятно. С отдельным документом вроде как проще сделать, но, возможно, придется потом сидеть писать обработки для проверки/синхронизации данных и т.п.Улыбка Все имхо, естесно.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Покритикуйте идею
Ответ #9 - 23. Декабря 2009 :: 11:47
Печать  
JohnyDeath писал(а) 23. Декабря 2009 :: 08:27:
Есть бух. база по ведению страхового учета.
Самый простой способ реализации - добавить во все модули проведения документов, которые могут "двигать" нужные счета, соответствующие движения по моему регистру. Но это очень утомительно и можно пропустить какие-либо документы, и тогда информация будет недостоверной.

Ручное добавление во все модули проведения - Утомительно при написании. Зато быстрее и надежнее будет работать чем то что ты предлагаешь.

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


Дополнительный документ плохо подумай как делать отмену(пометку удаления основного документа) особенно из внешенй обработки написанной кем то другим.


ИХМО идея не очень красивая(решать конечно тебе)  и лучше делать через доп функцию во всех модулях проведения.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Покритикуйте идею
Ответ #10 - 23. Декабря 2009 :: 12:29
Печать  
Да, с доп. универсальным документом я погорячился.
Сейчас проверял перехватчик. В классе-перехватчике написал:
Код
Выбрать все
//=======================================================
Процедура Событие_ОбработкаПроведения(КонтекстДокумента) Экспорт
	дения");
	Если Рез<>1 Тогда
		Возврат;
	КонецЕсли;
	ТекДок=КонтекстДокумента.ТекущийДокумент();
	Сообщить("ДоПроводим "+ТекДок+", Результат = "+Рез);

	Страхователь=СоздатьОбъект("Справочник.Контрагенты");
	Страхователь.ВыбратьЭлементы();
	Страхователь.ПолучитьЭлемент();

	рег=КонтекстДокумента.Регистр.ПолучитьАтрибут("ОплатаСтрахования");
	//рег.ДоговорСтрахования=КонтекстДокумента.ДоговорСтрахования;
	//рег.ПолисОСАГО=КонтекстДокумента.ТекущийДокумент();
	рег.Страхователь=Страхователь.ТекущийЭлемент();
	рег.Сумма=-1000;
	рег.ДвижениеРасходВыполнить();
КонецПроцедуры	// Событие_ОбработкаПроведения(КонтекстДокумента) 


Решил попробовать провести парочку документов ПолисОСАГО. Они сами делают движения по регистру "ОплатаСтрахования". По идее должна добавиться еще одна записы расхода в этот регистр с суммой = -1000 и пустыми измерениями "ДоговорСтрахования" и "ПолисОСАГО", но на деле оказалось немного по-другому (на рисунке). Вместо пустых реквизитов имеем заполненные значения из предыдущей записи этого же документа. Если документ не делал движения по этому регистру, то перехватчик отрабатывает как и ожидалось. Дальше экспериментировать не стал. Хватит и этого.

Итог. Пойдем старым проверенным путём: добавим в глобальник "глПриПроведении(КонтекстДокумента)" и вставим во все модули проведения документов вызов этой ф-ии.
А счастье было так близко  Смех
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Покритикуйте идею
Ответ #11 - 23. Декабря 2009 :: 14:35
Печать  
А причем здесь Перехватчик-то? на самом деле это почти штатные ограничения.
1. Ты юзаешь объект регистр из контекста документа, будь добр, правильно устанавливай все необходимые атрибуты.

2. Помни, что все-таки это нештатное поведение Улыбка
поэтому что-то нужно делать автоматом.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Покритикуйте идею
Ответ #12 - 23. Декабря 2009 :: 14:37
Печать  
JohnyDeath писал(а) 23. Декабря 2009 :: 12:29:
Да, с доп. универсальным документом я погорячился.
Код
Выбрать все
//=======================================================
Процедура Событие_ОбработкаПроведения(КонтекстДокумента) Экспорт

	рег=КонтекстДокумента.Регистр.ПолучитьАтрибут("ОплатаСтрахования");
	//рег.ДоговорСтрахования=КонтекстДокумента.ДоговорСтрахования;
	//рег.ПолисОСАГО=КонтекстДокумента.ТекущийДокумент();
	рег.Страхователь=Страхователь.ТекущийЭлемент();
	рег.Сумма=-1000;
	рег.ДвижениеРасходВыполнить();
КонецПроцедуры	// Событие_ОбработкаПроведения(КонтекстДокумента) 



ИМХО если ты аналогичный код добавишь в конец модуле проведения, то получишь абсолютно описанную тобой же проблему Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Покритикуйте идею
Ответ #13 - 23. Декабря 2009 :: 14:52
Печать  
artbear писал(а) 23. Декабря 2009 :: 14:35:
А причем здесь Перехватчик-то? на самом деле это почти штатные ограничения.
1. Ты юзаешь объект регистр из контекста документа, будь добр, правильно устанавливай все необходимые атрибуты.

Да, Артур, ты прав.  Смущённый

artbear писал(а) 23. Декабря 2009 :: 14:35:
2. Помни, что все-таки это нештатное поведение Улыбка
поэтому что-то нужно делать автоматом.

Не понял к чему это ты.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Покритикуйте идею
Ответ #14 - 24. Декабря 2009 :: 06:56
Печать  
JohnyDeath писал(а) 23. Декабря 2009 :: 14:52:
artbear писал(а) 23. Декабря 2009 :: 14:35:
2. Помни, что все-таки это нештатное поведение Улыбка
поэтому что-то нужно делать автоматом.

Не понял к чему это ты.

Неудачные мысли Улыбка
Если что-то по Перехватчику еще будет, пиши.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать