Имя: Пароль:
1C
1C 7.7
v7: Возврат товара
,
0 Nutsa12
 
31.10.12
14:45
Здравствуйте. Помогите пожалуйста создать запрос в документе возврат товара. В регистре есть измерения: фирма, товар, контрагент. Ресурсы: ОстатокТовара, ЦенаТовара.
Сейчас у меня так:

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

   |Период с ДатаДок по ДатаДок;
   |Фирма = Регистр.ОстатокТовара.Фирма;
   |Товар = Регистр.ОстатокТовара.Товар;
   |Контрагент = Регистр.ОстатокТовара.Контрагент;
   |ОстатокТовара = Регистр.ОстатокТовара.ОстатокТовара;
   |ЦенаТовара = Регистр.ОстатокТовара.ЦенаТовара;
   |Функция ОстатокТовараКонОст = КонОст(ОстатокТовара);  
   |Группировка Контрагент Без Групп;
   |Группировка Товар без групп;
   |Условие(Товар в СЗВозврат);
   |"//}}ЗАПРОС

   ;
   // Если ошибка в запросе, то выход из процедуры

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

   Пока ПолучитьСтроку() = 1 Цикл  
       
       НомСтр = 0;
       Если  ТЗВозврат.НайтиЗначение(Товар,НомСтр, "Товар") =1   Тогда
           ТЗВозврат.ПолучитьСтрокуПоНомеру(НомСтр);
           ВыбКол=ТЗВозврат.ОстатокТовараКонОст;
           Если ВыбКол <= Количество Тогда
               Сообщить(Шаблон("Контрагент [Контрагент] покупал [ВыбКол], а возвращает [Количество]"));
                  СтатусВозврата(0);
           КонецЕсли;
       КонецЕсли;
       
       КонецЦикла;
           
   ВыбратьСтроки();
   Пока ПолучитьСтроку()>0 Цикл
       Если Количество > 0 Тогда
           
   Регистр.ОстатокТовара.Контрагент = Контрагент;
   Регистр.ОстатокТовара.Товар = Товар;
   Регистр.ОстатокТовара.ОстатокТовара = Количество;
   Регистр.ОстатокТовара.ЦенаТовара = ЦенаТовара;
   Регистр.ОстатокТовара.ДвижениеПриходВыполнить();
   
   КонецЕсли;    
КонецЦикла;    

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

И при выводе сообщения выводится общий остаток товара. Как сделать чтобы на одного клиента. Я такая понимаю надо группировку добавить?
1 Ёпрст
 
31.10.12
14:47
(0) надо весь код выкинуть в топку
2 1Сергей
 
31.10.12
14:50
ЦенаТовара в регистре остатков? Это в какой конфе?
3 Ёпрст
 
31.10.12
14:50
впрочем, как и забавный регистр с забавными измерениями..тоже в топку.

И.. если че, остаток, это не "клиентос покупал"
4 Попытка1С
 
31.10.12
14:52
Без фотки не взлетит.
5 Nutsa12
 
31.10.12
15:30
фотка уже была
6 Nutsa12
 
31.10.12
15:31
помогите нормальный код написать, пожалуйста
7 Ёпрст
 
31.10.12
15:33
(6) Тебе не код надо нормальный писать, а разобраться сперва со структурой хранения данных.
У тебя нелепый регистр с нелепыми измерениями.
8 Voronve
 
31.10.12
15:35
(5) Мы не видели "Фотка уже была"
9 Nutsa12
 
31.10.12
15:55
(7) вот я и пытаюсь разобраться...
Это задача примитивная, учебная
10 Nutsa12
 
31.10.12
15:56
Давайте забудем про код. и начнем с начала :) С чего начать?
11 Ёпрст
 
31.10.12
15:57
(10) открыть типовой ТиС и посмотреть там, хотя бы структуру регистров.
12 Ёпрст
 
31.10.12
16:00
13 Nutsa12
 
31.10.12
16:01
(12) под рукой ничего нет. но я немного понимаю как работать с регистрами
14 Ёпрст
 
31.10.12
16:03
15 Ёпрст
 
31.10.12
16:04
16 Ёпрст
 
31.10.12
16:05
17 Nutsa12
 
31.10.12
16:08
спасибо буду разбираться!!!!
18 Nutsa12
 
01.11.12
06:47
снова прошу помощи...
19 Гефест
 
01.11.12
06:55
плохо просишь, ни фотки, ни вопроса
20 Nutsa12
 
01.11.12
06:57
Как сделать чтобы по каждому контрагенту была отдельная сумма по каждому товару?
21 Nutsa12
 
01.11.12
06:57
в первой моей теме уже было фото
22 Гефест
 
01.11.12
07:00
(20) Даже не знаю, с чего начинать рассказывать
(21) Ссылка уже не работает
23 Nutsa12
 
