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

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

Odines

  • Проверенный
  • ***
  • Сообщений: 112
  • ФИО: Odines
Re: 1.6
« Ответ #345 : Январь 21, 2015, 07:07:32 pm »
Подскажите пожалуйста, не понял как реализовать: Документ задним числом вводить нельзя, но можно открыть существующий документ и перепровести его.

Не надо это никак реализовывать.
А так не правильно?

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
   
   Если ЭтоНовый() И РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
      Если НачалоДня(ТекущаяДата()) > НачалоДня(Дата) Тогда
            Сообщить("Документы задним числом не вводятся!");
         Отказ = Истина;
      КонецЕсли;
   ИначеЕсли РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
      Если НачалоДня(ТекущаяДата())>НачалоДня(Дата)
          И Дата <> Ссылка.Дата Тогда
            Сообщить("Документы задним числом не вводятся!");
         Отказ = Истина;
      КонецЕсли;
   КонецЕсли;
   
КонецПроцедуры

program1Cer

  • Новичок
  • *
  • Сообщений: 8
  • ФИО: Алексей
Re: 1.6
« Ответ #346 : Февраль 01, 2015, 02:28:02 pm »
Немного смущает такой метод, на экзамене такое решение примут? Формально мы вводим новый документ, но фактически мы вводим документ задним числом, т.е. подменили реквизит документа "дата", на реквизит "дата фактического поступления" и все, да и все движения он формирует задним числом. Формально, да, дата документа текущая, но если представить, что движения задним числом разрешены, то это будет абсолютно такое же решение, только без реквизита "дата поступления товара". Опасаюсь не будет на экзамене это расцениваться как попытка надуть экзаменатора и вводить документы задним числом, используя вместо стандартного реквизита "дата" свой "дата фактического поступления"?

Не тебя одного смущает, здесь вся тема об этом моменте. Фактически это ввод в систему движений задним числом. Чем это отличается от ввода документов задним числом? Формулировкой? Придерутся или нет? Да здесь Павел Чистов может ответить, все условия соблюдены, если сдавать преподавателю, да еще удаленно, то так не ответишь. А вот если движения не вводить задним числом, то задача сразу приобретает сложность. И сторно в приходной накладной это один самых простых способов.


GROOVY

  • Администратор
  • Старожил
  • *****
  • Сообщений: 284
  • ФИО: Павел Чистов
Re: 1.6
« Ответ #347 : Февраль 01, 2015, 05:03:44 pm »
Я всегда готов обсудить нормально описанное решение.
Сделайте статью похожую по формату на мою и будем дискутировать.

Нули в стоимость писать нельзя - это неправильно даже с тупой точки зрения кладовика, он же материально ответственное лицо. Потом сторнировать что-то. Это не учет, а поделка программиста-стажера.

Я сейчас не в коем случае не хочу авторитетом давить, это просто мое мнение. И оно может быть ошибочным.

program1Cer

  • Новичок
  • *
  • Сообщений: 8
  • ФИО: Алексей
Re: 1.6
« Ответ #348 : Февраль 01, 2015, 06:49:12 pm »
На статью конечно не претендую. Но при данном решении я исходил из следующих соображений:

Если отрицательные остатки разрешены, то кто запретит жить "неправильно", то есть сразу начать учет с РН? Данных по приходу нет, откуда взять стоимость? Она будет 0 и с этим стоит смириться. Дальше у меня было две мысли по "приходу" (поймите правильно =) ).

1. Через ДатуПоступления. В данном случае достаточно перепровести все РН начиная с Даты поступления. Способ реализации либо через последовательности, либо еще как-то.

2. "Честный" способ. Поступление оформлено позже, возникает необходимость убрать записи без сумм и пересчитать стоимость. Таким образом расходные движения будут формироваться и в расходной накладной и в приходной накладной. Здесь я и подумал, что вот он "пойнт" задания, написать универсальный алгоритм списания и для документов ПН и РН.

В итоге вышло вот что:
Процедура СписаниеПоПартиям(ДатаОстатков, Документы, Период, ДвиженияОстаткиНоменклатуры, ДвиженияПродажи, Отказ) Экспорт

