Имя: Пароль:
1C
1С v8
Алгоритмы в движениях.
0 banan_CHIK_
 
10.10.17
19:00
Добрый день, ребята! У меня вот такой вопрос:
Нашел в интернете задание для начинающих (1clancer.ru/download/fileId=41594) Ссылка не битая!, Не получается в алгоритмах, подскажите, где найти информацию по этой теме или в чем у меня ошибка
ОстаткиТоваров – движение содержит записи (Приход) по каждой строчке табличной части «Товары», все данные для записи берутся из документа. Сумма в записи должна рассчитываться вот по такому алгоритму:

Сумма = Количество * СредневзвешеннаяЦена

СредневзвешеннаяЦена = ОстатокСумма / ОстатокКоличество;

ОстатокСумма = нужно вычислить остаток Суммы в регистре накопления ОстаткиТоваров, на дату документа, с отбором по Номенклатура и Склад:

ОстатокКоличество = нужно вычислить остаток Количество в регистре накопления ОстаткиТоваров, на дату документа, с отбором по Номенклатура и Склад:

ВзаиморасчетыСКонтрагентами – движение (одно) содержит запись (Приход) на общую сумму реализации.


Вот так я код написал:


Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    // регистр ОстаткиТоваров Расход
    Движения.ОстаткиТоваров.Записывать = Истина;
    Движения.ОстаткиТоваров.Очистить();
    Для Каждого ТекСтрокаТовары Из Товары Цикл
        Движение = Движения.ОстаткиТоваров.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Номенклатура = ТекСтрокаТовары.Товар;
        Движение.Склад = Склад;
        Движение.Количество = ТекСтрокаТовары.Количество;
        Движение.Сумма = ТекСтрокаТовары.Количество * РегистрыНакопления.ОстаткиТоваров.Остатки(Дата, "Номенклатура,Склад", , "Сумма") / РегистрыНакопления.ОстаткиТоваров.Остатки(Дата, "Номенклатура,Склад", , "Количество");
    КонецЦикла;

    // регистр ВзаиморасчетыСКонтрагентами Расход
    Движения.ВзаиморасчетыСКонтрагентами.Записывать = Истина;
    Движения.ВзаиморасчетыСКонтрагентами.Очистить();
    Для Каждого ТекСтрокаТовары Из Товары Цикл
        Движение = Движения.ВзаиморасчетыСКонтрагентами.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;                                                              
        Движение.Период = Дата;
        Движение.Контрагент = Контрагент;
        Движение.Сумма = ТекСтрокаТовары.Сумма;
    КонецЦикла;

    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры



Вот база ребят:
https://drive.google.com/open?id=0BzEWLPdHqpHGbzBWakpWUnNWVFE

Я понимаю тупые вопросы для вас, но я только начал учиться) Если не трудно, помогите)
1 Джинн
 
10.10.17
19:05
(0) Коллега, за такой код убивать нужно. Найдите в инете книги Радченко и освойте сначала их.
2 banan_CHIK_
 
10.10.17
19:11
Скажи, что не так делаю. Я хоть буду знать, многие говорят можно запросами, но с ними я не умею работать.
3 Джинн
 
10.10.17
19:16
(2) Все не так. Ищите книгу Радченко и отрабатывайте последовательно с первой главы.
4 0xFFFFFF
 
10.10.17
19:19
(0) на тупые вопросы не получишь ответа. Без понимания предмета - код писать не научишься (типа я ему по-русски, а может поймет что я хочу...).
Поэтому твоя помощь в (1)
6 Mankubus
 
10.10.17
19:44
(2) учись запросам раз не умеешь. без запросов тебе путь заказан
7 breezee
 
10.10.17
21:05
Движение.Сумма = ТекСтрокаТовары.Количество * РегистрыНакопления.ОстаткиТоваров.Остатки(Дата, "Номенклатура,Склад", , "Сумма") / РегистрыНакопления.ОстаткиТоваров.Остатки(Дата, "Номенклатура,Склад", , "Количество");
Спасибо! Поднял настроение под вечер.
По теме:
Учи соединения в запросах, выборку из виртуальных таблиц в запросах. Даю подсказищу, данные в документе есть, надо связать по полям связи(пойми, что за поля их связывают) в запросе с данными по остаткам из регистра "ОстаткиТоваров". Посмотреть, что вернет запрос в случае того, если данных нет в регистре, что вообще возварщает запрос, для этого тебе поможет консоль запросов. По твоему коду - погугли, чем плохи запросы в цикле
8 Ненавижу 1С
 
гуру
10.10.17
21:43
Первый регистр одним запросом выгружает в регистр.
Второй регистр одной записью в регистр.
Дебеторскую задолженность принято оформлять в 1с приходом.
9 xXeNoNx
 
10.10.17
22:02
не ну, а че конструктор отработал нормально...
(0) Правильной дорогой идешь...

Радченко возьми, через пару глав увидишь где что можно оптимизировать и как на запросы переписать...

Основной косяк, на данном этапе - проверь оба цикла.., не смущает что он 2 раза прогоняется?
10 xXeNoNx
 
10.10.17
22:03
Мля, вы еще тут про блокировки расскажите и ткните носом...
Хотел бы я на ваши художества в начале посмотреть
11 banan_CHIK_
 
11.10.17
12:44
Спасибо, ребята! Спасибо за подсказки. Рад, что развеселил кодом)