Имя: Пароль:
1C
1С v8
Методика проведения документа. Вопрос религии или есть какой-то тайный смысл?
0 palpetrovich
 
31.08.11
11:53
Радченко (подозреваю и не только он) рекомендует вначале провести документ, а уже после этого, в случае если РежимПроведенияДокумента.Оперативный - проверить на наличие остатков (к примеру) - и в случае нехвтаки - откатится
Почему не сделать проверку для режима проведения "Оперативный" сразу?
1 ДенисЧ
 
31.08.11
11:54
1с 8.2 слишком быстро работает для современных компьютеров. Поэтому вступившие в сговор с продавцами железа 1сники предложили новую методу.
2 Ненавижу 1С
 
гуру
31.08.11
11:54
якобы чтобы учесть уже сделанные изменения, но...
лишняя ведь нагрузка на базу данных в случае отказа - запись строк и последующее удаление
3 Grusswelle
 
31.08.11
11:55
(0) Это - некошерный подход дзенствующих программистов к решению абстрактных задач.
4 Krendel
 
31.08.11
11:56
(0) потому что пока ты будешь делать проверку, кто-то продаст этот товар. Помойму это же логично  ;-)
5 Krendel
 
31.08.11
11:56
Хоть я и не программист
6 butterbean
 
31.08.11
11:56
(5) заметно
7 Krendel
 
31.08.11
11:58
(6) Ты предлагаешь блокировать товар до проведения транзакции при проверке?
8 palpetrovich
 
31.08.11
11:59
пытаясь осмыслить полученные на сей момент ответы - склоняюсь таки к тому, что это  "Вопрос религии" :)
9 palpetrovich
 
31.08.11
12:01
вот еще один религиозный вопросик, вы за 1 или за 2? :)

1.НоменклатураДокумента = Товары.Выгрузить(, "Номенклатура");
2.
"ВЫБРАТЬ
|    РеализацияТоваровНоменклатура.Номенклатура
|ПОМЕСТИТЬ НоменклатураДокумента
|ИЗ
|    Документ.РеализацияТоваров.Номенклатура КАК РеализацияТоваровНоменклатура
|ГДЕ
|    РеализацияТоваровНоменклатура.Ссылка = &Ссылка
10 Aprobator
 
31.08.11
12:03
(9) я за 1.
11 palpetrovich
 
31.08.11
12:04
+9 прогнал малехо, конечно-же  
|ИЗ
|    Документ.РеализацияТоваров.Товары КАК РеализацияТоваровНоменклатура
12 Aprobator
 
31.08.11
12:04
хотя 1Сы есть 1Сы - надо тестить )
13 palpetrovich
 
31.08.11
12:04
(10) да я тоже, но старый семерошник, 8-ка еще не въелась в кожу...
14 palpetrovich
 
31.08.11
12:05
(12) я проверял, разница невелика. правда проверял на одном товаре в ТЧ... :)
15 palpetrovich
 
31.08.11
12:08
+14 опять соврал :)
сейчас проверил (9) "без примесей" - запрос сожрал 95% времени :))
16 Escander
 
31.08.11
12:09
(8) пример6 остаток на складе 100, 2 юзера списывают по... ну пусть по 60 и 90 - пофиг по скольку!
ю1: смотрим остаток =100
ю2: смотрим остаток =100
ю1: пишем расход 60
ю2: пишем расход 90
ушли остатки в минус.

по новому:
ю1: списываем 60.
ю2 списываем 90.
ю1, ю2 - записываем.
ю1, ю2 - кто первый проверит остатки тот откатится.
остатки неминусовые.

Прифит!
17 Escander
 
31.08.11
12:10
+(16) такое на базах с кучей юзеров возникает не редко!
18 Aprobator
 
31.08.11
12:10
(15) ну лык в 1 м случае сразу из ТЧ выгребаешь, а во втором еще все ссылки на данную ТЧ из общей базы выгрести надо.
19 Mickeleangelo
 
31.08.11
12:11
В том виде, как это записано в (9) 1 и 2 — две большие разницы.
20 palpetrovich
 
