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

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

  Все выпуски  

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


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

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

Выпуск № 516
от 09.06.2007, 14:05

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


Вопрос № 89949: Здравствуйте! 1с7.7.Компонента"Бухучет" Проблема такая. Учет контрагентов нужен по принципу сетевого маркетинга.В спр контраг ввела новый реквизит типа спр.Контр-КодРодителя, это тот,кто привел в структуру этого текущего. Самый верхний-...

Вопрос № 89.949
Здравствуйте! 1с7.7.Компонента"Бухучет"
Проблема такая. Учет контрагентов нужен по принципу сетевого маркетинга.В спр контраг ввела новый реквизит типа спр.Контр-КодРодителя, это тот,кто привел в структуру этого текущего. Самый верхний- без кода родителя, все остальные друг под другом, под одним может быть несколько. В конце месяца расчет бонуса. В зависимости от объёма продаж всей структуры под каждым контрагентом распределение в проц. соотношении. Т.е. надо найти объем продаж всей структуры каждого контрагента. Смогла только найти обороты струкруры непосредсвенно под каждым(первого уровня), дальше никак. Может есть готовые решения, или хоть алгоритм подскажите,please!!

Приложение:

Отправлен: 04.06.2007, 14:00
Вопрос задала: Olia (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Dmitry Stashenko
Здравствуйте, Olia!

Готового решения к сожаленью нет:(

Что если в справочник.контрагенты ввести еще КодСамогоВерхнегоРодителя (это родоначальник ветки) и НомерУровня (это уровень лесницы, на котором находится контр, т.е. родоначальник на 1-м, те которых он привел - на 2-м и т.д). Таким образом делая выборку по контру мы можем увидеть родоначальника и сделать анализ продаж контрами с таким же родоначальником. А номер уровня нужен напрмер для того, чтобы знать какой % начислять).

Кстати, если не принципиально КОДродителя, то можно сделать просто Родителя (контра). Просто для лучшей визуализации, удобнее же видеть самого контра, нежели его код

Удачи
Ответ отправил: Dmitry Stashenko (статус: 3-ий класс)
Ответ отправлен: 04.06.2007, 15:16

Отвечает: Elric
Здравствуйте, Olia!

Используйте рекурсию. У Вас есть "цепочки" контрагентов, идите по этому пути. Рассчитайте сначала обороты первого уровня (это Вы сделали), затем у каждого из первого уровня есть ссылка на предыдущий уровень -- повторите аналогичную операцию для них, и т.д. пока ссылок на более верхние уровни уже не останется. Не пытайтесь раскрутить все "за один присест", подымайтесь вверх по структуре шаг за шагом :)
---------
Мирный атом в КАЖДЫЙ дом!
Ответ отправил: Elric (статус: Специалист)
Ответ отправлен: 04.06.2007, 15:56

Отвечает: Ovr1970
Здравствуйте, Olia!
С помощью структуры справочника не получится. Самое главное - это ограничение на количество уровней (максимум 10)
Проще это сделать с помощью подчиненного справочника, в который записывать подчиненных контрагентов (как ссылки на родительский справочник). Естественно в подчиненном справочнике нужно включить уникальность элементов во всем справочнике (для того, чтобы один и тот же контрагент не был выбран дважды).
Дальше пишется процедура (типа рекурсивная), которая по одному родительскому элементу вытаскивает список всех подчиненных.
По полученному списку считаете обороты - все.
Ответ отправил: Ovr1970 (статус: Практикант)
Ответ отправлен: 04.06.2007, 19:57

Отвечает: Шахрайчук Владимир Анатольевич
Здравствуйте, Olia!
Я предлагаю никаких изменений в структуре базы не делать, а обработку добавить так:
1.
ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Покупатель");
ТЗ.НоваяКолонка("ЕгоОбороты");
ТЗ.НоваяКолонка("ОборотыПодчиненных1гоуровня");
ТЗ.НоваяКолонка("ОборотыПодчиненных2гоуровня");
2.После того, как заполните ЕгоОбороты, заполняете обороты родителей.
Для Сч=1 По Тз.КоличествоСтрок()=1 Цикл
ТЗ.ПолучитьСтрокуПоНомеру(Сч);
Род=ТЗ.Покупатель.КодРодителя;
Обор=ТЗ.ЕгоОбороты;
Стр=0;
Если ТЗ.НайтиЗначение(Род,Стр,"Покупатель")=1 Тогда
ТЗ.ПолучитьСтрокуПоНомеру(Стр);
ТЗ.ОборотыПодчиненных1гоуровня=ТЗ.ОборотыПодчиненных1гоуровня+Обор
и добавить родителю обороты 1го уровня. От него дальше строить цепочку.
КонецЦикла;

Обратите внимаие, я тут использую цикл Для не зря. Таблица значений внутри цикла постоянно скачет от одного покупателя к другому, к его родителям и т.д. наверх, для того чтобы не сбиться с позиционированием, делается цикл Для.
Ответ отправил: Шахрайчук Владимир Анатольевич (статус: Практикант)
Ответ отправлен: 04.06.2007, 20:28

Отвечает: Игорь К.
Здравствуйте, Olia!
Допустим Контрагент А привел Контрагента B, тот в свою очередь привел Контрагента С.
Контр. С заработал Х денег.
Тогда А и Б тоже заработали по Х денег.
Контр. B заработал заработал Y денег.
Тогда А тоже заработал по Y денег.
Правильно понял?
Тогда Вам нужен еще один цикл.
-------------------------------------------
Если ПустоеЗначение(Би.КорСубконто().КодРодителя)=0 Тогда
тмпКонтра=Би.КорСубконто().КодРодителя;
Пока ПустоеЗначение(тмпКонтра.КодРодителя)=0 Цикл
ТЗ.НоваяСтрока();
ТЗ.Покупатель=тмпКонтра.КодРодителя;
ТЗ.ЕгоОбороты=Би.КорДО();
тмпКонтра=тмпКонтра.КодРодителя;
КонецЦикла;
КонецЕсли;
-------------------------------------------
Не зная как в вашем случае расчитываеся бонус,
предположил что каждый продавец оставляет у себя 50% выручки, остальное отдает "родителю".
Тот в свою очередь оставляет себе половину - остальное отдает выше по иерархии.
Самый верхний оставляет всю полученную сумму себе т.к. "родителя" у него нет.

код в приложении.
Поле Сумма - реально сумма которая ему приходится.
Попробуйте так. Удачи!

Приложение:

---------
Лучше два часа потерять, потом за пять минут долететь

Ответ отправил: Игорь К. (статус: 4-ый класс)
Ответ отправлен: 05.06.2007, 08:50


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 от 02.05.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное