Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/26: Рейтинг темы: голосов - 26, средняя оценка - 4.54
КристинаН
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 14
1

Метод списания товара FIFO 1с 8.3

27.03.2016, 20:14. Просмотров 4940. Ответов 10
Метки нет (Все метки)

Здравствуйте!
Помогите разобраться с методом списания товара FIFO
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
65
66
67
68
69
70
71
Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
 
    // регистр Товары Расход
    Движения.Товары.Записывать = Истина;
    
    //
    Запрос = Новый Запрос();
    Запрос.Текст = 
    "ВЫБРАТЬ
     |       РеализацияТоваровТовары.НомерСтроки КАК НомерСтроки,
|
|           ЕСТЬNULL(ТоварыОстатки.КоличествоОстаток, 0) КАК Остаток,
|           РеализацияТоваровТовары.Номенклатура КАК Номенклатура,
|           РеализацияТоваровТовары.Количество КАК Количество,
|           РеализацияТоваровТовары.Склад  КАК Склад
|                   ИЗ
|           Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
|               ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Товары.Остатки(&МоментВремени, ) КАК ТоварыОстатки
|               ПО РеализацияТоваровТовары.Номенклатура = ТоварыОстатки.Номенклатура И
|                   РеализацияТоваровТовары.Склад = ТоварыОстатки.Склад 
|       УПОРЯДОЧИТЬ ПО Партия.Дата  ВОЗР
 
|ИТОГИ
|           МИНИМУМ(НомерСтроки),
|           СУММА(Остаток),
|           МИНИМУМ(Количество)                        
|       ПО
|        Номенклатура";
 
    Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
    Результат = Запрос.Выполнить();
 
    Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока Выборка.Следующий() Цикл
    
        Если Выборка.Количество>Выборка.Остаток Тогда
        
            Сообщить("Не хватает товара");
            Отказ = Истина;
            //Движения.Товары.Записывать = Ложь:
        
        КонецЕсли; 
    
    КонецЦикла; 
    Если НЕ Отказ Тогда
    
        ОсталосьСписать = Выборка.Количество;
        ВыборкаПартии = Выборка.Выбрать();
        Пока  ВыборкаПартии.Следующий()  Цикл
            
        Списать = Мин (ОсталосьСписать, ВыборкаПартии.КоличествоОстаток);
        
        Себестоим = Списать / ВыборкаПартии.КоличествоОстаток*ВыборкаПартии.СтоимостьОстаток;       
        
        Движение = Движения.Товары.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Номенклатура = Выборка.Номенклатура;
        Движение.Количество = Списать;
        Движение.Стоимость=Себестоим;
        Движение.Партия= ВыборкаПартии.Партия;
        
        ОсталосьСписать=ОсталосьСписать-Списать;
        
КонецЦикла;
    
    КонецЕсли;
КонецПроцедуры
Сам запрос вроде правильно выполняет, а в выборку передает не так как нужно
НК.rar
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2016, 20:14
Ответы с готовыми решениями:

Механизм партионного списания отрабатывает только метод FIFO
Реализованный механизм партионного списания отрабатывает только метод FIFO. Необходимо дать...

Система учета на складе. Проверка возможности списания заданного количества товара со склада.
Система учета на складе. Есть документ поставка (пришло 5 товаров) проводится и учитывается в...

Метод Fifo/lifo
Помогите пожалуйста. Мне в задании нужно реализовать метод FIFO/LIFO. Т.е. при проведении документа...

Запрет проведения документа при ошибках списания товара
Прошу помощи !!! 1С 8.2. учебная версия в документе "Списание товаров" можно списывать только те...

Опишите класса товара. Поля класса: имя товара, цена товара, количество товара на склад
Опишите класса товара. Поля класса: имя товара, цена товара, количество товара на складе. Выполнить...

10
GreenkA
Форумчанин
Эксперт 1С
2996 / 1926 / 520
Регистрация: 25.06.2009
Сообщений: 6,806
27.03.2016, 20:31 2
КристинаН, у вас не реализован механизм списания Партий. Да и прихода по ним нет.
0
GreenkA
Форумчанин
Эксперт 1С
2996 / 1926 / 520
Регистрация: 25.06.2009
Сообщений: 6,806
27.03.2016, 21:17 3
Лучший ответ Сообщение было отмечено КристинаН как решение

Решение

Добавлено через 34 минуты
КристинаН, у вас отсутствует Приход по Партиям, в документе Поступления товаров допишите:
1C
1
2
3
4
5
6
7
8
9
10
11
12
    // регистр Товары Приход
    Движения.Товары.Записывать = Истина;
    Для Каждого ТекСтрокаТовары Из Товары Цикл
        Движение = Движения.Товары.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Период = Дата;
        Движение.Склад = Склад;
        Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
        Движение.Партия = Ссылка;
        Движение.Количество = ТекСтрокаТовары.Количество;
        Движение.Сумма = ТекСтрокаТовары.Сумма;
    КонецЦикла;
С движениями Реализации все вообще интересно. Вы в запросе по остаткам даже не делаете отбор по Ссылке, смотрите остатки по всем номенклатурам для всех документов...
Далее вы берете ВыборкуПартии после прохождения основной выборки (обхода по группировкам). Естественно, эта часть кода выполняться не будет.
Вы не контролируете количество к списанию в процессе списания по партиям, об этом комментарий в коде ниже.
И еще вы не списываете товар по складам, хотя данное измерение у вас в регистре накопления имеется.
Зачем-то вы делаете движения в регистр Товары документом Реализации - аж два раза, зачем?

И так часть кода - движения Реализации товаров в регистр накопления Товары:
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
    // регистр Товары Расход
    Движения.Товары.Записывать = Истина;
    
    //
    Запрос = Новый Запрос();
    Запрос.Текст = 
    "ВЫБРАТЬ
    |   РеализацияТоваровТовары.Номенклатура КАК Номенклатура,
    |   СУММА(РеализацияТоваровТовары.Количество) КАК Количество,
    |   РеализацияТоваровТовары.Склад
    |ПОМЕСТИТЬ Документ
    |ИЗ
    |   Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
    |ГДЕ
    |   РеализацияТоваровТовары.Ссылка = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    |   РеализацияТоваровТовары.Номенклатура,
    |   РеализацияТоваровТовары.Склад
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |   Документ.Номенклатура КАК Номенклатура,
    |   Документ.Количество КАК Количество,
    |   ТоварыОстатки.Склад,
    |   ТоварыОстатки.Партия,
    |   ЕСТЬNULL(ТоварыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    |   ЕСТЬNULL(ТоварыОстатки.СуммаОстаток, 0) КАК СуммаОстаток,
    |   Документ.Склад КАК Склад1
    |ИЗ
    |   Документ КАК Документ
    |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Товары.Остатки(
    |               &МоментВремени,
    |               Номенклатура В
    |                   (ВЫБРАТЬ
    |                       Документ.Номенклатура
    |                   ИЗ
    |                       Документ КАК Документ)) КАК ТоварыОстатки
    |       ПО Документ.Номенклатура = ТоварыОстатки.Номенклатура
    |           И Документ.Склад = ТоварыОстатки.Склад
    |
    |УПОРЯДОЧИТЬ ПО
    |   ТоварыОстатки.Партия.Дата
    |ИТОГИ
    |   МИНИМУМ(Количество),
    |   СУММА(КоличествоОстаток)
    |ПО
    |   Номенклатура";
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
    Результат = Запрос.Выполнить();
    
    Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока Выборка.Следующий() Цикл
        Если Выборка.Количество>Выборка.КоличествоОстаток Тогда
            
            Сообщить("Не хватает товара");
            Отказ = Истина;
            //Движения.Товары.Записывать = Ложь:
            
        КонецЕсли; 
        Если НЕ Отказ Тогда         
            ОсталосьСписать = Выборка.Количество;
            ВыборкаПартии = Выборка.Выбрать();
//если списывать больше нечего(ОсталосьСписать = 0) - по этой номенклатуре можно завершать обход партий
            Пока  ВыборкаПартии.Следующий() И ОсталосьСписать > 0 Цикл
                
                Списать = Мин (ОсталосьСписать, ВыборкаПартии.КоличествоОстаток);
                
                Себестоим = Списать / ВыборкаПартии.КоличествоОстаток*ВыборкаПартии.СуммаОстаток;       
                
                Движение = Движения.Товары.Добавить();
                Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
                Движение.Период = Дата;
                Движение.Номенклатура = Выборка.Номенклатура;
                Движение.Количество = Списать;
                Движение.Сумма = Себестоим;
                Движение.Партия = ВыборкаПартии.Партия;
                Движение.Склад = ВыборкаПартии.Склад;
                ОсталосьСписать = ОсталосьСписать - Списать;
            КонецЦикла;
        КонецЕсли; 
    КонецЦикла;
Добавлено через 1 минуту

Не по теме:

Я так понимаю, это задача по сертификации на Специалиста?
Если да, то лично мне снизили оценку за сортировку Партий по Дате, надо по МоментуВремени. Возможно сейчас что-то изменилось, но лучше уточните этот вопрос.

1
КристинаН
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 14
28.03.2016, 10:30  [ТС] 4
Огромное Спасибо! Ссылка я так поняла указывает на документ РеализацияТоваров?
Можно еще вопрос? Я добавила подсчет суммы СуммаПоДокументу, чтобы в самом документе РеализацияТоваров корректно отображалась сумма и цена продажи. Подсчитывает правильно, а вот как добавить это значение в документ?
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
СуммаПоДокументу = 0;
Пока ВыборкаПартии.Следующий() И ОсталосьСписать>0 Цикл
            
                Списать = Мин(ОсталосьСписать, ВыборкаПартии.КоличествоОстаток);
                Себестоим = Списать / ВыборкаПартии.КоличествоОстаток*ВыборкаПартии.СуммаОстаток;       
                
                Движение = Движения.Товары.Добавить();
                Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
                Движение.Период = Дата;
                Движение.Номенклатура = Выборка.Номенклатура;
                Движение.Количество = Списать;
                Движение.Сумма = Себестоим;
                Движение.Партия = ВыборкаПартии.Партия;
                Движение.Склад = ВыборкаПартии.Склад;
                ОсталосьСписать = ОсталосьСписать - Списать;    
                СуммаПоДокументу = СуммаПоДокументу + Себестоим;
            КонецЦикла;
0
28.03.2016, 10:30
GreenkA
Форумчанин
Эксперт 1С
2996 / 1926 / 520
Регистрация: 25.06.2009
Сообщений: 6,806
28.03.2016, 12:46 5
Цитата Сообщение от КристинаН Посмотреть сообщение
Огромное Спасибо! Ссылка я так поняла указывает на документ РеализацияТоваров?
да
Цитата Сообщение от КристинаН Посмотреть сообщение
Подсчитывает правильно, а вот как добавить это значение в документ?
а у вас в документе есть реквизит для общей суммы?
0
КристинаН
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 14
28.03.2016, 14:39  [ТС] 6
Цитата Сообщение от GreenkO Посмотреть сообщение
а у вас в документе есть реквизит для общей суммы?
Да, в табличной части РеализацияТоваров.Товары
0
GreenkA
Форумчанин
Эксперт 1С
2996 / 1926 / 520
Регистрация: 25.06.2009
Сообщений: 6,806
28.03.2016, 14:46 7
КристинаН, для общей суммы по документу.
Что вы подразумеваете под этим:
Цитата Сообщение от КристинаН Посмотреть сообщение
Подсчитывает правильно, а вот как добавить это значение в документ?
0
КристинаН
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 14
28.03.2016, 14:59  [ТС] 8
В отладчике по шагам хожу и переменная СуммаПоДокументу рассчиталась верно. Нужно как то добавить это значение в табличную часть документа в колонку Сумма
0
Миниатюры
Метод списания товара FIFO 1с 8.3   Метод списания товара FIFO 1с 8.3  
GreenkA
Форумчанин
Эксперт 1С
2996 / 1926 / 520
Регистрация: 25.06.2009
Сообщений: 6,806
28.03.2016, 15:10 9
КристинаН, зачем? а если у вас в табличной части будет больше строк? в которую из них будете добавлять?
0
КристинаН
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 14
28.03.2016, 15:21  [ТС] 10
Цитата Сообщение от GreenkO Посмотреть сообщение
КристинаН, зачем? а если у вас в табличной части будет больше строк? в которую из них будете добавлять?
ну тогда же проблемно сумму узнать, через отчеты и вручную считать? глуповато как то...
0
GreenkA
Форумчанин
Эксперт 1С
2996 / 1926 / 520
Регистрация: 25.06.2009
Сообщений: 6,806
28.03.2016, 16:29 11
Цитата Сообщение от КристинаН Посмотреть сообщение
проблемно сумму узнать
Себестоимость вы считаете через данные регистра накопления. В отчетах рассчитывайте ее так же. В чем проблема?

Добавлено через 1 час 0 минут
КристинаН, я у вас выше спрашивала, по Специалисту ли задача. Вы ознакомлены с распространенными ошибками и снимаемыми за них баллами?
Получение расчетных данных не из регистра.
Единственной достоверной информацией в системе учета следует считать информацию регистров. Информация из документов может рассматриваться лишь как вспомогательная и не может быть абсолютно достоверной. Например, при наличии документа (аналога ручной операции в бухгалтерском учете), позволяющего интерактивно вводить записи в регистр
Снимают 3 балла, экзамен автоматически не сдан.
0
28.03.2016, 16:29
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2016, 16:29

Массив записей. Структура: наименование товара, его количество, цену за единицу товара и общую стоимость данного товара
Пожалуйста помогите с задачкой на массивы для экзамена.. 1.Разработать программу на ЯП Pascal, в...

Метод toString() должен выдавать в виде строки стоимость товара
как вообще сделать,что бы переводилось из int в string,весь интернет уже облазил

Методы списания
Всем доброе утро! Есть у кого-то хорошая информация о методах списания LIFO и FIFO? Насколько...


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

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

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