Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ссылка в массив
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Gotsalo93
Мне нужно в массив элемента добавить нужную ссылку на ТМЦ в ТабличнуюЧасть РасходнойНакладной.

Запрос = Новый Запрос;            
Запрос.Текст =      
"ВЫБРАТЬ
|    ТМЦОстатки.ТМЦ,
|    ТМЦОстатки.Склад,
|    ЕСТЬNULL(ТМЦОстатки.СуммаОстаток, 0) / ЕСТЬNULL(ТМЦОстатки.КоличествоОстаток, 1) КАК УчетнаяЦена,
|    РасходнаяНакладнаяПереченьТМЦ.ТМЦ КАК ТМЦ1
|ИЗ
|    РегистрНакопления.ТМЦ.Остатки(
|            &Дата,
|            ТМЦ В (&МассивТМЦ)
|                И Склад = &Склад) КАК ТМЦОстатки,
|    Документ.РасходнаяНакладная.ПереченьТМЦ КАК РасходнаяНакладнаяПереченьТМЦ";
МассивТМЦ = Новый Массив;
МассивТМЦ.Добавить(?);
Запрос.УстановитьПараметр("МассивТМЦ", МассивТМЦ);
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("Дата", Дата);


Я может понимаю, что это смешно, но я начал учить 1с, и инфа везде отрывочно, я как то не могу найти как это правильно записать)
Прбывал
МассивТМЦ.Добавить(Документы.РасходнаяНакладная.ПереченьТМЦ.ТМЦ);


Пишет что Перечень ТМЦ поле не найдено.

Как правильно вписать ссылку в массив?
logist
МассивТМЦ.Добавить(ПереченьТМЦ.ВыгрузитьКолонку("ТМЦ"));


и из запроса уберите все что касается Документа. это если процедура выполняется в самом документе.
Petre
Нифига не понятно.
Добавить ссылку в массив:
МассивТМЦ.Добавить(Ссылка);

Получить ссылку:
Ссылка = СтрокаТЧ.ТМЦ;

Получить, например, первую строку:
СтрокаТЧ = НашДокумент.ПереченьТМЦ[0];
Gotsalo93
Спасибо. А как теперь записать результаты запроса в колонку УчетнаяЦена?
logist
Цитата(Gotsalo93 @ 04.08.14, 15:14) необходимо зарегистрироваться для просмотра ссылки
в колонку УчетнаяЦена?

Сейчас я стелепатирую где находится эта колонка, и конфигурацию в целом...
Gotsalo93
Цитата(logist @ 04.08.14, 17:38) необходимо зарегистрироваться для просмотра ссылки
Сейчас я стелепатирую где находится эта колонка, и конфигурацию в целом...



=) Вот конфигурация в Целом:
необходимо зарегистрироваться для просмотра ссылки

Колонка находиться в Документы.РасходнаяНакладная.ПеречньТМЦ.УчетнаяЦена;
logist
Конфигурацию не смотрел, у вас тогда подход не правильный. Я бы загрузил всю таблицу в запрос, сделал рассчет, а потом выгрузил обратно в документ, это быстрее и меньше кода писать.
Gotsalo93
Вот так?
Запрос = Новый Запрос;            
Запрос.Текст =      
"ВЫБРАТЬ
|    РасходнаяНакладнаяПереченьТМЦ.ТМЦ,
|    РасходнаяНакладнаяПереченьТМЦ.Цена,
|    РасходнаяНакладнаяПереченьТМЦ.Количество,
|    РасходнаяНакладнаяПереченьТМЦ.Сумма
|ПОМЕСТИТЬ ТЧ
|ИЗ
|    Документ.РасходнаяНакладная.ПереченьТМЦ КАК РасходнаяНакладнаяПереченьТМЦ
|ГДЕ
|    РасходнаяНакладнаяПереченьТМЦ.Ссылка = &Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    ТМЦОстатки.ТМЦ,
|    ЕСТЬNULL(ТМЦОстатки.СуммаОстаток, 0) / ТМЦОстатки.КоличествоОстаток КАК УчетнаяЦена,
|    ТМЦОстатки.Склад
|ПОМЕСТИТЬ Остатки
|ИЗ
|    РегистрНакопления.ТМЦ.Остатки(
|            &Период,
|            ТМЦ В
|                (ВЫБРАТЬ
|                    ТЧ.ТМЦ
|                ИЗ
|                    ТЧ КАК ТЧ)) КАК ТМЦОстатки
|ГДЕ
|    ТМЦОстатки.Склад.Ссылка = &Склад
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    ТЧ.ТМЦ,
|    ТЧ.Цена,
|    ТЧ.Количество,
|    ТЧ.Сумма,
|    Остатки.УчетнаяЦена,
|    Остатки.УчетнаяЦена * ТЧ.Количество КАК УчетнаяСумма
|ИЗ
|    ТЧ КАК ТЧ
|        ЛЕВОЕ СОЕДИНЕНИЕ Остатки КАК Остатки
|        ПО ТЧ.ТМЦ = Остатки.ТМЦ";            
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("Период", Дата);        

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

