Имя: Пароль:
1C
1C 7.7
v7: Сводный остаток
0 Касандер72
 
18.06.12
10:19
Добрый день всем!
Конфа - переделанная, сетевая, на скуле 2005. Пользователи - в терминале и на прямую.
Проблема в следующем: при проведении документа выдает ошибку - ругается на метод сводный остаток, пример кода:

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

Интересно то что обработка с аналогичным кодом работает без проблем с теми же правами - доступ к регистрам стоит.
Кто сталкивался с подобным - поверните мой голова в нужный направление, либо подскажите в каком гене у меня ошибка. Заранее благодарю.
1 1Сергей
 
18.06.12
10:21
а где рассчет временных остатков?
2 1Сергей
 
18.06.12
10:21
и что за ошибка выходит?
3 1Сергей
 
18.06.12
10:22
структура регистра?
4 Ёпрст
 
18.06.12
10:30
(0) с объекта
<Регистр.> получать останки моветон, этот объект должен использоваться только для записи движений регистра.
5 Ёпрст
 
18.06.12
10:30
ну и вот этот код


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

тоже бредятина..
6 Касандер72
 
18.06.12
10:39
(1) на кой временной расчет?
(2) ругается что метод "СводныйОстаток" не может быть выполнен - на тестовой базе без проблем
(3) Номенклатура,Размер,Расцветка-Количество;
(4) на тестовой все получает
(5) не мучай голову - это мультисчетчик
7 Касандер72
 
18.06.12
10:40
+(6) Тестовая база - полная копия на том же серваке - другой каталог просто
8 1Сергей
 
18.06.12
10:41
(6) про проведение задним числом когда-нибудь что-нибудь слышал? ну, там, краем уха хотя бы
9 Касандер72
 
18.06.12
10:42
(8) слышал - все доки в реале проводятся - упаковка на конвейерах идет
10 Касандер72
 
18.06.12
10:44
+(8) проблема не в этом (пусть даже неверные считает) - почему в аналогичной базе выбрыки дает - в чем может быть причина?
11 Ёпрст
 
18.06.12
10:47
(10) в днк вестимо
12 1Сергей
 
18.06.12
10:47
(10) сделай по нормальному и не мучай ни себя, ни людей
13 Касандер72
 
18.06.12
10:48
(12) нормально, это как?
14 1Сергей
 
18.06.12
10:51
Рег = СоздатьОбъект("Регистры");
РегЗаказы = Рег.ЗаказыПроизводства;

Если ИтогиАктуальны()<>1 Тогда
   РегЗаказы.ВременныйРасчет(1);
   Рег.РассчитатьРегистрыНа(ТекущийДокумент());
КонецЕсли;

...
   Остатки.Остаток = РегЗаказы.СводныйОстаток(Остатки.Номенклатура,Остатки.Обмер,Остатки.Цвет,"Количество");
15 Касандер72
 
18.06.12
10:53
(14) да пробовали предварительный расчет, пробовали - этой дуре ПОЕ..ТЬ)
тем более, что на тестовой ругани нет
16 1Сергей
 
18.06.12
10:54
(11)+1
17 Касандер72
 
18.06.12
10:55
+(15) и даже в обработку код переносили - тоже работает, в модуле проведения - не взлетает (
18 Касандер72
 
18.06.12
10:58
(11) и (16) проблемы в ДНК - тоже вариант - вопрос в чьем? )
19 Boroda
 
18.06.12
10:58
А не лучше сделать один раз "ВыгрузитьИтоги" предварительно задав набор нужных фильтров?
20 1Сергей
 
18.06.12
10:59
(19) в большинстве случаев да. но, у него тут из шапки реквизиты не берутся, нет общих значений измерений. Потому лучше в цикле
21 Касандер72
 
18.06.12
11:01
(19) каждый раз фильтры менять - дольше по времени - проверено на отладчике
22 1Сергей
 
18.06.12
11:02
(21) он не предлагает тебе каждый раз менять фильтр. Он предлагает запихнуть все нужные значения измерений в списки значений и по ним отфильтровать один раз.
Но, это тоже может замедлить. От задачи зависит в общем
23 Касандер72
 
18.06.12
11:05
Во избежание обсуждения генов: нижеприведенный код тоже тестился - та же проблема

Процедура ОбработкаПроведения()
   
   ВсеРегистры = СоздатьОбъект("Регистры");
   РегЗаказы = ВсеРегистры.ЗаказыПроизводства;

   Если ИтогиАктуальны()<>1 Тогда
       РегЗаказы.ВременныйРасчет(1);
       ВсеРегистры.РассчитатьРегистрыНа(ТекущийДокумент());
   КонецЕсли;
   
   Остатки = СоздатьОбъект("ТаблицаЗначений");
   ВыгрузитьТабличнуюЧасть(Остатки);
   Остатки.Свернуть("Номенклатура,Обмер,Цвет,Индекс","Количество");
   Остатки.НоваяКолонка("Остаток","Число",10,0);
   Остатки.ВыбратьСтроки();
   Пока Остатки.ПолучитьСтроку() = 1 Цикл
       Остатки.Остаток = РегЗаказы.СводныйОстаток(Остатки.Номенклатура,Остатки.Обмер,Остатки.Цвет,"Количество");
   КонецЦикла;
   
   ВыбратьСтроки();
   Пока ПолучитьСтроку() = 1 Цикл
               
       Заказ = 0; НомСтроки = 0;
       Если Остатки.НайтиЗначение(Индекс,НомСтроки,"Индекс") > 0 Тогда
           Остатки.ПолучитьСтрокуПоНомеру(НомСтроки);
           Если Остатки.Остаток > 0 Тогда
               
               Заказ = 1;
               Регистр.ЗаказыПроизводства.Номенклатура = Номенклатура;
               Регистр.ЗаказыПроизводства.Размер = Обмер;
               Регистр.ЗаказыПроизводства.Расцветка = Цвет;
               Если Остатки.Остаток - Количество > 0 Тогда
                   Регистр.ЗаказыПроизводства.Количество = Количество;
                   Остатки.Остаток = Остатки.Остаток - Количество;
               Иначе
                   Регистр.ЗаказыПроизводства.Количество = Остатки.Остаток;
                   Остатки.Остаток = 0;
               КонецЕсли;
               Регистр.ЗаказыПроизводства.ДвижениеРасходВыполнить();
               
           КонецЕсли;
       КонецЕсли;
       
       глПеремещениеУпаковки(ШКупаковки,Перечисление.ОперацииСизделиями.УпаковкаИзделия,ОбъектУпаковки,ТекущийДокумент());
       УстановитьРеквизитСправочника(ШКупаковки,"Заказ",Заказ,ДатаДок);
       
   КонецЦикла;    
       
КонецПроцедуры // ОбработкаПроведения()
24 Ёпрст
 
18.06.12
11:08
Заказ = 0; НомСтроки = 0;
       Если Остатки.НайтиЗначение(Индекс,НомСтроки,"Индекс") > 0 Тогда


Индекс - Это что ?
25 Ёпрст
 
18.06.12
11:11
в регистре ЗаказыПроизводства - 3 измерения, или сколько ?
26 Boroda
 
18.06.12
11:12
Как вариант:
Попробуй завести сперва  переменную типа:
врНоменклатура = Остатки.Номенклатура;
а потом эту переменную подсунь как параметр функции Сводныйостаток.
27 Касандер72
 
18.06.12
11:13
(24) строка = Номенклатура+Размер+Расцветка
точнее: Индекс = Номенклатура.Артикул + "=" + СокрЛП(Обмер.Представление) + "="    + СокрЛП(Цвет.Наименование);
вставлено как ускоритель: чтобы не устраивать перебор+сравнение по 3-м реквизитам
28 Ёпрст
 
18.06.12
11:14
>>>>документа выдает ошибку - ругается на метод сводный остаток

полный текст ошибки какой ?
29 Касандер72
 
18.06.12
11:15
(26) типа получить конечную ссылку и работать с ней - спс, попробую
30 1Сергей
 
