7.7 Запрос ...

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем Arfey, 19 авг 2008.

  1. TopicStarter Overlay
    Arfey
    Offline

    Arfey

    Регистрация:
    31 июл 2008
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Задача такая перечислить справочник ТМЦ и подобрать по ним суммы из документа "ПосуплениеТМЦ"

    Логика кода следующая:

    1)Создаём запрос на документ "ПоступлениеТМЦ" выбрать от туда Наименование и Сумму;
    2)Перебрать Справочник ТМЦ - выбрать от туда Наименование;
    3)Созать Таблицы значений и повыгружать туда 1 и 2 пункт;
    4)C помощью Найти Значение сравнить 2 Таблицы значений
    5)При совпадении добавляем Сумма с Таблицы значений (там где документ "ПОступлениеТМЦ") в ТаблицуЗначений (там где выгрузили справочник)

    Код следующий (попытка по крайней мере) Но он не работает

    Код:
    Процедура Сформировать()
    Перем Запрос, ТекстЗапроса;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = "
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Сумма = Документ.ПоступлениеТМЦ.Сумма;
    |Наимен = Документ.ПоступлениеТМЦ.ТМЦ;                                   
    |Группировка Наимен; 
    |Группировка СтрокаДокумента;
    |";            
    
    если Запрос.Выполнить(ТекстЗапроса) = 0 тогда
    возврат;
    КонецЕсли;
    
    тз  = создатьобъект("ТаблицаЗначений");
    тз1 = создатьОбъект("ТаблицаЗначений"); 
    Таб.Очистить();
    Таб.НоваяКолонка("Прв",,,,"Наименование",);	
    Таб.НоваяКолонка("Втр","Число",,,"Сумма",);
    Запрос.Выгрузить(тз);
    
    спр = СоздатьОбъект("Справочник.ТМЦ"); 
    спр.ВыбратьЭлементы(); 
    
    Пока спр.ПолучитьЭлемент() = 1 <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/цикл')">Цикл			</span>
    тз1.НоваяСтрока();
    КонецЦикла;
    
    тз.ВыбратьСтроки();
    тз1.ВыбратьСтроки();
    
    Пока тз.ПолучитьСтроку() = 1 Цикл 
    Если тз1.НайтиЗначение(тз.Наимен, тз.ТекущаяСтрока(),) = 1 Тогда
    
    тз1.Сумма = тз.Сумма;  
    
    Сообщить("Нашло");
    
    иначе
    
    Сообщить("Нефига");
    
    КонецЕсли;
    
    КонецЦикла;
    
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/конецпроцедуры')">КонецПроцедуры	</span>
    
    Помогите если не сложно ... желательно кодом ... :unsure:
  2. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    а что тебе мешает просто взять документ и вытазить оттуда цену и наименование? или я что-то не понял? если нужно много реализаций, то пихай из много реализаций строчки в ТЗ, а потом сверни по номенклатуре...
  3. TopicStarter Overlay
    Arfey
    Offline

    Arfey

    Регистрация:
    31 июл 2008
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    ненада спрашывать о доцельности всего этого ... Я тоже тут ничего логичного не вижу ... и соседи по столу тоже не видят ... - но мне так дали ради учёбы ... именно так как я описал .. :unsure:
  4. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    Код:
    тз  = создатьобъект("ТаблицаЗначений");
    тз1 = создатьОбъект("ТаблицаЗначений");
    тз1.ДобавитьКолонку("Номенклатура");
    Запрос.Выгрузить(тз);
    спр = СоздатьОбъект("Справочник.ТМЦ");
    cпр.ВыбратьЭлементы();
    Пока спр.ПолучитьЭлемент() = 1 <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/цикл')">Цикл			</span>
    тз1.НоваяСтрока();	
    тз1.Номенклатура = спр.ТекущийЭлемент();
    КонецЦикла;
    тз.ВыбратьСтроки();
    Пока тз.ПолучитьСтроку() = 1 Цикл 
    тз1.ВыбратьСтроки();
    Если тз1.НайтиЗначение(тз.Наимен) = 1 Тогда
    
    попробуй так... только глянь чем у тебя заполяется ТЗ... результаты твоего запроса я не смотрел... но если там работает верно, то должно заработать
  5. TopicStarter Overlay
    Arfey
    Offline

    Arfey

    Регистрация:
    31 июл 2008
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Если тз1.НайтиЗначение(тз.Наимен) = 1 Тогда - почему в этой команде параметр только значение? (тз.Наимен) ... логично предположыть что есть ещё строка и колонка ... ну хотяб строка.
  6. TopicStarter Overlay
    Arfey
    Offline

    Arfey

    Регистрация:
    31 июл 2008
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1

    Если тз1.НайтиЗначение(тз.Наимен) = 1 Тогда
    {Отчет.НаЗапрос.Форма.Модуль(44)}: Недостаточное число параметров передано при вызове функции/процедуры объекта
  7. Kaboom
    Offline

    Kaboom Опытный в 1С

    Регистрация:
    2 июл 2007
    Сообщения:
    158
    Симпатии:
    0
    Баллы:
    26
    Текст взят из синтакс-помощника.
  8. TopicStarter Overlay
    Arfey
    Offline

    Arfey

    Регистрация:
    31 июл 2008
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1

    :unsure: я уже видел его раз 10 +
  9. TopicStarter Overlay
    Arfey
    Offline

    Arfey

    Регистрация:
    31 июл 2008
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Рабочий вариант:

    Код:
    Процедура Сформировать()
    Перем Запрос, ТекстЗапроса;
    
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = "
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Сумма = Документ.ПоступлениеТМЦ.Сумма;
    |Наимен = Документ.ПоступлениеТМЦ.ТМЦ;                                   
    |Группировка Наимен; 
    |Группировка СтрокаДокумента;
    |";            
    
    если Запрос.Выполнить(ТекстЗапроса) = 0 тогда 
    
    возврат;
    
    КонецЕсли;
    
    тз  = создатьобъект("ТаблицаЗначений");
    тз1 = создатьОбъект("ТаблицаЗначений");
    тз1.НоваяКолонка("ТМЦ");
    тз1.НоваяКолонка("Сумма");
    Запрос.Выгрузить(тз,1,0);
    спр = СоздатьОбъект("Справочник.ТМЦ");
    спр.ВыбратьЭлементы(); 
    
    Пока спр.ПолучитьЭлемент() = 1 Цикл
    
    тз1.НоваяСтрока();	
    тз1.ТМЦ = спр.ТекущийЭлемент();
    
    КонецЦикла;
    
    тз.ВыбратьСтроки();
    
    Пока тз.ПолучитьСтроку() = 1 Цикл
    
    НомСтр = 0;  
    
    /////////*********************************////////////
    
    Если тз1.НайтиЗначение(тз.Наимен,НомСтр ,"ТМЦ" ) = 1 Тогда
    
    тз1.ПолучитьСтрокуПоНомеру(НомСтр);   
    
    тз1.Сумма = тз.Сумма;          
    
    /////////*********************************////////////			
    
    Сообщить("Нашло");
    
    иначе
    
    Сообщить("Нефига");
    
    КонецЕсли;
    КонецЦикла;
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/конецпроцедуры')">КонецПроцедуры	</span>
    

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