31.08.11
12:14
(16) я проникся, начиная еще с (4) :)
(18) эт понятно, просто рекомендуют вездьде где надо и где нет - юзать запрос
(19) ну, не такие уж и большие. в данном случае временная таблица - тот-же список. я неправ?
21 organizm
 
31.08.11
12:15
(18) во 2-м случае если еще есть RLS , то может вылезти и превышение 256 таблиц в запросе на SQLе
22 palpetrovich
 
31.08.11
12:17
(21) не в данном случае  - эт точно :)
23 Stepa86
 
31.08.11
12:18
(9) ничо, что в первом примере ты берешь с объекта, а во втором из данных базы? и второй пример видимо получает данные для следующего запроса, а в первом ты просто получил еще одну таблицу
24 hhhh
 
31.08.11
12:18
(20) тут не в скорости дело. Первый вариант однозначно не подходит, потому что он берет данные не из базы, а то что у пользователя на экране. Потом пользователь нажмет Esc и эта номенклатура исчезнет, как бы ее никогда не было.

А второй вариант - там всё железно, данные берутся из базы и в журнале регистрации есть строчка, когда они были туда записпаны и кто их туда записал.
25 unregistered
 
31.08.11
12:19
(16) При правильном и своевременном наложении исключительных блокировок первая ситуация (с уходом остатков в минус) невозможна, т.к. блокировки будут наложены ПЕРЕД выполнением чтения остатков и вплоть до окончания проведения. То есть .2 не сможет проверить остатки до тех пор пока ю1 не закончит проведение.

Суть нового метода в том, чтобы, во-первых, уменьшить время блокирования, а, во-вторых, избавить от необходимости прописывать управляемые блокировки (достаточно перед записью движений указать Движения.МойРегистр.БлокироватьДляИзменения=Истина, чтобы установились правильные блокировки для нужных диапазонов записей).
26 Mickeleangelo
 
31.08.11
12:20
(20) Неправ.
1.1 Вариант ДокументСсылка.Товары.Выгрузить() приводит к полному чтению объекта из базы
1.2 Вариант ДокументОбъект.Товары.Выгрузить() формирует список из того, что есть в ТЧ данного экземпляра объекта. К примеру, он может быть неактуальным или некорректным
2 Берет данные, которые есть в базе
27 unregistered
 
31.08.11
12:20
(25) *  .2 = ю2
28 Escander
 
31.08.11
12:22
(25)да, давайте почаще будем локировать таблицу и на подольше желательно.... а они там корячатся ещё и управляемые блокировки придумывают...
29 unregistered
 
31.08.11
12:23
(28) Это к чему?
Не понял твоего высказывания.
30 palpetrovich
 
31.08.11
12:24
(23) ну конечно раз ПОМЕСТИТЬ - то для следующего... кста и "Выгрузить" я тоже не просто так, тоже для запроса (другого)
(26) ваще-т, в данном, случае речь идет о интеракивном проведении
31 Aprobator
 
31.08.11
12:24
во народ разошелся. Имхо (9) можно юзать только в модуле проведения документа.
32 unregistered
 
31.08.11
12:24
(9) Ключевой вопрос где этот код используется?
33 Escander
 
31.08.11
12:24
(26) ага, любое чтение всёравно будет сконвертировано в запрос, но когда указано что читать (вариант2) - запрос может быть проще (документ может быть сборкой многих таблиц(зависит от количества ТЧ))
34 Escander
 
31.08.11
12:26
(9) выгрузить() метод серверный, так что со стороны сервера.
35 Поручик
 
31.08.11
12:27
(9) я за 2.
36 palpetrovich
 
31.08.11
12:27
(32) в модуле проведения документа
немного конкретики, собственно концепция "СначалаПроводимПоЛюбому" - меня несколько озадачила в разрезе проведения по регистру Партии... где мне взять для такого проведения собственно "Партию" и , соответственно - Себестоимость?
37 Поручик
 
31.08.11
12:29
(36) В модуле проведения однозначно вариант 2.
38 Aprobator
 
31.08.11
12:29
(36) достаточно чтобы документ был записан. Перед проведением документ всяко записывается. В форме же за этим надо смотреть.
39 Aprobator
 
