Ответы в темах
-
АвторЗаписи
-
23 октября 2026 в 16:03 в ответ на: Как списывать только товары, если в документах две части: товары и услуги? #38911
Если в расходной накладной есть две отдельные табличные части:
—
Товары
—Услугито в регистр
ОстаткиНоменклатурынужно формировать движения только по табличной частиТовары.Табличную часть
Услугипри списании складских остатков обрабатывать не нужно.## Простой вариант без FIFO
1С (Код)12345678910111213141516171819202122232425262728Процедура ОбработкаПроведения(Отказ, Режим)Движения.ОстаткиНоменклатуры.Записывать = Истина;Для Каждого ТекСтрокаТовары Из Товары ЦиклЕсли ТекСтрокаТовары.Количество <= 0 ТогдаПродолжить;КонецЕсли;Движение = Движения.ОстаткиНоменклатуры.Добавить();Движение.ВидДвижения = ВидДвиженияНакопления.Расход;Движение.Период = Дата;Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;Движение.Количество = ТекСтрокаТовары.Количество;// Партия и стоимость здесь должны быть определены// алгоритмом списания, например FIFO.Движение.Партия = ТекСтрокаТовары.Партия;Движение.Стоимость = ТекСтрокаТовары.Стоимость;КонецЦикла;// Табличную часть Услуги здесь не обрабатываем.// Услуги не уменьшают складской остаток.КонецПроцедурыНо для FIFO нельзя просто взять
ПартияиСтоимостьиз строки документа, если пользователь их там не указывает. При FIFO партия и себестоимость должны определяться по остаткам регистра.## Вариант с FIFO
Для каждой строки из табличной части
Товарынужно:1. получить остатки по номенклатуре;
2. выбрать партии в порядке FIFO;
3. списать нужное количество начиная с самой ранней партии;
4. сформировать одно или несколько расходных движений;
5. табличную частьУслугине обрабатывать.Пример основной логики:
1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788Процедура ОбработкаПроведения(Отказ, Режим)Движения.ОстаткиНоменклатуры.Записывать = Истина;Для Каждого ТекСтрокаТовары Из Товары ЦиклЕсли ТекСтрокаТовары.Количество <= 0 ТогдаПродолжить;КонецЕсли;ОсталосьСписать = ТекСтрокаТовары.Количество;Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Остатки.Партия КАК Партия,| Остатки.КоличествоОстаток КАК КоличествоОстаток,| Остатки.СтоимостьОстаток КАК СтоимостьОстаток|ИЗ| РегистрНакопления.ОстаткиНоменклатуры.Остатки(| &Момент,| Номенклатура = &Номенклатура| ) КАК Остатки|ГДЕ| Остатки.КоличествоОстаток > 0|УПОРЯДОЧИТЬ ПО| Остатки.Партия.Дата";Запрос.УстановитьПараметр("Момент", Дата);Запрос.УстановитьПараметр("Номенклатура",ТекСтрокаТовары.Номенклатура);ВыборкаОстатков = Запрос.Выполнить().Выбрать();Пока ВыборкаОстатков.Следующий() И ОсталосьСписать > 0 ЦиклЕсли ВыборкаОстатков.КоличествоОстаток <= 0 ТогдаПродолжить;КонецЕсли;КоличествоКСписанию = ОсталосьСписать;Если ВыборкаОстатков.КоличествоОстаток < КоличествоКСписанию ТогдаКоличествоКСписанию =ВыборкаОстатков.КоличествоОстаток;КонецЕсли;СтоимостьЕдиницы =ВыборкаОстатков.СтоимостьОстаток/ ВыборкаОстатков.КоличествоОстаток;СтоимостьКСписанию =СтоимостьЕдиницы * КоличествоКСписанию;Движение = Движения.ОстаткиНоменклатуры.Добавить();Движение.ВидДвижения =ВидДвиженияНакопления.Расход;Движение.Период = Дата;Движение.Номенклатура =ТекСтрокаТовары.Номенклатура;Движение.Партия =ВыборкаОстатков.Партия;Движение.Количество =КоличествоКСписанию;Движение.Стоимость =СтоимостьКСписанию;ОсталосьСписать =ОсталосьСписать - КоличествоКСписанию;КонецЦикла;Если ОсталосьСписать > 0 ТогдаОтказ = Истина;Сообщить("Недостаточно остатка товара: "+ Строка(ТекСтрокаТовары.Номенклатура));Возврат;КонецЕсли;КонецЦикла;КонецПроцедурыВ данном запросе каждая строка также оформлена с символом
|, как требуется для текста запроса 1С.## Что произойдет с услугами
Допустим, документ содержит:
### Табличная часть
Товары| Номенклатура | Количество |
|—|—:|
| Ручка | 1 |### Табличная часть
Услуги| Номенклатура | Количество |
|—|—:|
| Доставка | 1 |При проведении:
— по ручке создается движение
Расходв регистреОстаткиНоменклатуры;
— по услуге движение в регистре складских остатков не создается.Услуга может отражаться отдельно:
— в регистре затрат;
— в бухгалтерском регистре;
— в документе поступления услуг;
— в составе дополнительных расходов.Но складской остаток услуги уменьшать не нужно.
## Если регистр содержит склад
Если в регистре есть измерение
Склад, его также нужно заполнять в расходном движении:1С (Код)1Движение.Склад = Склад;И это условие нужно добавить в запрос остатков. Например:
1С (Код)1234567891011121314|ВЫБРАТЬ| Остатки.Партия КАК Партия,| Остатки.КоличествоОстаток КАК КоличествоОстаток,| Остатки.СтоимостьОстаток КАК СтоимостьОстаток|ИЗ| РегистрНакопления.ОстаткиНоменклатуры.Остатки(| &Момент,| Номенклатура = &Номенклатура| И Склад = &Склад| ) КАК Остатки|ГДЕ| Остатки.КоличествоОстаток > 0|УПОРЯДОЧИТЬ ПО| Остатки.Партия.ДатаИ параметр:
1С (Код)1Запрос.УстановитьПараметр("Склад", Склад);## Если в табличной части
Товарымогут находиться услугиЕсли услуги находятся не в отдельной табличной части, а вместе с товарами, тогда нужно проверять вид номенклатуры:
1С (Код)123456Если ТекСтрокаТовары.Номенклатура.ВидНоменклатуры =Перечисления.ВидыНоменклатуры.Услуга ТогдаПродолжить;КонецЕсли;Но если у вас действительно две отдельные табличные части, проверка не нужна. Достаточно обходить только:
1С (Код)1Для Каждого ТекСтрокаТовары Из Товары Цикли вообще не обращаться к табличной части
Услуги.Еще один важный момент: в расходном документе сумма строки обычно является продажной стоимостью. Для регистра остатков в поле
Стоимостьнужно записывать себестоимость, полученную из партии, а не сумму реализации из документа.Да, для формирования прихода этот код корректен, если выполняются условия:
— регистр
ОстаткиНоменклатурыимеет измеренияНоменклатураиПартия;
—Партияимеет тип, совместимый соСсылка;
— складской учет действительно не ведется;
— стоимость строки хранится в полеСумма;
— все строки табличной части являются товарами;
— партия определяется ссылкой на документ.Ваш код запишет приход по каждой строке документа:
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Если ТекСтрокаСписокНоменклатуры.Номенклатура.Услуга ТогдаПродолжить;КонецЕсли;Но это зависит от структуры конфигурации и условия задачи. Если в документе только товары, проверка не нужна.
В рамках указанных условий ваш код является корректным вариантом проведения приходной накладной.
23 октября 2026 в 15:57 в ответ на: Как организовать списание по FIFO без складского учёта в 1С? #38907При описанной структуре регистра:
— склад не используется;
— партия = ссылка на документПриходнаяНакладная;
— в одном документе две строки:
— ручка, 1 шт., 100 рублей;
— ручка, 1 шт., 150 рублей;
— в регистр записывается одна партия:
— количество 2;
— стоимость 250 рублей.В таком случае при списании одной ручки ее стоимость будет 125 рублей, а не 150 рублей.
Расчет будет таким:
1С (Код)1250 / 2 = 125 рублей## Почему FIFO здесь не выберет цену 150 рублей
FIFO работает не с отдельными строками документа, а с партиями, которые есть в регистре.
У вас в регистре фактически имеется одна партия:
1С (Код)123Партия = ПриходнаяНакладнаяКоличество = 2Стоимость = 250Внутри этой партии программа уже не видит два независимых слоя:
1С (Код)121 шт. по 1001 шт. по 150Она видит только:
1С (Код)12 шт. общей стоимостью 250Поэтому цена единицы этой партии:
1С (Код)1250 / 2 = 125При списании одной единицы:
1С (Код)12Количество списания = 1Стоимость списания = 125Остаток партии:
1С (Код)12Количество = 1Стоимость = 125То есть FIFO в данном случае сначала выберет эту партию как самую раннюю, но стоимость внутри выбранной партии будет рассчитана как средняя:
1С (Код)1Стоимость партии / Количество партии## Важное уточнение
Даже если в регистр записать два движения с одной и той же партией:
1С (Код)12Партия = ПриходнаяНакладная, Количество = 1, Стоимость = 100Партия = ПриходнаяНакладная, Количество = 1, Стоимость = 150это не создаст две полноценные партии для FIFO. Для регистра накопления это все равно один и тот же набор ключей измерений:
1С (Код)1Номенклатура + ПартияОстаток по ним будет агрегирован:
1С (Код)12Количество = 2Стоимость = 250И при последующем запросе остатка цена опять получится 125 рублей.
## Когда при FIFO списание будет по 100 рублей
Если нужно, чтобы первая ручка списывалась по 100 рублей, а вторая по 150 рублей, эти две ручки должны быть разными партиями.
Например:
1С (Код)123Партия 1 = ПриходнаяНакладная, строка 1Количество = 1Стоимость = 1001С (Код)123Партия 2 = ПриходнаяНакладная, строка 2Количество = 1Стоимость = 150Тогда FIFO сможет определить:
1. сначала списать партию стоимостью 100 рублей;
2. затем списать партию стоимостью 150 рублей.Но для этого реквизит
Партияне может быть только ссылкой на документ. Нужна более детальная идентификация партии, например:— отдельный справочник партий;
— уникальный идентификатор строки документа;
— составной ключ «документ + номер строки»;
— отдельный регистр партий, где каждая строка прихода получает собственную партию.Концептуально партия должна выглядеть так:
1С (Код)1Партия = ПриходнаяНакладная + НомерСтроки## Что делать на экзамене
Если в задании сказано, что:
1С (Код)1партия определяется ссылкой на документто обычно предполагается, что весь документ является одной партией.
Следовательно, если в одном документе одна и та же номенклатура указана по разным ценам, то для этой партии стоимость будет средней:
1С (Код)1(100 + 150) / 2 = 125 рублейПри списании одной ручки в этом случае нужно списать:
1С (Код)11 шт. × 125 рублей = 125 рублейFIFO будет работать между разными документами, например:
| Документ | Количество | Цена |
|—|—:|—:|
| Приходная накладная №1 | 10 | 100 |
| Приходная накладная №2 | 10 | 150 |Если списывается 1 ручка, будет выбрана партия из документа №1, и стоимость составит 100 рублей.
Если списывается 15 ручек:
1С (Код)12310 × 100 = 10005 × 150 = 750Итого = 1750Но FIFO не сможет разделить две ценовые строки, если они принадлежат одной партии, то есть одной ссылке на документ.
## Для вашей ситуации ответ такой
При партии, равной ссылке на документ:
1С (Код)12Регистр:Ручка, партия = ПриходнаяНакладная, количество = 2, сумма = 250При списании одной ручки:
1С (Код)12Количество = 1Стоимость = 125 рублейСтоимость 150 рублей получится только в том случае, если строка с ценой 150 будет отдельной партией и алгоритм FIFO дойдет до нее. При обычной модели «партия = документ» это невозможно.
23 октября 2026 в 15:47 в ответ на: Как объединить одинаковые товары в табличной части при проведении в 1С? #38905Нет. В типовой задаче экзамена «1С:Специалист по платформе» обычно не требуется изменять табличную часть приходной накладной при проведении, чтобы одинаковые строки физически объединялись в одну.
Это разные задачи:
1. Объединить строки самого документа:
1С (Код)12Карандаш, 1 шт., 100Карандаш, 2 шт., 100превратить в:
1С (Код)1Карандаш, 3 шт., 1002. Сформировать правильные движения по регистру:
1С (Код)123Карандаш, партия = приходная накладная,Количество = 3,Сумма = 300Для экзамена обычно требуется именно второй вариант.
## Как следует решать на экзамене
Табличную часть документа не изменяете. В обработчике проведения получаете данные запросом, сгруппировав строки:
1С (Код)12345678910|ВЫБРАТЬ| Товары.Номенклатура,| СУММА(Товары.Количество) КАК Количество,| СУММА(Товары.Сумма) КАК Сумма|ИЗ| Документ.ПриходнаяНакладная.Товары КАК Товары|ГДЕ| Товары.Ссылка = &Ссылка|СГРУППИРОВАТЬ ПО| Товары.НоменклатураЗатем по результату запроса формируете одно движение:
1С (Код)1234567Движение = Движения.ТоварыНаСкладах.Добавить();Движение.ВидДвижения = ВидДвиженияНакопления.Приход;Движение.Период = Дата;Движение.Номенклатура = Выборка.Номенклатура;Движение.Партия = Ссылка;Движение.Количество = Выборка.Количество;Движение.Сумма = Выборка.Сумма;В результате:
— в документе останутся две строки;
— в регистр будет записано одно движение по данной номенклатуре и партии;
— остаток будет3 шт.;
— сумма будет300 рублей.Для учета FIFO/LIFO этого достаточно, поскольку партия у вас определяется ссылкой на приходную накладную.
## Почему не стоит менять документ в
ПередЗаписьюПредыдущая схема с
ПередЗаписьютехнически возможна, но для экзамена она, скорее всего, избыточна и методически нежелательна.Проведение документа должно:
— проверить возможность проведения;
— сформировать движения;
— не менять неожиданно введенные пользователем данные.Если при проведении удалять строки из табличной части, возникают дополнительные вопросы:
— что произойдет при перепроведении;
— когда именно изменится документ;
— нужно ли объединять строки при обычной записи;
— как учитывать дополнительные реквизиты строки;
— что делать с разными ставками НДС, характеристиками, сериями и единицами измерения.Если в условии прямо не написано:
> при записи или проведении документа одинаковые строки табличной части должны быть объединены,
то реализовывать это не нужно.
## Когда объединение строк действительно требуется
Объединение самой табличной части нужно делать только если это прямо указано в задании, например:
> При записи документа строки с одинаковой номенклатурой и ценой должны быть объединены.
Или если в условии явно проверяется структура документа после записи.
Без такого требования достаточно, чтобы при проведении движения регистра имели правильные итоговые значения.
## Практический вывод для вашей задачи
В вашем случае на экзамене следует сделать так:
1С (Код)1234Табличную часть не изменять.При проведении сгруппировать строки запросом.Сформировать движения по сгруппированным данным.Партией указать ссылку на приходную накладную.То есть две строки:
1С (Код)12Карандаш, 1 шт., 100 рублейКарандаш, 2 шт., 200 рублеймогут остаться в документе, но в регистре должна появиться одна итоговая партия:
1С (Код)123Карандаш, партия = ПриходнаяНакладная,Количество = 3,Сумма = 300Именно это обычно проверяется в задаче по оперативному учету, а не визуальное объединение строк документа.
23 октября 2026 в 15:31 в ответ на: Как в 1С объединить строки в табличной части документа перед записью? #38903Теперь понятно. Вам нужно не только сформировать одно движение в регистре, а изменить табличную часть самого документа перед записью и проведением:
Было:
| Номенклатура | Количество | Цена | Сумма |
|—|—:|—:|—:|
| Карандаш | 1 | 100 | 100 |
| Карандаш | 2 | 100 | 200 |Должно стать:
| Номенклатура | Количество | Цена | Сумма |
|—|—:|—:|—:|
| Карандаш | 3 | 100 | 300 |Для этого объединение нужно выполнять в обработчике
ПередЗаписьюмодуля объекта документа, а не вОбработкаПроведения.## Код объединения строк
Предположим:
— документ называется
ПриходнаяНакладная;
— табличная часть называетсяТовары;
— реквизиты строк:Номенклатура,Количество,Цена,Сумма.В модуле объекта документа:
1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940414243444546Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)Если РежимЗаписи = РежимЗаписиДокумента.Проведение ТогдаДля ИндексТекущейСтроки = Товары.Количество() - 1 По 0 Шаг -1 ЦиклТекущаяСтрока = Товары[ИндексТекущейСтроки];ИндексСтрокиДляОбъединения = -1;Для ИндексСтроки = 0 По ИндексТекущейСтроки - 1 ЦиклСтрокаТабличнойЧасти = Товары[ИндексСтроки];Если СтрокаТабличнойЧасти.Номенклатура = ТекущаяСтрока.НоменклатураИ СтрокаТабличнойЧасти.Цена = ТекущаяСтрока.Цена ТогдаИндексСтрокиДляОбъединения = ИндексСтроки;Прервать;КонецЕсли;КонецЦикла;Если ИндексСтрокиДляОбъединения <> -1 ТогдаСтрокаТабличнойЧасти =Товары[ИндексСтрокиДляОбъединения];СтрокаТабличнойЧасти.Количество =СтрокаТабличнойЧасти.Количество+ ТекущаяСтрока.Количество;СтрокаТабличнойЧасти.Сумма =СтрокаТабличнойЧасти.Сумма+ ТекущаяСтрока.Сумма;Товары.Удалить(ТекущаяСтрока);КонецЕсли;КонецЦикла;КонецЕсли;КонецПроцедуры## Как работает этот код
Индексы перебираются с конца табличной части к началу:
1С (Код)1Для ИндексТекущейСтроки = Товары.Количество() - 1 По 0 Шаг -1 ЦиклЭто важно, потому что при удалении строки остальные индексы еще не просмотренных строк не нарушаются.
Для каждой строки ищется такая же строка среди предыдущих:
1С (Код)12Если СтрокаТабличнойЧасти.Номенклатура = ТекущаяСтрока.НоменклатураИ СтрокаТабличнойЧасти.Цена = ТекущаяСтрока.Цена ТогдаЕсли совпадение найдено:
1С (Код)12Количество = Количество1 + Количество2Сумма = Сумма1 + Сумма2После этого дублирующая строка удаляется:
1С (Код)1Товары.Удалить(ТекущаяСтрока);Поскольку процедура выполняется до записи документа, в базу уже попадет объединенная табличная часть. При этом
ОбработкаПроведениябудет работать с одной строкой.## Что будет при разных ценах
Если в документе:
| Номенклатура | Количество | Цена | Сумма |
|—|—:|—:|—:|
| Карандаш | 1 | 100 | 100 |
| Карандаш | 2 | 120 | 240 |условие не сработает, потому что цены разные:
1С (Код)1100 <> 120В документе останутся две строки. Это правильно, поскольку при разных ценах нельзя сохранить обе цены в одной строке.
Условие объединения в вашем случае:
1С (Код)12Номенклатура одинаковаяИ Цена одинаковаяТо есть:
1С (Код)12Если СтрокаТабличнойЧасти.Номенклатура = ТекущаяСтрока.НоменклатураИ СтрокаТабличнойЧасти.Цена = ТекущаяСтрока.Цена Тогда## Важный момент для экзамена
Если в табличной части есть только эти реквизиты:
1С (Код)1234НоменклатураКоличествоЦенаСуммато приведенного условия достаточно.
Но если есть дополнительные реквизиты, влияющие на смысл строки, их тоже нужно включить в условие. Например:
1С (Код)1234567ХарактеристикаНоменклатурыСерияНоменклатурыЕдиницаИзмеренияСтавкаНДССкладПроцентСкидкиСуммаСкидкиНапример, одинаковую номенклатуру с одинаковой ценой, но разными ставками НДС объединять нельзя:
1С (Код)123Если СтрокаТабличнойЧасти.Номенклатура = ТекущаяСтрока.НоменклатураИ СтрокаТабличнойЧасти.Цена = ТекущаяСтрока.ЦенаИ СтрокаТабличнойЧасти.СтавкаНДС = ТекущаяСтрока.СтавкаНДС ТогдаЕсли есть характеристика:
1С (Код)1234Если СтрокаТабличнойЧасти.Номенклатура = ТекущаяСтрока.НоменклатураИ СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры =ТекущаяСтрока.ХарактеристикаНоменклатурыИ СтрокаТабличнойЧасти.Цена = ТекущаяСтрока.Цена ТогдаПринцип такой: в условие включаются все реквизиты, которые должны быть одинаковыми у объединяемых строк.
## Почему лучше делать в
ПередЗаписью, а не вОбработкаПроведенияОбработкаПроведенияпредназначена прежде всего для формирования движений по регистрам. Если там просто сгруппировать строки запросом, то в регистре действительно будет одно движение, но сам документ может остаться с двумя строками.В
ПередЗаписьютабличная часть изменяется до сохранения документа:1С (Код)1234567891011Пользователь нажал «Провести»↓Сработал ПередЗаписью↓Дубли объединены↓Документ записан уже с одной строкой↓Выполнено проведение↓Сформированы движенияПоэтому для вашей формулировки задачи правильное место реализации, это:
1С (Код)12Модуль объекта документаПроцедура ПередЗаписью## Если объединять нужно при любой записи
Если по условию дубли должны исчезать не только при проведении, но и при обычной записи документа, проверку режима записи можно убрать:
1С (Код)1234567891011121314151617181920212223242526272829303132Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)Для ИндексТекущейСтроки = Товары.Количество() - 1 По 0 Шаг -1 ЦиклТекущаяСтрока = Товары[ИндексТекущейСтроки];Для ИндексСтроки = 0 По ИндексТекущейСтроки - 1 ЦиклСтрокаТабличнойЧасти = Товары[ИндексСтроки];Если СтрокаТабличнойЧасти.Номенклатура = ТекущаяСтрока.НоменклатураИ СтрокаТабличнойЧасти.Цена = ТекущаяСтрока.Цена ТогдаСтрокаТабличнойЧасти.Количество =СтрокаТабличнойЧасти.Количество+ ТекущаяСтрока.Количество;СтрокаТабличнойЧасти.Сумма =СтрокаТабличнойЧасти.Сумма+ ТекущаяСтрока.Сумма;Товары.Удалить(ТекущаяСтрока);Прервать;КонецЕсли;КонецЦикла;КонецЦикла;КонецПроцедуры## Еще один вариант для экзамена
Если проверяющий ожидает, что объединение выполняется именно в обработчике проведения, можно сначала построить сгруппированную таблицу значений, а затем сформировать движения по ней. Но в этом случае изменится только набор движений, а не табличная часть документа.
Для изменения самого документа используйте именно
ПередЗаписью.В вашей конкретной задаче условие объединения должно быть:
1С (Код)1Номенклатура + ЦенаА действие:
1С (Код)123Количество сложитьСумму сложитьВторую строку удалитьДля примера с карандашами результат будет:
1С (Код)1Карандаш, 3 шт., цена 100, сумма 300При этом для FIFO/LIFO партия по-прежнему будет ссылкой на всю приходную накладную.
23 октября 2026 в 15:27 в ответ на: Как объединить одинаковую номенклатуру с одинаковыми ценами в приходной накладно #38901В вашей постановке задачи партия определяется документом прихода, а складского измерения нет:
1С (Код)1234567Измерение регистра:НоменклатураПартияРесурсы:КоличествоСуммаПри проведении приходной накладной:
1С (Код)1Движение.Партия = Ссылка;Поэтому одинаковую номенклатуру в рамках одного документа нужно схлопывать по номенклатуре, а количество и сумму суммировать. Цена в регистр обычно не записывается, она рассчитывается как:
1С (Код)1Цена партии = Сумма партии / Количество партии## Правильный вариант для вашей задачи
Запрос по табличной части:
1С (Код)1234567891011121314151617181920212223242526272829303132Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Товары.Номенклатура,| СУММА(Товары.Количество) КАК Количество,| СУММА(Товары.Сумма) КАК Сумма|ИЗ| Документ.ПриходнаяНакладная.Товары КАК Товары|ГДЕ| Товары.Ссылка = &Ссылка|СГРУППИРОВАТЬ ПО| Товары.Номенклатура";Запрос.УстановитьПараметр("Ссылка", Ссылка);Выборка = Запрос.Выполнить().Выбрать();Пока Выборка.Следующий() ЦиклДвижение = Движения.ОстаткиНоменклатуры.Добавить();Движение.ВидДвижения =ВидДвиженияНакопления.Приход;Движение.Период = Дата;Движение.Номенклатура = Выборка.Номенклатура;Движение.Партия = Ссылка;Движение.Количество = Выборка.Количество;Движение.Сумма = Выборка.Сумма;КонецЦикла;Полностью процедура будет выглядеть примерно так:
1С (Код)1234567891011121314151617181920212223242526272829303132333435363738Процедура ОбработкаПроведения(Отказ, РежимПроведения)Движения.ОстаткиНоменклатуры.Записывать = Истина;Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Товары.Номенклатура,| СУММА(Товары.Количество) КАК Количество,| СУММА(Товары.Сумма) КАК Сумма|ИЗ| Документ.ПриходнаяНакладная.Товары КАК Товары|ГДЕ| Товары.Ссылка = &Ссылка|СГРУППИРОВАТЬ ПО| Товары.Номенклатура";Запрос.УстановитьПараметр("Ссылка", Ссылка);Выборка = Запрос.Выполнить().Выбрать();Пока Выборка.Следующий() ЦиклДвижение = Движения.ОстаткиНоменклатуры.Добавить();Движение.ВидДвижения =ВидДвиженияНакопления.Приход;Движение.Период = Дата;Движение.Номенклатура = Выборка.Номенклатура;Движение.Партия = Ссылка;Движение.Количество = Выборка.Количество;Движение.Сумма = Выборка.Сумма;КонецЦикла;КонецПроцедуры## Что получится
Исходная табличная часть:
| Номенклатура | Количество | Цена | Сумма |
|—|—:|—:|—:|
| Товар 1 | 10 | 100 | 1 000 |
| Товар 1 | 5 | 100 | 500 |
| Товар 2 | 3 | 200 | 600 |После запроса будут сформированы две записи:
| Номенклатура | Партия | Количество | Сумма |
|—|—|—:|—:|
| Товар 1 | Приходная накладная | 15 | 1 500 |
| Товар 2 | Приходная накладная | 3 | 600 |Для
Товар 1цена партии останется 100 рублей:1С (Код)11500 / 15 = 100—
# Что делать, если в одном документе цена разная
Например:
| Номенклатура | Количество | Цена | Сумма |
|—|—:|—:|—:|
| Товар 1 | 10 | 100 | 1 000 |
| Товар 1 | 5 | 120 | 600 |При вашей модели это все равно одна партия, потому что партия равна ссылке на приходную накладную.
Значит, если регистр содержит только:
1С (Код)12НоменклатураПартиято разделить в регистре эти две цены невозможно. В регистре будет один остаток:
1С (Код)123Количество = 15Сумма = 1 600Средняя цена партии = 1 600 / 15 = 106,6667Это не ошибка. Это означает, что внутри одной партии учитывается средняя стоимость.
В таком случае запрос выше остается правильным:
1С (Код)12|СУММА(Товары.Количество) КАК Количество,|СУММА(Товары.Сумма) КАК СуммаНельзя при разных ценах суммировать только количество и брать цену первой строки.
Неправильно:
1С (Код)123Количество = 15Цена = 100Сумма = 1 500Правильно:
1С (Код)123Количество = 15Сумма = 1 600Цена партии = 106,6667## Почему нельзя группировать по цене
Иногда пытаются написать:
1С (Код)123|СГРУППИРОВАТЬ ПО| Товары.Номенклатура,| Товары.ЦенаЭто даст две строки при разных ценах:
| Номенклатура | Цена | Количество | Сумма |
|—|—:|—:|—:|
| Товар 1 | 100 | 10 | 1 000 |
| Товар 1 | 120 | 5 | 600 |Но затем обе строки будут записаны с одинаковыми измерениями:
1С (Код)12Номенклатура = Товар 1Партия = Один и тот же документЦена в измерения регистра не входит. Поэтому с точки зрения регистра это не две партии, а одна партия. Вы просто сформируете два движения с одинаковым набором измерений. В итогах регистра они все равно будут объединены:
1С (Код)12Количество = 15Сумма = 1 600Если задача требует, чтобы в регистре физически были разные ценовые слои, тогда измерения должны быть другими, например:
1С (Код)123НоменклатураПартияНомерСтрокиПартииНо это уже нарушает исходное условие «каждый документ является партией» в чистом виде. Тогда партией фактически становится:
1С (Код)1Документ + строка документа—
# Как это связано с FIFO и LIFO
При вашей модели FIFO/LIFO выбирает документы-партии, а не строки внутри документа.
Например, есть поступления:
| Документ | Номенклатура | Количество | Сумма |
|—|—|—:|—:|
| Приходная накладная №1 | Товар 1 | 15 | 1 600 |
| Приходная накладная №2 | Товар 1 | 20 | 2 400 |Для FIFO сначала списывается партия:
1С (Код)1Приходная накладная №1Для LIFO сначала:
1С (Код)1Приходная накладная №2Цена внутри конкретного документа уже является средней стоимостью партии:
1С (Код)12Себестоимость единицы партии =Сумма партии / Количество партииПоэтому в расходной накладной при списании из партии нужно рассчитывать стоимость пропорционально:
1С (Код)12СтоимостьСписания =КоличествоСписания * СуммаПартии / КоличествоПартииЕсли партия №1 содержит:
1С (Код)12Количество = 15Сумма = 1 600то стоимость единицы:
1С (Код)1106,6667При списании 3 единиц:
1С (Код)13 * 106,6667 = 320В реальном коде лучше считать стоимость без преждевременного округления:
1С (Код)12345678910Если ВыборкаПартии.КоличествоОстаток <> 0 ТогдаСтоимостьЕдиницы =ВыборкаПартии.СуммаОстаток/ ВыборкаПартии.КоличествоОстаток;ИначеСтоимостьЕдиницы = 0;КонецЕсли;СтоимостьСписания =КоличествоИзПартии * СтоимостьЕдиницы;## Важное замечание по полю
СуммаЕсли в табличной части сумма рассчитывается как:
1С (Код)1Количество * Ценато в запросе можно использовать
Товары.Сумма.Если поля
Суммав табличной части нет, сумму можно рассчитать в запросе:1С (Код)1234567891011Запрос.Текст ="ВЫБРАТЬ| Товары.Номенклатура,| СУММА(Товары.Количество) КАК Количество,| СУММА(Товары.Количество * Товары.Цена) КАК Сумма|ИЗ| Документ.ПриходнаяНакладная.Товары КАК Товары|ГДЕ| Товары.Ссылка = &Ссылка|СГРУППИРОВАТЬ ПО| Товары.Номенклатура";## Ответ именно для вашей экзаменационной задачи
При условии:
1С (Код)1234складского учета нет;каждая приходная накладная является партией;партия хранится ссылкой на документ;FIFO/LIFO работает по документам-партиям;делайте так:
1. В запросе группируйте табличную часть по
Номенклатура.
2. Количество объединяйте черезСУММА(Количество).
3. Сумму объединяйте черезСУММА(Сумма).
4. В движение записывайте одну партию, равнуюСсылкадокумента.
5. Не включайте цену вСГРУППИРОВАТЬ ПО, если хотите одну запись на номенклатуру в партии.
6. Если цены внутри документа различаются, партия получает среднюю стоимость через общую сумму и общее количество.
7. Для FIFO/LIFO при списании выбирайте документы-партии, а не строки приходной накладной.То есть ключевой запрос на экзамене будет именно таким:
1С (Код)12345678910|ВЫБРАТЬ| Товары.Номенклатура,| СУММА(Товары.Количество) КАК Количество,| СУММА(Товары.Сумма) КАК Сумма|ИЗ| Документ.ПриходнаяНакладная.Товары КАК Товары|ГДЕ| Товары.Ссылка = &Ссылка|СГРУППИРОВАТЬ ПО| Товары.НоменклатураВ данной модели это и есть корректное «схлопывание» одинаковой номенклатуры в рамках одной партии.
23 октября 2026 в 15:19 в ответ на: Как объединить одинаковые товары в приходной накладной при разных ценах на экзам #38899Да, на экзамене это делается через группировку строк табличной части перед формированием движений. Но сначала нужно определить, что именно должно считаться одинаковой записью.
## 1. Что значит «схлопнуть записи»
Допустим, в приходной накладной есть строки:
| Номенклатура | Количество | Цена | Сумма |
|—|—:|—:|—:|
| Товар 1 | 10 | 100 | 1 000 |
| Товар 1 | 5 | 100 | 500 |Если в регистре измерения:
1С (Код)12СкладНоменклатураа ресурсы:
1С (Код)12КоличествоСуммато эти строки можно объединить в одно движение:
1С (Код)1Товар 1, количество 15, сумма 1 500Если же цена разная:
| Номенклатура | Количество | Цена | Сумма |
|—|—:|—:|—:|
| Товар 1 | 10 | 100 | 1 000 |
| Товар 1 | 5 | 120 | 600 |то дальнейшие действия зависят от методики учета.
—
# 2. Если цена не участвует в определении партии
Если вам не нужно вести FIFO/LIFO и цена является только расчетным показателем, строки можно полностью объединить по номенклатуре.
В этом случае:
1С (Код)12Количество = 10 + 5 = 15Сумма = 1 000 + 600 = 1 600Средняя учетная цена будет:
1С (Код)11 600 / 15 = 106,6667То есть нельзя просто взять цену первой строки. Нужно складывать отдельно количество и сумму.
На экзамене это реализуется запросом с
СУММА()иСГРУППИРОВАТЬ ПО.## Пример запроса для объединения строк
1С (Код)123456789101112|ВЫБРАТЬ| Товары.Номенклатура,| Товары.Склад,| СУММА(Товары.Количество) КАК Количество,| СУММА(Товары.Сумма) КАК Сумма|ИЗ| Документ.ПриходнаяНакладная.Товары КАК Товары|ГДЕ| Товары.Ссылка = &Ссылка|СГРУППИРОВАТЬ ПО| Товары.Номенклатура,| Товары.СкладВ результате для одной номенклатуры и одного склада будет одна строка независимо от количества строк в документе.
## Формирование движений
1С (Код)12345678910111213141516171819202122232425262728293031Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Товары.Номенклатура,| Товары.Склад,| СУММА(Товары.Количество) КАК Количество,| СУММА(Товары.Сумма) КАК Сумма|ИЗ| Документ.ПриходнаяНакладная.Товары КАК Товары|ГДЕ| Товары.Ссылка = &Ссылка|СГРУППИРОВАТЬ ПО| Товары.Номенклатура,| Товары.Склад";Запрос.УстановитьПараметр("Ссылка", Ссылка);Выборка = Запрос.Выполнить().Выбрать();Пока Выборка.Следующий() ЦиклДвижение = Движения.ТоварыНаСкладах.ДобавитьПриход();Движение.Период = Дата;Движение.Номенклатура = Выборка.Номенклатура;Движение.Склад = Выборка.Склад;Движение.Количество = Выборка.Количество;Движение.Сумма = Выборка.Сумма;КонецЦикла;Перед этим в процедуре проведения необходимо включить запись движений:
1С (Код)1Движения.ТоварыНаСкладах.Записывать = Истина;Полная структура процедуры:
1С (Код)12345678910111213141516171819202122232425262728293031323334353637Процедура ОбработкаПроведения(Отказ, РежимПроведения)Движения.ТоварыНаСкладах.Записывать = Истина;Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Товары.Номенклатура,| Товары.Склад,| СУММА(Товары.Количество) КАК Количество,| СУММА(Товары.Сумма) КАК Сумма|ИЗ| Документ.ПриходнаяНакладная.Товары КАК Товары|ГДЕ| Товары.Ссылка = &Ссылка|СГРУППИРОВАТЬ ПО| Товары.Номенклатура,| Товары.Склад";Запрос.УстановитьПараметр("Ссылка", Ссылка);Выборка = Запрос.Выполнить().Выбрать();Пока Выборка.Следующий() ЦиклДвижение = Движения.ТоварыНаСкладах.ДобавитьПриход();Движение.Период = Дата;Движение.Номенклатура = Выборка.Номенклатура;Движение.Склад = Выборка.Склад;Движение.Количество = Выборка.Количество;Движение.Сумма = Выборка.Сумма;КонецЦикла;КонецПроцедурыНазвания реквизитов нужно заменить на названия из вашей конфигурации.
—
# 3. Если цена разная и используется FIFO или LIFO
В этом случае объединять разные цены нельзя.
Причина простая: разные цены означают разные учетные слои.
Например, поступило:
1С (Код)1210 штук по 100 рублей5 штук по 120 рублейПри FIFO продажа 12 штук должна списать:
1С (Код)1210 штук по 100 рублей2 штуки по 120 рублейПри LIFO продажа 12 штук должна списать:
1С (Код)125 штук по 120 рублей7 штук по 100 рублейЕсли при поступлении объединить все в одну строку:
1С (Код)115 штук, сумма 1 600 рублейто информация о двух партиях будет потеряна. После этого корректно реализовать FIFO и LIFO уже невозможно.
Поэтому при использовании FIFO/LIFO разные цены должны оставаться отдельными партиями.
## Правильная структура регистра для FIFO/LIFO
Например, регистр накопления
ТоварыНаСкладах:### Измерения
1С (Код)123СкладНоменклатураПартия### Ресурсы
1С (Код)12КоличествоСуммаПартия должна однозначно определять слой товара.
Можно использовать:
— документ поступления как партию, если в одном документе одна цена на товар;
— ссылку на документ плюс номер строки;
— отдельный справочник партий;
— составной идентификатор партии.На экзамене часто удобно использовать отдельную партию для каждой строки поступления. Иначе две строки одного документа с разными ценами могут попасть в одну и ту же партию.
—
# 4. Почему одного документа в качестве партии может быть недостаточно
Предположим, в одной приходной накладной есть две строки:
| Номер строки | Номенклатура | Количество | Цена |
|—:|—|—:|—:|
| 1 | Товар 1 | 10 | 100 |
| 2 | Товар 1 | 5 | 120 |Если в качестве измерения
Партиязаписывать только ссылку на приходную накладную, у обеих строк будет одинаковая партия:1С (Код)1Партия = ПриходнаяНакладная00001Тогда регистр не сможет различить цены 100 и 120.
Есть несколько решений.
## Вариант 1. Добавить номер строки как измерение
В регистр добавляются:
1С (Код)12ПартияНомерСтрокиПартииПри проведении:
1С (Код)12Движение.Партия = Ссылка;Движение.НомерСтрокиПартии = СтрокаТовара.НомерСтроки;Тогда партии будут различаться:
1С (Код)12ПриходнаяНакладная00001, строка 1ПриходнаяНакладная00001, строка 2Это рабочий вариант для экзамена, если задача разрешает такую структуру.
## Вариант 2. Создать отдельный справочник партий
Например, справочник
ПартииТоваровс реквизитами:1С (Код)1234ДокументПоступленияНомерСтрокиДатаПоступленияЦенаВ регистр записывается ссылка на элемент справочника
ПартииТоваров.Это более полноценное решение, но оно требует дополнительной логики создания партий.
## Вариант 3. Использовать составной ключ партии
Если в задаче отдельный справочник не нужен, можно логически считать партией сочетание:
1С (Код)1ДокументПоступления + НомерСтрокиФизически составной ссылочный реквизит в стандартном регистре напрямую не хранится, поэтому обычно используют отдельное измерение номера строки или отдельный справочник партий.
—
# 5. Как группировать приход при FIFO/LIFO
При FIFO/LIFO нужно группировать не только по номенклатуре и складу, а по полному набору измерений регистра.
Например:
1С (Код)1234567891011121314|ВЫБРАТЬ| Товары.Номенклатура,| Товары.Склад,| Товары.НомерСтроки,| СУММА(Товары.Количество) КАК Количество,| СУММА(Товары.Сумма) КАК Сумма|ИЗ| Документ.ПриходнаяНакладная.Товары КАК Товары|ГДЕ| Товары.Ссылка = &Ссылка|СГРУППИРОВАТЬ ПО| Товары.Номенклатура,| Товары.Склад,| Товары.НомерСтрокиЕсли каждая строка документа является отдельной партией, то фактически каждая строка останется отдельной записью. Это правильно, если цены разные.
Если две строки имеют одну и ту же номенклатуру, склад и одну и ту же партию, их можно объединить:
1С (Код)1234|СГРУППИРОВАТЬ ПО| Товары.Номенклатура,| Товары.Склад,| Товары.ПартияЦена при этом обычно не должна быть отдельным измерением регистра. Ее лучше хранить через сумму партии:
1С (Код)12Количество партииСумма партииЦена рассчитывается:
1С (Код)1Цена = Сумма / КоличествоНо если цена определяет партию, она должна участвовать в логике формирования партии или быть отдельным реквизитом партии.
—
# 6. Важное правило по цене
## Цена одинаковая
Строки можно объединить, если совпадают все измерения регистра:
1С (Код)1234567НоменклатураСкладПартияОрганизацияХарактеристикаСерияНазначениеКонкретный состав зависит от вашей задачи.
Например:
1С (Код)1210 штук по 1005 штук по 100можно заменить на:
1С (Код)115 штук по 100## Цена разная, FIFO/LIFO не используется
Можно объединить:
1С (Код)1210 по 1005 по 120в:
1С (Код)1215 штуксумма 1 600Но цена после объединения будет средней. Если нужно сохранить исходные цены, одной записи будет недостаточно.
## Цена разная, FIFO/LIFO используется
Объединять нельзя. Нужно оставить разные партии:
1С (Код)12Партия 1: 10 штук, сумма 1 000Партия 2: 5 штук, сумма 600Именно это нужно для правильного последующего списания.
—
# 7. Что лучше сделать на экзамене
Если задача просто про приход и остатки, без FIFO/LIFO, используйте запрос с группировкой:
1С (Код)123|СУММА(Количество)|СУММА(Сумма)|СГРУППИРОВАТЬ ПО Номенклатура, СкладЕсли задача содержит FIFO или LIFO:
1. Не группируйте разные цены в одну партию.
2. Добавьте в регистр измерение партии.
3. Обеспечьте уникальность партии для разных строк с разными ценами.
4. В приходе делайте отдельное движение по каждой партии.
5. В расходе получайте остатки партий с сортировкой по дате партии.
6. Для FIFO используйте сортировку по возрастанию.
7. Для LIFO используйте сортировку по убыванию.
8. Количество и сумму списывайте пропорционально выбранной партии.Если требуется именно убрать дубли движений при одинаковой цене, группируйте строки по всем измерениям регистра и суммируйте ресурсы:
1С (Код)12|СУММА(Товары.Количество) КАК Количество,|СУММА(Товары.Сумма) КАК СуммаА если цена различается и партия должна сохраняться, цена не должна использоваться для механического объединения строк. В этом случае разделяйте партии, иначе FIFO/LIFO будет работать неправильно.
23 октября 2026 в 13:31 в ответ на: Как разместить весь код проведения документа в процедуре «обработка проведения»? #38897Да. Вся логика проведения документа может находиться в процедуре объекта документа:
1С (Код)12345678910Процедура ОбработкаПроведения(Отказ, РежимПроведения)// Здесь:// 1. Получаем остатки партий.// 2. Определяем порядок FIFO или LIFO.// 3. Списываем количество по партиям.// 4. Формируем движения регистра.// 5. Проверяем, хватило ли товара.КонецПроцедурыДля экзамена это нормальный вариант. Главное, чтобы код находился в модуле объекта документа, а не в модуле формы.
## Минимальный каркас процедуры
Например, документ называется
РасходнаяНакладная, а регистр накопления называетсяТоварыНаСкладах.1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152Процедура ОбработкаПроведения(Отказ, РежимПроведения)Движения.ТоварыНаСкладах.Записывать = Истина;МетодСписания = Константы.МетодСписания.Получить();Если МетодСписания = Перечисления.МетодыСписания.ФИФО ТогдаНаправлениеСписания = "ВОЗР";ИначеЕсли МетодСписания = Перечисления.МетодыСписания.ЛИФО ТогдаНаправлениеСписания = "УБЫВ";ИначеСообщить("Не указан метод списания товаров");Отказ = Истина;Возврат;КонецЕсли;Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Остатки.Номенклатура,| Остатки.Склад,| Остатки.Партия,| Остатки.КоличествоОстаток|ИЗ| РегистрНакопления.ТоварыНаСкладах.Остатки(| &Момент,| Номенклатура В| (ВЫБРАТЬ| Товары.Номенклатура| ИЗ| Документ.РасходнаяНакладная.Товары КАК Товары| ГДЕ| Товары.Ссылка = &Ссылка)| И Склад = &Склад| ) КАК Остатки|ГДЕ| Остатки.КоличествоОстаток > 0|УПОРЯДОЧИТЬ ПО| Остатки.Партия.Дата " + НаправлениеСписания + ",| Остатки.Партия " + НаправлениеСписания;Запрос.УстановитьПараметр("Момент", Дата);Запрос.УстановитьПараметр("Ссылка", Ссылка);Запрос.УстановитьПараметр("Склад", Склад);РезультатЗапроса = Запрос.Выполнить();// Дальше выполняется списание по строкам документа// и подбор партий в нужном порядке.КонецПроцедурыОднако в этом примере есть важный нюанс: конкретное выражение сортировки по
Партия.Датазависит от того, чем является реквизитПартияв вашей конфигурации.Если
Партияявляется документом партии, сортировка может быть такой:1С (Код)123|УПОРЯДОЧИТЬ ПО| Остатки.Партия.Дата НАПРАВЛЕНИЕ_СПИСАНИЯ,| Остатки.Партия НАПРАВЛЕНИЕ_СПИСАНИЯЕсли в регистре есть отдельный реквизит
ДатаПартии, лучше сортировать по нему:1С (Код)123|УПОРЯДОЧИТЬ ПО| Остатки.ДатаПартии НАПРАВЛЕНИЕ_СПИСАНИЯ,| Остатки.Регистратор НАПРАВЛЕНИЕ_СПИСАНИЯ## Как правильно реализовать замену направления
Я бы не заменял в запросе все вхождения
"УБЫВ". Лучше использовать отдельный маркер:1С (Код)1234567891011Если МетодСписания = Перечисления.МетодыСписания.ФИФО ТогдаНаправлениеСписания = "ВОЗР";ИначеЕсли МетодСписания = Перечисления.МетодыСписания.ЛИФО ТогдаНаправлениеСписания = "УБЫВ";КонецЕсли;Запрос.Текст = СтрЗаменить(Запрос.Текст,"НАПРАВЛЕНИЕ_СПИСАНИЯ",НаправлениеСписания);Сам запрос:
1С (Код)12345678910111213141516Запрос.Текст ="ВЫБРАТЬ| Остатки.Номенклатура,| Остатки.Партия,| Остатки.КоличествоОстаток|ИЗ| РегистрНакопления.ТоварыНаСкладах.Остатки(| &Момент,| Номенклатура = &Номенклатура| И Склад = &Склад| ) КАК Остатки|ГДЕ| Остатки.КоличествоОстаток > 0|УПОРЯДОЧИТЬ ПО| Остатки.Партия.Дата НАПРАВЛЕНИЕ_СПИСАНИЯ,| Остатки.Регистратор НАПРАВЛЕНИЕ_СПИСАНИЯ";После этого:
1С (Код)12345Запрос.Текст = СтрЗаменить(Запрос.Текст,"НАПРАВЛЕНИЕ_СПИСАНИЯ",НаправлениеСписания);## Но одного запроса недостаточно
В процедуре проведения должен быть цикл, который списывает количество из партий.
Упрощенный пример:
1С (Код)1234567891011121314151617181920212223242526272829КоличествоКСписанию = СтрокаТовара.Количество;Пока Выборка.Следующий() И КоличествоКСписанию > 0 ЦиклКоличествоИзПартии = Мин(КоличествоКСписанию,Выборка.КоличествоОстаток);Движение = Движения.ТоварыНаСкладах.Добавить();Движение.Период = Дата;Движение.ВидДвижения = ВидДвиженияНакопления.Расход;Движение.Номенклатура = СтрокаТовара.Номенклатура;Движение.Склад = Склад;Движение.Партия = Выборка.Партия;Движение.Количество = КоличествоИзПартии;КоличествоКСписанию = КоличествоКСписанию - КоличествоИзПартии;КонецЦикла;Если КоличествоКСписанию > 0 ТогдаСообщить("Недостаточно товара " + СтрокаТовара.Номенклатура);Отказ = Истина;Возврат;КонецЕсли;Обычно этот код помещают внутрь цикла по табличной части документа:
1С (Код)1234567Для Каждого СтрокаТовара Из Товары Цикл// Здесь запрос остатков по конкретной номенклатуре.// Здесь выбор партий FIFO или LIFO.// Здесь формирование движений расхода.КонецЦикла;Но с точки зрения производительности лучше не выполнять отдельный запрос для каждой строки документа. На экзамене такой вариант может быть принят, если объем задачи небольшой, но правильнее получить остатки одним запросом сразу по всем товарам, а затем сгруппировать выборку по номенклатуре.
## Вариант структуры процедуры для экзамена
Практически процедура может выглядеть так:
1С (Код)123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108Процедура ОбработкаПроведения(Отказ, РежимПроведения)Движения.ТоварыНаСкладах.Записывать = Истина;МетодСписания = Константы.МетодСписания.Получить();Если МетодСписания = Перечисления.МетодыСписания.ФИФО ТогдаНаправлениеСписания = "ВОЗР";ИначеЕсли МетодСписания = Перечисления.МетодыСписания.ЛИФО ТогдаНаправлениеСписания = "УБЫВ";ИначеОтказ = Истина;Сообщить("Не выбран метод списания");Возврат;КонецЕсли;Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Остатки.Номенклатура,| Остатки.Склад,| Остатки.Партия,| Остатки.КоличествоОстаток|ИЗ| РегистрНакопления.ТоварыНаСкладах.Остатки(| &Момент,| Склад = &Склад| ) КАК Остатки|ГДЕ| Остатки.КоличествоОстаток > 0|УПОРЯДОЧИТЬ ПО| Остатки.Номенклатура,| Остатки.Партия.Дата НАПРАВЛЕНИЕ_СПИСАНИЯ,| Остатки.Регистратор НАПРАВЛЕНИЕ_СПИСАНИЯ";Запрос.Текст = СтрЗаменить(Запрос.Текст,"НАПРАВЛЕНИЕ_СПИСАНИЯ",НаправлениеСписания);Запрос.УстановитьПараметр("Момент", Дата);Запрос.УстановитьПараметр("Склад", Склад);РезультатЗапроса = Запрос.Выполнить();ВыборкаНоменклатура =РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Номенклатура");Для Каждого СтрокаТовара Из Товары ЦиклВыборкаНоменклатура.Сбросить();Пока ВыборкаНоменклатура.Следующий() ЦиклЕсли ВыборкаНоменклатура.Номенклатура<> СтрокаТовара.Номенклатура ТогдаПродолжить;КонецЕсли;ОсталосьСписать = СтрокаТовара.Количество;ВыборкаПартии = ВыборкаНоменклатура.Выбрать();Пока ВыборкаПартии.Следующий()И ОсталосьСписать > 0 ЦиклКоличествоИзПартии = Мин(ОсталосьСписать,ВыборкаПартии.КоличествоОстаток);Движение = Движения.ТоварыНаСкладах.Добавить();Движение.Период = Дата;Движение.ВидДвижения =ВидДвиженияНакопления.Расход;Движение.Номенклатура =СтрокаТовара.Номенклатура;Движение.Склад = Склад;Движение.Партия = ВыборкаПартии.Партия;Движение.Количество = КоличествоИзПартии;ОсталосьСписать =ОсталосьСписать - КоличествоИзПартии;КонецЦикла;Если ОсталосьСписать > 0 ТогдаСообщить("Недостаточно товара: "+ СтрокаТовара.Номенклатура);Отказ = Истина;Возврат;КонецЕсли;Прервать;КонецЦикла;КонецЦикла;КонецПроцедурыЭтот код показывает идею, но точный вариант зависит от структуры вашего регистра и документа.
## Что обязательно помнить на экзамене
### 1. Процедура должна быть в модуле объекта
Правильно:
1С (Код)1Документ → Модуль объекта → ОбработкаПроведенияНеправильно размещать эту логику в:
— модуле формы;
— обработчике команды формы;
— процедуреПриЗаписиформы;
— клиентском коде.Проведение и движения должны формироваться на сервере в модуле объекта документа.
### 2. Не нужно вручную запускать транзакцию
В
ОбработкаПроведенияобычно не пишут:1С (Код)12НачатьТранзакцию();ЗафиксироватьТранзакцию();Проведение документа выполняется платформой в своей транзакции. Если установить:
1С (Код)1Отказ = Истина;движения документа записаны не будут.
### 3. Движения регистра должны быть включены
Перед добавлением движений:
1С (Код)1Движения.ТоварыНаСкладах.Записывать = Истина;Если этого не сделать, движения могут не записаться.
### 4. Проверяйте остаток после цикла
Недостаточно просто списать доступные остатки. Обязательно нужно проверить:
1С (Код)1234Если ОсталосьСписать > 0 ТогдаОтказ = Истина;Возврат;КонецЕсли;Иначе документ может провести частичное списание.
### 5. FIFO и LIFO меняют только порядок партий
Вот эта часть действительно может отличаться буквально на одну переменную:
1С (Код)12345Если МетодСписания = Перечисления.МетодыСписания.ФИФО ТогдаНаправлениеСписания = "ВОЗР";ИначеНаправлениеСписания = "УБЫВ";КонецЕсли;Но весь остальной алгоритм должен быть общим:
1С (Код)1получить остатки → отсортировать партии → списать по очереди → проверить остатокНа экзамене это как раз хороший подход: не делать две копии алгоритма, а менять только направление сортировки.
23 октября 2026 в 13:28 в ответ на: Как правильно реализовать методики списания FIFO и LIFO в 1С? #38895Да, сам принцип правильный: FIFO и LIFO отличаются порядком выбора партий. Но ваш код работает только при определенных условиях и сам по себе не реализует списание. Он лишь меняет порядок сортировки в тексте запроса.
## Какой порядок нужен
— FIFO: сначала списываются самые старые партии.
— LIFO: сначала списываются самые новые партии.Например:
1С (Код)123|УПОРЯДОЧИТЬ ПО| Остатки.Период ВОЗР,| Остатки.Регистратор ВОЗРЭто FIFO.
1С (Код)123|УПОРЯДОЧИТЬ ПО| Остатки.Период УБЫВ,| Остатки.Регистратор УБЫВЭто LIFO.
Если в исходном запросе стоит:
1С (Код)123|УПОРЯДОЧИТЬ ПО| Остатки.Период УБЫВ,| Остатки.Регистратор УБЫВто ваш код:
1С (Код)123Если МетодСписания = Перечисления.МетодыСписания.ФИФО ТогдаЗапрос.Текст = СтрЗаменить(Запрос.Текст, "УБЫВ", "ВОЗР");КонецЕсли;действительно поменяет LIFO на FIFO.
Но в текущем виде это не самый надежный вариант.
## Что не так с
СтрЗаменитьВаш код заменит все вхождения
УБЫВв тексте запроса:1С (Код)1Запрос.Текст = СтрЗаменить(Запрос.Текст, "УБЫВ", "ВОЗР");Проблемы могут возникнуть, если:
1. В запросе несколько сортировок, и не все они относятся к порядку списания.
2. Один порядок должен быть по возрастанию, а другой по убыванию.
3. В запросе появится другое поле, которое должно сортироваться независимо от FIFO или LIFO.
4. Замена будет выполнена повторно.
5. В тексте будут отличия в регистре или пробелах.
6. Запрос будет изменен, а строка"УБЫВ"останется не во всех нужных местах.Для экзамена такой прием допустим, если он аккуратно реализован и очевиден проверяющему. Но надежнее явно формировать порядок.
## Вариант 1. Замена специального маркера
Вместо замены всех слов
УБЫВлучше использовать уникальный маркер:1С (Код)123456789101112131415161718192021222324Запрос.Текст ="ВЫБРАТЬ| Остатки.Номенклатура,| Остатки.Партия,| Остатки.КоличествоОстаток|ИЗ| РегистрНакопления.ТоварыНаСкладах.Остатки(&Момент, ) КАК Остатки|ГДЕ| Остатки.КоличествоОстаток > 0|УПОРЯДОЧИТЬ ПО| Остатки.Период #ПОРЯДОК_СПИСАНИЯ#,| Остатки.Регистратор #ПОРЯДОК_СПИСАНИЯ#";Если МетодСписания = Перечисления.МетодыСписания.ФИФО ТогдаПорядокСписания = "ВОЗР";ИначеПорядокСписания = "УБЫВ";КонецЕсли;Запрос.Текст = СтрЗаменить(Запрос.Текст,"#ПОРЯДОК_СПИСАНИЯ#",ПорядокСписания);Но обратите внимание: в тексте запроса до замены находится недопустимый для языка запросов маркер
#ПОРЯДОК_СПИСАНИЯ#. Это нормально, если запрос выполняется только после замены.Можно использовать более нейтральный текстовый маркер:
1С (Код)123|УПОРЯДОЧИТЬ ПО| Остатки.Период НАПРАВЛЕНИЕ_СПИСАНИЯ,| Остатки.Регистратор НАПРАВЛЕНИЕ_СПИСАНИЯЗатем:
1С (Код)1234567891011Если МетодСписания = Перечисления.МетодыСписания.ФИФО ТогдаНаправлениеСписания = "ВОЗР";ИначеНаправлениеСписания = "УБЫВ";КонецЕсли;Запрос.Текст = СтрЗаменить(Запрос.Текст,"НАПРАВЛЕНИЕ_СПИСАНИЯ",НаправлениеСписания);## Вариант 2. Добавлять блок сортировки программно
Более читаемый вариант:
1С (Код)1234567891011121314151617181920212223242526Если МетодСписания = Перечисления.МетодыСписания.ФИФО ТогдаПорядокСписания = "ВОЗР";ИначеПорядокСписания = "УБЫВ";КонецЕсли;ТекстЗапроса ="ВЫБРАТЬ| Остатки.Номенклатура,| Остатки.Партия,| Остатки.КоличествоОстаток|ИЗ| РегистрНакопления.ТоварыНаСкладах.Остатки(| &Момент,| Номенклатура = &Номенклатура| ) КАК Остатки|ГДЕ| Остатки.КоличествоОстаток > 0|УПОРЯДОЧИТЬ ПО| Остатки.Период " + ПорядокСписания + ",| Остатки.Регистратор " + ПорядокСписания;Запрос = Новый Запрос;Запрос.Текст = ТекстЗапроса;Запрос.УстановитьПараметр("Момент", МоментСписания);Запрос.УстановитьПараметр("Номенклатура", Номенклатура);Но для экзамена я бы предпочел первый вариант с заранее подготовленным текстом запроса и заменой уникального маркера. Он быстрее пишется и при этом остается понятным.
## Важный момент: одного порядка недостаточно
Само изменение сортировки еще не списывает товар. После получения партий должен быть алгоритм расходования количества.
Например:
1С (Код)123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Остатки.Партия,| Остатки.Период,| Остатки.Регистратор,| Остатки.КоличествоОстаток|ИЗ| РегистрНакопления.ТоварыНаСкладах.Остатки(| &Момент,| Номенклатура = &Номенклатура| ) КАК Остатки|ГДЕ| Остатки.КоличествоОстаток > 0|УПОРЯДОЧИТЬ ПО| Остатки.Период НАПРАВЛЕНИЕ_СПИСАНИЯ,| Остатки.Регистратор НАПРАВЛЕНИЕ_СПИСАНИЯ";Если МетодСписания = Перечисления.МетодыСписания.ФИФО ТогдаПорядокСписания = "ВОЗР";ИначеПорядокСписания = "УБЫВ";КонецЕсли;Запрос.Текст = СтрЗаменить(Запрос.Текст,"НАПРАВЛЕНИЕ_СПИСАНИЯ",ПорядокСписания);Запрос.УстановитьПараметр("Момент", МоментСписания);Запрос.УстановитьПараметр("Номенклатура", Номенклатура);Выборка = Запрос.Выполнить().Выбрать();ОсталосьСписать = КоличествоКСписанию;Пока Выборка.Следующий() И ОсталосьСписать > 0 ЦиклКоличествоИзПартии = Мин(ОсталосьСписать,Выборка.КоличествоОстаток);Движение = Движения.ТоварыНаСкладах.ДобавитьРасход();Движение.Период = МоментСписания;Движение.Номенклатура = Номенклатура;Движение.Партия = Выборка.Партия;Движение.Количество = КоличествоИзПартии;ОсталосьСписать = ОсталосьСписать - КоличествоИзПартии;КонецЦикла;Если ОсталосьСписать > 0 ТогдаВызватьИсключение "Недостаточно товара для списания";КонецЕсли;В этом примере:
— запрос получает только партии с положительным остатком;
— сортировка определяет FIFO или LIFO;
— цикл последовательно забирает количество из партий;
— если количества в партии не хватает, переход выполняется к следующей партии;
— если товара недостаточно, проведение запрещается.## Как сделать надежный порядок партий
Сортировать только по периоду недостаточно. У нескольких партий может быть одинаковый период. Поэтому нужен детерминированный порядок:
1С (Код)1234|УПОРЯДОЧИТЬ ПО| Остатки.Период НАПРАВЛЕНИЕ_СПИСАНИЯ,| Остатки.Регистратор НАПРАВЛЕНИЕ_СПИСАНИЯ,| Остатки.НомерСтроки НАПРАВЛЕНИЕ_СПИСАНИЯКонкретный состав полей зависит от структуры регистра. Обычно порядок строят по:
1. дате партии;
2. регистратору;
3. номеру строки документа;
4. дополнительному идентификатору партии.Если партия определяется не датой документа, а отдельным реквизитом
ДатаПартии, сортировать нужно именно по нему:1С (Код)123|УПОРЯДОЧИТЬ ПО| Остатки.ДатаПартии НАПРАВЛЕНИЕ_СПИСАНИЯ,| Остатки.Регистратор НАПРАВЛЕНИЕ_СПИСАНИЯ## Как это делать на экзамене «1С:Специалист»
На экзамене не стоит писать два полностью одинаковых запроса для FIFO и LIFO. Правильная схема следующая.
### 1. В конфигурации создать метод списания
Например:
1С (Код)123Перечисление.МетодыСписанияФИФОЛИФОМетод можно хранить:
— в константе;
— в настройках учетной политики;
— в реквизите организации;
— в реквизите склада;
— в реквизите документа, если метод выбирается для конкретного документа.### 2. Получить метод до выполнения запроса
1С (Код)1МетодСписания = Константы.МетодСписания.Получить();или:
1С (Код)1МетодСписания = Объект.МетодСписания;### 3. Подготовить направление сортировки
1С (Код)1234567Если МетодСписания = Перечисления.МетодыСписания.ФИФО ТогдаПорядокСписания = "ВОЗР";ИначеЕсли МетодСписания = Перечисления.МетодыСписания.ЛИФО ТогдаПорядокСписания = "УБЫВ";ИначеВызватьИсключение "Не указан метод списания";КонецЕсли;### 4. Подставить направление в запрос
1С (Код)12345Запрос.Текст = СтрЗаменить(Запрос.Текст,"НАПРАВЛЕНИЕ_СПИСАНИЯ",ПорядокСписания);### 5. Получить остатки в нужном порядке
Использовать виртуальную таблицу остатков с параметрами отбора:
1С (Код)1234|РегистрНакопления.ТоварыНаСкладах.Остатки(| &Момент,| Номенклатура = &Номенклатура|) КАК ОстаткиОтбор по номенклатуре, складу и другим измерениям нужно передавать в параметры виртуальной таблицы, а не накладывать обычным условием после получения всех остатков.
### 6. Циклом списать остаток
Именно цикл по партиям является основой FIFO/LIFO. Порядок выборки только определяет, какая партия будет первой.
## Можно ли сказать, что FIFO меняется на LIFO в трех строках
Да, если архитектура уже правильно построена, то переключение направления действительно может занимать примерно три строки:
1С (Код)12345Если МетодСписания = Перечисления.МетодыСписания.ФИФО ТогдаНаправление = "ВОЗР";ИначеНаправление = "УБЫВ";КонецЕсли;и одна строка замены:
1С (Код)1Запрос.Текст = СтрЗаменить(Запрос.Текст, "НАПРАВЛЕНИЕ", Направление);Но на экзамене оценивается не количество строк переключения, а вся реализация:
— правильная структура регистра накопления;
— получение партий и остатков;
— корректный порядок сортировки;
— расходование количества по партиям;
— контроль недостатка товара;
— правильное отражение движений;
— блокировки;
— обработка перепроведения;
— корректная работа на границе даты;
— отсутствие списания отрицательных остатков.Ваш подход можно использовать на экзамене. Я бы только заменил общее слово
"УБЫВ"на уникальный маркер"НАПРАВЛЕНИЕ_СПИСАНИЯ"и добавил вторичную сортировку по регистратору или номеру строки. Тогда решение будет и коротким, и понятным проверяющему.По этому скриншоту проблема уже не в заголовке группы. В отчёте поле «Номенклатура» добавлено в структуру СКД, но его значение не выводится. В первой колонке вместо названия номенклатуры появляется текст «Партия», то есть структура группировки настроена неправильно или значение поля группировки скрыто.
Нужно проверить два места: запрос и вкладку «Выбранные поля».
## 1. Проверьте, что «Номенклатура» есть в результате запроса
В схеме компоновки данных откройте набор данных и убедитесь, что в запросе действительно выбирается поле номенклатуры.
Должно быть примерно так:
1С (Код)123456789|ВЫБРАТЬ| Движения.Номенклатура КАК Номенклатура,| Движения.Партия КАК Партия,| Движения.КоличествоПриход,| Движения.СуммаПриход,| Движения.КоличествоРасход,| Движения.СуммаРасход|ИЗ| РегистрНакопления.ДвиженияНоменклатуры КАК ДвиженияЕсли поле называется, например,
Номенклатура1,Товар,НоменклатураОборотыили выбирается только внутри временной таблицы, а в настройках отчёта используется другое полеНоменклатура, СКД может вывести заголовок поля, но само значение будет пустым.В конструкторе запроса проверьте, что поле:
1С (Код)1Номенклатураприсутствует именно в списке выбранных полей набора данных и имеет тип:
1С (Код)1СправочникСсылка.Номенклатура## 2. Проверьте вкладку «Выбранные поля»
Структура отчёта должна быть примерно такой:
1С (Код)1234567891011121314Группировка: НоменклатураГруппировка: ПартияГруппа: Начальный остатокКоличествоНачальныйОстатокСебестоимостьНачальныйОстатокГруппа: ПриходКоличествоПриходСебестоимостьПриходГруппа: РасходКоличествоРасходСебестоимостьРасходГруппа: Конечный остатокКоличествоКонечныйОстатокСебестоимостьКонечныйОстатокОбратите внимание: «Номенклатура» и «Партия» должны быть именно группировками, а не обычными полями внутри вертикальной группы.
Нужно удалить текущие строки
НоменклатураиПартияиз неправильного места и добавить их заново:1. Выделите неправильную строку
Номенклатура.
2. Удалите ее.
3. Нажмите «Добавить».
4. Выберите «Группировка».
5. В качестве поля группировки укажитеНоменклатура.
6. Внутрь этой группировки добавьте группировкуПартия.
7. Уже внутрьПартияпоместите показатели и группы показателей.## 3. Включите вывод значений группировок
Выберите группировку «Номенклатура» и проверьте ее свойства. Должно быть включено отображение значения группировки.
В разных версиях 1С свойство может называться немного по-разному:
— Выводить поле группировки;
— Выводить значение группировки;
— Расположение поля группировки;
— Тип дополнения группировки;
— Выводить в отдельных строках.Нужно, чтобы для
Номенклатурабыло установлено отображение значения, например:1С (Код)1Выводить: В отдельной строкеили:
1С (Код)1Расположение: ОтдельноНе должно быть:
1С (Код)1Не выводитьДля
Партияможно оставить вывод отдельной строкой или отдельной колонкой, в зависимости от желаемого вида отчёта.## 4. Не путайте группировку и группу полей
На предыдущем скриншоте у вас были группы с расположением «Вертикально». Это группы полей, предназначенные для объединения показателей:
1С (Код)123ПриходКоличествоПриходСебестоимостьПриходНо
НоменклатураиПартиядолжны быть не группами полей, а группировками строк.Правильное различие:
### Группировка строк
1С (Код)12НоменклатураПартияОна должна выводить значения:
1С (Код)123Краска акриловаяПН №1 от 01.09.2026ПН №2 от 02.09.2026### Группа полей
1С (Код)123ПриходКоличествоСуммаОна формирует заголовок над колонками и не предназначена для вывода номенклатуры.
## 5. Почему в отчёте появляется «Партия»
По виду отчёта сейчас
НоменклатураиПартиянаходятся не на своих уровнях. Текст «Партия» выводится как элемент структуры отчёта, а не как значение поля номенклатуры.То есть СКД видит примерно такую структуру:
1С (Код)12НоменклатураПартияно значение
Номенклатуралибо:— не получено запросом;
— не выводится;
— находится в группе полей;
— добавлено не как группировка;
— скрыто настройкой вывода группировки.## 6. Как должна выглядеть настройка для вашего отчёта
На вкладке «Выбранные поля» рекомендую собрать структуру заново.
### Верхний уровень
Добавьте группировку:
1С (Код)1НоменклатураНастройки:
1С (Код)123Поле группировки: НоменклатураЗаголовок: НоменклатураВыводить значение: Да### Вложенный уровень
Внутрь
Номенклатурадобавьте группировку:1С (Код)1ПартияНастройки:
1С (Код)123Поле группировки: ПартияЗаголовок: ПартияВыводить значение: Да### Показатели
Внутри группировки
Партияразместите показатели:1С (Код)12345678КоличествоНачальныйОстатокСебестоимостьНачальныйОстатокКоличествоПриходСебестоимостьПриходКоличествоРасходСебестоимостьРасходКоличествоКонечныйОстатокСебестоимостьКонечныйОстаток## 7. Проверьте пользовательские настройки отчёта
На форме отчёта нажмите:
1С (Код)1Настройки...Затем выполните:
1С (Код)1Еще → Установить стандартные настройкиили удалите сохранённый вариант настроек.
Это важно, потому что настройки, сохранённые пользователем, могут перекрывать настройки, заданные в конфигураторе. В результате в конфигураторе поле уже исправлено, а пользовательский вариант продолжает использовать старую структуру.
После этого снова сформируйте отчёт.
## 8. Быстрая проверка
Для диагностики временно оставьте в отчёте только два поля:
1С (Код)12НоменклатураПартияИ добавьте их как группировки:
1С (Код)12НоменклатураПартияЕсли после формирования получится:
1С (Код)123КраскаПН №1ПН №2значит запрос и группировки работают, и затем можно возвращать показатели.
Если же вместо названия по-прежнему будет пусто, проблема точно в наборе данных: поле
Номенклатуране заполняется запросом или имеет другое имя/псевдоним.Самое вероятное исправление в вашей ситуации: удалить текущую «Номенклатуру» из выбранных полей, добавить ее заново именно как группировку, включить вывод значения группировки и проверить наличие поля
Номенклатурав запросе набора данных.23 октября 2026 в 8:19 в ответ на: Как настроить печать в 1С:Фреш для «Бухгалтерии для Казахстана» без сохранения в #38891В 1С:Фреш печать выполняется не через сохранение формы в PDF, а через локальное приложение «1С:Печать», установленное на компьютере пользователя. Облачная база формирует печатную форму, а приложение на компьютере передает ее на принтер.
Ниже настройка для сценария:
> документ в «Бухгалтерии для Казахстана» → печатная форма → печать на локальный принтер без сохранения PDF.
## 1. Проверьте принтер в Windows
На компьютере пользователя:
1. Откройте Параметры Windows.
2. Перейдите в раздел Bluetooth и устройства → Принтеры и сканеры.
3. Убедитесь, что нужный принтер установлен.
4. Выполните пробную печать из любого приложения.
5. Если печать должна идти автоматически, назначьте этот принтер принтером по умолчанию.Важно:
— принтер должен быть установлен именно на том компьютере, где открыта 1С:Фреш;
— если используется принтер по сети, компьютер должен иметь к нему доступ;
— принтер не должен быть отключен или находиться в состоянии «Не в сети».Для терминального подключения принтер также должен быть доступен внутри терминальной сессии.
## 2. Установите приложение «1С:Печать»
В 1С:Фреш откройте нужную информационную базу.
В интерфейсе найдите раздел, связанный с печатью. Название пункта может немного отличаться в зависимости от версии портала:
— Сервисы;
— Администрирование;
— Настройки печати;
— 1С:Печать;
— Печать через Интернет.Найдите команду типа:
— Установить приложение 1С:Печать;
— Скачать 1С:Печать;
— Настроить печать;
— Установить компоненту печати.Скачайте установочный файл и установите его от имени пользователя Windows.
При установке:
1. Запустите установочный файл.
2. Разрешите установку компонента.
3. Оставьте включенным запуск приложения вместе с Windows, если такая настройка предлагается.
4. После окончания установки перезапустите браузер.
5. При необходимости перезагрузите компьютер.Приложение должно быть установлено на каждом рабочем месте отдельно. Установка на одном компьютере не подключает принтеры для остальных пользователей.
## 3. Разрешите работу компонента в браузере
После установки снова откройте 1С:Фреш.
Если браузер покажет запрос:
— разрешить открытие приложения;
— разрешить взаимодействие с локальным приложением;
— установить расширение;
— разрешить использование 1С:Печати,подтвердите разрешение.
Если запрос не появляется, проверьте следующее:
1. Откройте настройки браузера.
2. Разрешите всплывающие окна для адреса 1С:Фреш.
3. Отключите блокировку загрузок для сайта 1С:Фреш.
4. Установите рекомендуемое расширение браузера, если оно предлагается на странице настройки печати.
5. Перезапустите браузер.Обычно лучше использовать актуальную версию Google Chrome, Яндекс Браузера или Microsoft Edge.
## 4. Включите печать через 1С:Печать в базе
В конфигурации «Бухгалтерия для Казахстана» откройте:
Администрирование → Печатные формы, отчеты и обработки
или раздел с аналогичным названием.
Найдите настройки печати. В зависимости от релиза могут использоваться следующие варианты названий:
— Настройки печати;
— Параметры печати;
— Печать через Интернет;
— Использовать 1С:Печать;
— Локальная печать;
— Приложение 1С:Печать.Установите использование локального приложения печати.
Если в настройках есть выбор способа печати, выбирайте:
> Печать через 1С:Печать
> или
> Печать на локальный принтерНе выбирайте вариант, при котором печатная форма только выгружается в PDF или файл.
После изменения настроек нажмите Записать, Сохранить или Применить.
## 5. Выполните проверку печати
Для проверки используйте любой проведенный документ, например:
— Покупка товаров и услуг;
— Реализация товаров и услуг;
— Счет-фактура;
— Акт выполненных работ;
— Приходный кассовый ордер;
— Расходный кассовый ордер.Порядок действий:
1. Откройте документ.
2. Нажмите Печать.
3. Выберите нужную печатную форму.
4. Нажмите Печать или Печать документа.
5. Если появится выбор способа вывода, выберите:
— локальный принтер;
— приложение 1С:Печать;
— печать напрямую.
6. Выберите принтер.
7. Укажите количество экземпляров.
8. Нажмите Печатать.При корректно установленном приложении печатная форма должна уйти на принтер. Сохранять PDF перед этим не требуется.
## 6. Важное различие между двумя режимами
В 1С:Фреш встречаются два разных варианта печати.
### Печать через предварительный просмотр
Схема:
1. 1С формирует табличный документ.
2. Он открывается в окне просмотра.
3. Пользователь нажимает значок принтера.
4. Открывается системное окно печати или окно браузера.Это не является полностью прямой печатью. PDF при этом обычно также не нужно сохранять, но может открываться окно предварительного просмотра.
### Печать через приложение «1С:Печать»
Схема:
1. 1С формирует печатную форму.
2. Облачная база передает ее компоненту 1С:Печать.
3. Компонента отправляет форму на локальный принтер.Это нужный вариант для сценария «без сохранения PDF».
## 7. Если требуется печать вообще без окна выбора принтера
Полностью бесшумная печать зависит от версии 1С:Фреш, версии конфигурации и установленного приложения «1С:Печать».
Обычно можно настроить:
— принтер по умолчанию;
— количество экземпляров;
— формат бумаги;
— ориентацию;
— печать на конкретный принтер.Для этого в настройках печати выберите принтер по умолчанию или сохраните настройки печатной формы.
В самой форме документа может быть доступна команда:
Еще → Настройки печати
или:
Печать → Настройки печати
Там задаются:
— принтер;
— формат бумаги;
— ориентация страницы;
— поля;
— масштаб;
— количество копий.Но если браузер каждый раз показывает стандартное окно печати, это ограничение безопасности браузера. Убрать его обычной настройкой 1С не всегда возможно. В этом случае требуется именно локальный агент 1С:Печать и поддержка бесшумной печати в конкретной версии сервиса.
## 8. Если при печати предлагается сохранить PDF
Проверьте следующие настройки:
1. Не выбрана ли команда Сохранить, Выгрузить в PDF или Открыть в PDF.
2. Не установлен ли в Windows виртуальный принтер:
— Microsoft Print to PDF;
— Adobe PDF;
— PDF24;
— другой PDF-принтер.
3. В окне печати выбран ли физический принтер, а не PDF-принтер.
4. Запущено ли приложение 1С:Печать.
5. Включена ли печать через локальный компонент в настройках 1С:Фреш.
6. Не открыта ли база в режиме, где локальная печать недоступна.Если в списке доступен только PDF, значит 1С:Фреш не видит локальное приложение печати или браузер не разрешил его запуск.
## 9. Если 1С:Фреш не видит приложение 1С:Печать
Выполните по порядку:
1. Закройте все окна браузера.
2. Проверьте, запущено ли приложение 1С:Печать в Windows.
3. Запустите его вручную через меню Пуск.
4. Перезагрузите компьютер.
5. Повторно войдите в 1С:Фреш.
6. Откройте страницу настройки печати и выполните проверку подключения.
7. Если предлагается установить расширение браузера, установите его.
8. Разрешите всплывающие окна и запуск локального приложения для сайта 1С:Фреш.
9. Проверьте печать из другого браузера.
10. Переустановите приложение 1С:Печать.Если компонент ранее обновлялся, старую версию иногда нужно удалить через:
Параметры Windows → Приложения → Установленные приложения
После удаления установите текущую версию компонента с портала 1С:Фреш.
## 10. Если печатает у администратора, но не у бухгалтера
Проверьте отдельно:
— установлен ли компонент на компьютере бухгалтера;
— есть ли у пользователя права на печать;
— не отключена ли печать в профиле пользователя;
— не используются ли разные браузеры;
— не подключается ли бухгалтер к 1С:Фреш с другого компьютера;
— доступен ли принтер в профиле Windows этого пользователя.Установка 1С:Печать выполняется на компьютере, а не только в информационной базе. Поэтому другой пользователь или другой компьютер требует отдельной настройки.
## 11. Особенности регламентированных форм в Казахстане
В «Бухгалтерии для Казахстана» отдельные регламентированные формы могут иметь специальные требования к печати:
— штрихкоды;
— двумерные коды;
— машиночитаемые формы;
— дополнительные листы;
— печать на определенном формате бумаги.Для таких форм сначала сформируйте печатную форму в самой 1С, проверьте ее предварительный вид, а затем отправьте на принтер через 1С:Печать.
Если форма не печатается из-за двумерного кода, проверьте настройки конкретного отчета. Для некоторых регламентированных отчетов печать без штрихкода может быть запрещена или доступна только после включения соответствующей настройки.
## Рекомендуемая итоговая схема настройки
1. Установить физический принтер в Windows.
2. Сделать его принтером по умолчанию.
3. Установить приложение 1С:Печать.
4. Перезапустить браузер.
5. Разрешить сайту 1С:Фреш запуск локального приложения.
6. В базе включить печать через 1С:Печать.
7. Открыть документ в «Бухгалтерии для Казахстана».
8. Нажать Печать.
9. Выбрать печатную форму.
10. Выбрать физический принтер, а не PDF-принтер.
11. Выполнить печать без сохранения файла.«Разрешить разделение итогов» означает разрешить платформе хранить итоги регистра не в одной общей записи, а в нескольких отдельных записях, если несколько сеансов одновременно записывают движения по одним и тем же наборам измерений.
Это механизм повышения параллельности записи в:
— регистрах накопления;
— регистрах бухгалтерии.## Проблема без разделения итогов
Допустим, несколько пользователей одновременно проводят документы по одному складу и одной номенклатуре.
Регистр накопления хранит итог по комбинации:
1С (Код)12Склад = ОсновнойНоменклатура = Товар АБез разделения итогов несколько транзакций могут одновременно пытаться изменить одну и ту же итоговую запись:
1С (Код)1Итог по Товару А = 100Одна транзакция хочет уменьшить итог на 5, другая на 10. Им обеим нужно изменить одну запись итогов. В результате повышается вероятность:
— ожиданий блокировок;
— взаимоблокировок;
— тайм-аутов;
— снижения параллельности проведения документов.## Что происходит при включенном разделении итогов
При включенном механизме платформа может создать отдельные записи итогов для разных параллельно работающих транзакций:
1С (Код)12Основной склад, Товар А, разделитель 1: -5Основной склад, Товар А, разделитель 2: -10При чтении итогового значения платформа учитывает все такие записи:
1С (Код)123Общий итог = значение основной записи+ значение разделенной записи 1+ значение разделенной записи 2Для прикладного решения результат остается тем же. Пользователь не работает с «разделенными» итогами напрямую. Платформа сама объединяет их при получении итогов.
## Что именно разделяется
Разделяются не движения регистра и не данные по пользователям. Разделяются внутренние записи таблиц итогов.
Обычная структура выглядит для прикладного решения примерно так:
1С (Код)123СкладНоменклатураКоличествоОстатокПри разделении итогов внутри базы могут появиться несколько записей для одной комбинации измерений. У этих записей есть внутренний признак разделения.
В прикладном коде вы по-прежнему получаете обычный итог:
1С (Код)1Товар А на Основном складе: 85 штукПлатформа сама суммирует необходимые части.
## Важное свойство
Разделение итогов:
— повышает параллельность записи;
— уменьшает конкуренцию транзакций за одну запись итогов;
— обычно ускоряет проведение при одновременной работе пользователей;
— может увеличить объем таблиц итогов;
— может несколько усложнить получение и обслуживание итогов;
— не заменяет управляемые блокировки при контроле остатков.Основная формула:
1С (Код)12Разделение итогов улучшает параллельную запись,но требует дополнительных ресурсов.## Почему иногда говорят «быстрее читает, медленнее записывает»
Здесь нужно аккуратно понимать формулировку.
Само разделение итогов предназначено прежде всего для повышения параллельности записи. При конкурентной записи транзакциям проще работать с отдельными итоговыми записями, поэтому уменьшаются блокировки и ожидания.
Но у механизма есть цена:
— при записи могут создаваться дополнительные записи;
— при чтении платформа может учитывать несколько частей итогов;
— итоговые таблицы могут занимать больше места;
— при обслуживании и пересчете итогов требуется больше работы.Поэтому нельзя считать, что разделение итогов безусловно ускоряет любую операцию. Оно особенно полезно при высокой конкуренции за одни и те же данные.
## Связь с использованием итогов
Это разные настройки.
### Использование итогов
Определяет, будут ли использоваться предварительно рассчитанные итоги для ускорения получения остатков и оборотов.
### Разрешение разделения итогов
Определяет, может ли платформа хранить изменения итогов в нескольких разделенных записях при параллельной записи.
Возможны разные состояния:
1С (Код)1Итоги включены, разделение итогов выключеноили:
1С (Код)1Итоги включены, разделение итогов включеноДля оперативного учета обычно нужны оба механизма, но решение зависит от нагрузки и особенностей регистра.
## Где настраивается
В конфигураторе свойство находится у регистра накопления, в свойствах регистра:
1С (Код)123Регистры накоплениянужный регистрРазрешить разделение итоговПосле разрешения в конфигурации фактический режим использования также может управляться в пользовательском режиме через обработку управления итогами.
То есть важно различать:
1. Разрешено в конфигурации
Платформа может использовать разделение итогов для данного регистра.2. Включено в информационной базе
Механизм реально используется в текущем режиме работы базы.Если в конфигураторе разделение итогов запрещено, в пользовательском режиме включить его нельзя. Такой параметр обычно будет недоступен для изменения.
## Как это связано с управляемыми блокировками
Это два разных механизма.
### Разделение итогов
Снижает конкуренцию при записи итоговых данных регистра.
### Управляемая блокировка
Не позволяет нескольким документам одновременно проверить и изменить один и тот же остаток.
Например, контроль остатков должен выполняться с блокировкой:
1С (Код)12345Документ 1 заблокировал Товар АДокумент 1 проверил остатокДокумент 1 сформировал расходДокумент 2 ждет освобождения блокировкиДокумент 2 после этого проверяет уже измененный остатокВключение разделения итогов само по себе не гарантирует корректный контроль остатков. Если в коде проведения нет правильной блокировки, два документа все равно могут одновременно прочитать один и тот же остаток и оба принять решение, что товара хватает.
Поэтому:
1С (Код)12разделение итогов отвечает за параллельную запись итогов;управляемая блокировка отвечает за согласованность проверки остатков.## Когда разделение итогов имеет смысл
Обычно его рассматривают для регистров, в которые одновременно пишут много пользователей:
— остатки товаров;
— товары на складах;
— взаиморасчеты;
— денежные средства;
— заказы и резервирование;
— регистры, по которым часто проводятся документы в параллельных сеансах.Особенно актуально, когда:
— много пользователей одновременно проводят документы;
— документы пишут движения по одним складам и товарам;
— есть тайм-ауты блокировок;
— возникают взаимоблокировки на регистрах;
— в технологическом журнале видны ожидания блокировок при записи итогов.## Когда не стоит включать без проверки
Не следует включать разделение итогов автоматически на всех регистрах.
Причины:
— увеличивается объем итоговых таблиц;
— усложняется работа с итогами;
— дополнительная оптимизация может быть не нужна при небольшой нагрузке;
— проблема может быть не в итогах, а в неправильной блокировке, длинной транзакции или записи последовательностей;
— при плохом алгоритме проведения разделение итогов не исправит ошибку прикладной логики.Сначала анализируют:
1. какие документы пишут в регистр;
2. сколько пользователей проводят их одновременно;
3. по каким измерениям возникает конкуренция;
4. есть ли ожидания и взаимоблокировки;
5. правильно ли установлены управляемые блокировки;
6. не удерживается ли транзакция дольше необходимого.## Пример для экзамена
Предположим, регистр накопления:
1С (Код)1ОстаткиТоваровИзмерения:
1С (Код)12СкладНоменклатураРесурс:
1С (Код)1КоличествоДва документа одновременно записывают движения по:
1С (Код)12Склад = Основной складНоменклатура = Товар АБез разделения итогов они конкурируют за одну итоговую запись.
С включенным разделением итогов платформа может разнести изменения по нескольким внутренним записям, а при чтении вычислить общий остаток.
Фраза для экзамена:
> Разрешение разделения итогов позволяет повысить параллельность работы с регистром накопления при одновременной записи движений. Изменения итогов могут записываться в разные записи, а при чтении данные суммируются. Механизм уменьшает конкуренцию за итоговые записи, но увеличивает объем хранимых итоговых данных и не заменяет блокировку при контроле остатков.
Рекомендую посмотреть здесь: https://helpf.pro/faq/view/545.html
21 октября 2026 в 21:14 в ответ на: Почему в КУДиР 1С:Бухгалтерии не полностью отражаются расходы на зарплату? #38887В 1С:Бухгалтерии зарплата из ЗУП не должна автоматически полностью попадать в КУДиР только по факту начисления. Для УСН расходы признаются при выполнении условий налогового учета.
Сначала проверьте, какой объект УСН установлен:
— «Доходы»: расходы на зарплату в КУДиР не отражаются, поскольку расходы не уменьшают налог.
— «Доходы минус расходы»: зарплата и страховые взносы должны попадать в КУДиР при выполнении условий признания расходов.## Что проверить
### 1. Проведен ли документ отражения зарплаты
В Бухгалтерии откройте:
Зарплата и кадры → Отражение зарплаты в бухучете
Проверьте документ за нужный месяц:
— правильная организация;
— правильный месяц начисления;
— документ проведен;
— сумма соответствует данным ЗУП;
— нет ли сообщений об ошибках синхронизации;
— заполнены счета учета, например 20, 26, 44 и счет 70;
— заполнены статьи затрат.Если документ не проведен, в бухгалтерском и налоговом учете зарплата не отразится.
После исправления данных выполните:
1. Отменить проведение документа.
2. Провести его заново.
3. Переформировать КУДиР за нужный период.### 2. Есть ли выплата зарплаты
Для УСН начисления зарплаты недостаточно. Зарплата обычно признается расходом после фактической выплаты сотрудникам.
Проверьте документы:
— Ведомость в банк;
— Ведомость в кассу;
— Списание с расчетного счета;
— Выдача наличных.Должны быть выполнены следующие условия:
— ведомость проведена;
— платежный документ проведен;
— сумма выплаты совпадает с ведомостью;
— выплата относится к нужной организации;
— дата выплаты попадает в правильный период;
— платеж связан именно с выплатой зарплаты, а не с прочим перечислением.Типичная ситуация: в ЗУП зарплата начислена и синхронизирована в Бухгалтерию, но выплата проведена только в ЗУП или банковская выписка в Бухгалтерии еще не загружена. В таком случае в КУДиР зарплата полностью или частично отсутствует.
### 3. Проверить даты
Например:
— зарплата начислена за январь;
— в Бухгалтерии отражена январем;
— выплачена 5 февраля.Для УСН расход может попасть в КУДиР уже в феврале, а не в январе.
Поэтому сравнивайте:
— период начисления;
— дату выплаты;
— дату перечисления НДФЛ;
— дату уплаты страховых взносов;
— период, за который формируется КУДиР.### 4. Проверить, какая именно часть зарплаты отсутствует
В КУДиР зарплата может отражаться не одной общей суммой. Отдельно могут признаваться:
— начисления сотрудникам;
— выплаты сотрудникам;
— страховые взносы;
— выплаты по больничным за счет работодателя;
— другие начисления, относящиеся к оплате труда.При этом НДФЛ, удержанный из зарплаты сотрудника, не является отдельным расходом организации на зарплату. Это сумма, удержанная из дохода сотрудника и перечисленная в бюджет.
Страховые взносы имеют отдельный момент признания. Если они начислены, но еще не уплачены, их сумма может не попасть в расходы УСН до даты уплаты.
### 5. Проверить счета учета зарплаты
Откройте:
Отчеты → Стандартные отчеты → Оборотно-сальдовая ведомость по счету
Проверьте за нужный период:
— счет 70, чтобы увидеть начисление и выплату зарплаты;
— счет 69, чтобы увидеть страховые взносы;
— счета затрат 20, 23, 25, 26, 44;
— субконто «Статьи затрат»;
— субконто «Подразделения»;
— организацию.Если в ОСВ по счету 70 начисление есть, но нет выплаты, причина почти наверняка в отсутствии или неправильном проведении платежных документов.
Если в ЗУП начисление есть, но в ОСВ Бухгалтерии его нет, проблема связана с документом «Отражение зарплаты в бухучете» или с синхронизацией.
### 6. Проверить настройки статьи затрат
Откройте статью затрат, которая используется в документе отражения зарплаты.
Путь обычно такой:
Справочники → Доходы и расходы → Статьи затрат
Проверьте:
— статья используется для налогового учета;
— статья не помечена как не принимаемая к налоговому учету;
— правильно установлен вид расхода для УСН;
— не используется статья с видом расхода «Не учитываемые в целях налогообложения»;
— заполнена аналитика расходов.Если часть сотрудников или начислений отражается по другой статье затрат, эта часть может не попасть в КУДиР.
### 7. Проверить аналитику по видам начислений в ЗУП
В ЗУП у каждого вида начисления может быть свой способ отражения в бухгалтерском учете.
Например:
— оклад отражается на счете 26;
— премия отражается на счете 91.02;
— компенсация отражается на другой статье;
— больничный отражается отдельной аналитикой.При синхронизации разные начисления могут попасть в Бухгалтерию с разными статьями затрат. Часть из них может быть настроена как не принимаемая в расходы УСН.
Проверьте в ЗУП:
Настройка → Расчет зарплаты → Отражение зарплаты в бухучете
Или настройки способа отражения зарплаты, используемые в организации и подразделениях.
Затем в Бухгалтерии сравните расшифровку документа «Отражение зарплаты в бухучете» с расшифровкой начислений в ЗУП.
### 8. Проверить соответствие сотрудников
При синхронизации могут возникать проблемы сопоставления:
— один сотрудник создан в ЗУП и Бухгалтерии дважды;
— разные физические лица;
— разные организации;
— не сопоставлены подразделения;
— платеж проведен на одного сотрудника, а начисление отражено на другого;
— имеются дубли документов отражения.В результате часть суммы может не закрыться выплатой и не попасть в КУДиР.
Проверьте в Бухгалтерии:
Главное → Синхронизация данных → Синхронизация данных
Посмотрите сообщения обмена и несопоставленные объекты.
Особенно важно проверить:
— организацию;
— физическое лицо;
— сотрудника;
— ведомость на выплату;
— документ отражения зарплаты.### 9. Проверить банковскую выписку
Если зарплата выплачивается через банк, в Бухгалтерии должно быть проведено списание с расчетного счета.
В документе банковской операции проверьте вид операции. Он должен соответствовать выплате зарплаты сотрудникам, например:
— выплата заработной платы по ведомостям;
— перечисление зарплаты на счета сотрудников;
— перечисление зарплаты по зарплатному проекту.Если платеж загружен как «Прочее списание», программа может не связать его с ведомостью и не признать зарплатный расход в КУДиР.
Практически лучше:
1. Создать ведомость на выплату.
2. Создать на ее основании платежное поручение или списание.
3. Провести ведомость и банковский документ.
4. Проверить связь платежа с ведомостью.### 10. Переформировать КУДиР
После исправления документов:
1. Перепроведите документ «Отражение зарплаты в бухучете».
2. Перепроведите ведомости.
3. Перепроведите документы списания с расчетного счета.
4. Перепроведите документы уплаты страховых взносов.
5. Сформируйте КУДиР заново за весь спорный период.Для контроля можно использовать:
— Отчеты → Книга доходов и расходов УСН;
— Анализ учета по УСН;
— Оборотно-сальдовую ведомость по счету 70;
— Оборотно-сальдовую ведомость по счету 69;
— Карточку счета 70;
— Карточку счета 69.## Наиболее частые причины неполного отражения
Обычно проблема находится в одном из этих пунктов:
1. В ЗУП зарплата начислена, но документ «Отражение зарплаты в бухучете» в Бухгалтерии не проведен.
2. Зарплата начислена, но не выплачена в Бухгалтерии.
3. Банковское списание загружено как обычное списание, без связи с ведомостью.
4. Зарплата выплачена в следующем месяце, поэтому расход попал в другой период.
5. Часть начислений отражается по статье затрат, которая не принимается при УСН.
6. Страховые взносы начислены, но еще не уплачены.
7. Используется объект налогообложения «Доходы», при котором расходы в КУДиР не учитываются.
8. Есть расхождения по организации, сотрудникам или физическим лицам после синхронизации.
9. КУДиР сформирована до проведения платежных документов и не была сформирована заново.
10. В документе отражения зарплаты используется неверный способ отражения или неверная статья затрат.Для точного определения причины нужно сравнить одну конкретную сумму по цепочке:
ЗУП: начисление → Бухгалтерия: отражение зарплаты → ведомость → банковская выплата → КУДиР.
Если сумма пропала на этапе начисления, проверяется синхронизация. Если она есть в начислении, но отсутствует в КУДиР, в первую очередь проверяются выплата, дата платежа и статья расходов.
Привет! Да, умею работать с PostgreSQL в связке с 1С и отдельно с самой СУБД.
Могу помочь, например, с:
— установкой PostgreSQL или Postgres Pro для 1С;
— созданием и настройкой кластеров баз данных;
— подключением информационной базы 1С к PostgreSQL;
— настройкойpostgresql.confиpg_hba.conf;
— ошибками подключения к базе;
— резервным копированием и восстановлением черезpg_dump,pg_restore,pg_basebackup;
— переносом базы 1С между серверами;
— диагностикой медленной работы 1С;
— анализом долгих запросов и блокировок;
— настройкойVACUUM,ANALYZE, autovacuum;
— проверкой места на диске, WAL и состояния базы;
— настройкой репликации;
— восстановлением после сбоев;
— оптимизацией PostgreSQL под конкретный объём ОЗУ, количество пользователей и нагрузку.Для 1С важно использовать сборку PostgreSQL, поддерживаемую конкретной версией платформы 1С. Обычная версия PostgreSQL не всегда подходит для промышленной эксплуатации 1С.
Рекомендую посмотреть здесь:
— документация PostgreSQL: https://www.postgresql.org/docs/
— Postgres Pro для 1С: https://postgrespro.ru/products/1c
— документация Postgres Pro: https://postgrespro.ru/docs/Присылай ошибку, конфигурацию сервера, версию 1С/PostgreSQL или команду, с которой возникла проблема.
21 октября 2026 в 15:48 в ответ на: Как оптимизировать запрос в динамическом списке платформы 1С? #38883Да. Для оптимизации нужен сам запрос и настройки динамического списка. Пришлите:
1. Текст запроса из свойства динамического списка.
2. Версию платформы 1С и конфигурацию.
3. Какие таблицы используются:
— справочник или документ;
— регистр сведений;
— регистр накопления;
— виртуальные таблицы, напримерСрезПоследних,Остатки,Обороты.
4. Настройки списка:
— указана ли основная таблица;
— включено ли динамическое считывание данных;
— задан ли произвольный запрос;
— какие поля выбраны как ключевые.
5. Какие отборы и сортировки устанавливает пользователь.
6. Что именно медленно:
— открытие списка;
— установка отбора;
— сортировка;
— прокрутка;
— обновление списка.
7. Примерное количество записей в основных таблицах.
8. Если есть, замер через технологический журнал,SQL Server Profilerили консоль запросов.Запрос 1С присылайте вместе с параметрами. Я проверю:
— условия соединения и использование индексов;
— лишниеЛЕВЫЕ СОЕДИНЕНИЯ;
— виртуальные таблицы и параметры периода;
— вложенные запросы и временные таблицы;
— условияИЛИ,НЕ,ПОДСТРОКА;
— сортировки и вычисляемые поля;
— дублирование строк;
— возможность указать основную таблицу;
— уникальность ключевых полей динамического списка;
— необходимость динамического считывания;
— порядок пользовательских отборов.Для динамического списка обычно применяются такие правила:
— основной таблицей лучше делать таблицу, которая однозначно идентифицирует строку, например
Справочник.НоменклатураилиДокумент.РеализацияТоваровУслуг;
— для произвольного запроса желательно задать ключевые поля, иначе платформа может использовать номер строки, из-за чего при прокрутке и обновлении приходится заново обрабатывать начало выборки;
— поля соединения должны соответствовать индексам;
— часто отбираемые поля желательно индексировать;
— вычисляемые поля не следует использовать для сортировки;
— тяжелые условия лучше включать в текст запроса, а не оставлять пользовательским отбором;
—СрезПоследнихследует ограничивать параметрами периода и отбором по измерениям;
— для сложного списка из нескольких таблиц динамическое считывание не всегда ускоряет работу, иногда его лучше отключить;
— в список не стоит выводить лишние поля и поля через несколько уровней точек.Например, неудачная конструкция:
|ВЫБРАТЬ
| Номенклатура.Ссылка,
| Номенклатура.Наименование,
| ЕСТЬNULL(Цены.Цена, 0) КАК Цена
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата) КАК Цены
| ПО Цены.Номенклатура = Номенклатура.Ссылка
|ГДЕ
| Номенклатура.Наименование ПОДОБНО &СтрокаПоискаПроблемы здесь могут возникнуть из-за:
— поиска по
НаименованиечерезПОДОБНО;
— большого количества строк вСрезПоследних;
— отсутствия отбора по виду цены или организации;
— дублирования строк при неуникальной записи регистра;
— сортировки по вычисляемому полюЕСТЬNULL(Цены.Цена, 0).В зависимости от структуры регистра запрос можно переписать, например, с предварительным ограничением набора цен:
|ВЫБРАТЬ
| Номенклатура.Ссылка,
| Номенклатура.Наименование,
| Цены.Цена
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
| &Дата,
| ВидЦены = &ВидЦены
| И Организация = &Организация
| ) КАК Цены
| ПО Цены.Номенклатура = Номенклатура.СсылкаНо окончательный вариант зависит от структуры регистра, измерений, ресурсов и реальных отборов. Вставьте сюда текущий запрос в исходном виде. Я верну оптимизированный вариант и отдельно укажу, какие настройки изменить в динамическом списке.
-
АвторЗаписи