Проверка наличия цен и остатков в перемещении. Розница 3
Клиенту нужен был собственный контроль остатков, потому что типовой был выключен. Чтобы допустимый остаток мог опускаться до минус одного.
А также контроль цен, чтобы при перемещении на точку по всем товарам был задан вид цен этой точки.
Код проверки получился простой и лаконичный:
&Перед("ПередЗаписью") Процедура дор_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) //Какой допустимый остаток возможен после проведения документа ДопустимыйПорогОстатка = -1; //Контролируем остатки и наличие цен //только если отправитель - главный склад Если РежимЗаписи = РежимЗаписиДокумента.Проведение И ЭтотОбъект.СтруктурнаяЕдиница = дор_С.ГлавныйСклад() Тогда ТЗ = ЭтотОбъект.Запасы.Выгрузить(, "НомерСтроки, Номенклатура, Характеристика, Количество"); З = Новый Запрос(); З.Текст = "ВЫБРАТЬ | Т.НомерСтроки КАК НомерСтроки, | Т.Номенклатура КАК Номенклатура, | Т.Характеристика КАК Характеристика, | Т.Количество КАК Количество |ПОМЕСТИТЬ ТН |ИЗ | &ТЗ КАК Т |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТН.НомерСтроки КАК НомерСтроки, | ТН.Номенклатура КАК Номенклатура, | ТН.Характеристика КАК Характеристика, | ЕСТЬNULL(ТЦ.Цена, 0) КАК Цена, | ЕСТЬNULL(ТО.КоличествоОстаток, 0) КАК Остаток, | ТН.Количество КАК Количество |ИЗ | ТН КАК ТН | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ВидЦен = &ВидЦен) КАК ТЦ | ПО ТН.Номенклатура = ТЦ.Номенклатура | И ТН.Характеристика = ТЦ.Характеристика | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗапасыНаСкладах.Остатки( | &Дата, | Организация = &Организация | И СтруктурнаяЕдиница = &СкладОтправитель) КАК ТО | ПО ТН.Номенклатура = ТО.Номенклатура | И ТН.Характеристика = ТО.Характеристика"; Если ЭтотОбъект.Ссылка.Пустая() Тогда Граница = Новый Граница(ЭтотОбъект.Дата, ВидГраницы.Исключая); Иначе Граница = Новый Граница(ЭтотОбъект.МоментВремени(), ВидГраницы.Исключая); КонецЕсли; З.УстановитьПараметр("Дата", Граница); З.УстановитьПараметр("ТЗ", ТЗ); З.УстановитьПараметр("ВидЦен", ЭтотОбъект.СтруктурнаяЕдиницаПолучатель.РозничныйВидЦен); З.УстановитьПараметр("СкладОтправитель", ЭтотОбъект.СтруктурнаяЕдиница); З.УстановитьПараметр("Организация", ЭтотОбъект.Организация); Выборка = З.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.Цена = 0 Тогда Сообщить("У товара не назначена цена: " + Выборка.Номенклатура + " " + Выборка.Характеристика); Отказ = истина; КонецЕсли; Остаток = Выборка.Остаток - Выборка.Количество; Если Остаток < ДопустимыйПорогОстатка Тогда Сообщить( "У товара перемещается: " + Выборка.Количество + " на остатке: " + Выборка.Остаток + " после проведения остаток: " + Остаток + ", что меньше допустимого: " + ДопустимыйПорогОстатка + "! " + " " + Выборка.Номенклатура + " " + Выборка.Характеристика); Отказ = истина; КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры
Среда: Розница 3.0.12.237 Объем: 1 час




банальное исправление «вчерашнего» документа приведет к нарушению контроля остатков. Я уже не говорю про другие виды документов
вы про остаток на конец времен? Такое себе ноу-хау от 1с, от которого больше вреда, чем пользы.
Я про то, что у тебя дыр в контролеа. Причем тут 1с,
не понимаю, о чем Вы. выразитесь более конкретно.
Ну так вернись к первому комментарию и перечитай
все же не понимаю о чем вы. напишите заново развернуто или остановимся на этом.
fixin
18.08.2026 в 12:17
все же не понимаю о чем вы. напишите заново развернуто или остановимся на этом.
Речь о том, что ваш контроль смотрит остаток только на момент проведения этого перемещения. Если потом задним числом изменить более ранний документ, можно получить минус между документами, а это перемещение уже никто автоматически не перепроверит. Именно про эту дыру rzd и пишет.
Именно так и контролировался остаток в старых конфигурациях и никого это не смущало. Решалось через политику доступа к заднему числу только квалифицированных пользователей.
А сейчас квалифицированный пользователь не может поменять товар в документе, не распроведя всю цепочку, например.
т.е. проблем от «новой схемы контроля остатков» стало не меньше, а больше.
1с волюнтаристски, без общения с сообществом вводит моды на алгоритмы, в итоге страдает бизнес.
но РЖД видимо об этом не знает.
Сколько пафоса. А просто признать ошибку?
Это не моя ошибка. Я бы никогда не написал такой код. Ошибка у того, кто пишет такой код. Именно в том, что он пишет такой код.
Если в плане интеллектуальной игры, то не вопрос, ошибся и не вижу в этом проблемы.
На практике такой код не используется.
А чей код в посте представлен?
не знаю, комментатор в другом блоге спросил.
То, что в старых конфигурациях было так же, не закрывает дыру в вашем контроле. Речь всё ещё про изменение более раннего документа задним числом.
я ответил, что не считаю новый подход лучшим. Поэтому применяю старый. У нового больше недостатков.
Так вопрос не в том, какой подход вам больше нравится. Вопрос в том, что в старом подходе остаётся дыра при изменении предыдущих документов задним числом.
а в новом подходе другая дыра. вы меня читаете, но не воспринимаете информацию.
fixin
20.08.2026 в 09:59
а в новом подходе другая дыра. вы меня читаете, но не воспринимаете информацию.
Я понял, что новый подход вам не нравится. Но это всё ещё не ответ на вопрос про дыру в старом
из двух подходов я выбрал старый, т.к. считаю его более корректным.
Вы упорно отвечаете на вопрос, какой подход выбрали. Я уже понял — старый. Я пытаюсь выяснить другое: что делать с дырой при изменении более раннего документа задним числом? Можете ответить именно на это?
в моем конкретном случае ничего. общие рекомендации я тоже давал — запрет работы задним числом не квалифицированным пользователям.
а если «квалифицированный» сделает? Он даже не узнает, что ушел в минус, сообщения же не будет даже
на то он и квалифицированный. вы как будто с 1с начали работать в 2020 году, когда пошла мода на новый способ контроля остатков.
и потом, есть же процедуры закрытия месяца и контроля остатков.