31.08.11
12:30
(37) почему?
40 palpetrovich
 
31.08.11
12:31
(37) к сожалению для меня неоднозначно ...разве что при групповом проведении будет выгода
41 palpetrovich
 
31.08.11
12:32
(38) подбор партий идет на этапе проведения, никак не в форме
42 Mickeleangelo
 
31.08.11
12:33
(33) Чтение да, в запрос, а то и несколько, если считываются данные по ссылке. А вот выгрузка ТЧ у уже считанного объекта разве вызовет обращение к серверу? В общем случае.

Если готовить об обработке проведения, то список номенклатуры всё равно получается для каких-то нужд? Для подстановки в отбор по остаткам/партиям? Тогда почему Выгрузить(), а не ВыгрузитьКолонку()? Но всё равно я за вариант 2, т.к. с помощью временных таблиц и пакетного запроса можно значительно уменьшить время проведения.
43 unregistered
 
31.08.11
12:33
(36) >> где мне взять для такого проведения собственно "Партию" и , соответственно - Себестоимость?

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

новая идеология применима только для регистров, где контролируется количество товара (нет расчета себестоимости и нет партий - то есть только те данные (номенклатура, склад), которые есть в документе).
44 acsent
 
31.08.11
12:34
(16) А блокировки?
45 acsent
 
31.08.11
12:34
Новая модельнужна чтобы не париться с блокировками. Провели документ хитропопым агоритмом - получили набор записей - заблокировали
46 unregistered
 
31.08.11
12:34
Escander, что за бред в (28)?
47 palpetrovich
 
31.08.11
12:35
(43) фух, наконец-то, спасибо :)
48 Ахиллес
 
31.08.11
12:37
(43) А там где нет партий, там покласть с прибором спишется товар в минус или не спишется. То есть новый способ проведения вообще никогда не применим на практике.
49 palpetrovich
 
31.08.11
12:38
+47 просто у Радченко не рассматривается вопрос Партий, а я как-то привык к ним ...вот и леплю горбатого малехо по-своему  :)
...или я еще не дошел до раздела партий
(48) ну почему, все логично - списали в минус - получили "откат"
50 Ахиллес
 
31.08.11
12:41
(49) И что в этом логичного? Например продавеца на кассе не должно парить сколько там по учёту товара числится. Перед ним ледит товар, он его продаёт. А уж не заведён приход или пересорт или ещё какая фигня, это пусть у менеджеров голова болит. Покупатель не должен стоять и ждать пока продавец разберётся почему чек не проводится.
51 unregistered
 
31.08.11
12:42
(48) почему неприменим?

>> там где нет партий, там покласть с прибором спишется товар в минус или не спишется.

почему покласть?

Суть как раз в том и состоит, что при оперативном проведении нам себестоимость нафиг не нужна. Главное проверить есть товар в принципе или нет. А уже потом (регламентом ночью или обработкой или еще как-то) документ проводится неоперативно с расчетом себестоимости по партиям.
52 palpetrovich
 
31.08.11
12:42
(50) чек проведется по-любому, он товары не списывает.На то есть ОтчетОРозничнызхПродажах
53 Escander
 
31.08.11
12:42
(46) чего бред? Время блокировки по новому меньше в этом профит!
54 unregistered
 
31.08.11
12:45
(53) Аааа... Просто я не понял твоего высказывания.
55 Ахиллес
 
31.08.11
12:45
Какая тогда разница, не спишется товар или уйдёт в минус? Если это потом всё равно регламентами исправляется?
56 palpetrovich
 
31.08.11
12:47
кста, сейчас подумал ...такая вот временная шкала:
было 5шт товара
1-й пользователь провел свой док, списал 3 шт
2-й пользователь провел свой док, списал 4 шт
1-й начал проверять остатки - получил минус - получил ОТКАЗ :)
57 zbv
 
31.08.11
12:48
(56) у 2-го транзакция не завершена, так что 1 минус не получит.
58 unregistered
 
31.08.11
12:49
(50) Ты совершенно прав. В рознице, как правило, так и есть.

