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