Имя: Пароль:
1C
1C 7.7
v7: Ошибка записи в регистр (или ошибка взятия информации с регистра, хз)
0 Bri
 
29.12.15
22:51
Платформа 1с:Предприятие 7.7 версии (7.70.027)

О великие 1с-умы. Подскажите студенту которого замучила проблема в его курсовой по 1с:Предприятие (версии 7.7) и да получит каждый ответивший +10 к карме.
А проблема заключается в том... что я уже 4й день не понимаю в чем проблема. Перерыл тонны материалов и делая все с точностью по инструкциям ничего не выходит.
в общем, суть такова:

Нужно конфигурировать все для работы Ювелирного магазина. Есть стандартная связка Документ-Регистр-(через запрос)Отчет, в таблице отчета строки не выводятся и я понять не могу почему. В связи с этим максимально подробно распишу все, что сделано, и прошу, найдите эту ошибку, у меня скоро дедлайн:

у меня есть справочник "Изделие", в котором записана инфа о изделии (Название, стоимость, материал, и т.д.)
Есть [b][u]Документ "ПродажаТовара"[/u][/b], который создан для записи в журнал документа информации о продаже товара, теперь о нем подробнее:
Реквизиты шапки: КоличествоИзделия, Изделие (объект справочник.Издение)

Настройка:
[img]http://i.imgur.com/TGkTHYe.png[/img]

Модуль Документа:
[code]Процедура ОбработкаПроведения()
    Если КоличествоИзделия = 0 Тогда
        Предупреждение("Не указано количество");
        НеПроводитьДокумент();
    КонецЕсли;    
    Если Изделие.Выбран() = 0 тогда
        Предупреждение("Не выбрано изделие");
        НеПроводитьДокумент();            
    КонецЕсли;                            
    
                      
  Регистр.ПродаваемыйТовар.Изделие = Изделие;        
  Регистр.ПродаваемыйТовар.КолПрод = КоличествоИзделия;
  Регистр.ПродаваемыйТовар.Прибыль = Изделие.ЦенаП*КоличествоИзделия;    
  Регистр.ПродаваемыйТовар.ДвижениеПриходВыполнить();

КонецПроцедуры
[/code]
Здесь, Изделие.ЦенаП - цена продажи

[b][u]Регистр.ПродаваемыйТовар[/u][/b]
[img]http://i.imgur.com/83HHNPC.png[/img]


[u][b]Отчет.ПродавТов[/b][/u]
вывод информации о проданных товарах

Форма
[img]http://i.imgur.com/Bxe02hb.png[/img]
Модуль
[code]
// Процедура генерации запроса Сформировать.
//
Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)  
    |Период с ВыбДата по ВыбДатаКон;
    |Издел = Регистр.ПродаваемыйТовар.Изделие;
    |Приб = Регистр.ПродаваемыйТовар.Прибыль;
    |Кол = Регистр.ПродаваемыйТовар.КолПрод;
    |Группировка Издел;
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;      
    

    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Шапка");
    Состояние("Заполнение выходной таблицы...");

    
    Пока Запрос.Группировка(1) = 1 Цикл  
        Таб.ВывестиСекцию("Строка");    
    КонецЦикла;

    Таб.Опции(0);     
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("");
    
КонецПроцедуры  
[/code]

Таблица
[img]http://i.imgur.com/BIzs5Wy.png[/img]

И все было бы хорошо вот только когда я формирую отчет ничего не выводиться
[img]http://i.imgur.com/l2jO8TU.png[/img]
Хотя в журнале информация есть
[img]http://i.imgur.com/9mrglYk.png[/img]

Пройдя по коду в отладчике стало ясно что "Запрос.Группировка(1)" возвращает ноль, в цикл не входится, а значит информация в регистр не была записана (или записана коряво, или групировка не проходит). не могу понять в чем проблема. Помогите плиз, а то скоро курсак таки и сдавать надо.
1 HawkEye
 
29.12.15
22:58
на проведенном документе правой кнопкой мыши - выбираем движения документов - убеждаемся что движения есть
2 mehfk
 
29.12.15
23:01
Предупреждение в обработке проведение есть быдлокод.
3 mehfk
 
29.12.15
23:02
Кидай MD
4 Zhuravlik
 
29.12.15
23:03
Курсовая на клюшках?)) Жесть))
5 Zhuravlik
 
29.12.15
23:07
(0) В твоем запросе функций нет. Насколько помню клюшки, без них - не взлетит. Помню КонОст вроде, но тут я так понимаю нужны обороты?
6 Zhuravlik
 
29.12.15
23:11
ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)  

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

    ;
    // Если


Как-то так.
7 Chameleon1980
 
29.12.15
23:21
на (1) ответьте
8 Bri
 
29.12.15
23:29
(5) Остатки же. Нужен просто перечень того что продали. Возврат товара в курсаче даже рассматриваться не будет.
Сейчас добавлю функцию данную (6).
(1) (7) Походу реально быдлкод какой то вышел, но движение, хоть корявое, но есть.
[img]http://i.imgur.com/JFMJZ7I.png[/img]
9 Bri
 
29.12.15
23:30
Забыл что тут нет тега имг
Вот что по движениям:
http://i.imgur.com/JFMJZ7I.png
10 Злопчинский
 
29.12.15
23:36
В запросе к регистру должна быть определена функция
Которая возвращает ненулевое значение
Тогда в результатах группировки запроса будут итоги каковыми являются значения функции запроса
11 HawkEye
 
29.12.15
23:39
(8) функцию добавь - будет показывать...

так-то, чтобы научиться надо читать, а не писать
12 Bri
 
29.12.15
23:43
Ребята, вы просто прелесть, псе добавления строк с функциями, а именно
"                
    |Функция КолТовара = Сумма(Кол);
    |Функция ОстаткиКол = КонОст(Кол);
"
все отображается. Но осталась последняя проблемма-быдлокод при записи. Как я понял, обращаться напрямую к полю справочника нельзя (Изделие.ЦенаП)?
http://imgur.com/ZhHByB2
13 Злопчинский
 
30.12.15
00:00
Можно
14 Злопчинский
 
30.12.15
00:01
оперативно давай сюда ид и пароль на тимвьювер, подключусь, "пригладим" твой "быдлокод". Предложение действует 10 мин.
15 Злопчинский
 
30.12.15
00:08
Концептуальная ошибка - под регистрацию продаж/прибыли заводить регистр остатков. Это оправдано только в том случае, если ежепериодно будет производиться некое "списание" накопленной прибыли (типа "выплата прибыли"). Правильнее - регистр оборотов.
16 Bri
 
30.12.15
00:17
(14) я в нем разбираться буду дольше, в общем, спасибо тебе, и всем кто откликнулся. Остальное, учитывая мою прошлую мозготряску с лабораторными с++ и с#, исправить логические ошибки в коде такого рода -проще  простого.
(15) Это не регистрация продаж\прибыли, а что то вроде статистики продаваемости товаров. Потом будет еще отчет рекомендаций проведения акций на базе этого.
17 Злопчинский
 
30.12.15
00:21
Если КоличествоИзделия = 0 Тогда
        Предупреждение("Не указано количество");
        НеПроводитьДокумент();
КонецЕсли;    
Если Изделие.Выбран() = 0 тогда
        Предупреждение("Не выбрано изделие");
        НеПроводитьДокумент();            
КонецЕсли;                            
    
Предупреждение - заменить на Сообщить
При начале процедуры ОбработкаПроведения() - начинается транзакция, в ней сразу блокируется/захватывается как минимум общий журнал документов - и все. пока у тебя на экране висит Предупреждение, а оператор ушел покурить или потрахать в подсобке сисадминшу - все остальные курят бамбук с невозможностью ни завести новый документ, не изменить старый...

Что делается в  НеПроводитьДокумент(); - не совсем понятно
предположим оптимистично что в ней отрабатывает
СтатусВозврата(0)
спрашивается - если споткнулисб на первом если - зачем выполнять второе если дальше по коду если документ все равно не проведется - где возврат из проведения?

Итгого: в наличиии 1 архитектурная ошибка (регистр), 1 технологическая ошибка (предупреждение в транзакции) и очень грязный код.

Резюме: пока что - если бы я был преподом - ты куросвую не сдал бы.

и ваще - это где сейчас ЕЩЁ 77 изучают в части даже сдачи по ней курсовых? это же мертвая система...
18 Злопчинский
 
30.12.15
00:23
(16) Тем более "Это не регистрация продаж\прибыли, а что то вроде статистики продаваемости товаров. Потом будет еще отчет рекомендаций проведения акций на базе этого." - под регистрацию СТАТИСТИКИ - то есть накопления данных в "одну" сторону использовать регистр остатков - тем более ошибка. КОЛ!
19 Злопчинский
 
30.12.15
00:24
(16) "исправить логические ошибки в коде такого рода -проще  простого."
- ты заблуждаешься. у тебя вообще в принципе неверно построено.
20 Злопчинский
 
30.12.15
00:25
+ непонимание.
" Нужен просто перечень того что продали" - перечень чего? в каких разрезах? потому что под твое "определение" подходит ответ "продали кучу всего на сумму столько-то".
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.