Имя: Пароль:
1C
1С v8
Поиск неуникальных значений в табличной части справочника
0 1C Архитектор
 
26.08.11
07:04
1С 8.2 Управляемые формы

Есть справочник, в форме создана шапка + табличная часть.
Соответственно в табличной части создают очень много строк.
Пытаюсь создать код контроля уникальности по колонке ИденНомера

Пытался через ТаблицаЗначений, Массив, Список Значений
Вся проблема в том что пока не приходилось работать с ТаблицыЗначений.Найти и т.д.
Не могу вкурить как получить значения этой колонки, и потом пройтись по всем значениям сравнивая с текущим значением
Если не трудно то по шагам что и откуда брать куда пихать и почему.
Вот так вроде просто и то не допер:

НайденнаяСтрока = ТаблицаЦен.Найти(ВыбТовар, "Товар");
Если НайденнаяСтрока = Неопределено Тогда
   Текст = "ru = ""Товар не найден!"";"
    + " en = ""Article ot found!""";
   Предупреждение(НСтр(Текст));
Иначе
   ЦенаТовара = НайденнаяСтрока.Цена;
КонецЕсли;


В общем край уже моск не работает.
Заранее благодарен.
1 ДенисЧ
 
26.08.11
07:09
лучше запросом...
2 golden-pack
 
26.08.11
07:13
(1) ага, если док не записан - самое оно
3 kosts
 
26.08.11
07:14
Выгрузить в ТЗ.
Добавить колонку, заполнить ее числом 1.
ТаблицыЗначений.Свернуть("Товар", "Колонка1");
Пройтись по таблице, где > 1 тот не уникальный.
4 Рэйв
 
26.08.11
07:20
ПередОкончаниеРедактирования


Если ТаблицаЦен.Найти("ИденНомера",ТекНомер).Количество()<>Неопределено Тогда
    Сообщить("Номер неуникальный "+ТекНокер);
КонецЕсли;
5 Рэйв
 
26.08.11
07:21
блин:-)

.Количество()  - лишнее
6 golden-pack
 
26.08.11
07:21
Я так делал:

ТЗ = Услуги.Выгрузить();    
КолвоСтрок = ТЗ.Количество();
ТЗ.Свернуть("Услуга,ОсновноеСредство");
Если НЕ КолвоСтрок = ТЗ.Количество() Тогда
  Предупреждение("Ошибка. Обнаружены дубли строк в ТЧ ""Услуги""",3*60);
Отказ = Истина;
КонецЕсли;
7 kosts
 
26.08.11
07:22
Либо если поиском, то
МассивСтрок = ТаблицаЦен.НайтиСтроки(Структура("Товар", Товар));
Если МассивСтрок.Количество() > 1 Тогда

КонецЕсли;

(4) Скорее всего в этот момент товар уже есть в ТЗ и он же и будет найден.
8 Рэйв
 
26.08.11
07:26
(7)Если новая строка то нет. Как варант тогда можно .НайтиСтроки(Структурапосика)
9 1C Архитектор
 
26.08.11
11:50
Спасибо господа сейчас буду разбираться ...
10 1C Архитектор
 
26.08.11
12:36
ТЗ = Услуги.Выгрузить();    
КолвоСтрок = ТЗ.Количество();
ТЗ.Свернуть("Услуга,ОсновноеСредство");
Если НЕ КолвоСтрок = ТЗ.Количество() Тогда
  Предупреждение("Ошибка. Обнаружены дубли строк в ТЧ ""Услуги""",3*60);
Отказ = Истина;
КонецЕсли;

Вот все именно такое я в справке вижу, но что и откуда взялось?
Вот где кроется проблема, я не могу понять что и где?

Допустим это:
&НаСервере
Процедура ПередЗаписью (ТекущийОбъект)
ТЗ = Новый ТаблицаЗначений;
ТЗ = Услуги.Выгрузить();   // Здесь Услуги являются ТЧ я так понимаю, но система не видит её. Где определить ?
КолвоСтрок = ТЗ.КОличество(); // Здесь непонятно тоже, количество чего?

И так далее.

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

Если не трудно объясните что и откуда берется, тогда я ухвачу смысл и код сам наваяю.
11 1C Архитектор
 
26.08.11
12:39
Кстати вначале обмолвились про запрос, на этом варианте я бы остановился поскольку данные будут браться только записанные, и сверяться с текущей - это очень укоротит код и убьет ненужные проверки по Если
12 kosts
 
26.08.11
12:59
(11)  Что то вроде этого

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
              |    КОЛИЧЕСТВО(ЗарплатаКВыплатеОрганизацийЗарплата.Физлицо) КАК КоличФизлиц
              |ИЗ
              |    Документ.ЗарплатаКВыплатеОрганизаций.Зарплата КАК ЗарплатаКВыплатеОрганизацийЗарплата
              |ГДЕ
              |    ЗарплатаКВыплатеОрганизацийЗарплата.Ссылка = &Ссылка
              |
              |ИМЕЮЩИЕ
              |    КОЛИЧЕСТВО(ЗарплатаКВыплатеОрганизацийЗарплата.Физлицо) > 1"
;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока Выборка.Следующий() Цикл
   
КонецЦикла;

13 kosts
 
26.08.11
13:03
+ к (12) Только физлицо тоже надо вытащить. Не по человечески это пользователю сообщить о факте ошибки, нужно показать место ошибки.
14 1C Архитектор
 
27.08.11
07:16
Не взлетело ... к сожалению.

Даже не знаю, структура ключи значения, смешалось все.
Вроде улавливаю но все равно не пойму.
15 МихаилМ
 
27.08.11
09:35
(0)
поищите по форуму - раз 100 обсуждалось.
например интересный алгоритм Задача на поиск в массиве
16 kosts
 
27.08.11
10:42
(14) Начинай с азов.
Задавай мелкие вопросы.
17 AlexNew
 
27.08.11
11:24
Подчиненный справочник с уникальностью кодов.