helpf.pro
Регистрация

v8: Массив строк и стуруктура

Bell
30.09.2013 13:12Прочитано: 3633
Здравствуйте
Подскажите как сделать (не кажется подход не правильный)
При измерении некого реквизита в ТЧ товары должно произойте изменение его в ТЧ УстановкаЦен

Код 1C v 8.х
 СтрокаТЧ = ЭлементыФормы.Товары.ТекущиеДанные;

// создаю структура по чему буду искать строку в ТЧ УстановкаЦен
СтруктураПоиска = Новый Структура();
СтруктураПоиска.Вставить("КлючСвязи", СтрокаТЧ.КлючСвязи);

// Создаю структура реквизтов которые над заменить (в дальнейшем сделаю универсальную что не стравнивать по отдельности реквизиты)

СтруктураЗамены = Новый Структура();
СтруктураЗамены.Вставить("ТМЦ", СтрокаТЧ.ТМЦ);
СтруктураЗамены.Вставить("ЕдиницаИзмерения", СтрокаТЧ.ЕдиницаИзмерения);
// ... т.д.

// Получаю массив найденных строк в ТЧ УстановкаЦен (все работает)
МассивСтрок = УниверсальныеМеханизмы.ПоискРедактированиеСтрокиВТабличнойЧасти(ЭтотОБъект, ЭлементыФормы, "ТоварыУстановкаЦен", СтруктураПоиска);

// обходу массив найденных строк массива
Для каждого СтрокаМассива Из МассивСтрок Цикл
// как сравнить строки массива(МассивСтрок) со структурой (СтруктураЗамены)
// и если ключ структуры совпадает ???? ( с чем в массиве сравнивать) , то заменить значения соответствующих
// реквизитов в ТЧ УстановкаЦен
КонецЦикла;

Изменено 30.09.13 13:16:07
Yandex
Возможно, вас также заинтересует
Реклама на портале
Mokey
30.09.2013 17:23Ответ № 1
1. В стандартных конфах есть функция СтруктурыИдентичны(), МассивыИдентичны() и т.д., сравнить при желании можно
2. Если ключ есть и в ТЧ УстановкиЦен, то проблем нет, потому что массив хранит ссылки непосредственно на строки ТЧ:
Если СтруктураПоиска.КлючСвязи = СтрокаМассива.КлючСвязи Тогда
Изменено 30.09.13 17:24:16
Bell
30.09.2013 19:03Ответ № 2
1 Сделал Экспорт все работает
2. А как для большей гибкости СтруктуруПоиска(Тип структура) Ключи передать в строку через разделитель для заполнения в ЗаполнитьЗначенияСвойств( , ,????,) <СписокСвойств> . Может есть хорошоая типовая процедура.


3. А в каких конфах есть функции СтруктурыИдентичны(), МассивыИдентичны() и как они точно называются, а то БП 2 и УТ 10 на поиск поставил ничего не нашел.


Код 1C v 8.х
 Функция ПоискРедактированиеСтрокиВТабличнойЧасти(ДокументОбъект, ЭлементыФормы, ИсточникИмяТЧ, ПриемникИмяТЧ, СтруктураПоиска, СтруктураЗамены) Экспорт

МассивСтрок = ДокументОбъект[ПриемникИмяТЧ].НайтиСтроки(СтруктураПоиска);

Для каждого СтрокаМассива Из МассивСтрок Цикл

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

КонецЦикла;

Возврат МассивСтрок

КонецФункции
Mokey
01.10.2013 10:22Ответ № 3
Код 1C v 8.х
 
// Сравнивает два массива однотипных значений (кроме коллекций значений)
//
// Параметры:
// ПервыйМассив,ВторойМассив - сравниваемые массивы
//
// Возвращаемое значение:
// булево.
//
Функция МассивыИдентичны(ПервыйМассив,ВторойМассив) Экспорт

ЭлементовМассива = ПервыйМассив.Количество();
МассивыСовпадают = (ЭлементовМассива = ВторойМассив.Количество());

Если МассивыСовпадают Тогда
Для Сч = 1 По ЭлементовМассива Цикл
Если ТипЗнч(ПервыйМассив[Сч-1]) = Тип("Массив") Тогда
Если НЕ МассивыИдентичны(ПервыйМассив[Сч-1], ВторойМассив[Сч-1]) Тогда
Возврат Ложь;
Иначе
Продолжить;
КонецЕсли;
КонецЕсли;
Если ПервыйМассив[Сч-1] <> ВторойМассив[Сч-1] Тогда
Возврат Ложь
КонецЕсли;
КонецЦикла;
КонецЕсли;

Возврат МассивыСовпадают

КонецФункции

Функция СтруктурыИдентичны(Первая,Вторая) Экспорт

Элементов = Первая.Количество();
СтруктурыСовпадают= (Элементов = Вторая.Количество());

Если МассивыСовпадают Тогда
Для Каждого КлючИЗначение Из Первая Цикл
НайденноеЗначение = Неопределено;
Если НЕ Вторая.Свойство(КлючИЗначение.Ключ, НайденноеЗначение) Тогда
Возврат Ложь;
КонецЕсли;
Если ТипЗнч(КлючИЗначение.Значение) = Тип("Массив") Тогда
Если НЕ МассивыИдентичны(КлючИЗначение.Значение, НайденноеЗначение) Тогда
Возврат Ложь;
Иначе
Продолжить;
КонецЕсли;
КонецЕсли;
Если КлючИЗначение.Значение <> НайденноеЗначение Тогда
Возврат Ложь
КонецЕсли;
КонецЦикла;
КонецЕсли;

Возврат СтруктурыСовпадают

КонецФункции



ну вот как-то так, я выдёргивал их для своей конфы из УТ, по-моему
Mokey
01.10.2013 10:25Ответ № 4
Вообще задача была другая, сравнивать структуру справочников или документов при обмене, в массив в структуре записывались элементы объектного типа (если реквизит справочника есть ссылка на что-то).
Bell
02.10.2013 09:48Ответ № 5
Спасибо
Подсказка: Для выделения Кода используйте (в редакторе).
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.