Помощь - Поиск - Пользователи - Календарь
Полная версия: Запрос ...
1C-PRO - Форум по 1С > Форумы по платформе "1С:Предприятие 7.7" > (7.7) Отчеты и обработки для платформы "1С:Предприятие 7.7"
Arfey
Задача такая перечислить справочник ТМЦ и подобрать по ним суммы из документа "ПосуплениеТМЦ"

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

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

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

Код

Процедура Сформировать()
Перем Запрос, ТекстЗапроса;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|Сумма = Документ.ПоступлениеТМЦ.Сумма;
|Наимен = Документ.ПоступлениеТМЦ.ТМЦ;
|Группировка Наимен;
|Группировка СтрокаДокумента;
|";

если Запрос.Выполнить(ТекстЗапроса) = 0 тогда
возврат;
КонецЕсли;

тз = создатьобъект("ТаблицаЗначений");
тз1 = создатьОбъект("ТаблицаЗначений");
Таб.Очистить();
Таб.НоваяКолонка("Прв",,,,"Наименование",);
Таб.НоваяКолонка("Втр","Число",,,"Сумма",);
Запрос.Выгрузить(тз);

спр = СоздатьОбъект("Справочник.ТМЦ");
спр.ВыбратьЭлементы();

Пока спр.ПолучитьЭлемент() = 1 Цикл
тз1.НоваяСтрока();
КонецЦикла;

тз.ВыбратьСтроки();
тз1.ВыбратьСтроки();

Пока тз.ПолучитьСтроку() = 1 Цикл
Если тз1.НайтиЗначение(тз.Наимен, тз.ТекущаяСтрока(),) = 1 Тогда

тз1.Сумма = тз.Сумма;

Сообщить("Нашло");

иначе

Сообщить("Нефига");

КонецЕсли;

КонецЦикла;

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


Помогите если не сложно ... желательно кодом ... vis.gif
Stado_adama
а что тебе мешает просто взять документ и вытазить оттуда цену и наименование? или я что-то не понял? если нужно много реализаций, то пихай из много реализаций строчки в ТЗ, а потом сверни по номенклатуре...
Arfey
Цитата(Stado_adama @ 19.8.2008, 12:59) *

а что тебе мешает просто взять документ и вытазить оттуда цену и наименование? или я что-то не понял? если нужно много реализаций, то пихай из много реализаций строчки в ТЗ, а потом сверни по номенклатуре...


ненада спрашывать о доцельности всего этого ... Я тоже тут ничего логичного не вижу ... и соседи по столу тоже не видят ... - но мне так дали ради учёбы ... именно так как я описал .. sinka.gif
Stado_adama
Код
тз  = создатьобъект("ТаблицаЗначений");
тз1 = создатьОбъект("ТаблицаЗначений");
тз1.ДобавитьКолонку("Номенклатура");
Запрос.Выгрузить(тз);
спр = СоздатьОбъект("Справочник.ТМЦ");
cпр.ВыбратьЭлементы();
Пока спр.ПолучитьЭлемент() = 1 Цикл
тз1.НоваяСтрока();
тз1.Номенклатура = спр.ТекущийЭлемент();
КонецЦикла;
тз.ВыбратьСтроки();
Пока тз.ПолучитьСтроку() = 1 Цикл
тз1.ВыбратьСтроки();
Если тз1.НайтиЗначение(тз.Наимен) = 1 Тогда


попробуй так... только глянь чем у тебя заполяется ТЗ... результаты твоего запроса я не смотрел... но если там работает верно, то должно заработать
Arfey
Цитата(Stado_adama @ 19.8.2008, 13:50) *

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



попробуй так... только глянь чем у тебя заполяется ТЗ... результаты твоего запроса я не смотрел... но если там работает верно, то должно заработать


Если тз1.НайтиЗначение(тз.Наимен) = 1 Тогда - почему в этой команде параметр только значение? (тз.Наимен) ... логично предположыть что есть ещё строка и колонка ... ну хотяб строка.
Arfey
Цитата(Arfey @ 19.8.2008, 14:16) *

Если тз1.НайтиЗначение(тз.Наимен) = 1 Тогда - почему в этой команде параметр только значение? (тз.Наимен) ... логично предположыть что есть ещё строка и колонка ... ну хотяб строка.



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

Kaboom
Цитата
НайтиЗначение(<?>,,);
Синтаксис:
НайтиЗначение(<Знач>,<Строка>,<Колонка>)
Назначение:
Найти заданное значение в таблице значений. Возвращает число: 0 - значение не найдено; 1 - значение найдено
Параметры:
<Знач> - значение для поиска.
<Строка> - идентификатор переменной, куда возвращается номер найденной строки. Если при вызове метода передать в этот параметр номер строки, то поиск будет осуществляться только по указанной строке.
<Колонка> - номер или идентификатор колонки, возвращает номер найденной колонки. Идентификатор переменной, куда возвращается номер найденной колонки. Если при вызове метода передать в этот параметр номер или идентификатор колонки, то поиск будет осуществляться только по указанной колонке.

Текст взят из синтакс-помощника.
Arfey
Цитата(Kaboom @ 19.8.2008, 14:52) *

Текст взят из синтакс-помощника.



rolleyes.gif я уже видел его раз 10 +
Arfey
Рабочий вариант:

Код
Процедура Сформировать()
Перем Запрос, ТекстЗапроса;

//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|Сумма = Документ.ПоступлениеТМЦ.Сумма;
|Наимен = Документ.ПоступлениеТМЦ.ТМЦ;
|Группировка Наимен;
|Группировка СтрокаДокумента;
|";

если Запрос.Выполнить(ТекстЗапроса) = 0 тогда

возврат;

КонецЕсли;

тз = создатьобъект("ТаблицаЗначений");
тз1 = создатьОбъект("ТаблицаЗначений");
тз1.НоваяКолонка("ТМЦ");
тз1.НоваяКолонка("Сумма");
Запрос.Выгрузить(тз,1,0);
спр = СоздатьОбъект("Справочник.ТМЦ");
спр.ВыбратьЭлементы();

Пока спр.ПолучитьЭлемент() = 1 Цикл

тз1.НоваяСтрока();
тз1.ТМЦ = спр.ТекущийЭлемент();

КонецЦикла;

тз.ВыбратьСтроки();

Пока тз.ПолучитьСтроку() = 1 Цикл

НомСтр = 0;

/////////*********************************////////////

Если тз1.НайтиЗначение(тз.Наимен,НомСтр ,"ТМЦ" ) = 1 Тогда

тз1.ПолучитьСтрокуПоНомеру(НомСтр);

тз1.Сумма = тз.Сумма;

/////////*********************************////////////

Сообщить("Нашло");

иначе

Сообщить("Нефига");

КонецЕсли;
КонецЦикла;
КонецПроцедуры
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2009 Invision Power Services, Inc.