Автор Тема: 2.20  (Прочитано 23225 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Heckfy

  • Пользователь
  • **
  • Сообщений: 13
  • ФИО: Руслан
2.20
« : Август 30, 2010, 03:05:44 pm »
Показалась простой. Или я опать накосячил. wacko
Вложения:
2.20.dt

SergTH000

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Сергей
2.20
« Ответ #1 : Август 30, 2010, 11:01:53 pm »
Heckfy, Все здорово)
 Если мы сначала получаем данные запросом из регистра, а потом хотим записать туда что то то блокируем те поля, которые мы выбираем
 Блокировка = Новый БлокировкаДанных;
 ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии");
 ЭлементБлокировки.УстановитьЗначение("Счет", ПланыСчетов.Управленческий.Покупатели);
 ЭлементБлокировки.УстановитьЗначение("Субконто1", Контрагент);
 Блокировка.Заблокировать;
 
Quote
Или я опать накосячил

 Не ошибается тот кто ничего не делает!
« Последнее редактирование: Август 30, 2010, 11:02:39 pm от Сергей »


Heckfy

  • Пользователь
  • **
  • Сообщений: 13
  • ФИО: Руслан
2.20
« Ответ #2 : Август 31, 2010, 03:32:39 pm »
// Точнее по моему синтаксису так:
 Блокировка = Новый БлокировкаДанных;
 ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.Управленческий");
 ЭлементБлокировки.УстановитьЗначение("Счет", ПланыСчетов.Управленческий.Покупатели);
 ЭлементБлокировки.УстановитьЗначение("Субконто1", Покупатель);
 // + Еще это:
 ЭлементБлокировки2 = Блокировка.Добавить("РегистрСведений.ШкалаКурсовУЕ");
 ЭлементБлокировки2.УстановитьЗначение("Покупатель", Покупатель);
 ЭлементБлокировки2.УстановитьЗначение("Период", Дата);

Блокировка.Заблокировать();

Спасибо. Кажется, разобрался.

Добавлено (31.08.2010, 15:32)
 ---------------------------------------------
 http://azbuka-1c.narod.ru/V8AddDoc81.htm
 Механизм управляемых блокировок

« Последнее редактирование: Август 31, 2010, 03:45:18 pm от Руслан »

petrov86

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Петров
2.20
« Ответ #3 : Август 31, 2010, 03:35:30 pm »
Quote (Heckfy)
Спасибо. Кажется, разобрался.

 А я вот нет.
 Смотрю кто-то использует БлокироватьДляИзменения, а кто то БлокировкаДанных.
 В каких случаях использовать БлокироватьДляИзменения, а в каких объект типа БлокировкаДанных?
 Подскажи, если знаеш.
« Последнее редактирование: Август 31, 2010, 03:35:53 pm от Петров »

SergTH000

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Сергей
2.20
« Ответ #4 : Август 31, 2010, 03:47:12 pm »
Heckfy, Регистр Сведений то зачем блокировать? Во первых ты его при проведении не меняешь, а во вторых он сам никому не даст записать туда разные записи на один период! Блокируем только РН И РБ
« Последнее редактирование: Август 31, 2010, 03:49:37 pm от Сергей »

Heckfy

  • Пользователь
  • **
  • Сообщений: 13
  • ФИО: Руслан
2.20
« Ответ #5 : Август 31, 2010, 03:53:20 pm »
Синтаксис помошник:
 БлокироватьДляИзменения (LockForUpdate)
 Использование:
 Чтение и запись.
 Описание:
 Тип: Булево. Устанавливает режим, при котором в процессе записи набора будет установлена управляемая блокировка для всех комбинаций измерений в соответствии с записями набора записей. Имеет смысл использовать, если проверка итогов регистра выполняется после записи и заблокировать нужно именно те комбинации, по которым записываются записи. В этом случае можно не использовать объект БлокировкаДанных.
 При попытке использования в автоматическом режиме блокировки вызывает исключительную ситуацию. После успешной записи документа свойство устанавливается в Ложь у всех наборов записей.
 При отмене транзакции значение свойства восстанавливается в состояние до транзакции.

Т.е. сделал движения. И автоматически заблокировал те измерения по которым делал движения на время анализа (пока не вышел из транзакции).

А этим ты сам выбираешь, что блокировать перед считыванием. Что бы данные оставались актуальными.