18.06.12
11:16
(26) чушь
31 Boroda
 
18.06.12
11:16
(29) и сделать это ко всем параметрам фунцции !!!
32 Касандер72
 
18.06.12
11:18
(28) копипаст не смогу сделать - ошибка только на рабочей проге вылетает - геморно останавливать фабрику и полуправления
по памяти "Метод СводныйОстаток(...) не может быть быть выполнен - вроде-бы
33 Boroda
 
18.06.12
11:18
Согласен, чушь. Но вот смотрю, у него практически ничем не отличается от типовой глСписаниеТМЦ. Та же таблица, тот же перебор по номенклатуре... а ошибка выскакивает...
34 Касандер72
 
18.06.12
11:18
(30) я на такой баг ранее нарывался пару раз
35 1Сергей
 
18.06.12
11:18
(33) просто у него ДНК не той системы
36 Voronve
 
18.06.12
11:20
(0) Структура регистра какая ? и типы полей ?
37 Boroda
 
18.06.12
11:20
Вместо глСписаниеТМЦ читать глСписаниеОстатковТМЦ. Это я смотрю типовую ТиС.
38 Касандер72
 
18.06.12
11:22
(35) люди со стандартными ДНК на нашем предприятии не приживаются)
скажу больше - стараемся избавляться от них из-за устраиваемого мелочного гемора - не смотрят в корень проблемы, а цеплются за го..но всякое - вони пипец ...
39 Mikeware
 
18.06.12
11:24
(38) корень проблемы как раз в вас...
40 Касандер72
 
18.06.12
11:24
(36) Номенклатура = Справочник.Номенклатрура
Размер = Справочник.Размеры = Обмер - в доке
Расцетка = Справочниик.Цвета = Цвет - в доке
41 Касандер72
 
18.06.12
11:25
(39) может быть - скучно нам со стандартными релизами стало ... да и толку от них ... не удовлетворяют оне нас)
42 Ork
 
18.06.12
11:26
(0) Зачем использовать сводныйОстаток указывая все измерения? Хотя ошибка и не в этом. Просто интересно.

Сценарий возникновения ошибки может быть таким :
В форме документа для каких либо целей уже использовано обращение к объекту Регистр без создания объекта.
Вместо
Рег = СохдатьОбъект("Регистр.ЗаказыПроизводства");
Остаток = Рег.Остаток...
использовано
Регистр.ЗаказыПроизводства.Остаток
43 Ork
 
18.06.12
11:28
+(42) В таком варианте использовать ВременныйРасчет нельзя.

ЗЫ. Все-таки хотельсь бы описание ошибки получить без применения телепат.длл
44 Касандер72
 
18.06.12
11:28
(42) смотри (23) та же хрень ...
45 Ёпрст
 
18.06.12
11:29
Количество измерений в регистре, сколько ?
46 Ёпрст
 
18.06.12
11:29
порядок следований их какой ?
47 Касандер72
 
18.06.12
11:30
(43) возможно только в течение суток - коня на скаку куем
48 Ork
 
18.06.12
11:30
+(43) Проверить можно просто. Вместо проведения из формы - провести либо Операции - > Проведение документов. Либо из внешней обработки.
49 Ork
 
18.06.12
11:31
(44) Толку смотреть в (23). Там переменные тоже не изолированы в модуле ОбработкаПроведения.

Попробуй (48) - отпиши результат.
50 Касандер72
 
18.06.12
11:32
(45,46) три измерения: Номенклатура,Размер,Расцветка - в таком порядке и идут, Ресурс - Количество
почему все пропускают одну значащую фразу: "На тестовой аналогичной базе - все срабатывает без ошибок" ?
51 Ёпрст
 
18.06.12
11:32
>>>Интересно то что обработка с аналогичным кодом работает без проблем

Какая обработка с тем же кодом ?


Документ проводится сам по себе, но спотыкается групповое перепроведение документов через Операция-Проведение документов, или что ?