Но у всех при этом поразному. Кто-то требует контроля остатков при продаже, кто-то отключает контроль остатков, а у кого-то продавец во фронт-офисе тупо фиксирует выручку и оборот проданного товара, не касаясь ни каким боком остатков, которые списываются с расчетом себестоимости в бэк-офисе.
59 unregistered
 
31.08.11
12:49
(56) 2-ой не сможет начать проведение, пока первый не закончит проведение и проверки.
60 Ахиллес
 
31.08.11
12:50
Остаток товара 1шт.
Продали 2шт.
Ситуация а) Товар не списался (новый способ проведения)
Ситуация б) Товар списался в минус
Завели приход перед продажей, перепровели продажу, товар списался.
Ну и в чём профит нового способа проведения? Только лишние блокировки, хоть и меньше, чем при проведении по партиям.
61 palpetrovich
 
31.08.11
12:53
(57) и что, в регистр-то по любому запись пойдет. И по-фиг что потом откатится, первый-то уже получил свой отказ ...так что чисто теоретически такая ситация возможна
62 Alexandr Puzakov
 
31.08.11
12:54
Так, чисто статистически. Сколько документов у вас "откатывается"? 1 из 100? 1 из 1000? Ничего критичного в этом нет, а удобнее в разы.
63 Ахиллес
 
31.08.11
12:55
Лучше бы с проведением по партиям что нибудь придумали. Что бы не приходилось перепроводить от Моисея, если кто то залезет и ранний приход исправит.
64 palpetrovich
 
31.08.11
12:57
(62) кто их там считает
(63) а что тут придумаешь? разве что выбирать "подчиненные" и перепроводить, но это муторно
65 Ахиллес
 
31.08.11
12:59
(64) Тут, я с тобой согласен. Что бы что то придумать надо хотя бы начать думать, а это муторно :-)
66 Alexandr Puzakov
 
31.08.11
13:00
(9) Это не вопрос религии, а удобство. Смотри процедуру менеджера документа ИнициализироватьДанныеДокумента(). Там пакетным запросом подготавливаются и потом выплевываются таблицы значений, эти таблицы значений загружаются в регистры с помощью методов регистров Загрузить(). Легкость разработки существенно облегчается.
67 Ахиллес
 
31.08.11
13:02
На (55)+(60) кто нить может ответить? В чем профит по сравнению со списанием в минус, если и там и там потребуются регламентные операции по исправлению?
68 Aleksey
 
31.08.11
13:03
(59) Тогда какая разница сначало проверка потом списания, или сначало списание - потом проверка, если все равно второй ждет первого? И если сначало идет проверка то иногда будет выйгрыш по времени за счет отказа в проведении
69 palpetrovich
 
31.08.11
13:08
(66) нет такой :)
(67) ну профит наверное в том, что документ вообще не проводится, следовательно оперция купли-продажи не выполняется и менеджер сосет лапу :)
70 Ахиллес
 
31.08.11
13:10
(69) Мне утверждали, что проводится. см. (50) и пофиг на конкретную реализацию, важна сама ситуация.
71 palpetrovich
 
31.08.11
13:13
(70) там речь о рознице, там подход другой - по факту наличия товара, на базу данных - начхать ...и это правильно :)
2All: всем Спасибо! просветление в общении приходит быстрее :)
72 hhhh
 
31.08.11
13:16
(70) там профит в другом. 99% всех документов, где всё нормально и никаких откатов и минусов не будет, там сначала списание - потом проверка однозначно быстрее, потому что меньше времени на транзакцию. И будет офигенный выигрыш.

А то, что вы обсуждаете - это всего 1%, поэтому глубоко наплевать, будет там выигрыш или проигрыш.
73 Ахиллес
 
31.08.11
13:19
(72) Тогда почему нельзя то же для партий сделать? Не будет никакого выигрыша, если по партиям медленный способ проведения, а по остаткам быстрый. Скорость эскадры равна скорости самого медленного корабля.
74 Alexandr Puzakov
 
31.08.11
13:20
+(66) на примере.

- беру УТ11;
- добавляю новый оборотный регистр накопления с измерениями Партнер, Номенклатура и ресурсами Количество, Сумма (условный регистр);
- в процедуре ИнициализироватьДанныеДокумента() добавляю новый запрос в пакет запросов:

"////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    &Партнер КАК Партнер,
|    РеализацияТоваровУслугТовары.Номенклатура,
|    РеализацияТоваровУслугТовары.Количество,
|    РеализацияТоваровУслугТовары.Сумма
|ИЗ
|    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
|    РеализацияТоваровУслугТовары.Ссылка = &Ссылка"

- тут же несколькими строками ниже
ТаблицыДляДвижений.Вставить("ТаблицаМоиДвижения", Результат[17].Выгрузить());
- добавляю (копированием) процедуру в общем модуле ПродажиСервер

Процедура ОтразитьДвиженияПоМоемуРегистру(ДополнительныеСвойства, Движения, Отказ) Экспорт

   Таблица = ДополнительныеСвойства.ТаблицыДляДвижений.ТаблицаМоиДвижения;
   
   Если Отказ ИЛИ Таблица.Количество() = 0 Тогда
       Возврат;
   КонецЕсли;

   Движения.МойРегистр.Записывать = Истина;
   Движения.МойРегистр.Загрузить(Таблица);

КонецПроцедуры

- в процедуре обработки добавляю одну строчку
ПродажиСервер.ОтразитьДвиженияПоМоемуРегистру(ДополнительныеСвойства, Отказ);


Пять минут делов и проведение по новому регистру готово!
75 Alexandr Puzakov
 
31.08.11
13:21
в процедуре обработки = в процедуре обработки проведения
76 hhhh
 
31.08.11
13:22
(73) ну в бухгалтерии партионный учет редко используется. Вот для УТ это бы было актуально.
77 palpetrovich
 
31.08.11
13:25
(74) подскажи что такое "ИнициализироватьДанныеДокумента"? СП про нее ничего не говорит, в стандартных модуляМенеджераДокумента тоже не нахожу
(76) ну не для всех Бух, для Украинской - всегда актуально было ;)
78 palpetrovich
 
31.08.11
13:26
+77   платформа - 8.2.13.219
79 Alexandr Puzakov
 
31.08.11
13:27
(77) процедура модуля менеджера документа. Создается вручную, СП о ней ничего и не слышал :) Во всех новых типовых так проведение реализовано.
80 Alexandr Puzakov
 
31.08.11
13:28
(78) если смотришь старые конфы (обычное приложение), то там еще по-старому делают.
81 Alexandr Puzakov
 
31.08.11
13:28
(78) глобальный поиск их на раз находит ;)
82 palpetrovich
 
31.08.11
13:33
(79) единственная процедура модуля менеджера документа у меня - ОбработкаПолученияДанныхВыбора(...
и "новых типовых" у меня нет, рисую нетленку по Радченко :)
83 acsent
 
31.08.11
13:37
(56) Про транзакции и уровни изоляции слышал когданибудь?
84 unregistered
 
31.08.11
13:37
(68) >> Тогда какая разница сначало проверка потом списания, или сначало списание - потом проверка

Большая:

Время действия блокировок.

       первый способ:
1. Накладываем блокировки (в коде прописываются управляемые блокировки)
2. Читаем остатки
3. Проверяем нехватку
4. Формируем наборы записей
5. Записываем наборы записей (как правило, автоматически - по окончании обработки проведения).

       второй способ:
1. Формируем наборы записей
2. Записываем наборы записей (принудительно методом Записать)
3. Накладываются блокировки при записи наборов записей (система сама накладывает блокировки по нужным измерениям - ни чего прописывать в коде не надо)
4. Читаем остатки
5. Проверяем нехватку, откатываем, если не хватает.

В первом случае блокировка действует в течении почти всего времени проведения.
Во втором - только с момента записи наборов (до записи, пока формируем наборы, блокировок нет).
85 Ахиллес
 