// Точнее по моему синтаксису так:
 Блокировка = Новый БлокировкаДанных;
 ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.Управленческий");
 ЭлементБлокировки.УстановитьЗначение("Счет", ПланыСчетов.Управленческий.Покупатели);
 ЭлементБлокировки.УстановитьЗначение("Субконто1", Покупатель);
 // + Еще это:
 ЭлементБлокировки2 = Блокировка.Добавить("РегистрСведений.ШкалаКурсовУЕ");
 ЭлементБлокировки2.УстановитьЗначение("Покупатель", Покупатель);
 ЭлементБлокировки2.УстановитьЗначение("Период", Дата);


SergTH000

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Сергей
2.20
« Ответ #6 : Август 31, 2010, 04:00:40 pm »
Quote
Еще это:
 ЭлементБлокировки2 = Блокировка.Добавить("РегистрСведений.ШкалаКурсовУЕ");
 ЭлементБлокировки2.УстановитьЗначение("Покупатель", Покупатель);
 ЭлементБлокировки2.УстановитьЗначение("Период", Дата);

Heckfy , Все таки РС блокировать не надо cool


petrov86

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Петров
2.20
« Ответ #7 : Август 31, 2010, 04:30:36 pm »
Quote (Heckfy)
Устанавливает режим, при котором в процессе записи набора будет установлена управляемая блокировка для всех комбинаций измерений в соответствии с записями набора записей.

 На момент когда мы ставим блокироватьотизменений в истину. У нас ещё нет комбинаций. Может у нас будет движение по складу 1 может по складу 2. Как система заблокирует комбинацию, если ещё нет самой комбинации?
 
Quote (Heckfy)
Т.е. сделал движения. И автоматически заблокировал те измерения по которым делал движения на время анализа (пока не вышел из транзакции).

 Вот это я больше всего не пойму. Пока мы не вызовем методы добавитьприход или добавитьрасход или просто добавить, у нас нет самого движения.
 Начальные две строчки
 Движения.Взаиморасчёты.Очистить();
 Движения.Взаиморасчёты.Записать();
 это всего лишь очистка старых движений по значению регистратора.
 Дальше идёт
 Движения.Взаиморасчёты.БлокироватьДляИзменения = Истина;
 И здесь вот я вступоре. Что система будет блокировать или это просто деректива, что что -то блокировать мы будем, но не сейчас а позже когда появятся сами движения, т.е. после того как отработают методы добавитьрасход добавить приход и мы заполним их уже реальными данными?
 Про объект БлокировкуДанных понял. спасибо. Здесь конкретно указываем что блокировать.
 Но мне вот хочется чтоб система сама делала это. Т.е. БлокироватьДляИзменения мне больше нравится. Но не пойму как это работает. Если оно действительно хорошо работает, то я предпочту всегда использовать БлокироватьДляИзменения. Код короче. Но пока есть сомнение что это работает так как надо и в том что её можно использовать всегда.
« Последнее редактирование: Август 31, 2010, 04:31:19 pm от Петров »

SergTH000

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Сергей
2.20
« Ответ #8 : Август 31, 2010, 05:50:35 pm »
Quote
Движения.Взаиморасчёты.БлокироватьДляИзменения = Истина;

 Идет после записи. Те после добавления прихода / расхода. Например для новой методики.
 Движения.Взаиморасчёты.БлокироватьДляИзменения = Истина;
 
Quote
И здесь вот я вступоре. Что система будет блокировать или это просто деректива, что что -то блокировать мы будем, но не сейчас а позже когда появятся сами движения, т.е. после того как отработают методы добавитьрасход добавить приход и мы заполним их уже реальными данными?

 Вот именно здесь идет Блокировка = Новый БлокировкаДанных

petrov86

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Петров
2.20
« Ответ #9 : Август 31, 2010, 05:53:34 pm »
Quote (SergTH000)
Вот именно здесь идет Блокировка = Новый БлокировкаДанных

 Эти слова я писал для механизма с использованием БлокироватьДляИзменения.

Heckfy

  • Пользователь
  • **
  • Сообщений: 13
  • ФИО: Руслан
2.20
« Ответ #10 : Август 31, 2010, 06:38:14 pm »
Quote (SergTH000)
Heckfy , Все таки РС блокировать не надо

 Почему это?

Добавлено (31.08.2010, 18:38)
 ---------------------------------------------
 

