Проверка наличия цен и остатков в перемещении. Розница 3

Клиенту нужен был собственный контроль остатков, потому что типовой был выключен. Чтобы допустимый остаток мог опускаться до минус одного.

А также контроль цен, чтобы при перемещении на точку по всем товарам был задан вид цен этой точки.

Код проверки получился простой и лаконичный:


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




Среда: Розница 3.0.12.237 Объем: 1 час

image_pdfimage_print

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Вам может также понравиться...

комментария 22

  1. rzd:

    банальное исправление «вчерашнего» документа приведет к нарушению контроля остатков. Я уже не говорю про другие виды документов

  2. Виталий:

    fixin
    18.08.2026 в 12:17
    все же не понимаю о чем вы. напишите заново развернуто или остановимся на этом.

    Речь о том, что ваш контроль смотрит остаток только на момент проведения этого перемещения. Если потом задним числом изменить более ранний документ, можно получить минус между документами, а это перемещение уже никто автоматически не перепроверит. Именно про эту дыру rzd и пишет.

    • Именно так и контролировался остаток в старых конфигурациях и никого это не смущало. Решалось через политику доступа к заднему числу только квалифицированных пользователей.
      А сейчас квалифицированный пользователь не может поменять товар в документе, не распроведя всю цепочку, например.
      т.е. проблем от «новой схемы контроля остатков» стало не меньше, а больше.
      1с волюнтаристски, без общения с сообществом вводит моды на алгоритмы, в итоге страдает бизнес.
      но РЖД видимо об этом не знает.

      • rzd:

        Сколько пафоса. А просто признать ошибку?

        • Это не моя ошибка. Я бы никогда не написал такой код. Ошибка у того, кто пишет такой код. Именно в том, что он пишет такой код.
          Если в плане интеллектуальной игры, то не вопрос, ошибся и не вижу в этом проблемы.
          На практике такой код не используется.

      • Виталий:

        То, что в старых конфигурациях было так же, не закрывает дыру в вашем контроле. Речь всё ещё про изменение более раннего документа задним числом.

        • я ответил, что не считаю новый подход лучшим. Поэтому применяю старый. У нового больше недостатков.

          • Виталий:

            Так вопрос не в том, какой подход вам больше нравится. Вопрос в том, что в старом подходе остаётся дыра при изменении предыдущих документов задним числом.

          • а в новом подходе другая дыра. вы меня читаете, но не воспринимаете информацию.

  3. Виталий:

    fixin
    20.08.2026 в 09:59
    а в новом подходе другая дыра. вы меня читаете, но не воспринимаете информацию.

    Я понял, что новый подход вам не нравится. Но это всё ещё не ответ на вопрос про дыру в старом

    • из двух подходов я выбрал старый, т.к. считаю его более корректным.

      • Виталий:

        Вы упорно отвечаете на вопрос, какой подход выбрали. Я уже понял — старый. Я пытаюсь выяснить другое: что делать с дырой при изменении более раннего документа задним числом? Можете ответить именно на это?

        • в моем конкретном случае ничего. общие рекомендации я тоже давал — запрет работы задним числом не квалифицированным пользователям.

          • rzd:

            а если «квалифицированный» сделает? Он даже не узнает, что ушел в минус, сообщения же не будет даже

          • на то он и квалифицированный. вы как будто с 1с начали работать в 2020 году, когда пошла мода на новый способ контроля остатков.
            и потом, есть же процедуры закрытия месяца и контроля остатков.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *