Управляемые блокировки на два счета

Новая тема
"Уважаемые программисты, подскажите пожалуйста, как мне установить блокировки сразу на несколько счетов, а не на один, привидите пример, для экзамена надо, не могу справиться

Вот пример моей работы, в ней используется получение остатков по двум счетам: ПланыСчетов.Бухгалтерский.ПервоначальнаяСтоимость и ПланыСчетов.Бухгалтерский.Амортизация , потому их оба нужно заблокировать:


Процедура ОбработкаПроведения(Отказ, РежимПроведения)


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

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

           Запрос.УстановитьПараметр("ПериодКонец", КонецМесяца(Дата));
           Запрос.УстановитьПараметр("ПериодНачало", НачалоМесяца(Дата));
           Запрос.УстановитьПараметр("Организация", Организация);
           Результат = Запрос.Выполнить();
            ТЗ = Результат.Выгрузить();
            ВыборкаДетальныеЗаписи = Результат.Выбрать();

           Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                       Если ВыборкаДетальныеЗаписи.СуммаОборотКт > 0 Тогда
                                  Отказ = Истина;
                       КонецЕсли;
           КонецЦикла;

           Если НЕ Отказ Тогда

                       Движения.Проводки.Записать(); //очистим старые движения

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

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

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

                                  Движение.СчетКт = ПланыСчетов.Бухгалтерский.Амортизация;      
                                  БухгалтерияСервер.УстановитьСубконто(Движение.СчетКт, Движение.СубконтоКт, "ОсновныеСредства", Выборка.ОсновноеСредство);

                                  Движение.Период = КонецМесяца(Дата);
                                  Движение.Сумма = СумАморт;
                                  Движение.Организация = Организация;
                                  Движение.ПодразделениеКт = Выборка.Подразделение;

                       КонецЦикла;
           Иначе
                       Сообщить("В этом месяце амортизация уже начислялась");
           КонецЕсли;
КонецПроцедуры
"
В другом примере, при списании ОС, мне нужно заблокировать вообще три счета, не знаю, как это сделать, может как-то определить массив счетов и поставить их в блокировку?
"МассивСчетов = Новый Массив;

МассивСчетов.Добавить("ПервоначальнаяСтоимость");
МассивСчетов.Добавить("Амортизация");

ТЗ = Новый ТаблицаЗначений;

ТЗ.Колонки.Добавить("Счет");

МенеджерПС = ПланыСчетов.Бухгалтерский;

Для Каждого ТекСчет Из МассивСчетов Цикл

  НовСтр = ТЗ.Добавить();
  НовСтр.Счет= МенеджерПС[ТекСчет];

КонецЦикла;

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

 Препод сразу поймёт, что навряд ли начинающий эту красоту придумал!
а преподу больше делать нечего, кроме как с поличным ловить!
По субботам на buh.ru дамский клуб чтоли?
В смысле? А вы-то у нас с Рисоводом кто? Да и Prikum, наверное, держит пригляд за хозяйством.
Спасибо!
Еще надо организовать попытку и будет шикарно
Денис в лоховские разделы не заглядывает! :-)
Раньше, когда была своя фирма-франч всегда просматривал, т.к. вопросы теории ведения учета очень часто клиенты задавали. Даже приходилось самому формировать баланс в БП. Сейчас только по настроению в этот раздел захожу.
Читают тему
(гостей: 1)

Быстрый переход