Если Не РезультатЗапроса.Пустой() Тогда            
      ПереченьТМЦ.Загрузить(РезультатЗапроса.Выгрузить());      
Иначе            
      Сообщить("Не найдены данные для расчета учетной цены");      
КонецЕсли;


Ну это я уже делал, парень у которого я взял задания, сказал что лучше тем способом, который я привел выше...
logist
Цитата(Gotsalo93 @ 04.08.14, 18:28) необходимо зарегистрироваться для просмотра ссылки
парень у которого я взял задания, сказал что лучше тем способом

Ну раз парень сказал, то конечно...

Цитата(Gotsalo93 @ 04.08.14, 18:28) необходимо зарегистрироваться для просмотра ссылки
Вот так?

Почти. Не надо громоздить три пакета, можно все выполнить одним.
Gotsalo93
Цитата(logist @ 04.08.14, 19:41) необходимо зарегистрироваться для просмотра ссылки
Ну раз парень сказал, то конечно...


Ну как бы я пока учусь и готов выслушать все советы)

Цитата(logist @ 04.08.14, 19:41) необходимо зарегистрироваться для просмотра ссылки
Почти. Не надо громоздить три пакета, можно все выполнить одним.


То есть добавить в запрос колонки по ТЧ и потом их просто выгрузить?
logist
Как-то так:
Запрос = Новый Запрос("ВЫБРАТЬ
                      |    ПереченьТМЦ.Номенклатура,
                      |    ПереченьТМЦ.Количество,
                      |    ПереченьТМЦ.Сумма,
                      |    ПереченьТМЦ.Цена,
                      |    ВЫБОР
                      |        КОГДА ЕСТЬNULL(ПартииТоваровНаСкладахОстатки.СтоимостьОстаток, 0) = 0
                      |                ИЛИ ЕСТЬNULL(ПартииТоваровНаСкладахОстатки.КоличествоОстаток, 0) = 0
                      |            ТОГДА 0
                      |        ИНАЧЕ ПартииТоваровНаСкладахОстатки.СтоимостьОстаток / ПартииТоваровНаСкладахОстатки.КоличествоОстаток
                      |    КОНЕЦ КАК УчетнаяЦена
                      |ИЗ
                      |    Документ.РеализацияТоваровУслуг.Товары КАК ПереченьТМЦ
                      |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Дата, Склад = &Склад) КАК ПартииТоваровНаСкладахОстатки
                      |        ПО ПереченьТМЦ.Номенклатура = ПартииТоваровНаСкладахОстатки.Номенклатура
                      |ГДЕ
                      |    ПереченьТМЦ.Ссылка = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Дата", Дата);
