8.х Вывести остаток

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Вселенная, 6 ноя 2009.

  1. TopicStarter Overlay
    Вселенная
    Offline

    Вселенная Опытный в 1С

    Регистрация:
    4 ноя 2009
    Сообщения:
    176
    Симпатии:
    0
    Баллы:
    26
    Хочу вывести дополнительную колонку в ТЧ Товары документа РеализацияТоваровУслуг, в которой бы отображался остаток товара (колонка не является реквизитом ТЧ).
    В процедуре ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) пишу:

    Код:
    Запрос = Новый Запрос("ВЫБРАТЬ 
    |	ТоварыНаСкладах.Количество КАК Остаток, 
    |	ТоварыНаСкладах.Номенклатура.Ссылка КАК Товар 
    |ИЗ 
    |	РегистрНакопления.ТоварыНаСкладах( , Номенклатура В (&МассивТоваров)) КАК ТоварыНаСкладах"); 
    
    МассивНоменклатуры = Новый Массив; // для передачи в параметр запроса 
    Соответствие = Новый Соответствие; // для заполнения остатков в строках табличного поля 
    
    Для Каждого Стр из ОформлениеСтроки Цикл 
    МассивНоменклатуры.Добавить(Стр.ДанныеСтроки); 
    Соответствие.Вставить(Стр.ДанныеСтроки, Стр); 
    КонецЦикла; 
    
    Запрос.УстановитьПараметр("МассивТоваров", МассивНоменклатуры); 
    
    Выборка = Запрос.Выполнить().Выбрать(); 
    
    // Вывести остаток в строку, найденную в соответствии по номенклатуре 
    // из запроса. 
    Пока Выборка.Следующий() Цикл 
    Если Строка(Соответствие.Получить(Выборка.Товар.Ссылка)) <> "" Тогда
    Соответствие.Получить(Выборка.Товар.Ссылка).Ячейки.Остаток.Значение = 	Выборка.Остаток; 
    КонецЕсли;
    КонецЦикла; 
    
    Выводит ошибку: итератор для значения не определен: Для Каждого Стр из ОформлениеСтроки Цикл.

    Вроде бы простая задача, но никак не дойдет до меня, как сделать. :unsure:
  2. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    А почему вы через оформление строки, а не через данные? И почему массив номенклатуры, когда событие относится к одной строке?
  3. TopicStarter Overlay
    Вселенная
    Offline

    Вселенная Опытный в 1С

    Регистрация:
    4 ноя 2009
    Сообщения:
    176
    Симпатии:
    0
    Баллы:
    26
    То есть массив здесь совсем не нужен?
  4. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Массив нужен при использовании ПриПолученииДанных, а не ПриВыводеСтроки.
    Пример работы в этой теме
  5. TopicStarter Overlay
    Вселенная
    Offline

    Вселенная Опытный в 1С

    Регистрация:
    4 ноя 2009
    Сообщения:
    176
    Симпатии:
    0
    Баллы:
    26
    Посмотрела ваш пример. Написала свой код в процедуре ТоварыПриПолученииДанных(Элемент, ОформленияСтрок)
    Код:
    Запрос = Новый Запрос("ВЫБРАТЬ 
    | ТоварыНаСкладах.Количество.Ссылка КАК Остаток 
    |ИЗ 
    | РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
    |ГДЕ ТоварыНаСкладах.Количество.Ссылка В (&МассивТоваров)"); 
    
    Если Элемент.Колонки.Остаток.Видимость Тогда
    МассивТоваров = Новый Массив; // для передачи в параметр запроса 
    Для Каждого ОформлениеСтроки из ОформленияСтрок Цикл 
    МассивТоваров.Добавить(ОформлениеСтроки.ДанныеСтроки); 
    КонецЦикла; 
    
    Запрос.УстановитьПараметр("МассивТоваров", МассивТоваров); 
    
    ТабТоваров = Запрос.Выполнить().Выгрузить();
    
    Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
    Нашли = ТабТоваров.Найти(ОформлениеСтроки.ДанныеСтроки, "Остаток");
    КонецЦикла; 
    КонецЕсли;   
    
    Ошибка: Поле объектного типа не обнаружено (Ссылка)
  6. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Эээээ.... Запрос совсем не корректен :)
    Запрос возьмите из своего кода
  7. TopicStarter Overlay
    Вселенная
    Offline

    Вселенная Опытный в 1С

    Регистрация:
    4 ноя 2009
    Сообщения:
    176
    Симпатии:
    0
    Баллы:
    26
    Код:
     
    Запрос = Новый Запрос("ВЫБРАТЬ 
    |	ТоварыНаСкладах.Количество КАК Остаток, 
    |	ТоварыНаСкладах.Номенклатура.Ссылка КАК Товар 
    |ИЗ 
    |	РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
    |ГДЕ ТоварыНаСкладах.Количество В (&МассивТоваров)");
    
    Если Элемент.Колонки.Остаток.Видимость Тогда
    МассивТоваров = Новый Массив; 
    
    Для Каждого ОформлениеСтроки из ОформленияСтрок Цикл 
    МассивТоваров.Добавить(ОформлениеСтроки.ДанныеСтроки); 
    КонецЦикла; 
    
    Запрос.УстановитьПараметр("МассивТоваров", МассивТоваров); 
    
    ТабТоваров = Запрос.Выполнить().Выгрузить();
    
    Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
    Нашли = ТабТоваров.Найти(ОформлениеСтроки.ДанныеСтроки, "Остаток");
    КонецЦикла; 
    КонецЕсли;    
    
    Ничего не выводит. :unsure: Не пойму никак, как же правильно-то?

    Посоветуйте, пожалуйста, какую-нибудь книжку по программированию 1с, чтобы научиться уже составлять правильно запросы, ну и всё остальное.
  8. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Код:
    Нашли = ТабТоваров.Найти(ОформлениеСтроки.ДанныеСтроки, "Остаток");
    
    Проблема тут - задумайтесь, что вы пытаетесь найти...
  9. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    На это посмотрите:
    Код:
    "ГДЕ ТоварыНаСкладах.Количество В (&МассивТоваров)");
    
    
  10. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Да и дальше: что вы передаете в качестве Массива товара?
    Нужно:
    Код:
    ля Каждого ОформлениеСтроки из ОформленияСтрок Цикл 
    МассивТоваров.Добавить(ОформлениеСтроки.ДанныеСтроки.Номенклатура); //нужно передать номенклатуру, а не все данные строки, а может у вас характеристики еще есть?? 
    КонецЦикла;
    Запрос.УстановитьПараметр("МассивТоваров", МассивТоваров); 
    
    ТабТоваров = Запрос.Выполнить().Выгрузить();
    
    Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
    Нашли = ТабТоваров.Найти(ОформлениеСтроки.ДанныеСтроки.Номенклатура, "Товар"); //снова же ищем по товару. 
    //причем Нашли - это будет ваше число, либо Неопределено. 
    //Дальше не мешало бы обработать результат и заполнить вашу колонку. :)
    КонецЦикла; 
    КонецЕсли;
    
    
    
    
  11. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Ого! А слона то я не заметил :)))))
  12. TopicStarter Overlay
    Вселенная
    Offline

    Вселенная Опытный в 1С

    Регистрация:
    4 ноя 2009
    Сообщения:
    176
    Симпатии:
    0
    Баллы:
    26
    Ну ладно вам, хорош прикалываться... Я же только начала учиться, исправлюсь...

Поделиться этой страницей