Quote (petrov86)
Вот это я больше всего не пойму. Пока мы не вызовем методы добавитьприход или добавитьрасход или просто добавить, у нас нет самого движения. Начальные две строчки Движения.Взаиморасчёты.Очистить(); Движения.Взаиморасчёты.Записать(); это всего лишь очистка старых движений по значению регистратора. Дальше идёт Движения.Взаиморасчёты.БлокироватьДляИзменения = Истина; И здесь вот я вступоре. Что система будет блокировать или это просто деректива, что что -то блокировать мы будем, но не сейчас а позже когда появятся сами движения, т.е. после того как отработают методы добавитьрасход добавить приход и мы заполним их уже реальными данными? Про объект БлокировкуДанных понял. спасибо. Здесь конкретно указываем что блокировать. Но мне вот хочется чтоб система сама делала это. Т.е. БлокироватьДляИзменения мне больше нравится. Но не пойму как это работает. Если оно действительно хорошо работает, то я предпочту всегда использовать БлокироватьДляИзменения. Код короче. Но пока есть сомнение что это работает так как надо и в том что её можно использовать всегда.

1-й Способ.
 Мы блокируем данные которые нужно считать методом Блокировка = Новый БлокировкаДанных
 и работаем.
 2-й Спосом.
 Мы делаем движения. Записываем. И блокируем их методом Движения.Взаиморасчёты.БлокироватьДляИзменения = Истина;
 Проверяем наличее отрицательных остатков и работаем дальше.

« Последнее редактирование: Август 31, 2010, 06:38:44 pm от Руслан »

petrov86

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Петров
2.20
« Ответ #11 : Август 31, 2010, 06:52:04 pm »
Quote (Heckfy)
2-й Спосом. Мы делаем движения. Записываем. И блокируем их методом Движения.Взаиморасчёты.БлокироватьДляИзменения = Истина; Проверяем наличее отрицательных остатков и работаем дальше.

 Смотрел видео бесплатного материала с http://www.spec8x.ru/
 Там была задачи по оперативному учёту по 8.2
 Не было там проверки отрицательных остатков.
 И здесь на форуме не видел пока ни одного решения с проверкой отрицательных остатков.

SergTH000

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Сергей
2.20
« Ответ #12 : Август 31, 2010, 06:52:56 pm »
Heckfy, сообщение №5

Heckfy

  • Пользователь
  • **
  • Сообщений: 13
  • ФИО: Руслан
2.20
« Ответ #13 : Сентябрь 01, 2010, 03:52:08 pm »
Quote (SergTH000)
Heckfy, сообщение №5

 
Quote (SergTH000)
Heckfy, Регистр Сведений то зачем блокировать? Во первых ты его при проведении не меняешь, а во вторых он сам никому не даст записать туда разные записи на один период! Блокируем только РН И РБ

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

Добавлено (01.09.2010, 15:52)
---------------------------------------------

Quote (petrov86)
Смотрел видео бесплатного материала с http://www.spec8x.ru/ Там была задачи по оперативному учёту по 8.2 Не было там проверки отрицательных остатков. И здесь на форуме не видел пока ни одного решения с проверкой отрицательных остатков.

http://nashe1c.ru/materials-view.jsp?id=321

« Последнее редактирование: Сентябрь 01, 2010, 03:50:59 pm от Руслан »

August

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Сергей
2.20
« Ответ #14 : Октябрь 05, 2010, 10:46:12 am »
Quote (Heckfy)
// Точнее по моему синтаксису так:
 Блокировка = Новый БлокировкаДанных;
 ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.Управленческий");
 ЭлементБлокировки.УстановитьЗначение("Счет", ПланыСчетов.Управленческий.Покупатели);
 ЭлементБлокировки.УстановитьЗначение("Субконто1", Покупатель);
 // + Еще это:
 ЭлементБлокировки2 = Блокировка.Добавить("РегистрСведений.ШкалаКурсовУЕ");
 ЭлементБлокировки2.УстановитьЗначение("Покупатель", Покупатель);
 ЭлементБлокировки2.УстановитьЗначение("Период", Дата);
 Блокировка.Заблокировать();

т.е это нужно в модуле документа Расходная накладная написать вместо:

Движения.Управленческий.БлокироватьДляИзменения = Истина;
 Движения.Управленческий.Записать();

или как?