![]() |
|
УТ 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
|
В массиве "Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ИмяРегистра")" нет значения УдалитьТМЦВЭксплуатации...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |