Имя: Пароль:
1C
1С v8
УТ 11.5. Проведение документов. Что проверяет условие ?
0 saradip
 
05.11.22
21:23
Здравствуйте!
Подскажите, пожалуйста!
Что проверяет условие? "Если Движения.Содержит(Регистр) Тогда"

    Если ЗначениеЗаполнено(Регистры) Тогда
        РегистрыКОбработке = Новый Массив;
        НаборыЗаписейКОбработке = Новый Массив;
        
        Движения = Документ.Метаданные().Движения;
        Для каждого Регистр Из Регистры Цикл
            Если Движения.Содержит(Регистр) Тогда
                РегистрыКОбработке.Добавить(Регистр);
                НаборыЗаписейКОбработке.Добавить(Документ.Движения[Регистр.Имя]);
            КонецЕсли;
        КонецЦикла;
    Иначе
        РегистрыКОбработке = Документ.Метаданные().Движения;
        НаборыЗаписейКОбработке = Документ.Движения;
    КонецЕсли;

Регистры = массив с имена регистров
Документ = документобъект.внутреннеепотреблениетоваров

Вот не пойму, передаю в процедуру нужны регистр в массиве "регистры",
Также, в самом документе отмечено, что этот регистр является регистратором.
Но! Почему-то проверку не проходит... и не добавляется в массивы РегистрыКОбработке и НаборыЗаписейКОбработке
1 НафНаф
 
05.11.22
21:32
Регистры это всё таки массив метаданных, а не имён (строк)
2 saradip
 
05.11.22
21:34
(1) Да, все верно
Имею ввиду, что присутствует строка с необходимым именем
3 НафНаф
 
05.11.22
21:38
(2) ну показывай как передаешь свой регистр в массив что-ли
4 saradip
 
05.11.22
21:55
(3) Дописал параметры в ОбщийМодуль.ТМЦВЭксплуатацииСервер расширением, так как после обновления они были не заполнены
    
&Вместо("ПараметрыДляПроведенияДокумента")
Функция УТ_ПараметрыДляПроведенияДокумента(Документ, Свойства)
    
    
    Параметры = ПроведениеДокументов.ПараметрыУчетногоМеханизма();
    
    //ТипДокумента = ТипЗнч(Документ); // здесь может быть нужно указывать тип передача, или возврат из эксплуатации
    
    // Проведение
    Если Свойства.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
        
    //++
    Параметры.ПодчиненныеРегистры.Добавить(Метаданные.РегистрыНакопления.УдалитьТМЦВЭксплуатации);
    //--
        
    КонецЕсли;
    
    // Контроль
    Если Свойства.РежимЗаписи <> РежимЗаписиДокумента.Запись Тогда
        
    //++
    Параметры.КонтрольныеРегистрыЗаданий.Добавить(Метаданные.РегистрыНакопления.УдалитьТМЦВЭксплуатации);
    //--
        
    КонецЕсли;
    
    Возврат Параметры;
КонецФункции

Эти параметры запрашиваются в ОбщийМодуль.ПроведениеДокументов здесь:
    Свойства = СвойстваДокумента(Документ);
    МенеджерДокумента = Документы[Документ.Метаданные().Имя];
    ПроведениеДокументовЛокализация.ПереназначитьМодульПолученияДанныхДокумента(МенеджерДокумента);
    
    Если ТипЗнч(Документ) = Тип("ДокументОбъект.Сторно") Тогда
        // Список механизмов получим из сторнируемого документа
        МенеджерСторнируемогоДокумента = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Документ.СторнируемыйДокумент);
        МеханизмыДокумента    = УчетныеМеханизмыДокумента(МенеджерСторнируемогоДокумента);
    Иначе
        МеханизмыДокумента    = УчетныеМеханизмыДокумента(МенеджерДокумента);
    КонецЕсли;
    МеханизмыКонфигурации = УчетныеМеханизмыКонфигурации();
    
    РегистрыКРегистрации = Новый Массив;
    ДвижимыеРегистры     = Новый Структура;
    Механизмы            = Новый СписокЗначений;
    Для каждого Механизм Из МеханизмыДокумента Цикл
        МодульМеханизма = ОбщегоНазначения.ОбщийМодуль(МеханизмыКонфигурации[Механизм]);
        
        ПараметрыМеханизма = МодульМеханизма.ПараметрыДляПроведенияДокумента(Документ, Свойства); // см. ПроведениеДокументов.ПараметрыУчетногоМеханизма
        ПараметрыМеханизма.Вставить("МодульМеханизма", МодульМеханизма);
        
        Если Свойства.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
            ОбщегоНазначенияКлиентСервер.ДополнитьМассив(РегистрыКРегистрации, ПараметрыМеханизма.ПодчиненныеРегистры);
            
            Для каждого Регистр Из ПараметрыМеханизма.ПодчиненныеРегистры Цикл
                ДвижимыеРегистры.Вставить(Регистр.Имя);
            КонецЦикла;
            
            Для каждого Регистр Из ПараметрыМеханизма.НезависимыеРегистры Цикл
                ДвижимыеРегистры.Вставить(Регистр.Имя);
            КонецЦикла;
        КонецЕсли;
        
        Механизмы.Добавить(ПараметрыМеханизма, Механизм);
    КонецЦикла;
    Механизмы.СортироватьПоПредставлению();
    
    ЗаписываемыеРегистры = ПодготовитьНаборыЗаписейКРегистрацииДвижений(Документ, Свойства, РегистрыКРегистрации);
    
    Если Свойства.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
        ТаблицыДляДвижений = ТаблицыДляДвижений(Документ, МенеджерДокумента, ДвижимыеРегистры, ДопПараметры);
        ОтразитьДвиженияПодчиненныхРегистров(Механизмы, Документ, ТаблицыДляДвижений, Отказ);
    КонецЕсли;
    
    МенеджерВременныхТаблиц = МенеджерВременныхТаблицКонтроля(Документ);
    УстановитьДопСвойстваКонтрольныхРегистров(Механизмы, Документ, МенеджерВременныхТаблиц);
    
    Если Свойства.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
        ЗаписатьДвиженияНезависимыхРегистров(Механизмы, Документ, ТаблицыДляДвижений, МенеджерВременныхТаблиц, Отказ);
    КонецЕсли;
    
    ОбработатьДокументПередЗаписьюДвижений(Механизмы, Документ, МенеджерВременныхТаблиц, Отказ);

    Документ.Движения.Записать();
    
    ОбработатьДокументПослеЗаписиДвижений(Механизмы, Документ, МенеджерВременныхТаблиц, Отказ);
    ПроверитьДатуЗапретаПоТаблицеИзменений(Механизмы, Документ, МенеджерВременныхТаблиц, Отказ);
    ВыполнитьКонтрольРезультатовПроведения(Механизмы, Документ, МенеджерВременныхТаблиц, Отказ);
    
    Если Не Отказ Тогда
        СформироватьЗаданияНаОтложенныеДвижения(Документ, МенеджерВременныхТаблиц);
        ОтметитьВыполнениеОбработкиОбновленияПодчиненныхРегистров(ЗаписываемыеРегистры, Документ);
    КонецЕсли;
    
    МенеджерВременныхТаблиц.Закрыть();
    
КонецПроцедуры

Проверка, которую я не пойму происходит в строке ЗаписываемыеРегистры = ПодготовитьНаборыЗаписейКРегистрацииДвижений(Документ, Свойства, РегистрыКРегистрации);

Вот код:

Функция ПодготовитьНаборыЗаписейКРегистрацииДвижений(Документ, Свойства, Регистры = Неопределено)
    
    ИменаРегистровДляЗаписи = Новый Массив;
    
    Если ЗначениеЗаполнено(Регистры) Тогда
        РегистрыКОбработке = Новый Массив;
        НаборыЗаписейКОбработке = Новый Массив;
        
        Движения = Документ.Метаданные().Движения;
        Для каждого Регистр Из Регистры Цикл
            Если Движения.Содержит(Регистр) Тогда
                РегистрыКОбработке.Добавить(Регистр);
                НаборыЗаписейКОбработке.Добавить(Документ.Движения[Регистр.Имя]);
            КонецЕсли;
        КонецЦикла;
    Иначе
        РегистрыКОбработке = Документ.Метаданные().Движения;
        НаборыЗаписейКОбработке = Документ.Движения;
    КонецЕсли;
    
    Для Каждого НаборЗаписей Из НаборыЗаписейКОбработке Цикл
        
        // Очистим наборы записей от "старых записей" (ситуация возможна только в толстом клиенте)
        Если ЗначениеЗаполнено(НаборЗаписей) И Не НаборЗаписей.Записывать Тогда
            НаборЗаписей.Очистить();
        КонецЕсли;
        
        // Пробросим свойства документа
        НаборЗаписей.ДополнительныеСвойства.Вставить("СвойстваДокумента", Свойства);
        
    КонецЦикла;
    
    // Взведем флаг записи у наборов, по которым документ имеет движения
    Если Не Свойства.ЭтоНовый Тогда
        
        МассивИменРегистров = ПолучитьИспользуемыеРегистры(Документ.Ссылка, РегистрыКОбработке);
        
        Для Каждого ИмяРегистра Из МассивИменРегистров Цикл
            Документ.Движения[ИмяРегистра].Записывать = Истина;
            ИменаРегистровДляЗаписи.Добавить(ИмяРегистра);
        КонецЦикла;
        
    КонецЕсли;
    
    Возврат ИменаРегистровДляЗаписи;
    
КонецФункции

А вот содержание массива: https://ibb.co/jr8TrLK
Вот документ: https://ibb.co/T86gkR8
5 saradip
 
05.11.22
21:57
ПараметрыМеханизма = МодульМеханизма.ПараметрыДляПроведенияДокумента(Документ, Свойства); // здесь запрос параметров
6 saradip
 
05.11.22
22:03
Забыл, вот первая строка, что вызывает:
Функция ПараметрыУчетногоМеханизма() Экспорт
    
    Параметры = Новый Структура;
    Параметры.Вставить("НезависимыеРегистры",            Новый Массив);
    Параметры.Вставить("ПодчиненныеРегистры",            Новый Массив);
    Параметры.Вставить("КонтрольныеРегистрыИзменений",   Новый Массив);
    Параметры.Вставить("КонтрольныеРегистрыЗаданий",     Новый Массив);
    Параметры.Вставить("ЕстьПроизводныеДвижения",        Ложь);
    Параметры.Вставить("КонтрольныеРегистрыДатаЗапрета", Новый Массив);
    
    Возврат Параметры;
    
КонецФункции
7 saradip
 
05.11.22
22:28
Ошибся, проблема в другом месте, там массив заполняется, а вот дальше функция запросом не выбирает мой регистр, только не пойму почему

Функция ПолучитьИспользуемыеРегистры(Регистратор, СписокРегистров)
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Регистратор", Регистратор);
    
    Результат = Новый Массив;
    МаксимумТаблицВЗапросе = 256;
    СчетчикТаблиц = 0;
    ОсталосьРегистров = СписокРегистров.Количество();
    
    ТекстыЗапроса = Новый Массив;
    ШаблонЗапроса =
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |    ""&ИмяРегистра"" КАК ИмяРегистра
    |ИЗ
    |    &Таблица
    |ГДЕ
    |    Регистратор = &Регистратор";
    
    Для каждого Регистр Из СписокРегистров Цикл
        
        ТекстЗапроса = СтрЗаменить(ШаблонЗапроса, "&ИмяРегистра", Регистр.Имя);
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Таблица", Регистр.ПолноеИмя());
        
        ТекстыЗапроса.Добавить(ТекстЗапроса);
        
        СчетчикТаблиц = СчетчикТаблиц + 1;
        ОсталосьРегистров = ОсталосьРегистров - 1;
        
        Если СчетчикТаблиц = МаксимумТаблицВЗапросе Или ОсталосьРегистров = 0 И СчетчикТаблиц <> 0 Тогда
            
            Запрос.Текст  = СтрСоединить(ТекстыЗапроса, ОбщегоНазначенияУТ.РазделительЗапросовВОбъединении());
            СчетчикТаблиц = 0;
            ТекстыЗапроса.Очистить();
            
            ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ИмяРегистра"));
            
        КонецЕсли;
        
    КонецЦикла;
    
    Возврат Результат;
    
КонецФункции
8 saradip
 
05.11.22
22:29
В массиве "Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ИмяРегистра")" нет значения УдалитьТМЦВЭксплуатации...