Контроль отрицательных остатков в "Комплексной автоматизации 1.1" при неоперативном проведении по регистру накопления "Свободные остатки".

29.05.15

Разработка - Механизмы типовых конфигураций

Данная методика позволила просто решить задачу контроля остатков при неоперативном проведении.  
  1. Создаем новый общий модуль (для удобства последующего обновления конфигурации).
  2. Создаем подписку на событие. Источники (документы по которым контролируем остатки). Событие - Обработка проведения. Обработчик - процедура в созданном общем модуле.
Процедура Ферма_КонтрольОстатковНеоперативноеПроведение(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
    
    Если Не Отказ И РежимЗаписи = РежимПроведенияДокумента.Неоперативный Тогда
        
        МетаданныеДокумента = Источник.Ссылка.Метаданные();
        
        // Заголовок для сообщений об ошибках проведения.
        Заголовок = ОбщегоНазначения.ПредставлениеДокументаПриПроведении(Источник.Ссылка);
        СтруктураШапкиДокумента = ОбщегоНазначения.СформироватьСтруктуруШапкиДокументаИПроверитьОтражениеВУчете(Источник, Отказ, Заголовок);
        Если МетаданныеДокумента.Реквизиты.Найти("СкладОтправитель") <> Неопределено Тогда
            СтруктураШапкиДокумента.Вставить("Склад", Источник.СкладОтправитель);
        Иначе
            СтруктураШапкиДокумента.Вставить("Склад", Источник.Склад);
        КонецЕсли;
        
        ИспользоватьРегистрСвободныеОстатки = глЗначениеПеременной("ИспользоватьРегистрСвободныеОстатки"); 
        Если ИспользоватьРегистрСвободныеОстатки И НЕ Отказ Тогда
            Если глЗначениеПеременной("ИспользоватьБлокировкуДанных")  Тогда
                Источник.Движения.СвободныеОстатки.БлокироватьДляИзменения = Истина;
            КонецЕсли;
            Источник.Движения.Записать();
            Если МетаданныеДокумента.ТабличныеЧасти.Найти("Товары") <> Неопределено И Источник.Товары.Количество() <> 0 Тогда
                Если Источник.Товары.Количество() <> 0 Тогда          
                    КонтрольОстатков(
                    "Товары", СтруктураШапкиДокумента, Отказ, Заголовок, РежимПроведенияДокумента.Оперативный);
                КонецЕсли;
            КонецЕсли;
            Если МетаданныеДокумента.ТабличныеЧасти.Найти("ВозвратнаяТара") <> Неопределено И Источник.ВозвратнаяТара.Количество() <> 0 Тогда
                Если Источник.ВозвратнаяТара.Количество() <> 0 Тогда          
                    КонтрольОстатков(
                    "ВозвратнаяТара", СтруктураШапкиДокумента, Отказ, Заголовок, РежимПроведенияДокумента.Оперативный);
                КонецЕсли;
            КонецЕсли;
            Если МетаданныеДокумента.ТабличныеЧасти.Найти("Материалы") <> Неопределено  И Источник.Материалы.Количество() <> 0 Тогда
                Если Источник.Материалы.Количество() <> 0 Тогда          
                    КонтрольОстатков(
                    "Материалы", СтруктураШапкиДокумента, Отказ, Заголовок, РежимПроведенияДокумента.Оперативный);
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
        
    КонецЕсли;
    
    
КонецПроцедуры
 

3. Переносим процедуры модуля менеджера регистра накопления "Свободные остатки" в созданный общий модуль на первом этапе. И немного изменяем процедуру "КонтрольОстатков"

Процедура КонтрольОстатков(ИмяТабличнойЧасти, СтруктураШапкиДокумента, ОтказПроведения, ЗаголовокСообщения, РежимПроведения) Экспорт
	Если РежимПроведения <> РежимПроведенияДокумента.Оперативный Тогда
		Возврат;
	КонецЕсли;
	
	Если УправлениеДопПравамиПользователей.РазрешеноПревышениеОстаткаТоваровНаСкладе() Тогда
		Возврат;
	КонецЕсли;
	
	Отказ     = ОтказПроведения;
    Заголовок = ЗаголовокСообщения;

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

	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
	
	Запрос.УстановитьПараметр("Ссылка", СтруктураПараметров.ДокументСсылка);
	Запрос.УстановитьПараметр("ДокументКонтроля", Новый Граница(СтруктураПараметров.ДокументСсылка.МоментВремени()));

	Запрос.Текст = ТекстЗапроса;
	
	РезультатЗапроса = Запрос.Выполнить();
	Выборка = РезультатЗапроса.Выбрать();
	
	ПроверитьОстатки(Выборка, Отказ, Заголовок, СтруктураПараметров);
	
	ОтказПроведения = Отказ;
    ЗаголовокСообщения = Заголовок;

КонецПроцедуры // КонтрольОстатков()
 

Теперь, если у вас настроен контроль по регистру "Свободные остатки" и у роли пользователя нет разрешения проводить документы не контролируя остатки, документ не должен проводится при превышении остатка.

 

См. также

Ценовая власть. Выносим из цикла схему СКД

Механизмы типовых конфигураций Ценообразование, анализ цен Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)

Продолжение темы вынесения кусков повторно-используемого кода в запрос. В прошлый раз мы сделали это с вычислением пользовательских формул. Здесь замахнулись на формулы, задаваемые пользователем запросами.

1 стартмани

11.04.2024    497    tango    0    

3

Формула в реквизите. Приквелл к сериалу "Ценовая власть"

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Какому-либо элементу списка сопоставляется числовое значение, зависящее от других значений, причем эта зависимость изменяется от элемента к элементу. Так, в справочнике "Валюты" курс какой-либо валюты может быть задан формулой (или даже запросом) от значения другой валюты. А в справочнике "Виды цен" формула определяет расчет цены для товарной позиции, т.е. элементов справочника "Номенклатура", у которых в карточке указан этот вид цены. А в 1С:ERP, например, этот механизм используется в ресурсной спецификации.

10 стартмани

11.04.2024    382    tango    5    

3

Ценовая власть. Второй сезон

Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Бесплатно (free)

В первом сезоне мы рассмотрели (с точки зрения программиста) внутренний механизм, помещающий цены в регистр "Цены". Из этого регистра цена попадает в исходящие УПД (в продажи). Но эта цена (в прайс-листе) дифференцирована (ценообразована) в разрезах свойств самой номенклатуры. Но стратегия ценообразования, ценовая власть - это в первую очередь о работе с ценами для клиента. И тут вступает в дело второй акт марлезонского, Скидки (наценки) и кешбек.

08.04.2024    615    tango    0    

2

Ценовая власть (УТ 11.5) - 2

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление торговлей 11 Бесплатно (free)

В прошлый раз специальной обработкой мы выбрали объекты УТ 1.5, группируя по подсистемам. Оказалось, что состав подсистем не вполне корректно отображает функциональную структуру, но зато мы нашли процедуру, которая, вроде бы, должна содержать в себе всё, что нас интересует. Обновление цен должно ведь следовать выбранной стратегии ценообразования, верно? Иначе что она обновляет...

06.04.2024    444    tango    1    

1

Ценовая власть или Управление ценообразованием (УТ 11.5)

Ценообразование, анализ цен Механизмы типовых конфигураций Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Россия Управленческий учет Абонемент ($m)

Ценовая власть - это способность (возможность) компании изменять в некоторых пределах отпускную цену своего товара (услуг, продукции). Чем в более широких пределах вы можете играть в цену продажи, тем больше этой власти у вас. Если вы не можете управлять отпускной ценой, то это или не ваш бизнес, или не бизнес вовсе. Здесь в рубрике "База знаний аналитика и руководителя проекта" слово проект не ограничено "проектом в 1С". Посмотрим, что для этого есть в УТ 11.5.

1 стартмани

05.04.2024    529    tango    12    

2

Расширяем возможности дополнительных обработок и настраиваем их отладку

БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Уже не одна веб-страница исписана знаниями о дополнительных обработках, как создать, как подключить. Есть масса вариантов, как их можно отладить. Я разобрался в кишках работы библиотеки и покажу, как можно расширить возможности дополнительных отчетов, а также покажу удобный способ отладки.

07.02.2024    2599    YA_418728146    11    

42

Регистры накопления в 1С:КА2 и 1С:ERP для расчета НДФЛ, страховых взносов и взаиморасчетов с сотрудниками на январь 2024 года. Краткое описание

Зарплата Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет НДФЛ Абонемент ($m)

Для расчета зарплаты и соответствующих налогов в конфигурациях 1С:КА2 и 1С:ERP используется 22 регистра накопления, 7 регистров сведений, 1 регистр расчета и бухгалтерские проводки. В таблице приведены названия этих регистров, указаны основные регистраторы и виды движений приход/расход. В описании приводится краткое функциональное назначение регистров в основных зарплатных процессах. Описание регистров родилось из черновиков при написании различных отчетов и обработок при эксплуатации 1С-овских конфигураций и исправлении ошибок по НДФЛ, взаиморасчетов с сотрудниками и прочих. Информация не претендует на полноценное описание работы регистров, скорее это дискуссионный материал. Но, возможно, кому-то пригодится и сократит время при подготовке отчетности за непростой (в плане учета зарплаты) 2023 год. А возможно, кто-то поделится своим опытом.

1 стартмани

10.01.2024    1143    8    2ncom    6    

8

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    4968    mrXoxot    11    

100
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kodosane 29.08.16 15:37 Сейчас в теме
Здравствуйте. А можно подробнее,
документы по которым контролируем остатки
- это конкретно что?
+
2. duhh 236 30.08.16 10:10 Сейчас в теме
(1) kodosane, Реализация, списание, перемещение .....
+
Оставьте свое сообщение