Запрос.УстановитьПараметр("Склад", Склад);
ТекущийДокумент.ПереченьТМЦ.Загрузить(Запрос.Выполнить().Выгрузить();
Gotsalo93
Запрос = Новый Запрос;            
Запрос.Текст =      
"ВЫБРАТЬ
|    РасходнаяНакладнаяПереченьТМЦ.ТМЦ,
|    РасходнаяНакладнаяПереченьТМЦ.Количество,
|    РасходнаяНакладнаяПереченьТМЦ.Сумма,
|    РасходнаяНакладнаяПереченьТМЦ.Цена,
|    ЕСТЬNULL(ТМЦОстатки.СуммаОстаток, 0) / ЕСТЬNULL(ТМЦОстатки.КоличествоОстаток, 1) КАК УчетнаяЦена,
|    ЕСТЬNULL(ТМЦОстатки.СуммаОстаток, 0) / ЕСТЬNULL(ТМЦОстатки.КоличествоОстаток, 1) * РасходнаяНакладнаяПереченьТМЦ.Количество КАК УчетнаяСумма
|ИЗ
|    Документ.РасходнаяНакладная.ПереченьТМЦ КАК РасходнаяНакладнаяПереченьТМЦ
|    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТМЦ.Остатки(&Дата, Склад = &Склад) КАК ТМЦОстатки
|    ПО РасходнаяНакладнаПереченьТМЦ.ТМЦ =  ТМЦОстатки.ТМЦ
|ГДЕ
|    РасходнаяНакладнаяПереченьТМЦ.Ссылка = &Ссылка";
    
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Склад", Ссылка);
Запрос.УстановитьПараметр("Дата", Дата);        
Документы.РасходнаяНакладная.ПереченьТМЦ.Загрузить(Запрос.Выполнить().Выгрузить());


Ошибка:

Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:
{Документ.РасходнаяНакладная.МодульОбъекта(23)}: Поле объекта не обнаружено (ПереченьТМЦ)
Документы.РасходнаяНакладная.ПереченьТМЦ.Загрузить(Запрос.Выполнить().Выгрузить());

Petre
Просто
ПереченьТМЦ.Загрузить(Запрос.Выполнить().Выгрузить());
Gotsalo93
Цитата(Petre @ 05.08.14, 9:06) необходимо зарегистрироваться для просмотра ссылки
Просто
ПереченьТМЦ.Загрузить(Запрос.Выполнить().Выгрузить());

Да я так делал, ничего не выгружало, через отладчик посмотрел, было написано "Поле объекта не обнаружено "Загрузить" biggrin.gif

Как бы с изначальной задачей я справился уже, которую делал через свой первый запрос. Хотел бы выяснить почему оно не выгружало и искало поле объекта "Загрузить"?)
alex040269
ПереченьТМЦ - это табличная часть?
Gotsalo93
Цитата(alex040269 @ 05.08.14, 10:18) необходимо зарегистрироваться для просмотра ссылки
ПереченьТМЦ - это табличная часть?


Да, табличная часть Документа РасходнаяНакладная. Других нету.
Petre
Чудес не бывает.
Gotsalo93
Цитата(Petre @ 05.08.14, 10:51) необходимо зарегистрироваться для просмотра ссылки
Чудес не бывает.



Вот текст запроса:
Запрос = Новый Запрос;            
Запрос.Текст =      
"ВЫБРАТЬ
|    ПереченьТМЦ.ТМЦ,
|    ПереченьТМЦ.Количество,
|    ПереченьТМЦ.Сумма,
|    ПереченьТМЦ.Цена,
|    ЕСТЬNULL(ТМЦОстатки.СуммаОстаток, 0) / ЕСТЬNULL(ТМЦОстатки.КоличествоОстаток, 1) КАК УчетнаяЦена,
|    ПереченьТМЦ.УчетнаяЦена * ПереченьТМЦ.Количество КАК УчетнаяСумма
|ИЗ
|    Документ.РасходнаяНакладная.ПереченьТМЦ КАК ПереченьТМЦ
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТМЦ.Остатки(&Дата, Склад = &Склад) КАК ТМЦОстатки
|        ПО ПереченьТМЦ.ТМЦ = ТМЦОстатки.ТМЦ
|ГДЕ
|    ПереченьТМЦ.Ссылка = &Ссылка";
    
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("Дата", Дата);

РезультатЗапроса = Запрос.Выполнить();
ПереченьТМЦ.Загрузить(РезультатЗапроса.Выгрузить());




Вот снимок с отладчика:
 ! 

Читаем в правилах как вставлять картинки.
 
alex040269
В отладчике скобки добавте. И это процедура.
Ответ будет: вызов процедуры как функции.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.