В типовых конфигурациях, таких как 1С:Управление торговлей 11, 1С:ERP или 1С:Комплексная автоматизация, механизм «Интеркампани» (межфирменные продажи) работает на уровне организаций. Это означает, что если между Организацией А и Организацией Б настроена возможность передачи товаров, система позволяет продавать остатки Организации Б со складов Организации А без детального разделения прав по конкретным территориям. Рассмотрим ситуацию, когда в системе появляются новые склады, которые должны быть исключены из этого процесса — например, региональные склады или склады ответственного хранения, где смешивание товаров разных юрлиц недопустимо.
Выясним причину, по которой типовая настройка не позволяет решить задачу «из коробки». Настройки в РегистрСведений.НастройкиПередачиТоваровМеждуОрганизациями задаются строго для пар организаций. В них нельзя указать фильтр по складу. Поэтому для решения задачи нам потребуется использовать механизм расширений и программную логику. Разберем по шагам наиболее эффективные методы реализации «защиты от дурака».
Первым делом проанализируем, как системе понять, какие именно склады должны игнорировать настройки Интеркампани. Самый гибкий способ — добавить в расширении новый реквизит в справочник Склады.
Склады реквизит ЗапретитьМежфирменныеПродажи с типом Булево.После этого у нас появится аналитика, на которую можно опираться в программном коде. Теперь нам нужно запретить системе «видеть» чужие остатки на этих складах в момент проведения реализации.
Рассмотрим вариант оперативного контроля при проведении документов РеализацияТоваровУслуг. Этот метод позволяет выдать пользователю понятную ошибку, если он пытается списать товар чужой организации с «запрещенного» склада. Проанализируем логику проверки: нам нужно сравнить организацию документа и владельца товара в регистре ТоварыОрганизаций или РезервыТоваровОрганизаций.
Посмотрим на пример кода, который можно разместить в модуле расширения (в подписке на событие или через &После в обработке проведения):
Процедура ПередЗаписью_КонтрольИнтеркампаниНаСкладах(Источник, Отказ, РежимЗаписи, РежимПроведения)
Если РежимЗаписи <> РежимЗаписиДокумента.Проведение Тогда
Возврат;
КонецЕсли;
// Проверяем наличие запрещенных складов в табличной части
Для Каждого СтрокаТЧ Из Источник.Товары Цикл
// Допустим, мы добавили реквизит ЗапретитьМежфирменныеПродажи
Если СтрокаТЧ.Склад.ЗапретитьМежфирменныеПродажи Тогда
// Здесь должна быть логика проверки:
// используется ли в этой строке товар другой организации.
// В УТ 11 это можно понять, анализируя движения по регистру "Резервы товаров организаций"
// или проверяя остатки конкретно по организации документа.
// Упрощенный пример проверки принадлежности:
Если Источник.Организация <> СтрокаТЧ.СводныйВладелецТовара Тогда // Схематично
ТекстОшибки = "Склад " + СтрокаТЧ.Склад + " не участвует в межфирменных продажах!";
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, Источник, "Товары", СтрокаТЧ.НомерСтроки);
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Важно помнить: механизм Интеркампани в 1С:УТ 11 сложный. Он часто делает записи в регистр РезервыТоваровОрганизаций в момент проведения продажи. Если вы видите, что в этом регистре появляется запись, где Организация документа отличается от ОрганизацииВладельца, и при этом указан ваш «запрещенный» склад — это сигнал для блокировки проведения.
Проанализируем более глубокий подход. Чтобы менеджеры даже не видели возможности подобрать чужой товар на этих складах, необходимо вмешаться в работу общих модулей, отвечающих за расчет остатков к продаже. Основным объектом здесь является общий модуль ЗапасыСервер (или ЗапасыСерверПереопределяемый в некоторых версиях).
В этих модулях формируются запросы к виртуальным таблицам остатков регистров ТоварыНаСкладах и ТоварыОрганизаций. Мы можем использовать аннотацию &Вместо для функций, собирающих данные по Интеркампани.
Нам необходимо модифицировать запрос так, чтобы при соединении таблиц остатков с настройками передачи (РегистрСведений.НастройкиПередачиТоваровМеждуОрганизациями) накладывалось условие: «ЕСЛИ Склад.ЗапретитьМежфирменныеПродажи ТОГДА ОрганизацияВладелец = ОрганизацияПродавец».
Разберем, на что обратить внимание при правке запроса:
Склады.ГДЕ или в условии связи с настройками Интеркампани добавьте логическое исключение для складов с установленным флагом.Этот путь является самым трудозатратным, так как требует поддержки при обновлениях конфигурации, но он обеспечивает самый качественный результат: система будет вести себя так, будто межфирменных настроек для этих складов просто не существует.
Посмотрим на ситуацию со стороны организации учета. Если склады новые и на них категорически нельзя смешивать товары, можно рассмотреть вариант настройки Обособленного учета запасов. В настройках номенклатуры или в целом по системе можно включить ведение учета в разрезе владельцев (назначений).
Однако помните, что механизм Интеркампани специально создан для того, чтобы «обходить» жесткие остатки организаций. Поэтому программное ограничение через расширение, описанное выше, остается наиболее надежным способом реализации «черного списка» складов.
Резюмируем:
Для реализации задачи оптимально использовать комбинацию Решения 1 (флаг на складе) и Решения 2 (подписка на событие ОбработкаПроведения документа РеализацияТоваровУслуг). Это позволит минимальными усилиями предотвратить ошибки персонала и корректно ограничить оборот товаров между организациями на специфических территориях.