Форум программистов, компьютерный форум, киберфорум
Наши страницы

1С: Собственные программы

Войти
Регистрация
Восстановить пароль
 
 
Дима4
0 / 0 / 0
Регистрация: 10.03.2017
Сообщений: 12
#1

Обработка проведения документа: движения по регистрам накопления. - 1С

16.03.2017, 16:06. Просмотров 768. Ответов 18
Метки нет (Все метки)

Добрый день!
Просьба посмотреть код и отредактировать правильно, или сказать что больше редактировать нельзя..
Проблема в том что хотел создать одну инструкцию
1C
1
Для Каждого
но никак, (только две получается) получаются ошибки
1С только начал заниматься..
То же самое с
1C
1
Движение.Период = Дата;
возможно ли написать один раз или нет
Сам пробовал это делать но вылетают ошибки, может не так делал..
Спасибо!
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Процедура ОбработкаПроведения(Отказ, Режим)
    
    Движения.ОстаткиМатериалов.Записывать = Истина;
    Движения.СтоимостьМатериалов.Записывать = Истина;
    Движения.Продажи.Записывать = Истина;
    Движения.Вознаграждение.Записывать = Истина;
    
    Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл
        Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда 
            
            // регистр ОстаткиМатериалов Расход
            Движение = Движения.ОстаткиМатериалов.Добавить();
            Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
            Движение.Период = Дата;
            Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;
            Движение.Склад = Склад;
            Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;
            
            // регистр СтоимостьМатериалов Расход
            Движение = Движения.СтоимостьМатериалов.Добавить();
            Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
            Движение.Период = Дата;
            Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;
            Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Количество * ТекСтрокаПереченьНоменклатуры.Стоимость;
        КонецЕсли;
        
        // Регистр Продажи 
        Движение = Движения.Продажи.Добавить();
        Движение.Период = Дата;
        Движение.Номенклатура = ТекСтрокаПереченьНоменклатуры.Номенклатура;
        Движение.Клиент = Клиент;
        Движение.Мастер = Мастер;
        Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;
        Движение.Выручка = ТекСтрокаПереченьНоменклатуры.Сумма;
        Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Стоимость * ТекСтрокаПереченьНоменклатуры.Количество;
    КонецЦикла;
    
    //Регистр Вознаграждение
    Движение = Движения.Вознаграждение.Добавить();
    Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл  
        Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Услуга Тогда
            
            
            Движение.Период = Дата;
            Движение.Мастер = Мастер;
            Движение.Сумма = Движение.Сумма + ТекСтрокаПереченьНоменклатуры.Сумма;          
        КонецЕсли;      
    КонецЦикла;
    
    Если Движение.Сумма < 1000 Тогда
        Движение.Процент = 5;
    КонецЕсли;
    
    Если Движение.Сумма >= 1000 И Движение.Сумма <= 5000 Тогда
        Движение.Процент = 10;
    КонецЕсли;
    
    Если Движение.Сумма > 5000 Тогда
        Движение.Процент = 15;
    КонецЕсли;
    
    Движение.Вознаграждение = Движение.Сумма * Движение.Процент / 100;
    
КонецПроцедуры
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2017, 16:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обработка проведения документа: движения по регистрам накопления. (1С):

1C 8.x Ошибка выполнения запроса. Обработка проведения документа. - 1С
Вот такая ошибка: Ошибка при выполнении обработчика - 'ОбработкаПроведения' по причине: ...

1C 8.x (тонкий) Проведение документа «Оказание услуги» по двум регистрам - 1С
Указав стоимость материала и в файле оказание услуги и проведя его выводится странная стоимость в регистре Стоимость материалов. Подскажите...

1C 8.x Оптимизация проведения документа - 1С
Доброе утро, уважаемые программисты :-) При разработке конфигурации в 1С 8.2 столкнулась со следующей ситуацией. У меня есть...

Создание документа (Медицинская справка) и Регистра накопления! - 1С
Нужна помощь в создании документа (Медецинская справка ) и регистр накопления. Помогите пожалуйста с пошаговым объяснением .

1C 8.x Отмена проведения проведённого документа - 1С
Всем привет! Пытаюсь сделать запрет на проведение уже проведённого ранее документа. Почитала, что делается это через событие...

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

