Адресное хранение в 1С: УТ 11, ERP, УНФ и доработка под ТСД

Дата: 06.10.2026 16:54:16
адресное хранение
складские ячейки
УТ 11
ERP
УНФ
ТСД
ордерный склад
правила размещения
Комментарий:
0
Платформа:
8.3
Конфигурация:
1С: УТ 11.5
Формы:
Управляемые

Адресное хранение в 1С — учет, в котором у товара на складе есть адрес: стеллаж, ярус, ячейка. Задача возникает, когда склад вырос: товар ищут по памяти, отбор идет медленно, растет пересорт. В 1С адресное хранение товаров устроено по-разному: в УТ 11, КА 2 и ERP это ячейки с остатками, правила размещения и задания для ТСД, в УНФ — ячейка как разрез остатков.

Адресное хранение в 1С: что есть в УТ 11, ERP и УНФ

УТ 11, КА 2, ERP 2УНФ 3.0
ВключениеКарточка склада, вкладка «Ордерная схема и структура», поле «Ячейки»«Настройки» → «Еще больше возможностей» → «Склад» → «Ячеистые склады»
УсловиеОрдерная схема при поступлении, отгрузке и отражении излишковНет
ЯчейкиАдрес-код, тип, типоразмер, область хранения, участокДерево любой глубины
ОстаткиРегистр «Товары в ячейках»Измерение «Ячейка» регистра «Запасы на складах»
Куда кластьПравила размещения, области храненияЯчейка по умолчанию в карточке товара
КладовщикЗадания на отбор и размещение, пересчеты, блокировки«Перемещение по ячейкам»
ТСДМобильные рабочие места, веб-сервис, пакетный обменПакетный обмен

Адресное хранение 1С ERP устроено так же, как в УТ 11: складская подсистема общая. Особенность ERP — кладовые цехов: у склада с флажком «Кладовая цеха» ордерная схема выключается, а с ней и ячейки с остатками.

Как устроены ячейки, правила и задания в УТ 11 и ERP

Склад: ордерная схема и режим ячеек

Флажок «Ордерные склады» — «НСИ и администрирование» → «Настройка НСИ и разделов» → «Склад и доставка». Поле «Ячейки» в карточке склада (вкладка «Ордерная схема и структура», блок «Структура склада»):

  • «Использовать для хранения остатков номенклатуры» — остатки по ячейкам, задания, контроль; нужны все три флажка ордерной схемы.
  • «Использовать для справочного размещения номенклатуры» — ячейки только печатаются в заданиях на размещение, остатков по ним нет.
  • «Использование определяется в помещениях» — режим задается в каждом помещении.

Дата «с» рядом с полем — начало учета по ячейкам. Остальные настройки карточки — в статье о складах в УТ 11.

Ячейки и топология

Справочник «Складские ячейки» подчинен складу. Адрес — код ячейки до 19 символов, им ячейка и показывается в документах. У ячейки есть область хранения, рабочий участок, типоразмер, порядок обхода и тип: «Хранение», «Приемка», «Отгрузка» или «Архив», куда новый товар не кладут. В КА 2.5 «Отгрузка» делится на варианты без учета и с учетом остатков.

Ячейки создает обработка «Генерация топологии склада» по диапазонам секций, линий, стеллажей, ярусов и позиций — адрес вида A-01-03-2-05. В штрихкоде типовой этикетки («Печать этикеток» в списке ячеек) не адрес, а уникальный идентификатор ячейки длинным числом: после повторной генерации ячеек этикетки печатают заново. Свой штрихкод с адресом делайте из латиницы и цифр — Code 128 кириллицу не кодирует.

Правила размещения и области хранения

Куда класть принятый товар, решает регистр «Правила размещения товаров»: сочетание «складская группа номенклатуры + складская группа упаковок» ведет в область хранения склада с приоритетом. Группа номенклатуры — в карточке номенклатуры, группа упаковок — в карточке упаковки, у товара без упаковки она пустая. Область хранения задает приоритеты размещения и отбора: свободные, монотоварные, смешанные ячейки, отбор «под остаток». Правила и типоразмеры ячеек — «Склад и доставка» → «Настройки и справочники».

Задания на размещение и отбор

Работу кладовщика описывает документ «Отбор (размещение) товаров» с видом операции «Размещение», «Отбор» или «Перемещение» и статусами «Подготовлено» → «В работе» → «Выполнено без ошибок» или «Выполнено с ошибками».

Приходный ордер в статусе «Принят» кладет товар в ячейку зоны приемки, дальше — «Склад и доставка» → «Приемка товаров на склад», закладка «Размещение в ячейки», «Создать задания на размещение». Для отгрузки: расходный ордер «К отбору» → «Отгрузка товаров со склада», закладка «Отбор из ячеек», «Создать задания на отбор».

Остатки ведет регистр «Товары в ячейках», количество в нем — в упаковке строки. Задание «Подготовлено» или «В работе» резервирует товар в ресурсе «К отбору», выполненное двигает «В наличии». Отчеты — «Товары в ячейках», «Размещение товаров на адресном складе», «Отчет по заблокированным ячейкам» («Склад и доставка» → «Отчеты по складу»).

Ячеистые склады в УНФ

Адресное хранение в 1С УНФ — это ячейка как разрез остатков. Флажок «Ячеистые склады» — «Настройки» → «Еще больше возможностей» → «Склад». Справочник «Ячейки склада» подчинен складу и открывается из его карточки, вложенность любая. Ячейку указывают в накладных, перемещениях, ордерах, оприходовании, списании и инвентаризации, внутри склада товар двигает «Перемещение по ячейкам». Ячейка из карточки номенклатуры подставляется в документы по умолчанию.

Остатки — регистр «Запасы на складах» с измерением «Ячейка» и отчет «Склад», вариант «Остатки по ячейкам». Правил, заданий и блокировок нет, ТСД — пакетно («Склад» → «Сервис» → «Выгрузка товаров в ТСД»). Для заданий и контроля сборки нужны УТ, КА, ERP или отдельная WMS.

Запросы: где лежит товар и что не разместится

Первый запрос показывает, в каких ячейках товар и сколько можно отобрать; проверить его можно в бесплатной консоли запросов.

// УТ 11, КА 2, ERP 2: в каких ячейках склада лежит товар и сколько можно отобрать.
// Параметры: &Склад, &Номенклатура. Регистр хранит количество в упаковке строки,
// поэтому свободный остаток дополнительно переведен в единицы хранения.
ВЫБРАТЬ
	Остатки.Ячейка КАК Ячейка,
	Остатки.Ячейка.ТипСкладскойЯчейки КАК ТипЯчейки,
	Остатки.Ячейка.ОбластьХранения КАК ОбластьХранения,
	Остатки.Характеристика КАК Характеристика,
	Остатки.Серия КАК Серия,
	Остатки.Упаковка КАК Упаковка,
	Остатки.ВНаличииОстаток КАК ВНаличии,
	Остатки.КОтборуОстаток КАК ПодЗаданиями,
	Остатки.ВНаличииОстаток - Остатки.КОтборуОстаток КАК Свободно,
	(Остатки.ВНаличииОстаток - Остатки.КОтборуОстаток) * ВЫБОР
		КОГДА Остатки.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
			ТОГДА 1
		КОГДА ЕСТЬNULL(Остатки.Упаковка.Знаменатель, 0) = 0
			ТОГДА 1
		ИНАЧЕ Остатки.Упаковка.Числитель / Остатки.Упаковка.Знаменатель
	КОНЕЦ КАК СвободноВЕдиницах,
	ЕСТЬNULL(Блокировки.ТипБлокировки, ЗНАЧЕНИЕ(Перечисление.ТипыБлокировокСкладскихЯчеек.ПустаяСсылка)) КАК Блокировка
ИЗ
	РегистрНакопления.ТоварыВЯчейках.Остатки(
			,
			Ячейка.Владелец = &Склад
				И Номенклатура = &Номенклатура) КАК Остатки
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.БлокировкиСкладскихЯчеек КАК Блокировки
		ПО Остатки.Ячейка = Блокировки.Ячейка
ГДЕ
	Остатки.ВНаличииОстаток > 0

УПОРЯДОЧИТЬ ПО
	Остатки.Ячейка.ПорядокОбхода,
	Остатки.Ячейка.Код

Вторая проверка — перед запуском и после больших приемок: что лежит в зоне приемки без задания и не разместится без правила, сразу списком.

// УТ 11, КА 2, ERP 2. Серверный общий модуль расширения или модуль объекта обработки.
// Товар, который лежит в зоне приемки без задания и не разместится: для его сочетания
// «складская группа номенклатуры + складская группа упаковок» на складе нет правила.
// Помещение - пустая ссылка, если склад не разбит на помещения.
Функция ТоварыБезПравилРазмещения(Склад, Помещение) Экспорт

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

	Возврат Запрос.Выполнить().Выгрузить();

КонецФункции

В УНФ сначала ищут остатки без ячейки:

// УНФ 3.0: остатки склада по ячейкам. Строки с пустой ячейкой - товар, который
// пришел до включения «Ячеистых складов» или оформлен без ячейки. Параметр: &Склад.
ВЫБРАТЬ
	Остатки.Организация КАК Организация,
	Остатки.Ячейка КАК Ячейка,
	Остатки.Номенклатура КАК Номенклатура,
	Остатки.Характеристика КАК Характеристика,
	Остатки.КоличествоОстаток КАК Количество,
	Остатки.Номенклатура.Ячейка КАК ЯчейкаПоУмолчанию,
	ВЫБОР
		КОГДА Остатки.Ячейка = ЗНАЧЕНИЕ(Справочник.Ячейки.ПустаяСсылка)
			ТОГДА ИСТИНА
		ИНАЧЕ ЛОЖЬ
	КОНЕЦ КАК БезЯчейки
ИЗ
	РегистрНакопления.ЗапасыНаСкладах.Остатки(, СтруктурнаяЕдиница = &Склад) КАК Остатки
ГДЕ
	Остатки.КоличествоОстаток <> 0

УПОРЯДОЧИТЬ ПО
	БезЯчейки УБЫВ,
	Ячейка,
	Номенклатура

Доработка под ТСД: свой сервис поверх типовых заданий

Обзор типовых вариантов — в статье о ТСД в 1С. В УТ 11.5, КА 2.5 и ERP 2.5 есть «Мобильное рабочее место кладовщика» для мобильного клиента 1С: приемка, размещение, отбор, перемещение, пересчет, блокировки. В УТ 11.4 его нет — там «Рабочее место работника склада» с формами под экраны от 240×320 до 480×640 и SOAP-сервис WMSMobileClientExchange.

Свой код нужен, когда на складе работает приложение ТСД стороннего разработчика или своя WMS. Схема — HTTP-сервис в расширении поверх документа «Отбор (размещение) товаров». Ниже — функции общего модуля расширения СкладТСД и модуль сервиса; создание и публикация — в статье об HTTP-сервисе 1С.

// УТ 11, КА 2, ERP 2. Общий модуль расширения СкладТСД, флажок «Сервер».
// Ячейка по данным со сканера ТСД: штрихкод типовой этикетки (длинное число -
// уникальный идентификатор ячейки) или адрес, набранный вручную.
// ДляОтбора: Истина - из ячейки берут товар, Ложь - кладут.
// Возвращает структуру: Ячейка, Адрес, ТипЯчейки, ТипБлокировки, Ошибка ("" - ячейка годится).
Функция ЯчейкаПоДаннымСканера(Склад, Знач Помещение, Знач ДанныеСканера, ДляОтбора = Ложь) Экспорт

	Результат = Новый Структура("Ячейка, Адрес, ТипЯчейки, ТипБлокировки, Ошибка");
	Результат.Ошибка = "";
	ДанныеСканера = СокрЛП(ДанныеСканера);
	Если ПустаяСтрока(ДанныеСканера) Тогда
		Результат.Ошибка = НСтр("ru = 'Пустой штрихкод.'");
		Возврат Результат;
	КонецЕсли;
	Если Не ЗначениеЗаполнено(Помещение) Тогда
		Помещение = Справочники.СкладскиеПомещения.ПустаяСсылка();
	КонецЕсли;

	// Для штрихкода этикетки типовая функция вернет ссылку, для адреса - пустой массив.
	Менеджеры = Новый Массив;
	Менеджеры.Добавить(Справочники.СкладскиеЯчейки.ПустаяСсылка());
	ПоШтрихкоду = ШтрихкодированиеПечатныхФорм.ПолучитьСсылкуПоШтрихкодуТабличногоДокумента(
		ДанныеСканера, Менеджеры);

	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Склад", Склад);
	Запрос.УстановитьПараметр("Ссылки", ПоШтрихкоду);
	Запрос.УстановитьПараметр("Адрес", ДанныеСканера);
	Запрос.Текст =
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|	Ячейки.Ссылка КАК Ячейка,
	|	Ячейки.Код КАК Адрес,
	|	Ячейки.ТипСкладскойЯчейки КАК ТипЯчейки,
	|	Ячейки.Владелец КАК Склад,
	|	Ячейки.Помещение КАК Помещение,
	|	Ячейки.ЭтоГруппа КАК ЭтоГруппа,
	|	Ячейки.ПометкаУдаления КАК ПометкаУдаления,
	|	ЕСТЬNULL(Блокировки.ТипБлокировки,
	|		ЗНАЧЕНИЕ(Перечисление.ТипыБлокировокСкладскихЯчеек.ПустаяСсылка)) КАК ТипБлокировки,
	|	ВЫБОР
	|		КОГДА Ячейки.Ссылка В (&Ссылки)
	|			ТОГДА 0
	|		ИНАЧЕ 1
	|	КОНЕЦ КАК Порядок
	|ИЗ
	|	Справочник.СкладскиеЯчейки КАК Ячейки
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.БлокировкиСкладскихЯчеек КАК Блокировки
	|		ПО Ячейки.Ссылка = Блокировки.Ячейка
	|ГДЕ
	|	(Ячейки.Ссылка В (&Ссылки)
	|			ИЛИ Ячейки.Владелец = &Склад
	|				И Ячейки.Код = &Адрес)
	|
	|УПОРЯДОЧИТЬ ПО
	|	Порядок";

	Выборка = Запрос.Выполнить().Выбрать();
	Если Не Выборка.Следующий() Тогда
		Результат.Ошибка = СтрШаблон(НСтр("ru = 'Ячейка ""%1"" не найдена.'"), ДанныеСканера);
		Возврат Результат;
	КонецЕсли;
	ЗаполнитьЗначенияСвойств(Результат, Выборка, "Ячейка, Адрес, ТипЯчейки, ТипБлокировки");

	Блокировки = Перечисления.ТипыБлокировокСкладскихЯчеек;
	Если Выборка.ЭтоГруппа Или Выборка.ПометкаУдаления Тогда
		Результат.Ошибка = СтрШаблон(НСтр("ru = '%1 - группа ячеек или ячейка помечена на удаление.'"), Выборка.Адрес);
	ИначеЕсли Выборка.Склад <> Склад Или Выборка.Помещение <> Помещение Тогда
		Результат.Ошибка = СтрШаблон(НСтр("ru = 'Ячейка %1 с другого склада или помещения.'"), Выборка.Адрес);
	ИначеЕсли Выборка.ТипБлокировки = Блокировки.Полная
		Или ДляОтбора И Выборка.ТипБлокировки = Блокировки.Отбор
		Или Не ДляОтбора И Выборка.ТипБлокировки = Блокировки.Размещение Тогда
		Результат.Ошибка = СтрШаблон(НСтр("ru = 'Ячейка %1 заблокирована: %2.'"), Выборка.Адрес, Выборка.ТипБлокировки);
	ИначеЕсли Не ДляОтбора И Выборка.ТипЯчейки = Перечисления.ТипыСкладскихЯчеек.Архив Тогда
		Результат.Ошибка = СтрШаблон(НСтр("ru = 'Ячейка %1 архивная, класть в нее нельзя.'"), Выборка.Адрес);
	КонецЕсли;

	Возврат Результат;

КонецФункции
// Общий модуль СкладТСД, продолжение.
// Задания склада (помещения) в статусе «Подготовлено»: назначенные исполнителю и ничьи.
// Возвращает массив структур из строк, чисел и булевых значений - его можно сразу
// записать в JSON. Типовой список еще отбирает задания по рабочим участкам
// исполнителя - добавьте такое условие, если участки на складе используются.
Функция ЗаданияДляТСД(Склад, Помещение, Исполнитель) Экспорт

	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Склад", Склад);
	Запрос.УстановитьПараметр("Помещение", Помещение);
	Запрос.УстановитьПараметр("Исполнитель", Исполнитель);
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Задания.Ссылка КАК Ссылка,
	|	Задания.Номер КАК Номер,
	|	Задания.Дата КАК Дата,
	|	Задания.ВидОперации КАК ВидОперации,
	|	ПРЕДСТАВЛЕНИЕ(Задания.РабочийУчасток) КАК РабочийУчасток,
	|	ВЫБОР
	|		КОГДА Задания.Исполнитель = &Исполнитель
	|			ТОГДА ИСТИНА
	|		ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК Мое,
	|	ВЫБОР
	|		КОГДА Задания.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийОтбораРазмещенияТоваров.Размещение)
	|			ТОГДА Задания.ВесРазмещение
	|		ИНАЧЕ Задания.ВесОтбор
	|	КОНЕЦ КАК Вес
	|ИЗ
	|	Документ.ОтборРазмещениеТоваров КАК Задания
	|ГДЕ
	|	Задания.Проведен
	|	И Задания.Склад = &Склад
	|	И Задания.Помещение = &Помещение
	|	И Задания.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОтборовРазмещенийТоваров.Подготовлено)
	|	И Задания.Исполнитель В (&Исполнитель, ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка))
	|
	|УПОРЯДОЧИТЬ ПО
	|	Мое УБЫВ,
	|	Дата";

	Задания = Новый Массив;
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		Задание = Новый Структура;
		Задание.Вставить("id", XMLСтрока(Выборка.Ссылка));
		Задание.Вставить("number", Выборка.Номер);
		Задание.Вставить("date", XMLСтрока(Выборка.Дата));
		Задание.Вставить("operation", XMLСтрока(Выборка.ВидОперации));
		Задание.Вставить("area", Выборка.РабочийУчасток);
		Задание.Вставить("mine", Выборка.Мое);
		Задание.Вставить("weight", Выборка.Вес);
		Задания.Добавить(Задание);
	КонецЦикла;

	Возврат Задания;

КонецФункции

// Берет задание в работу так же, как типовое рабочее место: исполнитель, статус
// «В работе», дата начала, проведение. Блокировка и повторная проверка статуса
// не дают двум кладовщикам взять одно задание. Возвращает текст ошибки или "".
Функция ВзятьЗаданиеВРаботу(Задание, Исполнитель) Экспорт

	Ошибка = "";
	НачатьТранзакцию();
	Попытка
		Блокировка = Новый БлокировкаДанных;
		ЭлементБлокировки = Блокировка.Добавить("Документ.ОтборРазмещениеТоваров");
		ЭлементБлокировки.УстановитьЗначение("Ссылка", Задание);
		Блокировка.Заблокировать();

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

	Возврат Ошибка;

КонецФункции
// Модуль HTTP-сервиса расширения. Шаблоны URL:
// /tasks/{warehouse} - GET, список заданий; помещение - параметр ?room=<идентификатор>;
// /task/{id}/take - POST, взять задание в работу.
// ТСД подключается своим пользователем 1С - он и становится исполнителем.
Функция ЗаданияGET(Запрос)

	Попытка
		Склад = Справочники.Склады.ПолучитьСсылку(
			Новый УникальныйИдентификатор(Запрос.ПараметрыURL["warehouse"]));
		Помещение = Справочники.СкладскиеПомещения.ПустаяСсылка();
		ИдентификаторПомещения = Запрос.ПараметрыЗапроса.Получить("room");
		Если ЗначениеЗаполнено(ИдентификаторПомещения) Тогда
			Помещение = Справочники.СкладскиеПомещения.ПолучитьСсылку(
				Новый УникальныйИдентификатор(ИдентификаторПомещения));
		КонецЕсли;
	Исключение
		Возврат ОтветJSON(400, Новый Структура("error", "Ожидается идентификатор склада и помещения."));
	КонецПопытки;

	Задания = СкладТСД.ЗаданияДляТСД(Склад, Помещение, Пользователи.ТекущийПользователь());
	Возврат ОтветJSON(200, Задания);

КонецФункции

Функция ЗаданиеВзятьPOST(Запрос)

	Попытка
		Задание = Документы.ОтборРазмещениеТоваров.ПолучитьСсылку(
			Новый УникальныйИдентификатор(Запрос.ПараметрыURL["id"]));
	Исключение
		Возврат ОтветJSON(400, Новый Структура("error", "Ожидается идентификатор задания."));
	КонецПопытки;

	Ошибка = СкладТСД.ВзятьЗаданиеВРаботу(Задание, Пользователи.ТекущийПользователь());
	Если ЗначениеЗаполнено(Ошибка) Тогда
		Возврат ОтветJSON(409, Новый Структура("error", Ошибка));
	КонецЕсли;
	Возврат ОтветJSON(200, Новый Структура("result", "ok"));

КонецФункции

Функция ОтветJSON(КодСостояния, Данные)

	Запись = Новый ЗаписьJSON;
	Запись.УстановитьСтроку();
	ЗаписатьJSON(Запись, Данные);

	Ответ = Новый HTTPСервисОтвет(КодСостояния);
	Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
	Ответ.УстановитьТелоИзСтроки(Запись.Закрыть(), КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
	Возврат Ответ;

КонецФункции

Завершение задания с фактическими количествами не пишите заново: в 11.4 его делает ЗавершитьВыполнениеСкладскогоЗадания модуля РабочееМестоРаботникаСкладаПрограммныйИнтерфейс, ее же вызывает операция CompleteJob типового веб-сервиса. Сигнатура меняется: в УТ 11.4 — список параметров, в КА 2.5 — одна структура.

Разбор ключевых строк

  • Ячейка.Владелец = &Склад — в регистре «Товары в ячейках» нет склада, отбор идет через владельца ячейки.
  • ВНаличииОстаток - КОтборуОстаток — свободный остаток; эту же разность проверяет проведение, когда пишет «Превышен свободный остаток в ячейке».
  • Числитель / Знаменатель — коэффициент упаковки: в регистре упаковка заполнена, только если это упаковка, а не единица измерения.
  • Листинг 2 сравнивает группы точно: в 11.4 подбор области при размещении ищет правило по точному сочетанию групп.
  • ПолучитьСсылкуПоШтрихкодуТабличногоДокумента превращает число с этикетки в идентификатор, для набранного адреса вернет пустой массив — тогда ищем по коду, он уникален в пределах склада. Склад и помещение сверяются отдельно: по идентификатору найдется ячейка любого склада.
  • ВзятьЗаданиеВРаботу: блокировка и повторная проверка статуса в транзакции не дают двум кладовщикам взять одно задание. Исполнитель — пользователь сеанса: у каждого ТСД свой пользователь 1С.

Чеклист запуска адресного склада

Порядок, в котором адресное хранение на складе в 1С запускают без остановки отгрузок:

  1. Ордерная схема — все три флажка с одной даты, незавершенные приемки и отгрузки закрыты.
  2. Режим ячеек для склада или каждого помещения.
  3. Топология: генерация ячеек, адреса латиницей, зоны приемки и отгрузки, порядок обхода.
  4. Типоразмеры ячеек, вес и габариты упаковок — если нужны ограничения по весу и объему.
  5. Складские группы номенклатуры и упаковок, области хранения, правила на каждое сочетание групп.
  6. Рабочие участки, их работники и порядок обработки задания.
  7. Перевод остатков в ячейки — см. «Частые вопросы».
  8. Этикетки ячеек — после утверждения топологии.
  9. ТСД: вариант подключения, пользователи, Wi-Fi в дальних рядах.
  10. Пробный день на копии базы: весь цикл от приемки до пересчета и сверка отчета «Товары в ячейках» с полкой.

Типичные ошибки

  • «Для складской группы номенклатуры "…" и складской группы упаковок "…" не задано правило размещения» — заведите правило на это сочетание или заполните складскую группу; листинг 2 покажет все такие товары.
  • «Для номенклатуры "…" не заданы вес и(или) объем.», для упаковок — «не заданы весо-размерные характеристики»: у складской группы включено ограничение по весу или объему.
  • «Задания не сформированы (возможно в ячейках хранения не достаточно товаров для отгрузки или подпитка не требуется).» — товар еще в зоне приемки, ячейки заблокированы или остаток под другими заданиями; см. листинг 1.
  • «Превышен свободный остаток в ячейке … на …» — часть товара под незакрытым заданием или учет разошелся с полкой, нужен пересчет ячейки. Контроль работает при флажке склада «Контролировать оперативные остатки».
  • Поле «Ячейки» после записи снова «Не использовать» — не включен один из флажков ордерной схемы.
  • ТСД не находит ячейки по наклейкам после повторной генерации топологии — в штрихкоде идентификатор удаленной ячейки.
  • УНФ: после включения «Ячеистых складов» часть остатков без ячейки — найдите их листингом 3 и разнесите «Перемещением по ячейкам» с пустой ячейкой-отправителем.

Частые вопросы

Чем адресное хранение в 1С ЕРП отличается от УТ 11?

Механизм один, отличия дает релиз: в КА 2.5 и ERP 2.5 есть мобильное рабочее место кладовщика и тип ячейки «Отгрузка (с учетом остатков)», в УТ 11.4 их нет.

Можно ли вести адресное хранение в 1С УТ без ТСД?

Можно: задания печатаются, кладовщик работает с листом, оператор отмечает выполнение в «Приемке товаров на склад» и «Отгрузке товаров со склада». ТСД убирает ручной ввод и ловит ошибки при сканировании.

Как перевести работающий склад на ячейки?

С выбранной даты включите ордерную схему и ячейки, а остатки перенесите документом «Ввод начальных остатков» с типом операции «Переход на использование адресного хранения остатков»: товар окажется в зоне приемки. Задания на отбор берут товар из ячеек хранения, поэтому разместите его до первых отгрузок.

Когда проще заказать

Запуск адресного склада — это десяток справочников, перевод остатков и обучение кладовщиков, а доработка под ТСД затрагивает проведение складских документов. Нужен свой сервис для терминалов или правила отбора под ваш маршрут — опишите задачу в разделе услуг по доработке 1С или разместите задачу: оценка бесплатная, ответ в течение рабочего дня.

По теме

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.


1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.