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

Не выходит правильно получить объект

Автор Рексарыч, 17 ноя 2015, 16:51

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

Рексарыч

Добрый день, товарищи!

Конфигурация - "1С: ERP УП 2.0".

Первоначальная задача: во всей графе "Бригада" добавить нужное значение, которое выбрано.

Уже дня три рабочих пытаюсь сделать простую (как предполагаю) вещь - записать конкретное значение в нужное поле табличной части.

Проблема заключается в том, что у меня выходит получать объект только у ссылки, что, как понимаю, логично. Только вот реквизит (поле?) "Бригада" у ссылки отсутствует.

В запросе я вывожу поля: "Ссылка.ссылка", "Ссылка", "Бригада", "Бригада.Ссылка" для "Документ.МаршрутныйЛистПроизводства.Трудозатраты" по конкретному маршрутному листу.

Пробовал и с помощью создания в коде табличной части, и с помощью получения объекта - ничего не вышло.

Пример кода, с которым вожусь, но никак не выходит исправить:


Пока МЛСПустымиБригадами.Следующий() Цикл

сообщить(2);
Бригада = МЛСПустымиБригадами.[что-то надо вставить].ПолучитьОбъект();
сообщить(3);
Бригада.Трудозатраты.Бригада.Ссылка = НазваниеБригады;
сообщить(4);
Бригада.Записать();

КонецЦикла;
.

Прошу подсказать, где мне нужно копать.


Kironten

сообщить(2);   
            Бригада = Справочники.Бригады.ПустаяСсылка();

Ну или какой там у вас тип бригады

Рексарыч

Kironten, ссылка на бригаду у меня содержится в "НазваниеБригады". Её получаю из формы, так же как и ссылку на нужный маршрутный лист ("НазваниеМЛ"). В "Проведен" (тип данных - булево значение) содержится "Нет" (по-сути - 0), что бы не были затронуты документы, которое проведены, но по каким-то причинам бригады там не заполнены. Проблема в том, что извлеча все строчки из одного документа по трудозатратам маршрутного листа, у меня не выходит присвоить каждому полю бригады нужное значение (поскольку объект правильно выбрать не получается), ссылка на которое хранится в "НазваниеБригады". Проверка же на пустую ссылку по бригадам у меня есть в запроса.

Возможно мне нужно было показать весь важный код, что и делаю :):

//лёгкая защита от невнимательности ;)
Если Не ЗначениеЗаполнено(НазваниеМЛ) или Не ЗначениеЗаполнено(НазваниеБригады) тогда
    Сообщить("Значение не заполнено. Обработка невозможна.");
    Возврат;
КонецЕсли;

МЛСПустымиБригадами = новый запрос("
|Выбрать //первые 10
|Ссылка,
|Ссылка.Ссылка,
|Ссылка.Номер,
|НомерСтроки,
|Бригада,
|Бригада.Ссылка
|Из
|Документ.МаршрутныйЛистПроизводства.Трудозатраты
|Где
|Ссылка.Проведен = &Проведен и Бригада.Ссылка есть NULL и Ссылка.Ссылка=&НазваниеМЛ");

МЛСПустымиБригадами.УстановитьПараметр("НазваниеМЛ", НазваниеМЛ);
МЛСПустымиБригадами.УстановитьПараметр("Проведен", Проведен);

МЛСПустымиБригадами = МЛСПустымиБригадами.Выполнить().Выбрать();

//осуществляю пробежку по всем отобранным объектам
Пока МЛСПустымиБригадами.Следующий() Цикл

сообщить(2);сообщить(МЛСПустымиБригадами.Номер);сообщить(НазваниеМЛ);
Бригада = МЛСПустымиБригадами.[что-то надо вставить].ПолучитьОбъект();
сообщить(3);
                //будь объект правильно определён в строчке "Бригада = МЛСПустымиБригадами.[что-то надо вставить].ПолучитьОбъект();", то и тут уже смог бы правильно написать код
Бригада.Трудозатраты.Бригада.Ссылка = НазваниеБригады;
сообщить(4);
Бригада.Записать();

КонецЦикла;
.
Добавлено: 19 ноя 2015, 08:35


Товарищи, сейчас постарался переделать код. Теперь идёт извлечение из табличной части документа нужной мне (скажем так) "строки". Первоначальная ошибка, что команду "ПолучитьОбъект()" нельзя использовать, убралась. Теперь выдаёт: "Элемент не выбран!". Но ведь я же указал, где находится объект (или как там правильно в терминологии). Прошу, если есть возможность, ткнуть меня носом туда, где я ошибся.

Вот переписанный участок кода:

Пока МЛСПустымиБригадами.Следующий() Цикл

сообщить(2);
Бригада = МЛСПустымиБригадами.Ссылка.Ссылка.Трудозатраты.Найти(МЛСПустымиБригадами.НомерСтроки); //.Найти(МЛСПустымиБригадами.Бригада.Ссылка);

//Сообщить("" + Бригада + "-" + ТипЗнч(Бригада) + "");
//
//Для Каждого Ссылка Из Бригада Цикл
// Сообщить("" + Ссылка + " " + ТипЗнч(Ссылка) + "");
//КонецЦикла;

сообщить(3.5);
БригадаСсылка=Бригада.Бригада.Ссылка.ПолучитьОбъект();

сообщить(3.75);
//Бригада.Бригада.Ссылка = НазваниеБригады;
сообщить(4);
Бригада.Записать();

КонецЦикла;
.
Добавлено: 19 ноя 2015, 15:39


Всё. Решил задачу. Нужно было функцию "ПолучитьОбъект()" использовать для всего найденного документа, а не для одной строчки табличной части.

Решение:

Пока МЛСПустымиБригадами.Следующий() Цикл

сообщить(2);
БригадаОбъект = МЛСПустымиБригадами.Ссылка.Ссылка.ПолучитьОбъект(); //Трудозатраты.Найти(МЛСПустымиБригадами.НомерСтроки); //.Найти(МЛСПустымиБригадами.Бригада.Ссылка);

//Сообщить("" + Бригада + "-" + ТипЗнч(Бригада) + "");
//
//Для Каждого Ссылка Из Бригада Цикл
// Сообщить("" + Ссылка + " " + ТипЗнч(Ссылка) + "");
//КонецЦикла;

сообщить(3.5);
БригадаСсылка=БригадаОбъект.Трудозатраты.Найти(МЛСПустымиБригадами.НомерСтроки);

сообщить(3.75);
БригадаСсылка.Бригада = НазваниеБригады;

сообщить(4);
БригадаОбъект.Записать();

КонецЦикла;

.

Тему можно закрывать.

Теги:

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

Рейтинг@Mail.ru

Поиск