Как убрать ненужный ключ из структуры при методе НайтиСтроки()?
Как убрать "Количество" из структуры при методе НайтиСтроки?
Приведу пример для чего это нужно:
Например, при загрузке данных код, наименование и количество уже есть, но во второй раз пользователь захотел поменять количество. И чтобы не было дублей, нужно просто заменить значение в ключе "Количество", а не менять всю строку ТЧ.
Первая загрузка:
123 Деталь 3
Вторая загрузка:
123 Деталь 5
В итоге должно остаться:
123 Деталь 5
ТЗ = Объект.СтруктураИзделия.Выгрузить();
Структура = Новый Структура;
Структура.Вставить("КодДетали", "");
Структура.Вставить("НаименованиеДетали", "");
Структура.Вставить("Количество", 0);
Попытка
Если СокрЛП(ОбластьСтруктураИзделия.Область(15,2,15,2).Текст) = "Код детали, сборочного узла*" Тогда
Структура.КодДетали = СокрЛП(ОбластьСтруктураИзделия.Область(15,3,15,3).Текст);
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось загрузить данные, так как неверно указаны данные в колонке ""Общие сведения"" в строке 15";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
Если СокрЛП(ОбластьСтруктураИзделия.Область(16,2,16,2).Текст) = "Наименование детали, сборочного узла*" Тогда
Структура.НаименованиеДетали = СокрЛП(ОбластьСтруктураИзделия.Область(16,3,16,3).Текст);
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось загрузить данные, так как неверно указаны данные в колонке ""Общие сведения"" в строке 16";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
Если СокрЛП(ОбластьСтруктураИзделия.Область(17,2,17,2).Текст) = "Количество в составе изделия*" Тогда
Структура.Количество = Число(ОбластьСтруктураИзделия.Область(17,3,17,3).Текст);
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось загрузить данные, так как неверно указаны данные в колонке ""Общие сведения"" в строке 17";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
МассивСтрок = ТЗ.НайтиСтроки(Структура);
Если МассивСтрок.Количество() = 0 Тогда
СтрокаДанных = ТЗ.Добавить();
Иначе
СтрокаДанных = МассивСтрок[0];
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрокаДанных, Структура);
Если НЕ ЗначениеЗаполнено(СтрокаДанных.УИДСтроки) Тогда
УИД = Новый УникальныйИдентификатор;
СтрокаДанных.УИДСтроки = УИД;
КонецЕсли;
Объект.СтруктураИзделия.Загрузить(ТЗ);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось загрузить данные: " + ОписаниеОшибки();
Сообщение.Сообщить();
КонецПопытки;
Приведу пример для чего это нужно:
Например, при загрузке данных код, наименование и количество уже есть, но во второй раз пользователь захотел поменять количество. И чтобы не было дублей, нужно просто заменить значение в ключе "Количество", а не менять всю строку ТЧ.
Первая загрузка:
123 Деталь 3
Вторая загрузка:
123 Деталь 5
В итоге должно остаться:
123 Деталь 5
ТЗ = Объект.СтруктураИзделия.Выгрузить();
Структура = Новый Структура;
Структура.Вставить("КодДетали", "");
Структура.Вставить("НаименованиеДетали", "");
Структура.Вставить("Количество", 0);
Попытка
Если СокрЛП(ОбластьСтруктураИзделия.Область(15,2,15,2).Текст) = "Код детали, сборочного узла*" Тогда
Структура.КодДетали = СокрЛП(ОбластьСтруктураИзделия.Область(15,3,15,3).Текст);
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось загрузить данные, так как неверно указаны данные в колонке ""Общие сведения"" в строке 15";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
Если СокрЛП(ОбластьСтруктураИзделия.Область(16,2,16,2).Текст) = "Наименование детали, сборочного узла*" Тогда
Структура.НаименованиеДетали = СокрЛП(ОбластьСтруктураИзделия.Область(16,3,16,3).Текст);
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось загрузить данные, так как неверно указаны данные в колонке ""Общие сведения"" в строке 16";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
Если СокрЛП(ОбластьСтруктураИзделия.Область(17,2,17,2).Текст) = "Количество в составе изделия*" Тогда
Структура.Количество = Число(ОбластьСтруктураИзделия.Область(17,3,17,3).Текст);
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось загрузить данные, так как неверно указаны данные в колонке ""Общие сведения"" в строке 17";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
МассивСтрок = ТЗ.НайтиСтроки(Структура);
Если МассивСтрок.Количество() = 0 Тогда
СтрокаДанных = ТЗ.Добавить();
Иначе
СтрокаДанных = МассивСтрок[0];
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрокаДанных, Структура);
Если НЕ ЗначениеЗаполнено(СтрокаДанных.УИДСтроки) Тогда
УИД = Новый УникальныйИдентификатор;
СтрокаДанных.УИДСтроки = УИД;
КонецЕсли;
Объект.СтруктураИзделия.Загрузить(ТЗ);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось загрузить данные: " + ОписаниеОшибки();
Сообщение.Сообщить();
КонецПопытки;
По теме из базы знаний
Найденные решения
(11)Написал так:
СтруктураОтбор = Новый Структура;
СтруктураОтбор.Вставить("КодДетали", Структура.КодДетали);
СтруктураОтбор.Вставить("НаименованиеДетали", Структура.НаименованиеДетали);
МассивСтрок = ТЗ.НайтиСтроки(СтруктураОтбор);
СтруктураБезКоличества.Вставить("Количество", Структура.Количество);
Если МассивСтрок.Количество() = 0 Тогда
СтрокаДанных = ТЗ.Добавить();
Иначе
СтрокаДанных = МассивСтрок[0];
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрокаДанных, СтруктураОтбор);
Всё равно создаются дубли
СтруктураОтбор = Новый Структура;
СтруктураОтбор.Вставить("КодДетали", Структура.КодДетали);
СтруктураОтбор.Вставить("НаименованиеДетали", Структура.НаименованиеДетали);
МассивСтрок = ТЗ.НайтиСтроки(СтруктураОтбор);
СтруктураБезКоличества.Вставить("Количество", Структура.Количество);
Если МассивСтрок.Количество() = 0 Тогда
СтрокаДанных = ТЗ.Добавить();
Иначе
СтрокаДанных = МассивСтрок[0];
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрокаДанных, СтруктураОтбор);
Всё равно создаются дубли
(14)что нужно-то в итоге получить для КодДетали1, НаименованиеДетали1?
Вот есть в источнике данные:
КодДетали1, наименованиеДетали1, Количество1
КодДетали1, наименованиеДетали1, Количество2
..............
КодДетали1, наименованиеДетали1, КоличествоN
Судя по описанию, должно остаться КодДетали1, НаименованиеДетали1, КоличествоN.
Если дубли все равно есть, значит МассивСтрок - пустой, такое может быть в том случае, когда значения КодДетали/НаименованиеДетали обрезаются в колонках ТЗ до какой-то определенной длины, заведомо меньшей, чем длина исходного значения.
Вот есть в источнике данные:
КодДетали1, наименованиеДетали1, Количество1
КодДетали1, наименованиеДетали1, Количество2
..............
КодДетали1, наименованиеДетали1, КоличествоN
Судя по описанию, должно остаться КодДетали1, НаименованиеДетали1, КоличествоN.
Отбор = Новый Структура("КодДетали, НаименованиеДетали", СтрокаИсходныхДанных.КодДетали, СтрокаИсходныхДанных.НаименованиеДетали);
МассивСтрок = ТЗ.НайтиСтроки(Отбор);
Если ЗначениеЗаполнено(МассивСтрок) Тогда
СтрокаТЗ = МассивСтрок[0];
Иначе
СтрокаТЗ = ТЗ.Добавить();
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрокаТЗ, СтрокаИсходныхДанных, "Количество");
ПоказатьЕсли дубли все равно есть, значит МассивСтрок - пустой, такое может быть в том случае, когда значения КодДетали/НаименованиеДетали обрезаются в колонках ТЗ до какой-то определенной длины, заведомо меньшей, чем длина исходного значения.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(4) СтруктураБезКоличества = Новый Структура;
СтруктураБезКоличества.Вставить("КодДетали", Структура.КодДетали);
СтруктураБезКоличества.Вставить("НаименованиеДетали", Структура.НаименованиеДетали);
МассивСтрок = ТЗ.НайтиСтроки(СтруктураБезКоличества);
Вы это имеете ввиду?
СтруктураБезКоличества.Вставить("КодДетали", Структура.КодДетали);
СтруктураБезКоличества.Вставить("НаименованиеДетали", Структура.НаименованиеДетали);
МассивСтрок = ТЗ.НайтиСтроки(СтруктураБезКоличества);
Вы это имеете ввиду?
(11)Написал так:
СтруктураОтбор = Новый Структура;
СтруктураОтбор.Вставить("КодДетали", Структура.КодДетали);
СтруктураОтбор.Вставить("НаименованиеДетали", Структура.НаименованиеДетали);
МассивСтрок = ТЗ.НайтиСтроки(СтруктураОтбор);
СтруктураБезКоличества.Вставить("Количество", Структура.Количество);
Если МассивСтрок.Количество() = 0 Тогда
СтрокаДанных = ТЗ.Добавить();
Иначе
СтрокаДанных = МассивСтрок[0];
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрокаДанных, СтруктураОтбор);
Всё равно создаются дубли
СтруктураОтбор = Новый Структура;
СтруктураОтбор.Вставить("КодДетали", Структура.КодДетали);
СтруктураОтбор.Вставить("НаименованиеДетали", Структура.НаименованиеДетали);
МассивСтрок = ТЗ.НайтиСтроки(СтруктураОтбор);
СтруктураБезКоличества.Вставить("Количество", Структура.Количество);
Если МассивСтрок.Количество() = 0 Тогда
СтрокаДанных = ТЗ.Добавить();
Иначе
СтрокаДанных = МассивСтрок[0];
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрокаДанных, СтруктураОтбор);
Всё равно создаются дубли
(14)что нужно-то в итоге получить для КодДетали1, НаименованиеДетали1?
Вот есть в источнике данные:
КодДетали1, наименованиеДетали1, Количество1
КодДетали1, наименованиеДетали1, Количество2
..............
КодДетали1, наименованиеДетали1, КоличествоN
Судя по описанию, должно остаться КодДетали1, НаименованиеДетали1, КоличествоN.
Если дубли все равно есть, значит МассивСтрок - пустой, такое может быть в том случае, когда значения КодДетали/НаименованиеДетали обрезаются в колонках ТЗ до какой-то определенной длины, заведомо меньшей, чем длина исходного значения.
Вот есть в источнике данные:
КодДетали1, наименованиеДетали1, Количество1
КодДетали1, наименованиеДетали1, Количество2
..............
КодДетали1, наименованиеДетали1, КоличествоN
Судя по описанию, должно остаться КодДетали1, НаименованиеДетали1, КоличествоN.
Отбор = Новый Структура("КодДетали, НаименованиеДетали", СтрокаИсходныхДанных.КодДетали, СтрокаИсходныхДанных.НаименованиеДетали);
МассивСтрок = ТЗ.НайтиСтроки(Отбор);
Если ЗначениеЗаполнено(МассивСтрок) Тогда
СтрокаТЗ = МассивСтрок[0];
Иначе
СтрокаТЗ = ТЗ.Добавить();
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрокаТЗ, СтрокаИсходныхДанных, "Количество");
ПоказатьЕсли дубли все равно есть, значит МассивСтрок - пустой, такое может быть в том случае, когда значения КодДетали/НаименованиеДетали обрезаются в колонках ТЗ до какой-то определенной длины, заведомо меньшей, чем длина исходного значения.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот