Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) (теория) Зачем сначала писать, потом проверять? В чем смысл? (число прочтений - 10051 )
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
(теория) Зачем сначала писать, потом проверять? В чем смысл?
02. Ноября 2010 :: 13:34
Печать  
Купил, наконец-то 8.2 - версию для обучения программированию. Читаю. Думаю. И натыкаюсь на такой пассаж:
Мы, в восьмерках, будем делать по новому: при списании со склада - вначале списывать, а потом проверять - не списали-ли мы лишнего. И если вдруг списали - тогда откатывать назад.
А в чем смысл, в чем выгода? Нафига это?
1. Вначале запросом получаем остатки товаров с себестоимостью.
2. Проводим.
3. Потом еще раз таким же запросом - ищем отрицательные остатки.
Так же дольше? На один запрос дольше, однозначно. Ведь сравнение на больше/меньше при проведение фактически бесплатное...
Или я чего-то не понимаю?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: (теория) Зачем сначала писать, потом проверять? В чем смысл?
Ответ #1 - 02. Ноября 2010 :: 13:43
Печать  
все правильно чё. это как с бюджетными деньгами:
если вещь стоит 2 рубля, то закладываем 3, что бы рупь откатить
Улыбка
офф, конечно.
  

1&&2&&3
Наверх
 
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: (теория) Зачем сначала писать, потом проверять? В чем смысл?
Ответ #2 - 02. Ноября 2010 :: 13:54
Печать  
Да я себе чуть мозг не вывернул, пытаясь придумать ситуацию, когда это даст выигрыш. Вроде как выигрыш может быть только тогда, когда нет первого запроса - т. е. на складе тупой количественный учет без суммового. Другими словами - в самом примитивном случае, в реальной жизни такого, как правило, не бывает.
Вот уж точно - книга заставляет думатьУлыбка
  
Наверх
 
IP записан
 
noprogrammer
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 465
Зарегистрирован: 16. Июня 2006
Re: (теория) Зачем сначала писать, потом проверять? В чем смысл?
Ответ #3 - 02. Ноября 2010 :: 13:58
Печать  
Данный подход позволяет писАть проверки контроля остатков более универсально (а за универсальность всегда надо чем то платить) т.е. написал один раз контроль в модуле регистра и забыл о нем, нет необходимости отслеживать изменения\рефакторинг процедур проведения.
  
Наверх
wwwICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: (теория) Зачем сначала писать, потом проверять? В чем смысл?
Ответ #4 - 02. Ноября 2010 :: 14:34
Печать  
classic писал(а) 02. Ноября 2010 :: 13:34:
1. Вначале запросом получаем остатки товаров с себестоимостью.
2. Проводим.
3. Потом еще раз таким же запросом - ищем отрицательные остатки.

п.1 не нужен в 8.2 Улыбка
сразу п.2 и п.3 Улыбка
  

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



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: (теория) Зачем сначала писать, потом проверять? В чем смысл?
Ответ #5 - 02. Ноября 2010 :: 14:46
Печать  
artbear писал(а) 02. Ноября 2010 :: 14:34:
п.1 не нужен в 8.2 Улыбка

хмм Озадачен
а каким чудесным образом происходит списание по среднему или списание партий?
  

1&&2&&3
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: (теория) Зачем сначала писать, потом проверять? В чем смысл?
Ответ #6 - 02. Ноября 2010 :: 15:10
Печать  
classic писал(а) 02. Ноября 2010 :: 13:34:
Купил, наконец-то 8.2 - версию для обучения программированию. Читаю. Думаю. И натыкаюсь на такой пассаж:
Мы, в восьмерках, будем делать по новому: при списании со склада - вначале списывать, а потом проверять - не списали-ли мы лишнего. И если вдруг списали - тогда откатывать назад.
А в чем смысл, в чем выгода? Нафига это?
1. Вначале запросом получаем остатки товаров с себестоимостью.
2. Проводим.
3. Потом еще раз таким же запросом - ищем отрицательные остатки.
Так же дольше? На один запрос дольше, однозначно. Ведь сравнение на больше/меньше при проведение фактически бесплатное...
Или я чего-то не понимаю?


идея уводить проверку остатков в конец процедуры проведения связана с:

1. более простым запросом проверки - чем проще запрос, тем лучше ведет себя транслированный SQL запрос, а значит быстрее
2. чем быстрее запрос - тем меньше времени живет блокировка

и кстати по порядку - Артур почти правильно написал:

методика советует нечто следующее, если я правильно помню:

раньше было:
0. делаем всякую расчетную ересь - в том числе себестоимость
1. подготавливаем движения документа и проверяем остатки одним запросом
2. проводим если не было отрицательных остатков

стало:
0. делаем всякую расчетную ересь - в том числе себестоимость
1. подготавливаем движения документа запросом
2. проводим без всяких проверок
3. запросом ищем возникшие отрицательные остатки.

еще раз идея: один запрос со сложным соединением и 2 запроса без всяких JOIN'ов ведут себя совершенно по разному.

P.S. Кстати отдельно говорилось, что в сложных случаях все равно надо включать голову, помня в том числе и о новой методике.
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: (теория) Зачем сначала писать, потом проверять? В чем смысл?
Ответ #7 - 03. Ноября 2010 :: 09:32
Печать  
Идею понял, просто авторы неудачный пример выбрали. Эта схема идеально ляжет на выплату ЗП (контроль перевыплаты), или выдачу денег из кассы, и т. д.
А вот со списанием со склада эта схема не очень хороша - просто при расчете себестоимости (партий-ли, средней-ли, не важно) - мы уже получаем остатки, и грех не проверить их. И никакого упрощения и уборки join'ов не происходит при этом - тут выигрыша не будет. Тем более, при списании по фифо в самом алгоритме списания партий недостаток выскочит, сам-собой.
Выигрыш разве что в универсальности проверки.
Но идея имеет место быть, буду пользовать там, где это выгодно.
  
Наверх
 
IP записан
 
Igor-bts
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 103
Зарегистрирован: 14. Июля 2006
Re: (теория) Зачем сначала писать, потом проверять? В чем смысл?
Ответ #8 - 03. Ноября 2010 :: 11:14
Печать  
1с утверждает что данная методика в основном для уменьшения времени блокировки итоговых таблиц.

В типовых конфигурациях задачи вроде "расчет себестоимости списания товара" - пытаются вынести из оперативных задач на более поздний период.  В оперативном режиме интересно хватило ли товара или нет, себестоимость не столь интересна, ее расчет модно перенести на более поздний срок.
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: (теория) Зачем сначала писать, потом проверять? В чем смысл?
Ответ #9 - 03. Ноября 2010 :: 12:29
Печать  
Igor-bts писал(а) 03. Ноября 2010 :: 11:14:
1с утверждает что данная методика в основном для уменьшения времени блокировки итоговых таблиц.

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

Если принцип проведения такой же как и в v7 
то итоговые таблицы будут изменены и заблокированы ( точно для ms sql ) в начале модуля проведения и  до конца проведения.
Если этого не сделать то тогда в модуле проведения будут неверны остатки на ТА и любую дату после этого документа.
  
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: (теория) Зачем сначала писать, потом проверять? В чем смысл?
Ответ #10 - 03. Ноября 2010 :: 12:47
Печать  
Z1 писал(а) 03. Ноября 2010 :: 12:29:
Igor-bts писал(а) 03. Ноября 2010 :: 11:14:
1с утверждает что данная методика в основном для уменьшения времени блокировки итоговых таблиц.

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

Если принцип проведения такой же как и в v7  
то итоговые таблицы будут изменены и заблокированы ( точно для ms sql ) в начале модуля проведения и  до конца проведения.
Если этого не сделать то тогда в модуле проведения будут неверны остатки на ТА и любую дату после этого документа.


вообще отдельно говорится что необходимо менять принцип проведения - в частности для исключения неверных остатков явно управлять блокировкой.

кстати - в 8.2 изменилось поведение "читающего запроса" - теперь его блокировки живут не до конца транзакции (как было раньше), а до конца выполнения запроса - если мне не изменяет память.

  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: (теория) Зачем сначала писать, потом проверять? В чем смысл?
Ответ #11 - 03. Ноября 2010 :: 12:50
Печать  
lustin писал(а) 03. Ноября 2010 :: 12:47:
Z1 писал(а) 03. Ноября 2010 :: 12:29:
Igor-bts писал(а) 03. Ноября 2010 :: 11:14:
1с утверждает что данная методика в основном для уменьшения времени блокировки итоговых таблиц.

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

Если принцип проведения такой же как и в v7  
то итоговые таблицы будут изменены и заблокированы ( точно для ms sql ) в начале модуля проведения и  до конца проведения.
Если этого не сделать то тогда в модуле проведения будут неверны остатки на ТА и любую дату после этого документа.


вообще отдельно говорится что необходимо менять принцип проведения - в частности для исключения неверных остатков явно управлять блокировкой.

кстати - в 8.2 изменилось поведение "читающего запроса" - теперь его блокировки живут не до конца транзакции (как было раньше), а до конца выполнения запроса - если мне не изменяет память.


Я говорю не о том принципе на который может влиять программист 1с в модуле проведения
а о том что заложено до начала модуля проведения.
Т.е до выполнения  модуля проведения должны быть сброшены данные предыдущих движений в итоговых таблицах и именно в этот момент и будут наложены ms msq блокировки в итоговых таблицах.
  
Наверх
 
IP записан
 
Igor-bts
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 103
Зарегистрирован: 14. Июля 2006
Re: (теория) Зачем сначала писать, потом проверять? В чем смысл?
Ответ #12 - 03. Ноября 2010 :: 13:35
Печать  
В 8.2 изменен принцип блокировки.
Итоги блокируются при команде "Записать" движений в регистр.
либо управляемыми блокировками.
И "новая" методика работает так:
Формируем набор движений, быстро записываем и быстро проверяем хватило ли?
  
Наверх
ICQ  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: (теория) Зачем сначала писать, потом проверять? В чем смысл?
Ответ #13 - 03. Ноября 2010 :: 13:35
Печать  
Z1 писал(а) 03. Ноября 2010 :: 12:50:
Т.е до выполнения  модуля проведения должны быть сброшены данные предыдущих движений в итоговых таблицах и именно в этот момент и будут наложены ms msq блокировки в итоговых таблицах.


я правильно понял - что ты о тех блокировках которые устанавливает сама платформа в момент начала проведения перед передачей управления в модуль процедуре ОбработкаПроведения ?

если это так - то ты можешь этим управлять только с помощью режима управления блокировками объекта (автоматический/управляемый)

однако это еще одна методика - в серьезных решениях отказываться от автоматических блокировок и переходить на управляемые.
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Igor-bts
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 103
Зарегистрирован: 14. Июля 2006
Re: (теория) Зачем сначала писать, потом проверять? В чем смысл?
Ответ #14 - 03. Ноября 2010 :: 13:45
Печать  
в решениях 8.2 1с  отказывается от автоматических блокировок, которые ставятся при входе в обработчик проведения.
стараясь поставить как можно позже

Идея 1с чтобы "Управляемыми" блокировками пользоваться как можно реже.
Стандартная методика проведения:
1) Блокируем изменяемые данные
2) Выполняем проверку доступности данных,
3) Формируем набор движений
4) Открываем транзакцию
5) Записываем.
6) Фиксируем транзакцию и отменяем блокировку
Все это время данные заблокированы.

"Новая" методика
1) Формируем набор движений
2) Открываем транзакцию
3) Записываем - только в этот момент изменяемые данные блокируются.
4) Выполняем проверку
5) Фиксируем транзакцию и отменяем блокировку

Общее время блокировки во втором случае должно быть меньше.

"Новая" методика не всегда применима.
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать