Имя: Пароль:
1C
1С v8
Помогите, как можно реализовать задачу!
0 pavel_vip
 
29.09.11
11:54
Конфигурация Управление торговлей 10! В справочнике "контрагенты" контрагенты разделены по группам,то есть контрагент или несколько контрагентов подчинены одному контрагенту. При покупке некоторого товара контрагенту начисляется определенное количество баллов, которые указанны  и закреплены за конкретной позицией в справочнике "номенклатура". Дак вот что нужно - нужно вести учет количества баллов по каждому контрагенту и сумме балов по группе контрагентов. Как в 1С все это можно реализовать?
для наглядности могу скинуть обработку на 1С 7.7 или код.
1 IamAlexy
 
29.09.11
11:55
эээ в отчете по баллам сгруппировать по группе :)
2 Pro100
 
29.09.11
11:56
(0) А что мешает сделать также как в 7.7 было?
3 shuhard
 
29.09.11
11:57
(0)[Как в 1С все это можно реализовать]
запросом
4 Godofsin
 
29.09.11
11:57
>>несколько контрагентов подчинены одному контрагенту
Холдинг что ле?
5 pavel_vip
 
29.09.11
11:57
Функция НайтиВетку(ГруппаНПА,ТекКонтр)

              СпрКонтр = СоздатьОбъект("Справочник.Контрагенты");
              //сообщить(ТекКонтр);
              Если СпрКонтр.ВыбратьЭлементыПоРеквизиту("Спонсор",ТекКонтр)=1 Тогда
                             Пока СпрКонтр.ПолучитьЭлемент()=1 Цикл
                                             ГруппаНПА.ДобавитьЗначение(СпрКонтр.ТекущийЭлемент());
                                             //сообщить(СпрКонтр.ТекущийЭлемент());
                                             Если ТекКонтр = СпрКонтр.ТекущийЭлемент() Тогда
                                                 сообщить("Проверьте: "+СокрЛП(ТекКонтр));
                                                             Возврат 0;
                                             КонецЕсли;

                                             Если НайтиВетку(ГруппаНПА,СпрКонтр.ТекущийЭлемент())=1 Тогда
                                                 //
                                             КонецЕсли;
                             КонецЦикла;    
              Иначе
                             Возврат 0;                        
              КонецЕсли;
              Возврат 1;

КонецФункции //НайтиВетку()


Процедура Печать(Докум, Устройство=0, КолвоКопий=1)
              Перем НачПовт, КонПовт;

              //Посчитаем баллы с начала месяца...
              //индивидуальные
              ДатаНач = НачМесяца(Докум.ДатаДок);
              ДатаКон = Докум.ДатаДок;

              Запрос = СоздатьОбъект("Запрос");
              ТекстЗапроса = "
              |Период с ДатаНач по ДатаКон;
              |ОбрабатыватьДокументы Проведенные;
              |Покупатель = Документ.ЗаявкаПокупателя.Контрагент,Документ.Замена.Контрагент;
              |Склад = Документ.ЗаявкаПокупателя.Склад,Документ.Замена.Склад;
              |СуммаББ = Документ.ЗаявкаПокупателя.СуммаББ;
              |СуммаББЗ = Документ.Замена.СуммаББ;
              |СуммаЗББ = Документ.Замена.СуммаББ1;
              |Функция Баллы = Сумма(СуммаББ + (СуммаЗББ - СуммаББЗ));
              |Условие (Покупатель = Докум.Контрагент);
              |Условие (Склад = Докум.Склад);
              |Группировка Покупатель без групп;
              |";

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

              СтрокаББСНачалаМесяца = "";
              СуммаББЛичная = 0;
              Если Запрос.Группировка("Покупатель") = 1 Тогда
                             СуммаББЛичная = Запрос.Баллы;
              КонецЕсли;      
              СтрокаББСНачалаМесяца = "Сумма личных баллов с начала месяца (включая данный док-т): "+глФРМ(СуммаББЛичная);

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

              //СчетчикЦикла = 0;
              //Для СчетчикЦикла = 1 По ГруппаНПА.РазмерСписка() Цикл
                             //ВспТекст = "";
                             //сообщить(ГруппаНПА.ПолучитьЗначение(СчетчикЦикла,ВспТекст));
              //КонецЦикла;

              СуммаББСпонсорская = 0;
              Если ГруппаНПА.РазмерСписка()>0 Тогда

                             ТекстЗапроса = "
                             |Период с ДатаНач по ДатаКон;
                             |ОбрабатыватьДокументы Проведенные;
                             |Покупатель = Документ.ЗаявкаПокупателя.Контрагент,Документ.Замена.Контрагент;
                             |Склад = Документ.ЗаявкаПокупателя.Склад,Документ.Замена.Склад;
                             |СуммаББ = Документ.ЗаявкаПокупателя.СуммаББ;
                             |СуммаББЗ = Документ.Замена.СуммаББ;
                             |СуммаЗББ = Документ.Замена.СуммаББ1;
                             |Функция Баллы = Сумма(СуммаББ + (СуммаЗББ - СуммаББЗ));
                             |Условие (Покупатель в ГруппаНПА);
                             |Условие (Склад = Докум.Склад);
                             |Группировка Покупатель без групп;
                             |";

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

                             Пока Запрос.Группировка("Покупатель") = 1 Цикл
                                             //Сообщить(СокрЛП(Запрос.Покупатель)+" = "+СокрЛП(Запрос.СуммаББ));
                                             СуммаББСпонсорская = СуммаББСпонсорская + Запрос.Баллы;
                             КонецЦикла;  

              КонецЕсли;

              СуммаББСпонсорская = СуммаББСпонсорская + СуммаББЛичная;                      

              СтрокаББСНачалаМесяца = СтрокаББСНачалаМесяца + РазделительСтрок + "Сумма групповых баллов с начала месяца (включая данный док-т): "+глФРМ(СуммаББСпонсорская);
6 pavel_vip
 
29.09.11
11:58
мешает то что я начинающий программист, и пока не могу сам все это реализовать
7 IamAlexy
 
29.09.11
11:59
начинающий VIP программист? :)
8 pavel_vip
 
29.09.11
12:00
надеюсь что господа с данного форума люди грамотные и умные, и в свободное время ничем не занимаются, может и поможет кто нить:)
9 Vadim_37
 
29.09.11
12:01
Привязываться к группе несколько рискованно, оператор может положить в группу как бог пошлет. А вот "головной контрагент" это да, более надежно. Только из (0) я понял, что у вас и так все реализовано. Продаете баллы (в РТиУ) потом отчет "продажи" и все видно.
10 Vadim_37
 
29.09.11
12:03
(5) платили за каждую строчку?
11 pavel_vip
 
29.09.11
12:12
у меня есть конфигурация на 7.7 в которой это все реализованно, а нужно это все дело перенести на 8-ку.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.