31.08.11
13:39
Никогда не понимал людей ваяющих свои нетленки с нуля. Когда можно просто допилить торговлю или бухгалтерию. Особенно если эти нетленки повторяют функционал типовой конфы какой нить в основном.
86 Alexandr Puzakov
 
31.08.11
13:42
+(84) и если в старом варианте делали так:

- обращаемся в долгом запросе к куче таблиц (долгое и нужное ж-ж-ж-ж-ж-ж-ж-ж по таблицам);
- записываем данные в регистры;

То в новом варианте так:
- быстрым запросом вытягиваем данные из документа (вжик! и данные у нас);
- записываем данные в регистры;
- проверяем, чего там напроводили.
87 ptiz
 
31.08.11
13:43
(84) И где разница?

В 1 варианте время действия блокировок:
п.2, п.3, п.4, п.5

Во 2 варианте время действия блокировок точно такое же, но в другом порядке. Кроме "Формируем наборы записей" , но он, как правило очень быстрый.

Зато имеем дополнительную нагрузку на сервер в виде записи в базу и отката транзакции в случае неудачи.

По-моему, этот минус всё перевешивает.
88 unregistered
 
31.08.11
13:44
(85) Типовые слишком перегружены функционалом. Из-за это слишком медленны.

Когда тебе нужны только два документа, три справочника и пара регистров, гораздо проще написать своё, чем выкидывать лишнее из типовой. Тупо устанешь выкидывать и при этом всё равно останется куча лишнего, т.к. очень многое тесно завязано.
89 ptiz
 
31.08.11
13:44
В ветку призывается МуМу !
90 unregistered
 
31.08.11
13:45
(87) >> Кроме "Формируем наборы записей" , но он, как правило очень быстрый.

Кто тебе обещал, что этот этап быстрый? Назови его фамилию и перечень клятв, какие он приносил.
91 ptiz
 
31.08.11
13:46
(90) создать объект "НаборЗаписей" и загрузить туда готовую ТЗ - это тьфу.
92 unregistered
 
31.08.11
13:46
(87) >> Зато имеем дополнительную нагрузку на сервер в виде записи в базу и отката транзакции в случае неудачи.

Подразумевается, что откат происходит редко. Это исключительная ситуация.
Если у вас откат приходится делать постоянно, то данный метод действительно неудобен будет.
93 ОчкарикСлава
 
31.08.11
13:46
что опять ломать копья? почитайте Радченко, он всё по пунктам разъясняет, почему так делать лучше...
94 unregistered
 
31.08.11
13:47
(91) А готовая ТЗ из воздуха берется?

Круто...
95 ptiz
 
31.08.11
13:50
(94) Писатель?
"2. Читаем остатки"
96 unregistered
 
31.08.11
13:57
(95) Вот-вот.

Во втором варианте я в запросе к остаткам укажу "ГДЕ КоличествоОстаток<0". Таким образом в большинстве случаев буду получать пустой результат запроса, а не огромную ТЗ (для случаев если большие табличные части).
97 palpetrovich
 
31.08.11
14:02
(93) Писатель?  Читаем всю ветку :)
98 ОчкарикСлава
 
31.08.11
14:05
(97) читатель. и эту ветку читал и книжку....
99 ОчкарикСлава
 
31.08.11
14:09
100 Grusswelle
 
31.08.11
14:09
1001
101 palpetrovich
 
31.08.11
14:11
(98) плохо читал ибо я не раз в этой ветке упоминал о том что как раз иду "по Радченко" - это раз
у него нигде не рассматирваются 1-ый вариант из (9) - это два
102 ОчкарикСлава
 
31.08.11
14:15
(101) 1-ый вариант из (9) я не исследовал, ничего сказать не могу.а про (0) вот оно.
лпять же схема условная и использовать выгодно не всегда а в наиболее типичном документообороте..
103 palpetrovich
 
31.08.11
14:20
(102) дык, об этом тоже речь  в ветке шла (клчевое слово - партия) ...так что - читатель :)
104 ОчкарикСлава
 
31.08.11
14:26
(103)... ну ладно :) пусть так :) ты победил :)
105 palpetrovich
 
31.08.11
14:40
(104) фух, ну теперь и в отпуск можно :)