8.х Как правильно раставить блокировки?

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Bkmz, 5 апр 2017.

  1. TopicStarter Overlay
    Bkmz
    Offline

    Bkmz Опытный в 1С

    Регистрация:
    6 июл 2013
    Сообщения:
    459
    Симпатии:
    13
    Баллы:
    29
    Есть обработка проведения.

    Для регистра накопления расставил блокировки (правильно ли?), а для регистра бухгалтерии как правильно поставить?

    Код:
    Процедура ОбработкаПроведения(Отказ, Режим)
     
        Движения.ОстаткиТоваров.Записать();
        Движения.ОстаткиТоваров.Записывать = Истина;
     
        Блокировка = Новый БлокировкаДанных;
        ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиТоваров");
        ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
        ЭлементБлокировки.ИсточникДанных = Материалы;
        ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Товар");
    
        Блокировка.Заблокировать();
      
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
                       |    РасходнаяНакладнаяМатериалы.НомерСтроки КАК НомерСтроки,
                       |    РасходнаяНакладнаяМатериалы.Товар КАК Номенклатура,
                       |    СУММА(РасходнаяНакладнаяМатериалы.Количество) КАК Количество,
                       |    СУММА(РасходнаяНакладнаяМатериалы.Сумма) КАК Сумма,
                       |    РасходнаяНакладнаяМатериалы.Партия КАК Партия
                       |ПОМЕСТИТЬ РасходнаяНакладная
                       |ИЗ
                       |    Документ.РасходнаяНакладная.Материалы КАК РасходнаяНакладнаяМатериалы
                       |ГДЕ
                       |    РасходнаяНакладнаяМатериалы.Ссылка = &Ссылка
                       |    И НЕ РасходнаяНакладнаяМатериалы.Товар.Услуга
                       |
                       |СГРУППИРОВАТЬ ПО
                       |    РасходнаяНакладнаяМатериалы.Товар,
                       |    РасходнаяНакладнаяМатериалы.НомерСтроки,
                       |    РасходнаяНакладнаяМатериалы.Партия
                       |
                       |ИНДЕКСИРОВАТЬ ПО
                       |    Номенклатура
                       |;
                       |
                       |////////////////////////////////////////////////////////////////////////////////
                       |ВЫБРАТЬ
                       |    РасходнаяНакладная.НомерСтроки КАК НомерСтроки,
                       |    РасходнаяНакладная.Номенклатура КАК Номенклатура,
                       |    РасходнаяНакладная.Количество КАК Количество,
                       |    РасходнаяНакладная.Сумма КАК Сумма,
                       |    ОстаткиТоваровОстатки.Партия КАК Партия,
                       |    ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
                       |    ВЫБОР
                       |        КОГДА ОстаткиТоваровОстатки.Партия = РасходнаяНакладная.Партия
                       |            ТОГДА 1
                       |        ИНАЧЕ 2
                       |    КОНЕЦ КАК Приоритет
                       |ИЗ
                       |    РасходнаяНакладная КАК РасходнаяНакладная
                       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
                       |                &МоментВремени,
                       |                Номенклатура В
                       |                    (ВЫБРАТЬ
                       |                        РасходнаяНакладная.Номенклатура
                       |                    ИЗ
                       |                        РасходнаяНакладная)) КАК ОстаткиТоваровОстатки
                       |        ПО РасходнаяНакладная.Номенклатура = ОстаткиТоваровОстатки.Номенклатура
                       |
                       |УПОРЯДОЧИТЬ ПО
                       |    Приоритет,
                       |    ОстаткиТоваровОстатки.Партия.МоментВремени
                       |ИТОГИ
                       |    МАКСИМУМ(НомерСтроки),
                       |    МАКСИМУМ(Количество),
                       |    СУММА(Сумма),
                       |    СУММА(КоличествоОстаток)
                       |ПО
                       |    Номенклатура";
    
        Запрос.УстановитьПараметр("Ссылка", Ссылка);
        Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
    
        Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура");
    
        Пока Выборка.Следующий() Цикл
         
            Если Выборка.Количество > Выборка.КоличествоОстаток Тогда
                Сообщение = Новый СообщениеПользователю;
                Сообщение.Текст     = "Не хватает товара на складе: " + Символ(34) + Выборка.Номенклатура + Символ(34) + Символы.ПС +
                                   "Требуется: " + Выборка.Количество + ". Имеется в наличии: " + Выборка.КоличествоОстаток;
                Сообщение.Поле     = "Материалы[" + (Выборка.НомерСтроки - 1) + "].Количество";
                Сообщение.УстановитьДанные(ЭтотОбъект);
                Сообщение.Сообщить();
                Отказ = Истина;
            КонецЕсли;
    
            Если Отказ Тогда
                Продолжить;
            КонецЕсли;
         
            ОсталосьСписать = Выборка.Количество;
            ВыборкаДетальныеЗаписи = Выборка.Выбрать();
         
            Пока ОсталосьСписать > 0 И ВыборкаДетальныеЗаписи.Следующий() Цикл
                Списываем                 = Мин(ОсталосьСписать,  ВыборкаДетальныеЗаписи.КоличествоОстаток);
                Движение                 = Движения.ОстаткиТоваров.Добавить();
                Движение.ВидДвижения    = ВидДвиженияНакопления.Расход;
                Движение.Период         = Дата;
                Движение.Номенклатура     = ВыборкаДетальныеЗаписи.Номенклатура;
                Движение.Партия            = ВыборкаДетальныеЗаписи.Партия;
                Движение.Количество     = Списываем;
                ОсталосьСписать         = ОсталосьСписать - Списываем;
            КонецЦикла;
         
        КонецЦикла;
             
        // регистр Хозрасчетный Дебет
        Движения.Хозрасчетный.Записывать = Истина;
        Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
            Движение = Движения.Хозрасчетный.Добавить();
            Движение.ВидДвижения = ВидДвиженияБухгалтерии.Дебет;
            Движение.Счет = ПланыСчетов.Хозрасчетный.РасчетыСПокупателями;
            Движение.Период = Дата;
            Движение.Сумма = ТекСтрокаМатериалы.Сумма;
        КонецЦикла;
     
        // регистр Хозрасчетный Кредит
        Движения.Хозрасчетный.Записывать = Истина;
        Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
            Движение = Движения.Хозрасчетный.Добавить();
            Движение.ВидДвижения = ВидДвиженияБухгалтерии.Кредит;
            Движение.Счет = ПланыСчетов.Хозрасчетный.ТоварыНаСкладах;
            Движение.Период = Дата;
            Движение.Сумма = ТекСтрокаМатериалы.Сумма;
            Движение.Количество = ТекСтрокаМатериалы.Количество;
        КонецЦикла;
     
    КонецПроцедуры
    
    Последнее редактирование: 6 апр 2017
  2. TopicStarter Overlay
    Bkmz
    Offline

    Bkmz Опытный в 1С

    Регистрация:
    6 июл 2013
    Сообщения:
    459
    Симпатии:
    13
    Баллы:
    29
    Правильно ли для регистра бухгалтерии будет установить такие блокировки?

    Код:
        Блокировка = Новый БлокировкаДанных;
        ЭлементБлок = Блокировка.Добавить("РегистрБухгалтерии.Хозрасчетный");
        ЭлементБлок.Режим = РежимБлокировкиДанных.Исключительный;
        ЭлементБлок.ИсточникДанных = Материалы;
        ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Счет", "СчетУчетаБУ");
        Блокировка.Заблокировать();  
  3. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.828
    Симпатии:
    1.024
    Баллы:
    204
    Правильно, только смысла никакого :)
    Нужно блокировать комбинацию:

    счет+организация+валюта+подразделение+(Субконто1)+(Субконто2)+(Субконто3)
    Субконто в зависимости от наличия их у счета.
  4. TopicStarter Overlay
    Bkmz
    Offline

    Bkmz Опытный в 1С

    Регистрация:
    6 июл 2013
    Сообщения:
    459
    Симпатии:
    13
    Баллы:
    29
    Так что получается тут вообще блокировок ставить не надо?
    Структура регистра у меня такая:
    [​IMG]
    Субконто нет
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.828
    Симпатии:
    1.024
    Баллы:
    204
    Вот пример блокировки из БУХ 3.0

    upload_2017-4-6_12-15-50.png