Если да - то нехер объявлять переменные в операторах основной программы  - они кешируются и компилятся 1 раз при начале группового проведения.
52 Касандер72
 
18.06.12
11:33
(48) уже писал, что тестил через обработку - срабатывают оба варианта (0) и (23) без ошибок !!!
53 1Сергей
 
18.06.12
11:34
(52) кароче, ты сам не знаешь, взлетело (23) или нет, так?
54 Касандер72
 
18.06.12
11:34
(51) тот же код (0) или (23) - таблица "Остатки" на форме - все данные заполняются
55 Касандер72
 
18.06.12
11:35
(53) научись читать внимательно - код (23) тестился гораздо раньше - и даже в цикле - были 2 ветки на эту тему
56 Voronve
 
18.06.12
11:36
(40) Размер и Цвет - не строки случаем ?
57 Касандер72
 
18.06.12
11:37
(56) я что по-твоему совсем олень? только утро - вчера не пил
58 Mikeware
 
18.06.12
11:38
(41) Дело не в "стандартных релизах" - вместо того, чтоб продумать систему, вы лепите кучу заплаток.
59 Касандер72
 
18.06.12
11:40
(58) все хотят много, вкусно и быстро - этот релиз - и есть разведка системы - заказчики и их технологи сопли жуют вместо постановки задачи - посему такой выход. Закончим разведк боем - перепишем норм на 8-ке
60 Mikeware
 
18.06.12
11:41
(59)"мужик, наточи пилу!
-- некогда, мне пилить надо!"
©
61 Voronve
 
18.06.12
11:42
(57) Сам просил ошибку в днк поискать
62 Касандер72
 
18.06.12
11:42
(60) что то занкомое: не угадал - напильника нет)
63 Касандер72
 
18.06.12
11:43
(61) а, ну да согласен)))
64 1Сергей
 
18.06.12
11:45
развод
65 Ork
 
18.06.12
11:46
Если в обработке выполняется - см. (42).

В форме документа объявлять все переменные. Регистры напрямую не юзать. Только через СоздатьОбъект. И буИт вам многА счастия.
66 Ork
 
18.06.12
11:47
+(65) "В форме документа объявлять все переменные." + во всех процедурах и функциях.

А то судя по вот этому вот :

Процедура ОбработкаПроведения()
   ВсеРегистры = СоздатьОбъект("Регистры");
   РегЗаказы = ВсеРегистры.ЗаказыПроизводства;

с объявлением переменных у вас явные проблеммы.
67 Касандер72
 
18.06.12
11:48
(66) подробнее, плиз ...
68 Касандер72
 
18.06.12
11:49
+(67) с примера в инете бралось ... или ты по поводу имярека "ВсеРегистры" ?
69 Ork
 
18.06.12
11:51
(67) Куда подробней?

Процедура ОбработкаПроведения()
   //Вот сюда
   Перем ВсеРегистры, РегЗаказы;
   //И только потом
   ВсеРегистры = СоздатьОбъект("Регистры");
   РегЗаказы = ВсеРегистры.ЗаказыПроизводства;
70 Касандер72
 
18.06.12
11:53
(69) упс, сие настолько значимо? а переменные при присвоении значений часом не объявляются? таки не паскаль же 1С-ка то ...
71 Касандер72
 
18.06.12
12:06
Народ. а проблема может быть в распределении доступа на серваке? когда скуль отдельно лежит.
Давеча домен упал - босс только что сказал, что доставил права доступа и у меня одной галки в правах не хватало ... щас проверяю
72 Злопчинский
 
18.06.12
12:55
стать на поток. фотопаарат наготове - вывалится ошибка, сфоткать идать полный текст ошибки, как уже просили.. ;-)
73 Касандер72
 
18.06.12
13:13
А ларчик просто открывался: монопольно отрыли ещё один период - итоги пересчитались - сейчас все работает: оба варианта повесил на переключатель - тестируем. По ходу база глюкнула.
ВСЕМ ОГРОМНОЕ СПС ЗА ПОДДЕРЖКУ. ТЕМА ЗАКРЫТА.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn