Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
20 мая 2024, 03:46

Какую блокировку поставить?

Автор DirecTwiX, 27 апр 2012, 04:08

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

DirecTwiX

Написал запрос... Затем проводку.. Осталось написать блокировку
У регистра бухгалтерии есть измерения организация. Я "тревожу" две организации.. Значит записи по ним нужно блокировать. Так же я тревожу три счёта. Это уже два источника данных. Т.е. нужно создавать два элемента блокровки с этими источниками? + 3й элемент на номенклатуру. Так?
Спасибо

ЦитироватьДвижения.Управленческий.Записывать = Истина;

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

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


      Детали = Выборка.Выбрать();
      ОсталосьСписать = Выборка.НадоКоличество;
      Пока Детали.Следующий() И ОсталосьСписать > 0 Цикл
         Списать = Мин(ОсталосьСписать, Детали.КоличествоОстаток);
         
         Движение = Движения.Управленческий.Добавить();
         Движение.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки;
         Движение.СчетКт = ПланыСчетов.Управленческий.Товары;
         Движение.Период = Дата;
         Движение.Организация = ОрганизацияПоставщик;
         Движение.КоличествоКт = Списать;
         Движение.Сумма = Списать * Детали.СуммаОстаток / Детали.КоличествоОстаток;
                        Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Детали.Номенклатура;
         Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Склад] = СкладПоставщика;
         Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Партия] = Детали.Партия;
   
         ОсталосьСписать = ОсталосьСписать - Списать;
      КонецЦикла;
   КонецЦикла;

DirecTwiX

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


      Детали = Выборка.Выбрать();
      ОсталосьСписать = Выборка.НадоКоличество;
      Пока Детали.Следующий() И ОсталосьСписать > 0 Цикл
         Списать = Мин(ОсталосьСписать, Детали.КоличествоОстаток);
         
         Движение = Движения.Управленческий.Добавить();
         Движение.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки;
         Движение.СчетКт = ПланыСчетов.Управленческий.Товары;
         Движение.Период = Дата;
         Движение.Организация = ОрганизацияПоставщик;
         Движение.КоличествоКт = Списать;
         Движение.Сумма = Списать * Детали.СуммаОстаток / Детали.КоличествоОстаток;
            Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Детали.Номенклатура;
         Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Склад] = СкладПоставщика;
         Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Партия] = Детали.Партия;
   
         ОсталосьСписать = ОсталосьСписать - Списать;
      КонецЦикла;
   КонецЦикла;

Dethmontt

Поставь галочку в свойствах конфигурации "Режим блокировок" - АВТОМАТИЧЕСКИЙ
В автоматическом режиме управления блокировками данных используются уровни изоляции транзакций repeatable read и serializable, обеспечиваемые системой управления базами данных. Эти уровни изоляции транзакций обеспечивают согласованное и целостное чтение данных, и от разработчика не требуется каких-либо дополнительных действий по управлению блокировками.
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

cska-fanat-kz

Цитата: Dethmontt от 27 апр 2012, 10:22
Поставь галочку в свойствах конфигурации "Режим блокировок" - АВТОМАТИЧЕСКИЙ
В автоматическом режиме управления блокировками данных используются уровни изоляции транзакций repeatable read и serializable, обеспечиваемые системой управления базами данных. Эти уровни изоляции транзакций обеспечивают согласованное и целостное чтение данных, и от разработчика не требуется каких-либо дополнительных действий по управлению блокировками.

При разработке управляемых приложений (а вернее даже клиент-серверных) применять нужно управляемую блокировку.
При проверке задач по Оперативному учету (насчет Бухгалтерского - пока ничего не скажу) на работу с блокировками очень внимательно смотрят...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Dethmontt

Ну все же от задачи зависит... (Согласен что в клиент-серверной при наличии Опер учета Автоматическая блокировка ваще никак)
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск