Имя: Пароль:
1C
1C 7.7
v7: Проблема
0 Ksardas
 
18.04.12
09:28
Здравствуйте , стоит 7.7 конфигурация альфа-авто: Автозапчасти+автосервис.Проблема такая. Есть Приходные накладные в которых есть товар , цена сумма и тд. Так вот мне надо добавить Разницу , это ЦенаПрихода/ЦенуЗаказа.
В Приходной есть реквизит ДокОснование(ЗаказПоставщику, РасходнаяНакладная, ТоварныйЧек).
Пробовал вот так:
ДокОсн=ДокументОснование;
ВидОсн=ДокОсн.Вид();
тз = СоздатьОбъект("ТаблицаЗначений"); //сюда заказ выгружаем
Если ВидОсн="ЗаказПоставщику" тогда
ДокОсн.ВыгрузитьТабличнуюЧасть(тз);
КонецЕсли;  
Потом при выбори строк в приходной

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

ошибка номер за приделами значения!
В чем ошибка или может можно как то по другому сделать?
1 zak555
 
18.04.12
09:30
перед поиском

НомСтр = 0;
2 zak555
 
18.04.12
09:31
> Разницу , это ЦенаПрихода/ЦенуЗаказа

это не разница, а отношение
3 zak555
 
18.04.12
09:31
> В Приходной есть реквизит ДокОснование(ЗаказПоставщику, РасходнаяНакладная, ТоварныйЧек)

три реквизита документа оснований ?
4 Ksardas
 
18.04.12
09:34
Не так выразился, отношение. Тип реквизита просто документ.  Но ввод на основании эти 3.
5 zak555
 
18.04.12
09:35
а теперь ещё раз и всё по-русски
6 Ksardas
 
18.04.12
09:35
НомСтр=0 стоит
7 Шапокляк
 
18.04.12
09:37
тз.НайтиЗначение(Товар,НомСтр,"Товар")?
8 Ksardas
 
18.04.12
09:39
Хм недавно занимаюсь так что по "русски" врятли получится ,но как смогу=)Документ.ПриходнаяНакладная есть реквизит ДокументОснование тип реквизита документ. Там же где все реквизиты табличной части и шапки есть Ввод на основание, там галки стоят на основании чего и основание для чего, так вот там стоят галки на основании ЗаказПоставщику, РасходнаяНакладная, ТоварныйЧек.
9 Ksardas
 
18.04.12
09:41
Да не в кавычках дела просто суда не так копирнул ошибка Номер за приделами значения.
ВыбратьСтроки();

   НомСтр=0;    
   Пока ПолучитьСтроку()=1 Цикл    

 Если тз.НайтиЗначение(Товар,НомСтр,"Товар") = 1 Тогда
     Если НомСтр>0 Тогда
Кофициент = тз.ПолучитьЗначение(НомСтр,"Цена");
КонецЕсли;
КонецЕсли;
10 ЧеловекДуши
 
18.04.12
09:45
(9) НомСтр=0;  
Вынеси это в сам цикл, ты хоть воспользуйся синтаксис-помощьником, там описано, что будет, если свой "НомСтр" содержит какое либо число, отличное от нуля:)
11 Ksardas
 
18.04.12
09:45
и так пробовал не помогло
12 zak555
 
18.04.12
09:45
сделай без обхода строк
13 ЧеловекДуши
 
18.04.12
09:47
+ алгоритм гуано, в документе могут быть, к примеру 10 строк ли две (2) одинакового товару.
Твой поиск даст только всегда первый найден :)
У вас шо, нет партии поставки? :)
14 Ksardas
 
18.04.12
09:47
zak555 это как ? Мне надо  еще на печатную форму в приходной выводить.
15 Ksardas
 
18.04.12
09:49
ЧеловекДуши Есть регистр заказы поставщикам пробовал через найти движения документа тоже не получилось =) , есть так же реквизит партии в приходной
16 povar
 
18.04.12
09:50
Пока ПолучитьСтроку()=1 Цикл    
 Если тз.НайтиЗначение(Товар,НомСтр,"Товар") = 1 Тогда
 Кофициент = тз.ПолучитьЗначение(НомСтр,"Цена");
 НомСтр=0;
17 ЧеловекДуши
 
18.04.12
09:50
+ (9) А это что?

Если НомСтр>0 Тогда
Кофициент = тз.ПолучитьЗначение(НомСтр,"Цена");
КонецЕсли;

зачем ты проверяешь на "НомСтр>0"? Оно всегда отлично от нуля :)

(14) Ну это ты загнул, читай две жёлтые книги по 1С и просветляйся :)
18 Ksardas
 
18.04.12
09:53
Рег = СоздатьОбъект("Регистр.ЗаказыПоставщикам");
Если Проведен() = 1 Тогда
Рег.ВыбратьДвиженияДокумента(Текущийдокумент());
Пока Рег.ПолучитьДвижение() = 1 Цикл
ТекДок = рег.ЗаказПост;
ТекДок.ВыбратьСтроки();
Пока ТекДок.ПолучитьСтроку() = 1 Цикл  
Заказ.НоваяСтрока();
Заказ.Товар=ТекДок.Товар;
Заказ.Код=ТекДок.Товар.Код;
Заказ.ЕТК=ТекДок.Товар.КаталНомер;
Заказ.Цена=ТекДок.Цена;
КонецЦикла;
КонецЦикла;
КонецЕсли;

Он находил только некоторые позиции , а большинство не находил
вообще ..
19 ЧеловекДуши
 
18.04.12
09:53
(15) И каким ты образом ищешь движения документа ;) ?

Используй запросы, а именно, для тебя есть мастер запросов, для новичков помогает и для бывалых тоже :)
20 ЧеловекДуши
 
18.04.12
09:54
(18) весь код в топку, используй запросы :)
21 Ksardas
 
18.04.12
09:55
ЧеловекДуши ну про печатную форму я имел виду что в этом же цикле
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл   я вывожу все на печать по приходной. а если сделать другой цикл то как тогда я буду все вместе выводить ? или я опять фигню сморозил =))
22 ЧеловекДуши
 
18.04.12
09:56
+(18) ты хоть понимаешь, что записей по регистру может быть столько же, сколько строк в документе, а ты еще и цикл в цикле проходишь, т.е. по сути должно все дублироваться :)
23 ЧеловекДуши
 
18.04.12
09:57
(21)Ты сначала получи, то что хочешь, а потом уже думай про печатную форму :)
Я же сказал, используй мастер запросов и поймешь, как делать печатную форму.
24 Ksardas
 
18.04.12
09:58
Ну тз можно свернуть =))
Тогда вопрос как мне в запросе указать например что мне нужны детали именно из этого заказа ,заказов может быть несколько а приход 1.Я же запрос делаю с Даты по дату.
25 ЧеловекДуши
 
18.04.12
09:58
+(21) Ты вообще сколько времени программируешь на 1С?
Кем ты по специальности?
И в каких версиях 1С ты программировал? (уверенно)
26 AntiBuh
 
18.04.12
09:58
а попробуй НомСтр=0 поставить прям перед самим НайтиЗначение
27 ЧеловекДуши
 
18.04.12
09:59
(24)Ты мастер запускал?
28 Ksardas
 
18.04.12
10:00
Занимаюсь месяца полтора раньше не программировал , по специальности информатик юрист =)), Мастером не пользовался так писал =)
29 ЧеловекДуши
 
18.04.12
10:00
+(24) Если в запросе указать условие "Текущийдокумент = твоему", то все побоку, будет обработан только твой документ :)
30 Ksardas
 
18.04.12
10:02
Что то вроде условие Док=ТекущийДокумент(); ?
31 ЧеловекДуши
 
18.04.12
10:02
(28)Тогда прочти сначала, про две жёлтые книги, про язык 1С, и с чем его едят. Запросы во второй книге.
Как тебя взяли на работу? :)... ептью... юрист-программист :DDDDDD
Куда катится мир :(
Учись
32 ЧеловекДуши
 
18.04.12
10:03
(30)Нет типо так

Док = Регистр.Твой.Текущийдокумент;
Условие(Док = НекТекДок);
33 Ksardas
 
18.04.12
10:06
Лучше через регистр остатки Товаров ?Так меня и не программистом взяли, я типо системный программирую еще и по судам шастаю 3 в 1 =)
34 ЧеловекДуши
 
18.04.12
10:07
+(32) НекТекДок - переменная, которая содержит ссылку на твой документ, по которому тебе нужно сделать отбор.
Даты в запросе тоже лучше указывать, это же 1С, её надо знать, логика в некоторых местах попросту отсутствует :)

+ Не забывай в запросе использовать функции, типо сумма, приход, расход
35 povar
 
18.04.12
10:07
(33) нихера ты бабла рубишь...
36 ЧеловекДуши
 
18.04.12
10:07
(33)Лихо, сколько платят человеку - параходу?
37 povar
 
18.04.12
10:07
+(35) сделаю (0) за 5000 руб.
38 Ksardas
 
18.04.12
10:18
В том том то и дел что не фига не рублю , это для опыта ,можно сказать ищу себя
39 Ksardas
 
18.04.12
10:18
ЧеловекДуши даже сказать стыдно =)
40 Ksardas
 
18.04.12
13:55
Я в правильном направлении вообще мыслю ?
ДокПрих=ТекущийДокумент();
Запрос=СоздатьОбъект("Запрос");
ТекстЗапроса=    "//{{ЗАПРОС
|Период с ДатаДокОсн по ДатаДокОсн;
|Тов=Регистр.ЗаказыПоставщикам.ЗаказПост.Товар;
|Док=Регистр.ЗаказыПоставщикам.ЗаказПост.ТекущийДокумент;
|Кол=Регистр.ЗаказыПоставщикам.ЗаказПост.Количество;
|Цена=Регистр.ЗаказыПоставщикам.ЗаказПост.Цена;
|Функция КолРасход=Расход(Кол);
|Группировка Тов без групп;
|Группировка Док;
|Условие(Док=ДокПрих);
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
Сообщить("Не выполнился запрос");
СтатусВозврата(0);
Возврат;
КонецЕсли;
Пока Запрос.Группировка(1)=1 Цикл
  Пока Запрос.Группировка(2)=1 Цикл    
   ТоварЗак=Запрос.Тов;
   КодЗак=Запрос.Тов.Код;
       ЕткЗак=Запрос.Тов.Етк;
   ЦенаЗак=Запрос.Цена;
   КонецЦикла;
Заказ.НоваяСтрока();
Заказ.Товар=ТоварЗак;
Заказ.Код=КодЗак;
Заказ.ЕТК=ЕткЗак;
Заказ.Цена=ЦенаЗак;        
КонецЦикла;
41 Mikeware
 
18.04.12
14:05
(31) логично. "Юрист _минус_ программист"
42 Ksardas
 
19.04.12
11:23
Блин беда. Не могу задать условие чтобы запрос искал детали именно по этой приходной накладной .
Пробовал
Условие(Док = ДокОснование); не чего не находит
ДокОснование реквизит шапки приходной.
Условие(Док =ПоЗаказу);
ПоЗаказу- Реквизит табличной части в нем дата и номер заказ.
Выдает только несколько деталей из прихода на пример 10 а их в приходной 60...
43 Ksardas
 
19.04.12
11:40
Получается так что детали только с одного заказа , а в приходной могут быть детали с разных заказов ...
44 Ыщъ
 
19.04.12
11:56
(41) Не котируется.
Надо: "Юрист + Бетонщик - Программист"
45 Ksardas
 
19.04.12
13:27
Дезинформировали вы меня , все оказалось гораздо проще и запрос писать не надо...  
ПоЗаказу.ВыгрузитьТабличнуюЧасть(ТЗ);
НомСтр = 0;
Если ТЗ.НайтиЗначение(Товар,НомСтр,"Товар") = 1 Тогда
ЦенаЗак= ТЗ.ПолучитьЗначение(НомСтр,"Цена");
Иначе
ЦенаЗак = 0;
КонецЕсли;
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn