Страницы: 1
RSS
Как убрать ненужный ключ из структуры при методе НайтиСтроки ()
 
Коллеги, всем добрый день. Не получается убрать ключ ненужный ключ из структуры при методе НайтиСтроки () и еще не могу никак убрать «Количество» из структуры при методе НайтиСтроки?

Вот, например, при загрузке данных код, наименование и количество уже есть, но во второй раз пользователь захотел поменять количество. И чтобы не было дублей, нужно просто заменить значение в ключе «Количество», а не менять всю строку ТЧ.

 
Цитата
Pavel написал:
Коллеги, всем добрый день. Не получается убрать ключ ненужный ключ из структуры при методе НайтиСтроки () и еще не могу никак убрать «Количество» из структуры при методе НайтиСтроки?
Вот, например, при загрузке данных код, наименование и количество уже есть, но во второй раз пользователь захотел поменять количество. И чтобы не было дублей, нужно просто заменить значение в ключе «Количество», а не менять всю строку ТЧ.
Здравствуйте! Вообще в Синтаксис-помощнике все предельно четко написано:

Структура.Удалить("Ключ")

Что вам мешает сделать отдельную структуру для отбора в ТЗ?

 

А если я удалю из структуры ключ «Количество», то как запишется количество во второй раз?

 
Цитата
Pavel написал:
А если я удалю из структуры ключ «Количество», то как запишется количество во второй раз?
Ну, тут вам после поиска в ТЗ добавить ключ заново, либо искать в ТЗ без ключа «Количество» и добавить его для дальнейшей обработки. Назвать ее «Отбор», например, чтобы не путаться в «Структура….».

Вот для примера вам:

СтруктураБезКоличества = Новый Структура;

СтруктураБезКоличества.Вставить("КодДетали", Структура.КодДетали);

СтруктураБезКоличества.Вставить("НаименованиеДетали", Структура.НаименованиеДетали);

МассивСтрок = ТЗ.НайтиСтроки(СтруктураБезКоличества);

 
Цитата
Larisa написал:
Цитата
Pavel написал:
А если я удалю из структуры ключ «Количество», то как запишется количество во второй раз?
Ну, тут вам после поиска в ТЗ добавить ключ заново, либо искать в ТЗ без ключа «Количество» и добавить его для дальнейшей обработки. Назвать ее «Отбор», например, чтобы не путаться в «Структура….». Вот для примера вам:  СтруктураБезКоличества = Новый Структура;  СтруктураБезКоличества.Вставить("КодДетали", Структура.КодДетали);  СтруктураБезКоличества.Вставить("НаименованиеДетали", Структура.НаименованиеДетали);  МассивСтрок = ТЗ.НайтиСтроки(СтруктураБезКоличества);
Да, но так у меня все равно дубли выходят, создаются и непонятно почему до сих пор.
 
Если все равно создаются дубли, возможно, МассивСтрок пустой. Такое может быть в том случае, когда значения КодДетали/НаименованиеДетали обрезаются в колонках ТЗ до какой-то определенной длины, заведомо меньшей, чем длина исходного значения.
Вообще вы должны знать, что метод НайтиСтроки в 1С работает не всегда ожидаемым образом. Поэтому я советую добавить в глобальный модуль две функции НайтиСтроки и ПослеНайтиСтроки и вызывать вместо  М = ТЗ.НайтиСтроки(Структура) метод М = НайтиСтроки(ТЗ, Структура). Или последовательность: М= ТЗ.НайтиСтроки(Структура);  ПослеНайтиСтроки(М, ТЗ);
Параметр ТЗ во второй метод передается для совместимости с 1С определенной версии, где нет функции Владелец() у строки табличной части.
 

не забывайте, что Структура в 1С представляет собой некий контейнер, который хранит пары ключ и значение. Ключ в структуре может быть только строкового типа и должен удовлетворять требованиям названия переменных в 1С. Для значения структуры нет ограничений. Структуру можно создать как на клиенте, так и на сервере. А также структуру можно передавать с клиента на сервер и обратно.

И вот при создании структуры сразу в контейнере можно указать нужные вам ключи и значения, типо

СтруктураПараметров = Новый Структура("КлючСтруктуры1, КлючСтруктуры2", 25, "значение");

В этом случае будет создана структура с двумя ключами КлючСтруктуры1 и КлючСтруктуры2. При этом значение ключа КлючСтруктуры1 будет равно 25, а значение ключа КлючСтруктуры2 будет равно строке «значение». В дальнейшем можно изменять значения каждого ключа, можно добавлять новые ключи или удалять существующие. Если для какого-то ключа не указать значение, то оно будет равно Неопределено:

//оба значения будут равны Неопределено

СтруктураПараметров = Новый Структура("КлючСтруктуры1, КлючСтруктуры2");

 

Да, и я согласен. Вообще удалить же ключ из структуры можно методом Удалить. Данный метод удалит только один ключ. Если нужно удалить все ключи из структуры, то нужно использовать метод Очистить:

СтруктураПараметров.Удалить("НовыйКлюч"); //удалит только один ключ

СтруктураПараметров.Очистить(); //удалит все ключи из структуры

 
Коллеги, встречный вопрос. А как вообще проверить, если ли в структуре ключ?
 

Метод Свойство позволяет проверить наличие в структуре указанного ключа. Если ключ присутствует в структуре, то метод вернет Истина. Если такого ключа нет, то метод вернет Ложь:

ЕстьКлюч = СтруктураПараметров.Свойство("НовыйКлюч");

Если ЕстьКлюч Тогда

           Сообщить("Ключ найден!");

КонецЕсли;  

Также с помощью данного метода можно получить значение по ключу:

Перем Значение;

//вторым параметром передаем переменную, в которую будет помещено значение

ЕстьКлюч = СтруктураПараметров.Свойство("НовыйКлюч", Значение);

Если ЕстьКлюч Тогда

           Сообщить(Значение);

КонецЕсли;  

Если в структуре нет такого ключа, то в переменной Значение будет Неопределено.

Страницы: 1