Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: 1С для программиста

  Все выпуски  

RusFAQ.ru: 1С для программиста


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / 1С для программиста

Выпуск № 310
от 02.10.2006, 09:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 265, Экспертов: 34
В номере:Вопросов: 1, Ответов: 7


Вопрос № 56852: Здравствуйте! Подскажите, пожалуйста вот в чем: Есть справочник "Товары" в котором несколько уровней. (Например: "Готовая продукция", "Инструменты", "СпецОдежда" и т.д., которые создаются пользователем...

Вопрос № 56.852
Здравствуйте! Подскажите, пожалуйста вот в чем:

Есть справочник "Товары" в котором несколько уровней. (Например: "Готовая продукция", "Инструменты", "СпецОдежда" и т.д., которые создаются пользователем) Надо создавать отчет о движениях товаров на складе, но выборочно по каждой категории (Чтобы выборка товаров из справочника делалась только из выбранной подпапки, подпапки могут создаваться в процессе работы пользователем и из них тоже должна производится выборка тогда, когда это нужно будет пользователю)

Заранее огромное спасибо за совет!!! Я только начинаю программировать и оооочень прошу Вашей помощи, т.к. еще знаю не все возможности языка!!!
Отправлен: 27.09.2006, 09:08
Вопрос задала: Ritsa (статус: Посетитель)
Всего ответов: 7
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Шальков Павел Владимирович
Здравствуйте, Ritsa!
Очень просто, в своем отчете необходимо разместить реквизит типа Справочник.Товары, в котором пользователь потом может указать группу товаров для отбора. Далее при формировании отчета, в модуле необходимо отработать условие на принадлежность текущего товара к выбранной группе.
Проще если у вас данные собираются запросом, где в условии можно указать:
"...
Товар = Справочник.Товары.ТекущийЭлемент;
...
Условие (Товар В ВыбТовар);
...";

где ВыбТовар - это ваш реквизит на форме отчета. Если же данные получаются не запросом, то тут посложнее - необходимо проверять родителя текущего товара, и далее родителя родителя и т.д. до самого верхнего уровня.
Ответ отправил: Шальков Павел Владимирович (статус: 8-ой класс)
Ответ отправлен: 27.09.2006, 09:50
Оценка за ответ: 4
Комментарий оценки:
Спасбо! Я,к сожалению работала не с запросом! а с помощью регистров!

Отвечает: Manserg
Здравствуйте, Ritsa!
В условии необходимо использовать оператов "В"
А в качестве сравнения необходимый уровень иерархии справочника "Товары"
Например: Условие (Товар В ВыбГруппаТовара);
Ответ отправил: Manserg (статус: 4-ый класс)
Ответ отправлен: 27.09.2006, 09:50
Оценка за ответ: 3

Отвечает: Сергей
Здравствуйте, Ritsa!
Если Вы имеете ввиду иерархию в справочнике товаров, и вам нужно выбрать группу со всеми подчиненными подгруппами, то в форму нужно добавить реквизит, ддля выбора, причем в нем можно выбрать либо группу, либо отдельный элемент, а в тексте запроса добавить:
Спр = СоздатьОбъект("Справочник.Номенклатура");
Спр.НайтиПоНаименованию(ВыбТовар.Наименование,0,1);

ГруппаРодитель = Спр.Наименование;
Если Спр.Уровень() > 1 Тогда
Спр.НайтиЭлемент(Спр.Родитель);
УсловиеРодитель = "
|Условие(Найти(Запрос.Товар,ВыбТовар.Наименование) = 1);";
Иначе УсловиеРодитель = "
|Условие(Найти(Запрос.ТарифТовар,ГруппаРодитель) = 1);"
КонецЕсли;

И в тексте самого запроса
;
ТекстЗапроса = ТекстЗапроса + УсловиеРодитель;
ТекстЗапроса = ТекстЗапроса + "
|"//}}ЗАПРОС
Будут вопросы пишите.
Ответ отправил: Сергей (статус: 8-ой класс)
Ответ отправлен: 27.09.2006, 10:15
Оценка за ответ: 4
Комментарий оценки:
Спасибо, но я не использовала запрос. Я работала с регистрами.

Отвечает: Гребиников Павел Генадьевич
Здравствуйте, Ritsa!
Для выбора только определенной группы справочника в запросе используйте метод ПринадлежитГруппе()

Приложение:

---------
Плох тот юзер, который не мечтает стать админом...

Ответ отправил: Гребиников Павел Генадьевич (статус: 2-ой класс)
Ответ отправлен: 27.09.2006, 10:43
Оценка за ответ: 4
Комментарий оценки:
Спасибо, буду знать!! Только я не использовала запрос!

Отвечает: Шахрайчук Владимир Анатольевич
Здравствуйте, Ritsa!
Все ответы предыдущие очень хорошие, дополню лишь так:
БИ.ИспользоватьСубконто(ВидыСубконто.Товыры,ВыбТовар) приведет к тому, что в выборку попадут только те товары, которые принадлежат группе ВыбТовар и всем вложенным подгруппам
Рег.УстановитьЗначениеФильтра("Товар",Выбтовар,2) приведет к тому же эффекту при переборе регистров
В приложении есть пример, где анализируется только склады, входящие в группу Склад АЗС
Кроме того, позволю себе заметить, что по моему мнению тупой перебор по справочникам работает лучше чем запрос, так как можно задавать очень тонкие и специфические условия (смотри приложение СкладЛетнийМагазин - мы получаем остатки по всем складам, входящим в группу Склад АЗС кроме летнего магазина)
Старайтесь писать код максимально простой, тупой и понятный, обычно такой код работает эффективнее и глюкоустойчивее. Пример: если в группу ГотоваяПродукция пользователи запихнут элемент под названием ТранспортныеУслуги (а всегда найдется умник, который это сделает) то будет очень сложно отследить, где работа идет неправильно. Если писать код в виде тупого перебора, то его без труда можно будет пройти отладчиком и выяснить причину глюка. Запрос же отладчиком не пройдете.
Ну и напоследок второй пример - кусок выборки из определенных групп при составлении отчета 3-Торг (Украина)
В данном примере ВыполнитьЗапрос делаем по всей номенклатуре, но только один раз, (это очень тормозная часть кода, поэтому стараемся выполнять его только один раз) а потом в выборке анализируем товары на предмет принадлежности к мороженому или кондвиробам (всего таких групп у меня 40, отчет работает свыше семи минут, из которых 4 минуты это запрос и 3 минуты разбор результатов запроса)

Приложение:

Ответ отправил: Шахрайчук Владимир Анатольевич (статус: Студент)
Ответ отправлен: 27.09.2006, 12:36
Оценка за ответ: 5
Комментарий оценки:
Спасибо!!!

Отвечает: Александр Веклюк
Здравствуйте, Ritsa!
Не зная что у Вас за конфигурация,
а в частности, не зная структуру справочника "Товары",
я не могу написать отчет о движении товаров по складам.
Но, в качестве примера могу привести отчет из конфигурации
"Торговля и склад" по справочнику "Номенклатура".
Отчет называется "Остатки ТМЦ".

На форме расположен реквизит диалога типа "Справочник.Номенклатура",
сама форма списка для выбора справочника имеет дерево иерархии.

При этом выбрать можно группу любого уровня для подстановки фильтра в запрос.

Если не разберетесь, пишите мне на veklyuk@mail.ru
помогу чем смогу
---------
для тех, кто верит, что все срастется
Ответ отправил: Александр Веклюк (статус: 2-ой класс)
Ответ отправлен: 28.09.2006, 07:59
Оценка за ответ: 4

Отвечает: Лазурко Владимир
Здравствуйте, Ritsa!
Воспользуйтесь готовым отчётом "Остатки товаров" или подобным из готовых решений переделав "под себя".
Успехов.
Ответ отправил: Лазурко Владимир (статус: 4-ый класс)
Ответ отправлен: 28.09.2006, 22:54


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.36 от 06.09.2006
Яндекс Rambler's Top100

В избранное