01.11.12
07:11
(22) плохо( Я на работе, фото тут нет
24 Nutsa12
 
01.11.12
07:13
начнем с проведения расходной наклодной.Запись в регистр такая:
ВыбратьСтроки();
   Пока ПолучитьСтроку()>0 Цикл
       
       Регистр.ОстатокТовара.Товар = Товар;
       
       Регистр.ОстатокТовара.Контрагент = Контрагент;
       Регистр.ОстатокТовара.ЦенаТовара = ЦенаТовара;
       Регистр.ОстатокТовара.КолТовара = Количество;
       
       Регистр.ОстатокТовара.ДвижениеВыполнить();
   КонецЦикла;
25 Гефест
 
01.11.12
07:23
(24) Кошмар. Выбрось этот регистр в топку
26 Nutsa12
 
01.11.12
07:28
(25) почему?
27 ЧеловекДуши
 
01.11.12
07:30
(24)Опиши народу структуру регистра...
Если у вас там в качестве измерения Цена, то без фото не взлетит, т.е. ты попала и проблема тут не в коде, а в (7) - попытайся вдуматься в слова Ёпрст4
28 ЧеловекДуши
 
01.11.12
07:33
(26)Потому, что:
1. Цена всегда разная
2. У нас мало данных, что бы тебе подсказать, а телепат утром отдыхает
3. Без фото у тебя не взлетит
4. По остаткам без даты, ты все ровно не сможешь определить, какой товар был продан покупателю, а какой нет
5. При таком регистре, у вас должен быть еще один документ, который должен закрывать сей регистр в 0 "Ноль", т.е. списывать остатки по уже не возвратным позициям.
6.... и т.д. и т.п. - Где фото?
29 ЧеловекДуши
 
01.11.12
07:36
+ Хотя судя по команде "ДвижениеВыполнить", это еще и оборотный регистр :DDDDD
А какие к черту остатки по оборотному регистру?
30 ЧеловекДуши
 
01.11.12
07:36
+ Увольняйся, 1С, не твой конек :)
31 Nutsa12
 
01.11.12
07:36
Регистр остатков: ОстаткиТовара
Измерения: Контрагент, товар
Ресурсы: ЦенаТовара, КолТовара
32 Nutsa12
 
01.11.12
07:37
я только учусь и пытаюсь разобраться
33 ЧеловекДуши
 
01.11.12
07:38
(31)Ты уверена, что остатков?
И как ты собираешься по остатку отделить возврат от не возврата?
34 ЧеловекДуши
 
01.11.12
07:40
+ Еще на последок:
Конструкция типа "Запрос = СоздатьОбъект("Запрос");"
В модуле проведения не всегда отрабатывает и вообще для быстроты проведения не рекомендуется в модель проведения помещать долгоиграющие запросы. Транзакция, однако.
35 Nutsa12
 
01.11.12
07:43
Есть документ: ВозвратТовара.
В нем реквизит шапки: Контрагент
Реквизит табличной части: Товар, Количество, ЦенаТовара
Вводятся данные. Если контрагент возвращает количество больше чем было в расходной накладной и по другой цене, выдать сообщение об этом
36 ЧеловекДуши
 
01.11.12
07:43
+ Ну и вообще последнее.
Так то, при продаже, происходит полное списание остатка со склада в ноль.
Т.е. в большинстве случаев вообще нет и не должно быть остатка при заведении возврата. Это в типовой ТиС-е.
Так что, если нужно вернуть товар, то просто делай приход, без проверки остатков.
37 ЧеловекДуши
 
01.11.12
07:44
+(35)Это у вас ваше ноу-хау? Или все же у вас ТиС типовой?
38 ЧеловекДуши
 
01.11.12
07:44
+ Я про регистр
39 ЧеловекДуши
 
01.11.12
07:48
+ Так то если добавить некий регистр с измерениями:
1. Контрагент
2. Товар
3. Дата продажи (типо горантийное)
4.
//Ресурсы
1. Сумма за товар, С НДС, что бы не замарачиваться.
2. Количество проданного в базовой единице измерения
//Это для того что бы получить после цену

То тогда у вас должен быть автомат, или документ, который по истечению срока будет списывать остаток с этого регистра, по истечению возвратного момента.
И тем самым у вас будет механизм проверки, а покупал ли этот товар покупатель или нет, и по какой цене :)
40 Nutsa12
 
01.11.12
07:53
Это просто учебная задача.
Вы как-то все усложняете :)
По сути надо записать данные в регистр, о том кто, что, сколько и по какой цене покупал.
А потом при возврате проверить есть ли такое
41 ЧеловекДуши
 
01.11.12
07:54
(40)Я работаю, мне некогда играться :)
42 ЧеловекДуши
 
01.11.12
07:55
+(40)Какой вопрос, такие и ответы, вам туда (15) и по ссылкам.
43 KRV
 
01.11.12
08:01
(40) и кто тебе в этом мешает?
44 Bahon
 
01.11.12
11:31
Если Выбклиент.Выбран()=1 Тогда
ТекстЗапроса=ТекстЗапроса+"
|Условие(Клиент=Выбклиент)
45 Nutsa12
 
01.11.12
12:00
(44) Спасиибо!
Но с задачей я уже справилась по другому
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший