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

Новая тема
"Уважаемые программисты, подскажите пожалуйста, как мне установить блокировки сразу на несколько счетов, а не на один, привидите пример, для экзамена надо, не могу справиться<br><br>Вот пример моей работы, в ней используется получение остатков по двум счетам: ПланыСчетов.Бухгалтерский.ПервоначальнаяСтоимость и ПланыСчетов.Бухгалтерский.Амортизация , потому их оба нужно заблокировать:<br> <br> <br><pre>Процедура ОбработкаПроведения(Отказ, РежимПроведения)<br><br> <br>            //установим блокировку<br>            Блокировка = Новый БлокировкаДанных;<br>            ЭлементБД = Блокировка.Добавить("РегистрБухгалтерии.Проводки");<br>            ЭлементБД.УстановитьЗначение("Счет", ПланыСчетов.Бухгалтерский.ПервоначальнаяСтоимость);<br>            ЭлементБД.УстановитьЗначение("Организация", Организация);<br>            ЭлементБД.Режим = РежимБлокировкиДанных.Исключительный;<br>            Блокировка.Заблокировать();<br> <br>            Запрос = Новый Запрос;<br>            Запрос.Текст =<br>                                   "ВЫБРАТЬ<br>                                   |           ПроводкиОстаткиИОбороты.СуммаОборотКт<br>                                   |ИЗ<br>                                   |           РегистрБухгалтерии.Проводки.ОстаткиИОбороты(&ПериодНачало, &ПериодКонец, Месяц, ДвиженияИГраницыПериода, Счет = ЗНАЧЕНИЕ(ПланСчетов.Бухгалтерский.Амортизация), , ) КАК ПроводкиОстаткиИОбороты";<br> <br>            Запрос.УстановитьПараметр("ПериодКонец", КонецМесяца(Дата));<br>            Запрос.УстановитьПараметр("ПериодНачало", НачалоМесяца(Дата));<br>            Запрос.УстановитьПараметр("Организация", Организация);<br>            Результат = Запрос.Выполнить();<br>             ТЗ = Результат.Выгрузить();<br>             ВыборкаДетальныеЗаписи = Результат.Выбрать();<br> <br>            Пока ВыборкаДетальныеЗаписи.Следующий() Цикл<br>                        Если ВыборкаДетальныеЗаписи.СуммаОборотКт > 0 Тогда<br>                                   Отказ = Истина;<br>                        КонецЕсли;<br>            КонецЦикла;<br> <br>            Если НЕ Отказ Тогда<br> <br>                        Движения.Проводки.Записать(); //очистим старые движения<br> <br>                        Запрос = Новый Запрос;<br>                        Запрос.УстановитьПараметр("Организация", Организация);<br>                        Запрос.УстановитьПараметр("Период", Дата);<br>                        Запрос.Текст =<br>                                   "ВЫБРАТЬ РАЗЛИЧНЫЕ<br>                                   |           ИспользуетсяОС.ОсновноеСредство КАК ОсновноеСредство,<br>                                   |           ИспользуетсяОС.СрокПолезногоИспользования<br>                                   |ПОМЕСТИТЬ ИспользуемыеОС<br>                                   |ИЗ<br>                                   |           РегистрСведений.СостояниеОСОрганизации.СрезПоследних(, ) КАК ИспользуетсяОС<br>                                   |ГДЕ<br>                                   |           ИспользуетсяОС.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияОС.Используется)<br>                                   |<br>                                   |СГРУППИРОВАТЬ ПО<br>                                    |           ИспользуетсяОС.ОсновноеСредство,<br>                                   |           ИспользуетсяОС.СрокПолезногоИспользования<br>                                   |<br>                                   |ИНДЕКСИРОВАТЬ ПО<br>                                   |           ОсновноеСредство<br>                                   |;<br>                                   |<br>                                   |////////////////////////////////////////////////////////////­////////////////////<br>                                   |ВЫБРАТЬ РАЗЛИЧНЫЕ<br>                                   |           ПроводкиОстаткиПервСтоим.СуммаОстаток,<br>                                   |           ПроводкиОстаткиПервСтоим.Субконто1,<br>                                   |           ПроводкиОстаткиПервСтоим.Подразделение<br>                                   |ПОМЕСТИТЬ ТаблПервСтоим<br>                                   |ИЗ<br>                                   |           РегистрБухгалтерии.Проводки.Остатки(<br>                                   |                                   &Период,<br>                                   |                                   Счет = ЗНАЧЕНИЕ(ПланСчетов.Бухгалтерский.ПервоначальнаяСтоимость),<br>                                   |                                   ,<br>                                   |                                   Организация = &Организация<br>                                   |                                              И Субконто1 В<br>                                   |                                                          (ВЫБРАТЬ РАЗЛИЧНЫЕ<br>                                   |                                                                      ИспользуемыеОС.ОсновноеСредство<br>                                   |                                                          ИЗ<br>                                   |                                                                      ИспользуемыеОС КАК ИспользуемыеОС)) КАК ПроводкиОстаткиПервСтоим<br>                                   |;<br>                                   |<br>                                   |////////////////////////////////////////////////////////////­////////////////////<br>                                   |ВЫБРАТЬ<br>                                   |           ИспользуемыеОС.ОсновноеСредство,<br>                                   |           ИспользуемыеОС.СрокПолезногоИспользования,<br>                                   |           ТаблПервСтоим.СуммаОстаток КАК СуммаОстатокПервСтоим,<br>                                   |           ЕСТЬNULL(ПроводкиОстаткиНачАморт.СуммаОстатокКт, 0) КАК СуммаОстатокКт,<br>                                   |           ВЫБОР<br>                                   |                       КОГДА ТаблПервСтоим.СуммаОстаток > ЕСТЬNULL(ПроводкиОстаткиНачАморт.СуммаОстатокКт, 0)<br>                                   |                                   ТОГДА ВЫРАЗИТЬ(ТаблПервСтоим.СуммаОстаток / ИспользуемыеОС.СрокПолезногоИспользования КАК ЧИСЛО(15, 2))<br>                                   |                       ИНАЧЕ """"ТребуетсяСписать""""<br>                                   |           КОНЕЦ КАК СуммаАмортизации,<br>                                   |           ТаблПервСтоим.Подразделение<br>                                   |ИЗ<br>                                   |           ИспользуемыеОС КАК ИспользуемыеОС<br>                                   |                       ЛЕВОЕ СОЕДИНЕНИЕ ТаблПервСтоим КАК ТаблПервСтоим<br>                                   |                                   ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Проводки.Остатки(<br>                                   |                                                          &Период,<br>                                   |                                                          Счет = ЗНАЧЕНИЕ(ПланСчетов.Бухгалтерский.Амортизация),<br>                                   |                                                          ,<br>                                   |                                                          Организация = &Организация<br>                                   |                                                                      И Субконто1 В<br>                                   |                                                                                  (ВЫБРАТЬ РАЗЛИЧНЫЕ<br>                                   |                                                                                              ИспользуемыеОС.ОсновноеСредство<br>                                   |                                                                                  ИЗ<br>                                   |                                                                                             ИспользуемыеОС КАК ИспользуемыеОС)) КАК ПроводкиОстаткиНачАморт<br>                                   |                                   ПО ТаблПервСтоим.Субконто1 = ПроводкиОстаткиНачАморт.Субконто1<br>                                   |                                              И ТаблПервСтоим.Подразделение = ПроводкиОстаткиНачАморт.Подразделение<br>                                   |                       ПО ИспользуемыеОС.ОсновноеСредство = ТаблПервСтоим.Субконто1";<br> <br>                        Результат = Запрос.Выполнить();<br>                        ТЗ = Результат.Выгрузить();<br>                        Движения.Проводки.Записывать = Истина;<br>                        Выборка = Результат.Выбрать();<br> <br>                        Пока Выборка.Следующий() Цикл<br>                                   Если Выборка.СуммаАмортизации = "ТребуетсяСписать" Тогда<br>                                               сообщить("Амортизация основного средства: "+Выборка.ОсновноеСредство+". с подразделения: "+Выборка.Подразделение+" была ранее списана полностью");<br>                                               продолжить;<br>                                   КонецЕсли;<br>                                   Если Выборка.СуммаОстатокКт+Выборка.СуммаАмортизации > Выборка.СуммаОстатокПервСтоим Тогда<br>                                               СумАморт=Выборка.СуммаОстатокПервСтоим-Выборка.СуммаОстатокКт;<br>                                               сообщить("Амортизация основного средства: "+Выборка.ОсновноеСредство+". с подразделения: "+Выборка.Подразделение+" списана полностью");<br>                                   ИначеЕсли Выборка.СуммаОстатокКт+Выборка.СуммаАмортизации = Выборка.СуммаОстатокПервСтоим Тогда<br>                                               СумАморт=Выборка.СуммаАмортизации;<br>                                               сообщить("Амортизация основного средства: "+Выборка.ОсновноеСредство+". с подразделения: "+Выборка.Подразделение+" списана полностью");<br>                                   Иначе<br>                                               СумАморт=Выборка.СуммаАмортизации;<br>                                   КонецЕсли; <br>                                   Движение = Движения.Проводки.Добавить();<br>                                   Движение.СчетДт = ПланыСчетов.Бухгалтерский.Капитал;<br> <br>                                   Движение.СчетКт = ПланыСчетов.Бухгалтерский.Амортизация;       <br>                                   БухгалтерияСервер.УстановитьСубконто(Движение.СчетКт, Движение.СубконтоКт, "ОсновныеСредства", Выборка.ОсновноеСредство);<br> <br>                                   Движение.Период = КонецМесяца(Дата);<br>                                   Движение.Сумма = СумАморт;<br>                                   Движение.Организация = Организация;<br>                                   Движение.ПодразделениеКт = Выборка.Подразделение;<br> <br>                        КонецЦикла;<br>            Иначе<br>                        Сообщить("В этом месяце амортизация уже начислялась");<br>            КонецЕсли;<br>КонецПроцедуры</pre>"
В другом примере, при списании ОС, мне нужно заблокировать вообще три счета, не знаю, как это сделать, может как-то определить массив счетов и поставить их в блокировку?
"МассивСчетов = Новый Массив;<br> <br>МассивСчетов.Добавить("ПервоначальнаяСтоимость");<br>МассивСчетов.Добавить("Амортизация");<br> <br>ТЗ = Новый ТаблицаЗначений;<br> <br>ТЗ.Колонки.Добавить("Счет");<br> <br>МенеджерПС = ПланыСчетов.Бухгалтерский;<br> <br>Для Каждого ТекСчет Из МассивСчетов Цикл<br> <br>   НовСтр = ТЗ.Добавить();<br>   НовСтр.Счет= МенеджерПС[ТекСчет];<br> <br>КонецЦикла;<br> <br>Блокировка = Новый БлокировкаДанных;<br>ЭлементБД = Блокировка.Добавить("РегистрБухгалтерии.Проводки");<br>ЭлементБД.УстановитьЗначение("Организация", Организация);<br>ЭлементБД.ИсточникДанных = ТЗ;<br>ЭлементБД.ИспользоватьИзИсточникаДанных("Счет", "Счет");<br>Блокировка.Заблокировать();"
Лепота-аа!!!<br> <br>  Препод сразу поймёт, что навряд ли начинающий эту красоту придумал!
а преподу больше делать нечего, кроме как с поличным ловить!
По субботам на buh.ru дамский клуб чтоли?
В смысле? А вы-то у нас с Рисоводом кто? Да и Prikum, наверное, держит пригляд за хозяйством.
Спасибо!<br>Еще надо организовать попытку и будет шикарно
Денис в лоховские разделы не заглядывает! :-)
Раньше, когда была своя фирма-франч всегда просматривал, т.к. вопросы теории ведения учета очень часто клиенты задавали. Даже приходилось самому формировать баланс в БП. Сейчас только по настроению в этот раздел захожу.
Читают тему
(гостей: 1)

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