РазрешитьОтрицательныеОстатки = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Период).РазрешитьОтрицательныеОстатки;
Если РазрешитьОтрицательныеОстатки = Неопределено Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не установлена учетная политика!";
Сообщение.Сообщить();
Отказ = Истина;
Возврат;
КонецЕсли;


ЗапросСписокНомеклатуры = Новый Запрос;
ЗапросСписокНомеклатуры.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ЗапросСписокНомеклатуры.Текст =
"ВЫБРАТЬ
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
| СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
| СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма
|ПОМЕСТИТЬ ВТСписокНоменклатуры
|ИЗ
| Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
|ГДЕ
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка В (&СписокДокументов)
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура";
ЗапросСписокНомеклатуры.УстановитьПараметр("СписокДокументов", Документы);
ЗапросСписокНомеклатуры.Выполнить();


ЗапросДляБлокировки = Новый Запрос("ВЫБРАТЬ Номенклатура ИЗ ВТСписокНоменклатуры");
ЗапросДляБлокировки.МенеджерВременныхТаблиц = ЗапросСписокНомеклатуры.МенеджерВременныхТаблиц;
РезультатЗапроса = ЗапросДляБлокировки.Выполнить();

БлокировкаДанных = Новый БлокировкаДанных();
ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.ИсточникДанных = РезультатЗапроса;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
БлокировкаДанных.Заблокировать();

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = ЗапросСписокНомеклатуры.МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиНоменклатурыОстатки.Номенклатура,
| ОстаткиНоменклатурыОстатки.СрокГодности,
| ОстаткиНоменклатурыОстатки.Партия,
| ОстаткиНоменклатурыОстатки.КоличествоОстаток,
| ОстаткиНоменклатурыОстатки.СуммаОстаток,
| ОстаткиНоменклатурыОстатки.СуммаОстаток / ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК СебестомостьЗаЕдиницу
|ПОМЕСТИТЬ ВТПартии
|ИЗ
| РегистрНакопления.ОстаткиНоменклатуры.Остатки(
| &МоментВремени,
| Номенклатура В
| (ВЫБРАТЬ
| ВТСписокНоменклатуры.Номенклатура
| ИЗ
| ВТСписокНоменклатуры)) КАК ОстаткиНоменклатурыОстатки
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТСписокНоменклатуры.Номенклатура КАК Номенклатура,
| ВТСписокНоменклатуры.Количество КАК Количество,
| ВТСписокНоменклатуры.Сумма КАК Сумма,
| ЕСТЬNULL(ВТПартии.КоличествоОстаток, 0) КАК КоличествоОстаток,
| ЕСТЬNULL(ВТПартии.СуммаОстаток, 0) КАК СуммаОстаток,
| ЕСТЬNULL(ВТПартии.СебестомостьЗаЕдиницу, 0) КАК СебестоимостьЗаЕдиницу,
| ВТПартии.Партия,
| ВТПартии.СрокГодности КАК СрокГодности
|ИЗ
| ВТСписокНоменклатуры КАК ВТСписокНоменклатуры
| ЛЕВОЕ СОЕДИНЕНИЕ ВТПартии КАК ВТПартии
| ПО ВТСписокНоменклатуры.Номенклатура = ВТПартии.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| СрокГодности,
| СебестоимостьЗаЕдиницу УБЫВ
|ИТОГИ
| МАКСИМУМ(Количество),
| МАКСИМУМ(Сумма),
| СУММА(КоличествоОстаток),
| СУММА(СуммаОстаток)
|ПО
| Номенклатура, СрокГодности";

Запрос.УстановитьПараметр("МоментВремени", ДатаОстатков);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Если НЕ РазрешитьОтрицательныеОстатки Тогда
Пока ВыборкаНоменклатура.Следующий() Цикл
Если ВыборкаНоменклатура.Количество > ВыборкаНоменклатура.КоличествоОстаток Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не хватает товара " + Строка(ВыборкаНоменклатура.Номенклатура) + " " +
Строка(ВыборкаНоменклатура.Количество - ВыборкаНоменклатура.КоличествоОстаток);
Сообщение.Сообщить();
Отказ = Истина;
Возврат;
КонецЕсли
КонецЦикла;
ВыборкаНоменклатура.Сбросить();
КонецЕсли;


Пока ВыборкаНоменклатура.Следующий() Цикл
КоличествоСписано = 0;
СуммаСписано =0;
СуммаПродано = 0;

ВыборкаСрокГодности = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаСрокГодности.Следующий() Цикл
КоличествоСписаноПоСроку = 0;
СуммаСписаноПоСроку =0;

ВыборкаДетальныеЗаписи = ВыборкаСрокГодности.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() И КоличествоСписано <> ВыборкаДетальныеЗаписи.Количество Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
ОсталосьСписать = ВыборкаДетальныеЗаписи.Количество - КоличествоСписано;
КоличествоКСписанию = Мин(ОсталосьСписать, ВыборкаДетальныеЗаписи.КоличествоОстаток);
СуммаКСписанию = ?(КоличествоКСписанию = ВыборкаДетальныеЗаписи.КоличествоОстаток,
ВыборкаДетальныеЗаписи.СуммаОстаток,
КоличествоКСписанию*ВыборкаДетальныеЗаписи.СуммаОстаток/ВыборкаДетальныеЗаписи.КоличествоОстаток);

Если СуммаКСписанию и КоличествоКСписанию Тогда
Движение = ДвиженияОстаткиНоменклатуры.ДобавитьРасход();
Движение.Период = Период;
Движение.Номенклатура = ВыборкаНоменклатура.Номенклатура;
Движение.СрокГодности = ВыборкаДетальныеЗаписи.СрокГодности;
Движение.Партия = ВыборкаДетальныеЗаписи.Партия;
Движение.Количество = КоличествоКСписанию;
Движение.Сумма = СуммаКСписанию;

КоличествоСписано = КоличествоСписано + КоличествоКСписанию;
СуммаСписано = СуммаСписано + СуммаКСписанию;

КоличествоСписаноПоСроку = КоличествоСписаноПоСроку + КоличествоКСписанию;
СуммаСписаноПоСроку = СуммаСписаноПоСроку + СуммаКСписанию;

КонецЕсли;
КонецЦикла;

СуммаКПродаже = ?(КоличествоСписано = ВыборкаНоменклатура.Количество,
ВыборкаНоменклатура.Сумма - СуммаПродано,
КоличествоСписаноПоСроку*ВыборкаНоменклатура.Сумма/ВыборкаНоменклатура.Количество);

Движение = ДвиженияПродажи.Добавить();
Движение.Период = Период;
Движение.Номенклатура = ВыборкаСрокГодности.Номенклатура;
Движение.СрокГодности = ВыборкаСрокГодности.СрокГодности;

Движение.Количество = КоличествоСписаноПоСроку;
Движение.Сумма = СуммаКПродаже;
Движение.Себестоимость = СуммаСписаноПоСроку;

СуммаПродано = СуммаПродано + СуммаКПродаже;
КонецЦикла;
Если РазрешитьОтрицательныеОстатки
И ВыборкаНоменклатура.КоличествоОстаток = КоличествоСписано
И ВыборкаНоменклатура.Количество > КоличествоСписано Тогда

Движение = ДвиженияОстаткиНоменклатуры.ДобавитьРасход();
Движение.Период = Период;
Движение.Номенклатура = ВыборкаНоменклатура.Номенклатура;
Движение.Количество = ВыборкаНоменклатура.Количество - КоличествоСписано;

Движение = ДвиженияПродажи.Добавить();
Движение.Период = Период;
Движение.Номенклатура = ВыборкаНоменклатура.Номенклатура;
Движение.Количество = ВыборкаНоменклатура.Количество - КоличествоСписано;
Движение.Сумма = ВыборкаНоменклатура.Сумма - СуммаПродано;

КонецЕсли;
КонецЦикла;
КонецПроцедуры


Реализуется тоже итеративно. Сначала обычное списание с контролем остатков, потом функционал позволяющий отрицательные остатки.
Громоздкий код, да. Что он дает?
Проведение РН элементарное:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)

Движения.ОстаткиНоменклатуры.Записывать = Истина;
Движения.Продажи.Записывать = Истина;

Движения.ОстаткиНоменклатуры.Записать();

СписокДокументов = Новый Массив();
СписокДокументов.Добавить(Ссылка);
ДатаОстатков = ?(РежимПроведенияДокумента.Оперативный = РежимПроведения, '00010101', МоментВремени());
Документы.РасходнаяНакладная.СписаниеПоПартиям(МоментВремени(), СписокДокументов, Дата,Движения.ОстаткиНоменклатуры, Движения.Продажи, Отказ);
КонецПроцедуры

Проведение ПН, чуть сложнее:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
// Вставить содержимое обработчика.
Движения.ОстаткиНоменклатуры.Записывать = Истина;

РазрешитьОтрицательныеОстатки = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Дата).РазрешитьОтрицательныеОстатки;
Если РазрешитьОтрицательныеОстатки = Неопределено Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не установлена учетная политика!";
Сообщение.Сообщить();
Отказ = Истина;
Возврат;
КонецЕсли;


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура,
| ПриходнаяНакладнаяСписокНоменклатуры.СрокГодности,
| &Ссылка КАК Партия,
| СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
| СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма
|ИЗ
| Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры
|ГДЕ
| ПриходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура,
| ПриходнаяНакладнаяСписокНоменклатуры.СрокГодности";

Запрос.УстановитьПараметр("Ссылка", Ссылка);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
Движение = Движения.ОстаткиНоменклатуры.ДобавитьПриход();
Движение.Период = Дата;
ЗаполнитьЗначенияСвойств(Движение, ВыборкаДетальныеЗаписи);

КонецЦикла;

Движения.Записать();

РазрешитьОтрицательныеОстатки = Истина;

Если РазрешитьОтрицательныеОстатки Тогда


Движения.ОстаткиНоменклатуры.Очистить();
Движения.Продажи.Очистить();


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОстаткиНоменклатурыОбороты.Регистратор,
| ОстаткиНоменклатурыОбороты.КоличествоОборот
|ИЗ
| РегистрНакопления.ОстаткиНоменклатуры.Обороты(, , Регистратор, Партия = ЗНАЧЕНИЕ(Документ.ПриходнаяНакладная.ПустаяСсылка)) КАК ОстаткиНоменклатурыОбороты
|ГДЕ
| ОстаткиНоменклатурыОбороты.КоличествоОборот < 0";

РезультатЗапроса = Запрос.Выполнить();
СписокДокументов = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Регистратор");
Документы.РасходнаяНакладная.СторноДвиженийДокументов(СписокДокументов, Дата, Движения.ОстаткиНоменклатуры, Движения.Продажи);
Движения.ОстаткиНоменклатуры.Записать(Ложь);
Движения.Продажи.Записать(Ложь);
ДатаОстатков = Новый Граница(МоментВремени(), ВидГраницы.Включая);
Документы.РасходнаяНакладная.СписаниеПоПартиям(ДатаОстатков, СписокДокументов, Дата, Движения.ОстаткиНоменклатуры, Движения.Продажи, Отказ);
Движения.ОстаткиНоменклатуры.Записать(Ложь);
Движения.Продажи.Записать(Ложь);

КонецЕсли;
КонецПроцедуры

Если разрешены отрицательные остатки, то по документу поступления определяем список номенклатуры, которую необходимо пересчитать, список документов РН, которые необходимо сторнировать и перезапустить расчет себестоимости.
Не используются последовательности, нет лишних блокировок системы.

И вот возникает вопрос, если в задаче явно не указано, что последовательности необходимо использовать, то надо ли? Как это будет оцениваться, что программист просто не умеет их использовать или наоборот умеет их не использовать? Диалектика.
« Последнее редактирование: Февраль 01, 2015, 06:52:38 pm от program1Cer »

program1Cer

  • Новичок
  • *
  • Сообщений: 8
  • ФИО: Алексей
Re: 1.6
« Ответ #349 : Февраль 03, 2015, 12:52:25 pm »
Перечитал еще раз Вашу статью, статью из ИТС по последовательностям, там не рекомендуют двигать последовательности при проведении документов. У Вас в статье при проведении документа ПН, создается фоновое задание. 10 пользователей, каждый из них проводит ПН, будет 10 фоновых заданий?

axel_work

  • Проверенный
  • ***
  • Сообщений: 161
  • ФИО: Алексей
Re: 1.6
« Ответ #350 : Февраль 04, 2015, 01:37:05 pm »
Добрый день всем!

Понравилось решение, опубликованное на сайте (с последовательностями). Эстетично :)

Но появилась пара вопросов по коду:

1. Движения.ОстаткиТоваров.Записывать = Истина;
Зачем мы выставляем это свойство, если мы далее записываем этот набор записей принудительно, получается запись 2 раза в регистр?

2. Движения.ОстаткиПартийТоваров.БлокироватьДляИзменения = Истина;
Зачем устанавливаем эту блокировку? Ведь чуть выше мы делаем блокировку через БлокировкаДанных, а второй момент - БлокироватьДляИзменения ведь используется для контроля данных после записи в регистр, но поскольку мы в этой ветке полностью очищаем набор, потом его записываем - ничего же не заблокируется по идее.

ksandr

  • Проверенный
  • ***
  • Сообщений: 138
  • ФИО: ksandr
Re: 1.6
« Ответ #351 : Февраль 04, 2015, 04:56:20 pm »
1. Движения.ОстаткиТоваров.Записывать = Истина;
Зачем мы выставляем это свойство, если мы далее записываем этот набор записей принудительно, получается запись 2 раза в регистр?

2. Движения.ОстаткиПартийТоваров.БлокироватьДляИзменения = Истина;
Зачем устанавливаем эту блокировку? Ведь чуть выше мы делаем блокировку через БлокировкаДанных, а второй момент - БлокироватьДляИзменения ведь используется для контроля данных после записи в регистр, но поскольку мы в этой ветке полностью очищаем набор, потом его записываем - ничего же не заблокируется по идее.

Как там на сайте не видел, если имеется ввиду такой листинг
   Движения.ОстаткиНоменклатуры.Записывать = Истина;
   Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;
   Движения.ОстаткиНоменклатуры.Записать();
то, 1-й строкой устанавливаем флаг записи в истину, 2-й строкой блокируем старые движения документа, чтоб если мы заменили товар и вдруг что-то пошло не так в это время никто не "спер":) наши старые товары, необходимо при установленной галочке в РН "Разрешить разделение итогов", где-то тут на форуме это уже обсуждалось, ну и 3-я строка просто очищает набор и включает блокировку для изменения.

axel_work

  • Проверенный
  • ***
  • Сообщений: 161
  • ФИО: Алексей
Re: 1.6
« Ответ #352 : Февраль 05, 2015, 09:28:14 am »
Не совсем так, на сайте вот: http://1c.chistov.pro/2014/11/106-1.html

по 1-му пункту:


    Движения.ОстаткиТоваров.Записывать = Истина;

    Движения.ОстаткиТоваров.БлокироватьДляИзменения = Истина;

    Для Каждого ТекСтрокаТовары Из Товары Цикл
        Движение = Движения.ОстаткиТоваров.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Товар = ТекСтрокаТовары.Товар;
        Движение.Количество = ТекСтрокаТовары.Количество;
    КонецЦикла;

    Движения.Записать();


по 2-му :


    //Установим блокировки
    Блокировка = Новый БлокировкаДанных;
    ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиПартийТоваров");
    ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
    ЭлементБлокировки.ИсточникДанных = РезультатЗапроса;
    ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Товар", "Товар");
    Блокировка.Заблокировать();

    Если Режим = РежимПроведенияДокумента.Оперативный Тогда
        Движения.ОстаткиПартийТоваров.Очистить();
        Движения.ОстаткиПартийТоваров.БлокироватьДляИзменения = Истина;
        Движения.ОстаткиПартийТоваров.Записать();
    КонецЕсли;


ksandr

  • Проверенный
  • ***
  • Сообщений: 138
  • ФИО: ksandr
Re: 1.6
« Ответ #353 : Февраль 05, 2015, 11:54:09 am »

axel_work

  • Проверенный
  • ***
  • Сообщений: 161
  • ФИО: Алексей
Re: 1.6
« Ответ #354 : Февраль 05, 2015, 01:00:46 pm »

Jones

  • Проверенный
  • ***
  • Сообщений: 199
Re: 1.6
« Ответ #355 : Февраль 09, 2015, 01:56:51 pm »
Уважаемый GROOVY!
Задача 1.06: http://1c.chistov.pro/2014/11/106-1.html
Если можно, поясните, пожалуйста, зачем устанавливается ВТОРАЯ БЛОКИРОВКА?
Или она, в принципе, не нужна, ведь записи регистра уже заблокированы ПЕРВОЙ БЛОКИРОВКОЙ?
 
//Установим блокировки
    Блокировка = Новый БлокировкаДанных;
    ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиПартийТоваров");
    ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
    ЭлементБлокировки.ИсточникДанных = РезультатЗапроса;
    ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Товар", "Товар");
    Блокировка.Заблокировать();                                                                             // ПЕРВАЯ БЛОКИРОВКА

    Если Режим = РежимПроведенияДокумента.Оперативный Тогда
        Движения.ОстаткиПартийТоваров.Очистить();
        Движения.ОстаткиПартийТоваров.БлокироватьДляИзменения = Истина;                                     // ВТОРАЯ БЛОКИРОВКА
        Движения.ОстаткиПартийТоваров.Записать();
    КонецЕсли;

    Движения.ОстаткиПартийТоваров.Записывать = Истина;
« Последнее редактирование: Февраль 09, 2015, 04:34:14 pm от Jones »

ksandr

  • Проверенный
  • ***
  • Сообщений: 138
  • ФИО: ksandr
Re: 1.6
« Ответ #356 : Февраль 09, 2015, 05:02:22 pm »
Я не GROOVY, но отвечу, прочтите тоже статью по ссылке выше.

Jones

  • Проверенный
  • ***
  • Сообщений: 199
Re: 1.6
« Ответ #357 : Февраль 11, 2015, 11:27:05 am »
Почтеннейший, ksandr  :)
Если Вам известен ответ - просветите, а посылать в статью не надо  :), это всего лишь говорит о том, что Вы ответа не знаете (без обид)
Естественно, эта сложная для понимания статья была мной прочитана, но зачем ставить блокировку второй раз, мне все равно не понятно ))
Поэтому и спрашиваю, вдруг здесь есть обладатель мощного интеллекта? ))

GROOVY

  • Администратор
  • Старожил
  • *****
  • Сообщений: 284
  • ФИО: Павел Чистов
Re: 1.6
« Ответ #358 : Февраль 11, 2015, 12:51:22 pm »
Почтеннейший, ksandr  :)
Если Вам известен ответ - просветите, а посылать в статью не надо  :), это всего лишь говорит о том, что Вы ответа не знаете (без обид)
Естественно, эта сложная для понимания статья была мной прочитана, но зачем ставить блокировку второй раз, мне все равно не понятно ))
Поэтому и спрашиваю, вдруг здесь есть обладатель мощного интеллекта? ))

Для ответа на Ваш вопрос достаточно ответить на 2 вопроса: что Вы блокируете и зачем?
Есть понимание что блокируется в описанном механизме? Там блокировка на разные данные устанавливается.

ksandr

  • Проверенный
  • ***
  • Сообщений: 138
  • ФИО: ksandr
Re: 1.6
« Ответ #359 : Февраль 12, 2015, 02:16:57 pm »
Почтеннейший, ksandr  :)
Если Вам известен ответ - просветите, а посылать в статью не надо  :), это всего лишь говорит о том, что Вы ответа не знаете (без обид)
Естественно, эта сложная для понимания статья была мной прочитана, но зачем ставить блокировку второй раз, мне все равно не понятно ))
Поэтому и спрашиваю, вдруг здесь есть обладатель мощного интеллекта? ))
В этой сложной для понимания статье все расписано. В частности вот ответ на Ваш вопрос
"17. Устанавливаем свойство "БлокироватьДляИзменения". Это позволит заблокировать от чтения те данные которые сейчас будут удалены из регистра, вдруг транзакция будет отменена, не хотим чтобы кто-либо вместе с нами работал с этими данными.
Подобное действие не помешает и при смене даты или времени документа, а не только при оперативном проведении."