Имя: Пароль:
1C
1C 7.7
v7: проблема с "полное наполнение"
0 Fanat26
 
22.08.11
08:46
Здравствуйте, в 1с v7 Торговля и склад, в справочнике цен делаю полное наполнение по группе товаров, проходит расчет остатков--и останавливается на такой ошибке
[code]Документ = ДвижениеРегистраОстатков №   105 от 31.12.09
Если Запрос.Товар=Док1.Товар
{Справочник.Цены3.ФормаСписка.ФормаСписка.Модуль(1190)}: Поле агрегатного объекта не обнаружено (Товар)[/code]

Подскажите в чем проблема пожалуйста?!
1 povar
 
22.08.11
08:48
кода запроса
2 ДенисЧ
 
22.08.11
08:48
1. что такое "полное наполнение"?
2. строки документа кто будет перебирать?
3 Godofsin
 
22.08.11
08:49
в том,что у Док1 нет реквизита "Товар"?
4 andrewks
 
22.08.11
08:55
Документ = ДвижениеРегистраОстатков №   105 от 31.12.09

это чьи-до дописки. откель нам знать, чё там?

код давай
5 Fanat26
 
22.08.11
09:08
как правильно скинуть код?? просто он большой!
6 andrewks
 
22.08.11
09:10
можешь уже не скидывать. я тут протелепатировал, и диагноз таков: в ДвижениеРегистраОстатков нет реквизита Товар.
7 Злопчинский
 
22.08.11
09:12
ищи корявенькие ручки, бо в типовой ТиС в документах нет реквизита "Товар", фигурирует в типовом составе "Номенклатура"... пистаели, блин...
8 Godofsin
 
22.08.11
09:28
Справочник.Цены3
По ходу, есть еще 2 справочника с ценами =)
9 povar
 
22.08.11
09:30
(8) на каждый вид цен - свой справочник, суровые челябинские 1Сники
10 Fanat26
 
22.08.11
11:26
че то не сильно понятно, пока новичек..((
11 Fanat26
 
22.08.11
11:26
Перем КвоГруппировок, КвоРесурсов;  
Перем Запрос, ИмяРегистра;
                 
Процедура СвернутьВзаиморасчеты()
   ТЗ = СоздатьОБъект("ТаблицаЗначений");
   ВыгрузитьТабличнуюЧасть(Тз);
   ТЗ.Свернуть("Измерение1,Измерение2,Измерение3","Ресурс1");
   
   УдалитьСТроки();
   
   ЗагрузитьТабличнуюЧасть(ТЗ);
   ВыбратьСТроки();
   Пока ПОлучитьСтроку()=1
   Цикл
       Если Ресурс1 = 0
       Тогда
           УдалитьСтроку();
           ВыбратьСтроки();
       КонецЕсли;
   КонецЦикла;;                            
   ВыбратьСТроки();
   Пока ПОлучитьСтроку()=1
   Цикл  
       НазначитьТип("Измерение6","Документ");
       Измерение6 = ТекущийДокумент();
   КонецЦикла;;
КонецПроцедуры
   

// ===============================
Процедура ПрочитатьСтруктуруРегистра()
   Если СокрЛП(ИдентификаторРегистра)="" Тогда
       Возврат;
   КонецЕсли;
   ИмяРегистра=СокрЛП(ИдентификаторРегистра);
   Для Инд=1 По 10 Цикл
       Измерение=Метаданные.Регистр(ИмяРегистра).Измерение(Инд);
       Колонка=Форма.ПолучитьАтрибут("Измерение"+Инд);
       Если Измерение.Выбран()=1 Тогда
           Колонка.Заголовок(Измерение.Идентификатор);
       Иначе
           Колонка.Видимость(0);
       КонецЕсли;
   КонецЦикла;
   Для Инд=1 По 5 Цикл
       Ресурс=Метаданные.Регистр(ИмяРегистра).Ресурс(Инд);
       Колонка=Форма.ПолучитьАтрибут("Ресурс"+Инд);
       Если Ресурс.Выбран()=1 Тогда
           Колонка.Заголовок(Ресурс.Идентификатор);
       Иначе
           Колонка.Видимость(0);
       КонецЕсли;
   КонецЦикла;
КонецПроцедуры //ПрочитатьСтруктуруРегистра

// ======================================
Процедура ПолучитьАтрибуты(Инд,Идентификатор,ИмяТипа,Длина,Точность,Ресурс=0)
   Если Ресурс=0 Тогда
       Идентификатор = Метаданные.Регистр(ИмяРегистра).Измерение(Инд).Идентификатор;
       Тип            = Метаданные.Регистр(ИмяРегистра).Измерение(Инд).Тип;
       Вид            = Метаданные.Регистр(ИмяРегистра).Измерение(Инд).Вид;
       Длина        = Метаданные.Регистр(ИмяРегистра).Измерение(Инд).Длина;
       Точность    = Метаданные.Регистр(ИмяРегистра).Измерение(Инд).Точность;
   Иначе
       Идентификатор = Метаданные.Регистр(ИмяРегистра).Ресурс(Инд).Идентификатор;
       Тип            = Метаданные.Регистр(ИмяРегистра).Ресурс(Инд).Тип;
       Вид            = Метаданные.Регистр(ИмяРегистра).Ресурс(Инд).Вид;
       Длина        = Метаданные.Регистр(ИмяРегистра).Ресурс(Инд).Длина;
       Точность    = Метаданные.Регистр(ИмяРегистра).Ресурс(Инд).Точность;
   КонецЕсли;
   Если СокрЛП(Вид)="" Тогда
       ИмяТипа=Тип;
   Иначе
       ИмяТипа=""+Тип+"."+Вид;
   КонецЕсли;
КонецПроцедуры

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

// ===============================
Процедура Заполнить(Параметр="")
   Если КоличествоСтрок()>0 Тогда
       Если (Вопрос("Удалить строки?","Да+Нет")="Да") или (Параметр<>"") Тогда
           УдалитьСтроки();
       Иначе
           Возврат;
       КонецЕсли;
   КонецЕсли;
   
   Если Параметр="" Тогда
       спРегистры=СоздатьОбъект("СписокЗначений");
       _К=Метаданные.Регистр();
       Для Инд=1 по _К Цикл    
           ТипРегистра=Метаданные.Регистр(Инд).ТипРегистра;
           Если ТипРегистра="Остатки" Тогда
               Синоним=Метаданные.Регистр(Инд).Синоним;
               Идентификатор=Метаданные.Регистр(Инд).Идентификатор;
               Представление=?(СокрЛП(Синоним)="",Идентификатор,Синоним);
               спРегистры.ДобавитьЗначение(Идентификатор,Представление);
           КонецЕсли;
       КонецЦикла;
       Если спРегистры.РазмерСписка()=0 Тогда
           Предупреждение("В конфигурации не определены регистры остатков",5);
           Возврат;
       КонецЕсли;
       ИмяРегистра="";
       Рез=спРегистры.ВыбратьЗначение(ИмяРегистра,"Выбор регистра",,30);
       Если Рез<>1 Тогда
           Возврат;
       КонецЕсли;
   Иначе
       ИмяРегистра=Параметр;
   КонецЕсли;
   Если Метаданные.Регистр(ИмяРегистра).Выбран()=0 Тогда
       Сообщить("Неверное имя регистра """+ИмяРегистра+"""","!");
       Возврат;
   КонецЕсли;  
   
   ИдентификаторРегистра=ИмяРегистра;
   Запрос=СоздатьОбъект("Запрос");
   ТекстЗапроса="Период с ДатаДок по ДатаДок;
               |";
   _К=Метаданные.Регистр(ИмяРегистра).Измерение();
   Для Инд=1 По _К Цикл
       Идентификатор=Метаданные.Регистр(ИмяРегистра).Измерение(Инд).Идентификатор;
       ТекстЗапроса=""+ТекстЗапроса+Идентификатор+" = Регистр."+ИмяРегистра+"."+Идентификатор+";
               |";
   КонецЦикла;
   _К=Метаданные.Регистр(ИмяРегистра).Ресурс();
   Для Инд=1 По _К Цикл
       Идентификатор=Метаданные.Регистр(ИмяРегистра).Ресурс(Инд).Идентификатор;
       ТекстЗапроса=""+ТекстЗапроса+Идентификатор+" = Регистр."+ИмяРегистра+"."+Идентификатор+";
               |";
   КонецЦикла;
           
   _К=Метаданные.Регистр(ИмяРегистра).Ресурс();
   КвоРесурсов=_К;
   Для Инд=1 По _К Цикл
       Идентификатор=Метаданные.Регистр(ИмяРегистра).Ресурс(Инд).Идентификатор;
       ТекстЗапроса=""+ТекстЗапроса+"Функция Ост"+Идентификатор+" = КонОст("+Идентификатор+");
               |";
   КонецЦикла;  
   
   _К=Метаданные.Регистр(ИмяРегистра).Измерение();
   КвоГруппировок=_К;
   Для Инд=1 По _К Цикл
       Идентификатор=Метаданные.Регистр(ИмяРегистра).Измерение(Инд).Идентификатор;
       ТекстЗапроса=""+ТекстЗапроса+"Группировка "+Идентификатор+" без групп;
               |";
   КонецЦикла;  
   
   ДатаДок=Мин(ДатаДок,ПолучитьДатуТА());
   Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
       Сообщить("Не выполнился запрос по регистру","!");
       Возврат;
   КонецЕсли;  
   
   ОткрытьГруппировку(1);
   
   ПрочитатьСтруктуруРегистра();
КонецПроцедуры //Заполнить

// ======================================
Процедура ПриОткрытии()
   ПриЗаписиПерепроводить(1);
   Если ТипЗначенияСтр(Форма.Параметр)="СписокЗначений" Тогда
       АвтоВремяКонецДня();
       Расшифровка=Форма.Параметр;
       ИмяРегистра=Расшифровка.Получить("ИмяРегистра");
       ДатаДок=Расшифровка.Получить("ДатаДок");
       Заполнить(ИмяРегистра);
       Если КоличествоСтрок()>0 Тогда
           Записать();
       КонецЕсли;
       СтатусВозврата(0);
   КонецЕсли;
   ПрочитатьСтруктуруРегистра();
КонецПроцедуры

// ======================================
Процедура ВводНового()
   ДатаДок=Мин(ДатаДок,ПолучитьДатуТА());
КонецПроцедуры

Процедура ЗатянутьДокумент()  
 
   
//Перейти ~НеНадоИмпорта;
   Сообщить("Запущена обработка импорта чеков с касс № 4,5,6");    
   ИсхБаза=СоздатьОбъект("V77.Application");
   ТовИсх=СоздатьОбъект("Справочник");
   СпрЦенИсх=СоздатьОбъект("Справочник");
   ДокИсх=СоздатьОбъект("Документ");
   ИсхБаза.Initialize(ИсхБаза.rmTrade,,"NO_SPLASH_SHOW");
   ТовИсх=ИсхБаза.EvalExpr("GetTov()");
   СпрЕдИсх=ИсхБаза.EvalExpr("GetEd()");
   СпрВалИсх=ИсхБаза.EvalExpr("GetVal()");
   СпрСклИсх=ИсхБаза.EvalExpr("GetSkl()");
   СпрКлИсх=ИсхБаза.EvalExpr("GetKl()");
   СпрФИсх=ИсхБаза.EvalExpr("GetF()");
   ДокИсх=ИсхБаза.EvalExpr("GetDoc()");  
   ДокИсхЧек=ИсхБаза.EvalExpr("GetDocCheck()");  
   
   Тов=СоздатьОбъект("Справочник.Номенклатура");
   СпрЕд=СоздатьОбъект("Справочник.Единицы");
   СпрВал=СоздатьОбъект("Справочник.Валюты");
   СпрСкл=СоздатьОбъект("Справочник.МестаХранения");
   СпрКл=СоздатьОбъект("Справочник.Контрагенты");
   СпрФ=СоздатьОбъект("Справочник.Фирмы");
   
   ДокИсх.ВыбратьДокументы('31/12/2007','31/12/2007');
   Пока ДОкисх.ПОлучитьДокумент()=1
   Цикл      
   Сообщить(глДОкПОдробно(докИсх));
       
       //Если ДОкИсх.Вид()<>"ДвижениеРегистраОстатков"
       //ТОгда
       //    Продолжить;    
       //КОнецЕСли;        
       //              
       Если Число(ДОкисх.номерДок) = 100
       Тогда
           Прервать;
       КонецЕСли;
       //
   КонецЦИкла;
     
   Сообщить(глДОкПОдробно(докИсх));
   А = 1;          
   Б = ДокИсх.КоличествоСТрок();
       ДокИсх.ВыбратьСТроки();
       Пока ДОкИсх.ПолучитьСтроку()=1
       Цикл                    
           А = А+1;
           Состояние(Строка(Б-А));
           Тов.НайтиПОКоду(ДокИсх.Измерение2.Код);
           НоваяСТрока();
           НазначитьТип("Измерение2","Справочник.НОменклатура");
           Измерение2 = Тов.ТекущийЭлемент();                    
           НазначитьТип("Измерение3","Справочник.КОнтрагенты");
           Измерение3 = КОнстанта.ОсновнойПоставщик;
           НазначитьТип("Измерение4","Документ");
           Измерение4=ТекущийДокумент();
           
           Ресурс1 = ДокИсх.Ресурс1;
           Ресурс2 = ДокИсх.Ресурс2;
           Ресурс3 = ДокИсх.Ресурс3;
           
           
       КонецЦикла;
       
КонецПроцедуры
12 Fanat26
 
22.08.11
11:32
вот код ДвижениеРегистраОстатков
13 Godofsin
 
22.08.11
11:39
(11)(12)Этот код без надобности, ошибка то не в нем.
Справочник.Цены3.ФормаСписка.ФормаСписка.Модуль(1190)}: Поле агрегатного объекта не обнаружено (Товар). Вот где ошибка, этот код выкладывай, при чем весь не надо, только блок, где ошибка.
И что такое "полное наполнение"???
14 Fanat26
 
22.08.11
11:45
При нажатии кнопки наполнить, в таблицу попадает цена закупа по последней дате и
вычисляется базовая цена (базовая цена=цена закупа*курс валюты).
Показываются товары только имеющиеся на складе.
15 Fanat26
 
22.08.11
11:46
Модуль(1190)
           //РегПарт.ВременныйРасчет(1);
             Док1.ВыбратьСтроки();
             НужнаяСтрока=0;
             Пока Док1.ПолучитьСтроку()=1
           Цикл
               Если Запрос.Товар=Док1.Товар
               Тогда
                   НужнаяСтрока=Док1.НомерСтроки;
               КонецЕсли;
           КонецЦикла;
16 povar
 
22.08.11
11:47
(15) зовите специалиста
17 Godofsin
 
22.08.11
11:52
(15) Вобщем, диагноз был выше озвучен. ВИдно, что конфа переписанная. Зовите специалиста, без вариантов.
18 andrewks
 
22.08.11
11:53
(17) обычно после этого следует фраза ТС: "я и есть приглашённый специалист!" :)
19 Злопчинский
 
22.08.11
12:02
ТС могу предложить более приемлемый вариант - зовите специалиста по хотя бы ОБУЧЕНИЮ/КОНСУЛЬТИРОВАНИЮ что и как в ТиС (я и есть специалист! ;-)
.
по тем немногим обрывкам что тут есть - представляю, какая веселуха в конфе, а уж в учете...
20 Fanat26
 
22.08.11
12:28
хочется самому разобраться, спасибо за советы.
21 Fanat26
 
22.08.11
12:32
я не специалист, просто только начал разбираться в 1С.
22 vladko
 
22.08.11
12:36
причём тут код документа ДвижениеРегистраОстатков?
у тебя в обработке явно написано, что в этом документе компьютер не находит реквизит "товар"!
23 __Se24
 
22.08.11
13:01
Учиться не так нужно ...
сначала изучаешь базис , потом от него идешь к более сложному
а так , незная таблицы умножения , пытаешься решить интеграл ...
24 Fanat26
 
22.08.11
13:07
сам уже это понял =((
читаю литературу, пробую на примерах!
25 Fanat26
 
22.08.11
13:14
нашел в 1с этот документ - ДвижениеРегистраОстатков №   105 от 31.12.09 там просто 969 товаров, не доганяю где он не находит реквизит "товар" ? =[
26 Godofsin
 
22.08.11
13:16
(25) Во-первых, смотри реквизит в конфигураторе.
Во-вторых, с чего ты взял, что он не находит именно вэтом доке? Не находит в Док1, а что он представляет - рой в конфигураторе.
27 Шапокляк
 
22.08.11
13:28
(25) Что-то мне подсказывает, что в документе ДвиженияРегистраОстатков реквизита Товар нету, судя по вашему коду - там все сплошь Измерение1 и т.д.
28 __Se24
 
22.08.11
13:41
(25) Отладчик нам всем стоить и жить помогает !
29 Fanat26
 
22.08.11
13:43
почему то такая ошибка только когда выбираешь один(торговый) склад из 4.
30 Fanat26
 
22.08.11
13:43
РегПарт.УстановитьФильтр(Запрос.Фирма,Запрос.Товар,,,);
               РегПарт.ОбратныйПорядок(1);
                 РегПарт.ВыбратьДвижения(Константа.ДатаНачало,Константа.ДатаКонец);
                 ДокНайден=0;

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

                       КонецЕсли;
                   КонецЕсли;
                 КОнецЦикла;
               Док1.ВыбратьСтроки();
                 НужнаяСтрока=0;
               Пока Док1.ПолучитьСтроку()=1
               Цикл
                   Если Запрос.Товар=Док1.Товар
                   Тогда
                       НужнаяСтрока=Док1.НомерСтроки;
                   КонецЕсли;
               КонецЦикла;
                 ДокНайден=0;
           КонецЕсли;
             Док1.ПолучитьСтрокуПоНОмеру(НужнаяСтрока);
             Спр.ЦенаИсх=Пересчет(Док1.Цена,Док1.Валюта,Док1.ДатаДок,Запрос.Товар.ВалютаУчета,Док1.ДатаДок);
             Спр.ВалютаИсх=Запрос.Товар.ВалютаУчета;
           Если Спр.ВалютаИсх=Рубли Тогда
               Спр.ЦенаРуб=Спр.ЦенаИсх;
           Иначе
               Спр.ЦенаРуб=Спр.ЦенаИсх*Курс;
           КонецЕсли;
             Состояние(Запрос.Товар.Наименование+" "+Строка(Запрос.КонКол)+" "+Строка(Запрос.КонСтоим)+" "+Строка(Запрос.НачСтоим));
             Спр.Записать();
   КонецЦикла;
   Если Константа.ИспользоватьТранзакции=1 тогда ЗафиксироватьТранзакцию(); КонецЕсли;;
   Форма.Обновить(1);
   Форма.Обновить(0);
31 Fanat26
 
22.08.11
13:44
может здесь кроеися ошибка???
32 povar
 
22.08.11
13:49
(31) хватит гадать, или вызывай спеца или меняй работу
33 Ёпрст
 
22.08.11
13:49
(30) Что это за поток сознания такой ?
И этот код где выполняется ? В модуле проведения или где ?
34 Godofsin
 
22.08.11
14:11
(30) Уважаемый, как нам тут можно понять, где ошибка? Запусти отладчик, установи точку остановы на срочку, где происходит ошибка и смотри через табло, что у тебя за значение в Док1.
35 Mikeware
 
22.08.11
14:11
Ошибка там же, где и всегда...
Закон Брукера: Даже маленькая практика стоит большой теории.