Имя: Пароль:
1C
1C 7.7
v7: вопрос по методу СводныйОстаток
0 lucifer
 
01.02.12
17:29
регс = СоздатьОбъект("регистр.склады");
регс.СводныйОстаток(скл.текущийэлемент(),дог.наименование,,,,,сотрудник,"кол");

мне нужно получить остаток по ресурсу кол только по измерением
склад - скл.текущийэлемент()
наименование - дог.наименование
сотрудник - сотрудник

код что выше возвращает 0, хотя если посмотреть сальдо через отчет (там запрос формируется) то в разрезе этих измерений кол = 14
Попробовал так:
регс.Остаток(скл.текущийэлемент(),дог.наименование,,,,,сотрудник,"кол");
выводит остаток, но странно как-то выводит 13 вместо 14.
просто если смотреть отчет то 13 лежат в разрезе из.
склад - значение
наименование - значение
сотрудник - значение
поставщик - пустой
а 1 лежит
склад - значение
наименование - значение
сотрудник - значение
поставщик - значение

получается что регс.Остаток() вернул остаток где поставщик пусто, хотя я вообще пропустил это измерение, по идеи он должен был вообще его не учитывать.
И кстати чем Остаток от СводныйОстаток отличается ?
42 Ёпрст
 
02.02.12
10:35
(40) правильно выставить  параметры, если нужен остаток не на ТА - рассчитать регистр
43 Ёпрст
 
02.02.12
10:35
на нужную дату
44 lucifer
 
02.02.12
10:45
"рассчитать регистр"
это операции -> управление бух. итогами?

"если нужен остаток не на ТА"
я вот не понимаю, пусть даже остаток на ТА, но у меня ТА стоит 29.02.2012 почему остаток 0, он должен быть как на тек. дату
45 Ёпрст
 
02.02.12
10:47
(44)
>>>"рассчитать регистр"
>>>>это операции -> управление бух. итогами?

нет, это рассчитатьрегистрыНА/По+ВременныйРасчет(1)
46 Ёпрст
 
02.02.12
10:48
(44)
для начала, проверить типы измерений, что ты в метод подсовываешь.
47 lucifer
 
02.02.12
10:48
(45) аааа.. спасибо, счас попробую
48 lucifer
 
02.02.12
10:49
(46) типы вчера еще, проверел, перепроверил, такие же как в конфигураторе
49 Ёпрст
 
02.02.12
10:57
(48) возможно, заместо ссылки на объект ты передаешь переменную стипом туда.
50 lucifer
 
02.02.12
10:58
да е мое,  Поле агрегатного объекта не обнаружено (РассчитатьРегистрыПо)
51 lucifer
 
02.02.12
10:59
что ему надо (((
52 lucifer
 
02.02.12
10:59
(51) коду в смысле
53 Эльниньо
 
02.02.12
11:05
(50) Код выкладывай.
54 lucifer
 
02.02.12
11:08
рег = СоздатьОбъект("регистр.склады");
55 lucifer
 
02.02.12
11:08
ой
56 lucifer
 
02.02.12
11:09
рег = СоздатьОбъект("регистр.склады");
рег.ВременныйРасчет(1);  
рег.РассчитатьРегистрыПо(ТекущаяДата(),);
КолО = рег.СводныйОстаток(скл.текущийэлемент(),дог.наименование,,,,,сотрудник,"кол");
57 lucifer
 
02.02.12
11:17
главное когда пишу рег.РассчитатьРеги.. 1с мне выводит этот метод, а во время работы программы ругается
58 Эльниньо
 
02.02.12
11:37
(56)
рег = СоздатьОбъект("регистр.склады");
рег.ВременныйРасчет(1);  
РассчитатьРегистрыНа(ТекущаяДата(),);
КолО = рег.СводныйОстаток(скл.текущийэлемент(),дог.наименование,,,,,сотрудник,"кол");

Есть 2-й вариант. Попробуй этот для начала.
59 lucifer
 
02.02.12
12:47
Ёпрст4, был прав, отчасти.
плюнул я на СводныйОстаток, решил через запрос сделать и фиг.
Долбался я с ним, даже голова разболелась, потом попробовал так
вместо
дог.наименование
и
скл
(скл раньше брался так
Если пер.ЗначениеНаДату(ТекущаяДата()).код=3 Тогда  
скл.найтипокоду(9);
иначе              
скл.найтипокоду(глсклад);    
КонецЕсли;
)
изменил на
Если пер.ЗначениеНаДату(ТекущаяДата()).код=3 Тогда  
скл.найтипокоду(9);
иначе              
скл.найтипокоду(глсклад);    
КонецЕсли;
скл=скл.ТекущийЭлемент();
товр=дог.наименование.ТекущийЭлемент();

м потом товр и скл подставил в запрос и все заработало, но только через запрос, а СводныйОстаток()
так и не работал.
Отсюда вопрос чем дог.наименование отличается от дог.наименование.ТекущийЭлемент() в последнем ссылка передается а в первом сам объект?
и почему не работает если сразу в запрос написать
дог.наименование.ТекущийЭлемент(), именно надо присвоит значение переменной и уже переменную в запрос вставлять.
Когда это все сработало, товар добавился в заявку (это все я делаю что бы проверить есть ли у сотрудника необходимое кол-во товара когда он создает заявку на отгрузку этого товара)
ну так вот, когда товар добавился в заявку, я сохранил ее, и решил попробовать опять СводныйОстаток, убрал комментарии и на мое удивление СводныйОстаток вернул правильное значение, я на радостях закоментил код с запросом оставил с СводныйОстаток, попробовал еще, и опять сработало, потом я удалил добавленые строки с дока, пробую, фиг. Почему-то СводныйОстаток работает только тогда когда в документ добавлена строка, короче оставил вариант с запросом.
60 1Сергей
 
02.02.12
12:54
Про полный ПЭ говорили уже?
61 lucifer
 
02.02.12
12:56
на вопросы кто-нить ответит? или стебаться будете дальше?
62 1Сергей
 
02.02.12
12:57
(61) как мы могли протелепатить про твой "пер"?

Ты можешь более внятно объяснить что откуда берётся?
63 Voronve
 
02.02.12
12:58
(0) Структуру регистра "Склады" в студию
64 1Сергей
 
02.02.12
13:00
(63)+1

Поставщик - какой по счёт реквизит?
65 1Сергей
 
02.02.12
13:00
*по счёту
66 lucifer
 
02.02.12
13:10
(63)http://s018.radikal.ru/i518/1202/69/c0324793c6c2.jpg
(64) не понял вопрос
67 Эльниньо
 
02.02.12
13:13
(66) Стопудово не закрывается.
68 Voronve
 
02.02.12
13:16
(66) Судя по картинке, твое
регс = СоздатьОбъект("регистр.склады");
регс.СводныйОстаток(скл.текущийэлемент(),дог.наименование,,,,,сотрудник,"кол");

работать и не должно, попробуй так

регс = СоздатьОбъект("регистр.склады");
регс.СводныйОстаток(<Элемент справочника "Склады">,<Элемент справочника "Товары">,,,,,<Элемент справочника "Сотрудники">,"кол");

Должен выдать остаток на ТА.
Да кстати регистр остатков ? или оборотный ?
69 Mikeware
 
02.02.12
13:18
А что вообще хранит столь оригинальный регистр?
70 Эльниньо
 
02.02.12
13:23
(68) Ты ветку читал?
Читать надо, дабы не выглядеть...
71 lucifer
 
02.02.12
13:24
(67) нет
(69) остатки товаров
(68)
"регс.СводныйОстаток(<Элемент справочника "Склады">,<Элемент справочника "Товары">,,,,,<Элемент справочника "Сотрудники">,"кол"); "
так у меня так и есть
72 lucifer
 
02.02.12
13:25
я все таки надеюсь увидеть ответ на вопрос
"вопрос чем дог.наименование отличается от дог.наименование.ТекущийЭлемент() в последнем ссылка передается а в первом сам объект? "
73 Ёпрст
 
02.02.12
13:29
(66) весьма забавная структура..
То что он не закрывается, это очевидно
74 Ёпрст
 
02.02.12
13:30
(69) ФСЁ!
:)
75 Mikeware
 
02.02.12
13:31
(73) Думаешь, оно знает,  что такое "закрывается"? и почему он должен закрываться? :-)))
76 Ёпрст
 
02.02.12
13:32
(71)
скл - это что ?
дог - это что ?

Это реквизиты документа ? Или это переменные ?
Если реквизиты дока, ТО КАКИЕ ? Шапки ? Табличной части ? Общие реквизиты?

Запрос этот где пишешь ?
77 lucifer
 
02.02.12
13:35
(75) оно знает.
(76)
скл = СоздатьОбъект("Справочник.Склады");
скл.найтипокоду(глсклад);
78 lucifer
 
02.02.12
13:36
дог = СоздатьОбъект("Документ.Счет");
дог.найтидокумент(табл.получитьзначение(номстр,1));
79 Ёпрст
 
02.02.12
13:38
(77) :)
ну вот, уже ошибка нумер раз.
нужно передавать не переменную скл, а скл.ТекущийЭлемент()

И это, глсклад - это строка ? Че за переменная? Или это реквизит документа ?
80 Ёпрст
 
02.02.12
13:39
(78) ошибка нумер 2
нужно передавать табл.получитьзначение(номстр,1) без всяких поисков
81 lucifer
 
02.02.12
13:40
(79) вы наверное не все читаете
"чем дог.наименование отличается от дог.наименование.ТекущийЭлемент() в последнем ссылка передается а в первом сам объект?
и почему не работает если сразу в запрос написать
дог.наименование.ТекущийЭлемент(), именно надо присвоит значение переменной и уже переменную в запрос вставлять. "
82 Ёпрст
 
02.02.12
13:41
Наименование - это ты так имя реквизиту задал ?
Весьма оригинально
83 Ёпрст
 
02.02.12
13:41
>>>"чем дог.наименование отличается от дог.наименование.ТекущийЭлемент

в твоём случае ничем
84 lucifer
 
02.02.12
13:42
(79)"нужно передавать не переменную скл, а скл.ТекущийЭлемент() "
да пробовал, и так пробовал
скл=скл.ТекущийЭлемент();
85 lucifer
 
02.02.12
13:42
"в твоём случае ничем"
но почему-то заработало только когда я
изменил на

Если пер.ЗначениеНаДату(ТекущаяДата()).код=3 Тогда  
скл.найтипокоду(9);
иначе              
скл.найтипокоду(глсклад);    
КонецЕсли;
скл=скл.ТекущийЭлемент();
товр=дог.наименование.ТекущийЭлемент();
86 Ёпрст
 
02.02.12
13:44
И это, ты хочешь сказать, что реквизит документа Счет с идентификатором Наименование у тебя имеет тип Справочник.Товары ?

И еще и поди это Реквизит ТАБЛИЧНОЙ части ?
:))
87 lucifer
 
02.02.12
13:46
(80) зачем мне передавать счет, мне товар надо, поэтому я нахожу счет выбираю строки и в цикле по строкам проверяю нал. товара для каждой позиции
"что реквизит документа Счет с идентификатором Наименование у тебя имеет тип Справочник.Товары"
именно
да эта табличная часть, но я ж циклом по ней прохожусь
88 Ёпрст
 
02.02.12
13:48
(87) И в каком месте цикл по строкам счета у тебя ?
Нам отсюда не видно - больше кода
89 lucifer
 
02.02.12
13:51
(88)ок
90 lucifer
 
02.02.12
13:55
дог.найтидокумент(табл.получитьзначение(номстр,1));
рег = СоздатьОбъект("регистр.склады");    
скл = СоздатьОбъект("Справочник.Склады");
пер = СоздатьОбъект("Периодический");  
зпр  = СоздатьОбъект("Запрос");  
           
дог.выбратьстроки();
Пока Дог.Получитьстроку() = 1 Цикл  
Если дог.Вид()=глсчет Тогда
пер.ИспользоватьОбъект("производитель",наименование);
Если пер.ЗначениеНаДату(ТекущаяДата()).код=3 Тогда  
скл.найтипокоду(9);
иначе              
скл.найтипокоду(глсклад);    
КонецЕсли;
скл=скл.ТекущийЭлемент();
товр=дог.наименование.ТекущийЭлемент();
КолО = рег.СводныйОстаток(скл,товр,,,,,сотрудник,"кол"); //сотрудник - это реквизит в заявки (тек. док.)
Если (КолО<дог.Кол)и(число(дог.наименование.родитель.код)<>9) Тогда   // 9 - код группы уплотнители
Сообщить("Не хватает товара "+дог.наименование+" ("+Строка(дог.наименование.код)+")
   |на складе "+Строка(скл)+"
   |у сотрудника "+Строка(сотрудник));
СтатусВозврата(0);
           Возврат;
КонецЕсли;  
конецесли;
конеццикла;
91 Ёпрст
 
02.02.12
14:08
(90) тихий ужас
92 Ёпрст
 
02.02.12
14:09
пер.ИспользоватьОбъект("производитель",наименование);
наименование - это что ?
93 Ёпрст
 
02.02.12
14:11
ну и далее,

Сообщить(скл.Выбран());
Сообщить(дог.наименование.Выбран());
Сообщить(сотрудник.Выбран())
94 lucifer
 
02.02.12
14:19
(92) это реквизит табл. части дог, тип справочник товары
сообщить все 3 вывели 1
95 Ёпрст
 
02.02.12
14:23
>>>это реквизит табл. части дог ????

Это как ?
96 lucifer
 
02.02.12
14:36
97 Ёпрст
 
02.02.12
14:55
И ? какое отношеие ЭТо имеет к
пер.ИспользоватьОбъект("производитель",наименование);

Наименование - ЭТО что здесь ?

ТЫ этот есь код ГДЕ пишешь ?
М модуле формы докумета ?
В отчет ?
Еще гдее ?
98 Jaffar
 
02.02.12
14:57
(97) кажется в модуле формы документа - при подборе товара...
99 Mikeware
 
02.02.12
14:58
(97) Ты чо, нипанимаешь?
этот код он пишет В ФОРУМЕ!!!
100 Ёпрст
 
02.02.12
15:00
сотко!

(99) хрен знает, я вообще не догоняю, как ТАК можно кодить
101 Ёпрст
 
02.02.12
15:00
ведь кто-то же потом будет всё переделывать
102 Mikeware
 
02.02.12
15:04
(100) Причем больше года...
103 lucifer
 
02.02.12
15:10
(97) в модуле формы документа заявка, в ней нажимается кнопка выбрать счет,
идет выборка счетов по покупателю что указан в счете и еще по кой каким значениям, те счета что находятся выводятся в ТЗ сотрудник выбирает счет из ТЗ и уже в этом счете проходимся циклом по табличной части. Наименование это реквизит табличной части счета которого выбрал сотрудник из ТЗ имеет тип справочник.товары (я хз как еще понятней объяснить)
в этом условии я проверяю если код у производителя в тек. товаре (производитель периодический) = 3 то это 1 склад, иначе другой.
Вы не на том внимание заостряете, я еще вчера первым делом проверил склад правильный выбирается или нет, правильный!
(100) "ведь кто-то же потом будет всё переделывать"
этот кто-то Я. Не я строил архитектуру конфигурации, это все писалось до меня.
104 lucifer
 
02.02.12
15:10
(103)
"по покупателю что указан в счете "
не в счете а в заявке
105 Ёпрст
 
02.02.12
15:13
(103) т.е Наименование - это реквизит заявки ? И реквизит чего Это ? Шапки ? Табличной части документа ? Какого он типа ?
106 Mikeware
 
02.02.12
15:14
(105) табчасть, Справочник.Товары :-)))
107 Ёпрст
 
02.02.12
15:15
(106) не-не-не.. так слишком очевидно!
108 Voronve
 
02.02.12
15:16
(0) Может специалиста пригласить ?
109 lucifer
 
02.02.12
15:19
тааак да я не прав, надо так
пер.ИспользоватьОбъект("производитель",дог.наименование);
но это лиж имело б разницу если у нас склад был бы 9 (код)
а это редко бывает, восновном глсклад
и даже если условие всегда переходило на иначе, в данном случаи роли не играет, склад был правильный
110 lucifer
 
02.02.12
15:21
исправил, та же байда, что подтверждает мои слова (109)
111 Эльниньо
 
02.02.12
15:27
"это лиж" - вообще в мемориз.
Или это олбанский?
112 lucifer
 
02.02.12
15:28
(111) ну если нечего сказать по сабжу, что писать-то ?
113 Эльниньо
 
02.02.12
15:29
(112) Просто пытаюсь понять "это лиж имело 6 разницу"
114 Jaffar
 
02.02.12
15:33
(113) телепатирую: в переводе на русский, видимо, означает "имело бы разницу лишь в случае ..."
ЗЫ: "в данном случаи" - не на много лучше...
115 Ёпрст
 
02.02.12
15:37
Так..
Что сообщает это:
Сообщить(скл.найтипокоду(глсклад));
116 lucifer
 
02.02.12
15:40
(115) сообщает 1
117 Ёпрст
 
02.02.12
15:47
Сообщить(дог.наименование.Вид()) ?
118 Ёпрст
 
02.02.12
15:48
И это, что сейчас "не работает"?
119 lucifer
 
02.02.12
15:50
(117) Товары
(118) нет
120 viktor_vv
 
02.02.12
15:56
Командир :  Приборы ?
Штурман  : 60.
Командир : Что 60 ?
Штурман  : А что приборы ?

:)
121 Ёпрст
 
02.02.12
16:03
(119) ок

Если смотреть тут

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


есть останки нужные по твоим измерениям?
122 lucifer
 
02.02.12
16:25
(121) Поле агрегатного объекта не обнаружено (ВыгрузиьтИтоги)
123 Ёпрст
 
02.02.12
16:26
(122) ВыгрузитьИтоги
124 lucifer
 
02.02.12
16:36
(121) да есть
125 Ёпрст
 
02.02.12
16:38
теперь сверни эту ТЗ по нужным измерениям (те которые склад тоар сотрудник).. есть то, что ты туда пихаешь в метод сводный остаток ?
И количество остатка совпадает ?
126 lucifer
 
02.02.12
16:40
что интересно, у меня в коде сначала выполняется запрос (через запрос работает), проверяется что бы товара было достаточно если да строка добавляется, после запроса я вывожу
КолО = рег.СводныйОстаток(скл,товр,,,,,сотрудник,"кол");  
Сообщить(КолО);
просто для наглядности.
когда первый раз я выбираю счет в ТЗ выполняется запрос,
Сообщить(КолО); возвращает 0
товар добавляется (т.к. запрос работает нормально и через запрос кол-во правильное можно получить)
и запускаю эту процедуру повторно (позиция уже добавлена в заявку)
со второго раза
Сообщить(КолО);
возвращает правильное значение, почему так не пойму. Могу видео даже отснять для наглядности.
127 Ёпрст
 
02.02.12
16:43
(126) не надо видео, нужно просто задавать правильные Имена переменным, отличными от идентификаторов Этого документа
128 lucifer
 
02.02.12
16:49
я сделал так (вместо сворачивания)
Пока тз.ПолучитьСтроку()=1 Цикл  
Если ПустаяСтрока(тз.товар)=1 Тогда  
Продолжить;
КонецЕсли;
Сообщить(строка(тз.товар)+" ("+строка(тз.товар.код)+") "+строка(тз.сотрудник)+" "+строка(тз.склад)+" "+Строка(тз.кол));
КонецЦикла;

и поиском по коду товара нашел нужный, да все как в отчете, остаток верный
129 Ёпрст
 
02.02.12
16:51
(128) прям так и руками посчитал все строки с совпадающим набором измерений в окошке сообщения ?
130 lucifer
 
02.02.12
16:55
а там по нужному сотруднику значение рябом, в одной строке 1 в др. 13
получается правильно, у него сальдо 14
131 lucifer
 
02.02.12
16:55
*рядом
132 Ёпрст
 
02.02.12
17:04
(130) значит, в метод сводный Остаток ты кидешь "не те же самые значения"
133 lucifer
 
02.02.12
17:09
да те же.
вот почему тогда это:
КолО = рег.СводныйОстаток(скл,товр,,,,,сотрудник,"кол");  
Сообщить(КолО);                       Сообщить(рег.Остаток(скл,товр,,,,,сотрудник,"кол"));
выводит
КолО - 0
рег.Остаток() - 13
ну почему 13 объяснимо, потому что 1 штука лежит еще по 3-му измерению, а у 13 3-е изм. пустое.
Но выводит же.
134 Ёпрст
 
02.02.12
17:11
а так что кажет ?
Сообщить(рег.СводныйОстаток(скл,товр,,,,,сотрудник,"кол"));
135 lucifer
 
02.02.12
17:13
о епт... работает
136 lucifer
 
02.02.12
17:13
вот дурак, надо было сразу так проверить
137 Ёпрст
 
02.02.12
17:16
(135) :)
тепереча смотри, что за реквизит формы у тебя с идентификатором КолО
138 Jaffar
 
02.02.12
17:18
(137) контрагент. или валюта например :-)
139 Ёпрст
 
02.02.12
17:19
(138) не.. это слишком просто
:)
140 lucifer
 
02.02.12
17:21
да мля дурак, из-за невнимательности и вас мучал столько времени
141 Эльниньо
 
02.02.12
17:25
(140) Ну раз осознал, покаялся - нещитово.
Тока больше так не делай.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.