18
Tklwegsd
Эксперт 1С
656 / 469 / 154
Регистрация: 24.07.2013
Сообщений: 1,632
16.03.2017, 16:26 #2
Цитата Сообщение от Дима4 Посмотреть сообщение
возможно ли написать один раз или нет
Если речь о регистре Вознаграждение, то можно.
Цитата Сообщение от Дима4 Посмотреть сообщение
Сам пробовал это делать но вылетают ошибки, может не так делал..
Какие ошибки?
1
Дима4
0 / 0 / 0
Регистрация: 10.03.2017
Сообщений: 12
16.03.2017, 16:30  [ТС] #3
Да, речь о нем
Например когда я убирал Для Каждого во втором случае то при проведении документа вылетала ошибка Движение.Период = Дата не может быть пустым
0
Tklwegsd
Эксперт 1С
656 / 469 / 154
Регистрация: 24.07.2013
Сообщений: 1,632
16.03.2017, 16:34 #4
Значит не был Период заполнен, но к циклу это отношение не имеет.
1
Дима4
0 / 0 / 0
Регистрация: 10.03.2017
Сообщений: 12
16.03.2017, 16:39  [ТС] #5
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Процедура ОбработкаПроведения(Отказ, Режим)
    
    Движения.ОстаткиМатериалов.Записывать = Истина;
    Движения.СтоимостьМатериалов.Записывать = Истина;
    Движения.Продажи.Записывать = Истина;
    Движения.Вознаграждение.Записывать = Истина;
    
    Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл
        Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда 
            
            // регистр ОстаткиМатериалов Расход
            Движение = Движения.ОстаткиМатериалов.Добавить();
            Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
            Движение.Период = Дата;
            Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;
            Движение.Склад = Склад;
            Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;
            
            // регистр СтоимостьМатериалов Расход
            Движение = Движения.СтоимостьМатериалов.Добавить();
            Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
            Движение.Период = Дата;
            Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;
            Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Количество * ТекСтрокаПереченьНоменклатуры.Стоимость;
        КонецЕсли;
        
        // Регистр Продажи 
        Движение = Движения.Продажи.Добавить();
        Движение.Период = Дата;
        Движение.Номенклатура = ТекСтрокаПереченьНоменклатуры.Номенклатура;
        Движение.Клиент = Клиент;
        Движение.Мастер = Мастер;
        Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;
        Движение.Выручка = ТекСтрокаПереченьНоменклатуры.Сумма;
        Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Стоимость * ТекСтрокаПереченьНоменклатуры.Количество;
 
    
    //Регистр Вознаграждение
    Движение = Движения.Вознаграждение.Добавить();
        
        Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Услуга Тогда
            
            
            Движение.Период = Дата;
            Движение.Мастер = Мастер;
            Движение.Сумма = Движение.Сумма + ТекСтрокаПереченьНоменклатуры.Сумма;          
        КонецЕсли;      
    КонецЦикла;
    
    Если Движение.Сумма < 1000 Тогда
        Движение.Процент = 5;
    КонецЕсли;
    
    Если Движение.Сумма >= 1000 И Движение.Сумма <= 5000 Тогда
        Движение.Процент = 10;
    КонецЕсли;
    
    Если Движение.Сумма > 5000 Тогда
        Движение.Процент = 15;
    КонецЕсли;
    
    Движение.Вознаграждение = Движение.Сумма * Движение.Процент / 100;
    
КонецПроцедуры
Обработка проведения документа: движения по регистрам накопления.


Ничего не пойму.. (

а 1 вариант кода работает как нужно..
0
Tklwegsd
Эксперт 1С
656 / 469 / 154
Регистрация: 24.07.2013
Сообщений: 1,632
16.03.2017, 16:42 #6
Откуда в регистре вторая строка? Ты же ведь одну там ожидаешь увидеть?
1
Дима4
0 / 0 / 0
Регистрация: 10.03.2017
Сообщений: 12
16.03.2017, 16:47  [ТС] #7
В итоге да, должна быть одна строка где все просчитывается
Об этом речь?
Обработка проведения документа: движения по регистрам накопления.
0
Tklwegsd
Эксперт 1С
656 / 469 / 154
Регистрация: 24.07.2013
Сообщений: 1,632
16.03.2017, 16:49 #8
Анализируй код. Откуда в этом регистре берется вторая строка?
1
Дима4
0 / 0 / 0
Регистрация: 10.03.2017
Сообщений: 12
16.03.2017, 16:54  [ТС] #9
Для Каждого ....
Движение = Движения.Вознаграждение.Добавить();
обходим каждый вид услуги и добавляем, получается при обходе второй услуги он хочет добавить еще одну строку но не выходит?
0
Tklwegsd
Эксперт 1С
656 / 469 / 154
Регистрация: 24.07.2013
Сообщений: 1,632
16.03.2017, 17:00 #10
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Совершенно верно. Только зачем добавлять новую строку, если по логике, она должна быть одна.

Добавлено через 30 секунд
Вынеси добавление записи регистра за цикл.

Добавлено через 2 минуты
Цитата Сообщение от Дима4 Посмотреть сообщение
получается при обходе второй услуги он хочет добавить еще одну строку но не выходит?
Добавить выходит. Записать движения не выходит, т.к. Период для новой записи уже не заполняется.
1
Дима4
0 / 0 / 0
Регистрация: 10.03.2017
Сообщений: 12
16.03.2017, 17:11  [ТС] #11
Спасибо огромное!
Только что понял, что сам написал..
Теперь пишет "Поле объекта не обнаружено (сумма)"

Добавлено через 3 минуты
Буду дальше анализировать!
Спасибо огромное, что натолкнули на мысль
0
Dethmontt
Модератор
Эксперт 1С
2552 / 2360 / 384
Регистрация: 10.03.2011
Сообщений: 8,325
Записей в блоге: 1
Завершенные тесты: 1
16.03.2017, 17:15 #12
1C
1
2
3
4
5
6
7
8
Движение = Движения.Вознаграждение.Добавить();
Движение.Период = Дата;
Движение.Мастер = Мастер;
Для каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл
    
    Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Услуга Тогда
          Движение.Сумма = Движение.Сумма + ТекСтрокаПереченьНоменклатуры.Сумма;          
    КонецЕсли;
1
Дима4
0 / 0 / 0
Регистрация: 10.03.2017
Сообщений: 12
16.03.2017, 17:51  [ТС] #13
Ошибка не ушла

Добавлено через 29 минут
С точками останова получилось что при первом обходе в поле
1C
1
ТекСтрокаПереченьНоменклатуры.Сумма;
попадает первое значение Услуги 1200, но при заходе на второй круг вылетает Ошибка "Поле объекта не обнаружено (Сумма)"...
Ему некуда класть второе значение или что это может значить?)
0
Dethmontt
Модератор
Эксперт 1С
2552 / 2360 / 384
Регистрация: 10.03.2011
Сообщений: 8,325
Записей в блоге: 1
Завершенные тесты: 1
16.03.2017, 18:08 #14
Дима4, весь код в студию
0
Дима4
0 / 0 / 0
Регистрация: 10.03.2017
Сообщений: 12
16.03.2017, 18:15  [ТС] #15
Весь код в самом первом сообщении.
Поиграл с комментариями, пришел к выводу что если другие регистры закомментировать то Ваш вариант работает!
Предполагаю что при обходе документа, когда я попадаю на ВидНоменклатуры.Материал он ищет куда ему записать сумму для этого значения, а такого поля не существует... Возможно так
0
16.03.2017, 18:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2017, 18:15
Привет! Вот еще темы с ответами:

Ошибки при записи движений документа в регистр накопления - 1С
Здравствуйте. Есть собственная конфигурация 1С 8.3 по планированию и учету проектов. В Конфигурации есть документ...

Состояние проведения или отмены документа - 1С
При отмени проведения в регистр надо писать одни данные, а при записи другие. Как я могу узнать состояние документа, проводится он или...

Заполнение реквизита документа программно из результата запроса к регистру накопления - 1С
Здравствуйте. Делаю конфигурацию в 1С 8.3.Есть Документ &quot;НазначенияСотрудникам&quot;,регистрирующий работы для сотрудников. Среди всех...

Старт бизнес-процесса после проведения документа - 1С
Существует документ Заказ монтажа, создан бизнес-процесс. Бизнес процесс стартует после проведения документа. Необходимо чтобы стартовал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.