С Новым годом! Форум программистов, компьютерный форум, киберфорум
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/104: Рейтинг темы: голосов - 104, средняя оценка - 4.66
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 14
1
1C 8.x

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Помогите разобраться с методом списания товара 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)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.03.2016, 20:14
Ответы с готовыми решениями:

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

Проверка правильности списания товара
Здравствуйте, есть обработчик нажатия на кнопку "Списать товар" : Private Sub...

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

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

10
Эксперт 1С
3062 / 2009 / 524
Регистрация: 25.06.2009
Сообщений: 6,964
27.03.2016, 20:31 2
КристинаН, у вас не реализован механизм списания Партий. Да и прихода по ним нет.
0
Эксперт 1С
3062 / 2009 / 524
Регистрация: 25.06.2009
Сообщений: 6,964
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
Эксперт 1С
3062 / 2009 / 524
Регистрация: 25.06.2009
Сообщений: 6,964
28.03.2016, 12:46 5
Цитата Сообщение от КристинаН Посмотреть сообщение
Огромное Спасибо! Ссылка я так поняла указывает на документ РеализацияТоваров?
да
Цитата Сообщение от КристинаН Посмотреть сообщение
Подсчитывает правильно, а вот как добавить это значение в документ?
а у вас в документе есть реквизит для общей суммы?
0
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 14
28.03.2016, 14:39  [ТС] 6
Цитата Сообщение от GreenkO Посмотреть сообщение
а у вас в документе есть реквизит для общей суммы?
Да, в табличной части РеализацияТоваров.Товары
0
Эксперт 1С
3062 / 2009 / 524
Регистрация: 25.06.2009
Сообщений: 6,964
28.03.2016, 14:46 7
КристинаН, для общей суммы по документу.
Что вы подразумеваете под этим:
Цитата Сообщение от КристинаН Посмотреть сообщение
Подсчитывает правильно, а вот как добавить это значение в документ?
0
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 14
28.03.2016, 14:59  [ТС] 8
В отладчике по шагам хожу и переменная СуммаПоДокументу рассчиталась верно. Нужно как то добавить это значение в табличную часть документа в колонку Сумма
Миниатюры
Метод списания товара FIFO 1с 8.3   Метод списания товара FIFO 1с 8.3  
0
Эксперт 1С
3062 / 2009 / 524
Регистрация: 25.06.2009
Сообщений: 6,964
28.03.2016, 15:10 9
КристинаН, зачем? а если у вас в табличной части будет больше строк? в которую из них будете добавлять?
0
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 14
28.03.2016, 15:21  [ТС] 10
Цитата Сообщение от GreenkO Посмотреть сообщение
КристинаН, зачем? а если у вас в табличной части будет больше строк? в которую из них будете добавлять?
ну тогда же проблемно сумму узнать, через отчеты и вручную считать? глуповато как то...
0
Эксперт 1С
3062 / 2009 / 524
Регистрация: 25.06.2009
Сообщений: 6,964
28.03.2016, 16:29 11
Цитата Сообщение от КристинаН Посмотреть сообщение
проблемно сумму узнать
Себестоимость вы считаете через данные регистра накопления. В отчетах рассчитывайте ее так же. В чем проблема?

Добавлено через 1 час 0 минут
КристинаН, я у вас выше спрашивала, по Специалисту ли задача. Вы ознакомлены с распространенными ошибками и снимаемыми за них баллами?
Получение расчетных данных не из регистра.
Единственной достоверной информацией в системе учета следует считать информацию регистров. Информация из документов может рассматриваться лишь как вспомогательная и не может быть абсолютно достоверной. Например, при наличии документа (аналога ручной операции в бухгалтерском учете), позволяющего интерактивно вводить записи в регистр
Снимают 3 балла, экзамен автоматически не сдан.
0
28.03.2016, 16:29
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.03.2016, 16:29
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Как программировать под HCL Notes и создавать свои продукты на ее основе
InfoMaster 11.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой мощную платформу для разработки корпоративных приложений, которая сочетает в себе функции электронной почты, календаря,. . .
Как работать с SVN (Subversion)
InfoMaster 11.01.2025
Введение Система контроля версий является неотъемлемой частью современного процесса разработки программного обеспечения. Она обеспечивает управление изменениями в коде, позволяет отслеживать. . .
Использование GraphQL в JavaScript
InfoMaster 11.01.2025
Введение в GraphQL и его преимущества В современной разработке веб-приложений эффективный обмен данными между клиентом и сервером играет ключевую роль. GraphQL представляет собой язык запросов и. . .
Администрирован­­­­ие Git, продвинутые техники работы с Git
InfoMaster 11.01.2025
Основы управления репозиторием Эффективное управление Git-репозиторием требует глубокого понимания механизмов контроля доступа и инструментов администрирования. Рассмотрим ключевые аспекты. . .
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru