Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 мая 2024, 10:47

Обход элемента формы ТабличныйДокумент

Автор Funt432286, 31 окт 2023, 15:55

0 Пользователей и 1 гость просматривают эту тему.

Funt432286

Всем доброго времени суток!

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

Пытаюсь обойти обычным циклом, но выдает ошибку. С Объектными реквизитами не было проблем, а тут проблемка:

Для Каждого Стр Из ТабличныйДокумент Цикл
Сообщить("11");
КонецЦикла;

Подскажите, как обойти табДок?

LexaK

Funt432286, при загрузке (обычно) ТабДок не обходят
через построитель из него получают ТЗ, ее передают в запрос,
ОДНИМ запросом получают данные (как раз там и ссылки на Номенклатуру)
и уже в цикле обрабатывают результат.

ну а если вы пишите уж совсем необычную обработку то для обхода строк ТабДока используют номера строк
от 1 до ТабДок.ВысотаТаблицы
если помогло нажмите: Спасибо!

Максим75

Funt432286, обычно из Екселя загоняют в ТабДок, а потом обход по срокам делается циклом от 1 до ТабДок.ВысотаТаблицы, ну и в каждой строке получают нужную область в формате R1:C1 и в этой области через ТекущаяОбласть.Текст получают что в этой области записано.

Столбцы обходят по ТабДок.ШиринаТаблицы, строки по ТабДок.ВысотаТаблицы.

Funt432286

Максим75, Спасибо большое, но ТекущаяОбласть не работала, а вот просто Область показала нужный результат
    Для НомСтр = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл
       
        Если ЗначениеЗаполнено(ТабличныйДокумент.Область("R" + (НомСтр) + "C2").Текст) Тогда
            Сообщить(ТабличныйДокумент.Область("R" + (НомСтр) + "C2").Текст);
           
        КонецЕсли;       
    КонецЦикла;

Funt432286

Не стал делать отдельную тему из-за такой ерунды
Пытаюсь получить ссылку для редактирования на элемент справочника через запрос
&НаСервере
Процедура ЗагрузкаСправочникНаСервере(Номенклатура)

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Наименование = &Наименование";

Запрос.УстановитьПараметр("Наименование", Номенклатура);

РезультатЗапроса = Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();

Если Выборка.Количество() = 1 Тогда
//Ссылка = Выборка.Ссылка.ПолучитьОбъект;
Сообщить("! " + Выборка.Ссылка + " !" + " - " + Выборка.Наименование)
Иначе
Сообщить("! " + Номенклатура + " не заполена!");
КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ЗагрузкаСправочник(Команда)

Для НомСтр = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл

Если ЗначениеЗаполнено(ТабличныйДокумент.Область("R" + (НомСтр) + "C2").Текст) Тогда
Сообщить(ТабличныйДокумент.Область("R" + (НомСтр) + "C2").Текст);
ЗагрузкаСправочникНаСервере(ТабличныйДокумент.Область("R" + (НомСтр) + "C4").Текст);
КонецЕсли;
КонецЦикла;
КонецПроцедуры

Код отрабатывается, ошибок не выдает! Но при обработке запроса Выборка - совсем пустая и Номенклатура и Ссылка!
Копец какой-то, такое ощущение, что Обнулился!

Максим75

Funt432286,
Сообщить(ТабличныйДокумент.Область("R" + (НомСтр) + "C2").Текст);
ЗагрузкаСправочникНаСервере(ТабличныйДокумент.Область("R" + (НомСтр) + "C4").Текст);

Что выводит в сообщить (колонка 2)?
А в 4 колонке тогда что? может там не то пальто записано?

Funt432286

Максим75, запрос не отрабатывает, значения по выборке приходит пустое
Как получить ссылку на справочник Номенклатуру через запрос?

Максим75

Funt432286, еще раз, что во второй колонке, и что в четвертой колонке?
выведите и посмотрите. может в 4 колонке не наименование?

да и искать по наименованию элемент справочника не обязательно запросом. можно использовать метод СправочникМенеджер, называется НайтиПоНаименованию (посмотрите, что туда передается).

т.е. пишете Справочники.Номенклатура.НайтиПоНаименованию(НужноеНаименование), где НужноеНаименование  - строка для поиска.

Funt432286

Максим75, через Справочники.Номенклатура.НайтиПоНаименованию система находит более 1 номенклатуры и тогда алгоритм стопорится и не отрабатывает, а через запрос я могу проверить количество записей Выборки

Funt432286

Цитата: Максим75 от 05 ноя 2023, 14:55Funt432286, еще раз, что во второй колонке, и что в четвертой колонке?
выведите и посмотрите. может в 4 колонке не наименование?

в Наименование на запрос - приходит Строка, при этом в Консоле запросов по данным параметрам система находит и возвращает Ссылку на элемент справочника

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск