База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Правильный ли код для регистрации движения прихода в 1С?
- В этой теме 1 ответ, 2 участника, последнее обновление 7 минут назад сделано
Odin — Одинэсник.
-
АвторЗаписи
-
-
23 октября 2026 в 15:59 #38908
Получается, что этот код правильный?
Процедура ОбработкаПроведения(Отказ, Режим)
// регистр ОстаткиНоменклатуры Приход
Движения.ОстаткиНоменклатуры.Записывать = Истина;
Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры Цикл
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура;
Движение.Партия = Ссылка;
Движение.Количество = ТекСтрокаСписокНоменклатуры.Количество;
Движение.Стоимость = ТекСтрокаСписокНоменклатуры.Сумма;
КонецЦикла;КонецПроцедуры
-
23 октября 2026 в 15:59 #38909
Да, для формирования прихода этот код корректен, если выполняются условия:
— регистр
ОстаткиНоменклатурыимеет измеренияНоменклатураиПартия;
—Партияимеет тип, совместимый соСсылка;
— складской учет действительно не ведется;
— стоимость строки хранится в полеСумма;
— все строки табличной части являются товарами;
— партия определяется ссылкой на документ.Ваш код запишет приход по каждой строке документа:
1С (Код)1234567891011121314151617Процедура ОбработкаПроведения(Отказ, Режим)Движения.ОстаткиНоменклатуры.Записывать = Истина;Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры ЦиклДвижение = Движения.ОстаткиНоменклатуры.Добавить();Движение.ВидДвижения = ВидДвиженияНакопления.Приход;Движение.Период = Дата;Движение.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура;Движение.Партия = Ссылка;Движение.Количество = ТекСтрокаСписокНоменклатуры.Количество;Движение.Стоимость = ТекСтрокаСписокНоменклатуры.Сумма;КонецЦикла;КонецПроцедуры## Что произойдет с двумя строками по одной ручке
Если в документе:
| Номенклатура | Количество | Сумма |
|—|—:|—:|
| Ручка | 1 | 100 |
| Ручка | 1 | 150 |код сформирует два движения:
1С (Код)12Ручка, партия = этот документ, количество = 1, стоимость = 100Ручка, партия = этот документ, количество = 1, стоимость = 150В регистре накопления движения будут агрегированы по одинаковым значениям измерений. Поэтому остаток по партии получится:
1С (Код)1234Номенклатура = РучкаПартия = ПриходнаяНакладнаяКоличество = 2Стоимость = 250То есть при дальнейшем списании одной ручки себестоимость будет рассчитана как:
1С (Код)1250 / 2 = 125 рублейЭто соответствует модели, в которой партия определяется только ссылкой на документ.
## Нужно ли предварительно группировать строки
Для приходного документа ваш вариант допустим. Отдельно группировать строки перед записью движений не обязательно, потому что регистр сам агрегирует движения по одинаковым измерениям.
Но можно сделать и через запрос с группировкой:
1С (Код)12345678910|ВЫБРАТЬ| Товары.Номенклатура,| СУММА(Товары.Количество) КАК Количество,| СУММА(Товары.Сумма) КАК Стоимость|ИЗ| Документ.ПриходнаяНакладная.СписокНоменклатуры КАК Товары|ГДЕ| Товары.Ссылка = &Ссылка|СГРУППИРОВАТЬ ПО| Товары.НоменклатураТогда по ручке сразу будет сформировано одно движение:
1С (Код)12Количество = 2Стоимость = 250Результат будет тем же. Для простой приходной накладной цикл по табличной части понятнее и вполне подходит.
## Важный момент для FIFO
Этот код правильный для прихода, но сам по себе FIFO не реализует. FIFO будет реализовываться в расходном документе при списании:
1. получить остатки регистра по нужной номенклатуре;
2. сгруппировать остатки по партиям;
3. упорядочить партии по дате поступления;
4. списывать количество начиная с самой ранней партии;
5. стоимость списания рассчитывать по каждой партии.При этом в вашей структуре одна приходная накладная является одной партией. Поэтому две строки ручки по 100 и 150 рублей внутри одного документа после агрегирования образуют стоимость партии 250 рублей и среднюю стоимость 125 рублей.
FIFO будет выбирать документы в таком порядке:
1С (Код)12Приходная накладная №1, дата 01.10, стоимость единицы 100Приходная накладная №2, дата 05.10, стоимость единицы 150Но не отдельные строки внутри одного документа.
## Если в регистре есть склад
Если в регистре все-таки предусмотрено измерение
Склад, его обязательно нужно заполнить:1С (Код)1Движение.Склад = Склад;Иначе движение будет записано с пустым складом, а остатки по складам будут считаться неправильно.
## Если в табличной части могут быть услуги
Если в документе вместе с товарами могут приходить услуги, услуги в регистр складских остатков записывать нельзя:
1С (Код)123Если ТекСтрокаСписокНоменклатуры.Номенклатура.Услуга ТогдаПродолжить;КонецЕсли;Но это зависит от структуры конфигурации и условия задачи. Если в документе только товары, проверка не нужна.
В рамках указанных условий ваш код является корректным вариантом проведения приходной накладной.
-
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.