Остатки в подборе товаров в документ продажи по нескольким складам

12.03.19

Задачи пользователя - Адаптация типовых решений

Остатки в подборе товаров в документ продажи по нескольким складам без включенной опции «Реализация товаров с нескольких складов».

Организация среднего звена, старший менеджер говорит, что реализация товара должна происходить только с оптового склада, но в центральном офисе есть еще розничные точки. Старший менеджер хочет при подборе товара видеть остатки не только по оптовому складу, но и остатки розничных точек в центре, для перемещения их на склад опта  в случаи нехватки товара. При этом в ут 11 нельзя включать реализацию с нескольких складов.

За подбор товаров в документ продажи отвечает обработка «ПодборТоваровВДокументПродажи». Также для формирования динамического списка «СписокНоменклатура» формы подбора используется общий модуль  «ПодборТоваровСервер» , собственно этот модуль и доработаем.

Первое что нужно сделать это заставить думать программу, что мы используем реализацию с нескольких складов, за которую отвечает  опция «Реализация товаров с нескольких складов» в настройках продаж. Делается это через функцию «ТекстЗапросаСпискаФормыПодбора» . Функция формирует текст  запроса  динамического списка.  В данной функции  в области «ПодставитьЗначенияПараметровВШаблонТекстаЗапроса» Ищем строчку: ПараметрыЗамены.Вставить("НесколькоСкладов",НесколькоСкладов);

Если переменная НесколькоСкладов = Истина то в запросе меняется условие  с  Т.Склад =&Склад на Т.Склад В(&Склад).

Для того чтобы программа понимала что используется несколько складов  приведем код к следующему виду:

Если    Форма.Склады.Количество() = 1  Тогда
 Если Форма.Склады[0].Значение = Справочники.Склады.НайтиПоНаименованию("Оптовый склад").Ссылка  Тогда
     ПараметрыЗамены.Вставить("НесколькоСкладов",Истина);
 Иначе
     ПараметрыЗамены.Вставить("НесколькоСкладов",НесколькоСкладов);
 КонецЕсли;
Иначе
     ПараметрыЗамены.Вставить("НесколькоСкладов",НесколькоСкладов);
КонецЕсли;

В место «оптовый склад» указать склад, с которого менеджеры работают с безнальщиками.

Разберем данный код.

Условие  «Если    Форма.Склады.Количество() = 1  » срабатывает тогда когда подбор товаров используется в документе закупки или в документе продажи не выбран склад.

Условие «Если Форма.Склады[0].Значение = Справочники.Склады.НайтиПоНаименованию("Оптовый склад").Ссылка» срабатывает когда менеджер по работе с  безнальщиками  выбирает «Оптовый склад», соответственно параметр НесколькоСкладов принудительно устанавливается в значение истина .

Далее ищем процедуру «ПриСозданииФормыПодбораНаСервере» в данной процедуре нужна область  «УстановитьСкладскиеНастройкиПоПараметрам» .

В данной области  ищем :

// Если склад не выбран, то заполнить список складов всеми разрешенными складами.
Если Форма.Склады.Количество() = 0
И Параметры.Свойство("ОстаткиПоВсемСкладам")
И Параметры.ОстаткиПоВсемСкладам Тогда
  Форма.ОстаткиПоВсемСкладам = Истина;
  ЗапросПоСкладам = Новый Запрос(
  "ВЫБРАТЬ РАЗРЕШЕННЫЕ
  | Склады.Ссылка КАК Склад
  |ИЗ
  | Справочник.Склады КАК Склады
  |ГДЕ
  | (Не Склады.ЭтоГруппа)");
  Форма.Склады.ЗагрузитьЗначения(ЗапросПоСкладам.Выполнить().Выгрузить().ВыгрузитьКолонку("Склад"));
КонецЕсли;

вместо :

Если Форма.Склады.Количество() = 0 Тогда

 СкладПараметр = Справочники.Склады.ПустаяСсылка();

ИначеЕсли Форма.Склады.Количество() = 1 Тогда

 СкладПараметр = Форма.Склады[0].Значение;

Иначе

 СкладПараметр = Форма.Склады.ВыгрузитьЗначения();

КонецЕсли;

вставляем :

Если    Форма.Склады.Количество() = 1  Тогда

 Если Форма.Склады[0].Значение = Справочники.Склады.НайтиПоНаименованию("Оптовый склад").Ссылка Тогда

  СкладыМассив = Новый Массив;

  СкладыМассив.Добавить(Справочники.Склады.НайтиПоНаименованию("Оптовый склад").Ссылка);  

   СкладыМассив.Добавить(Справочники.Склады.НайтиПоНаименованию("Уличный склад").Ссылка);

  СкладыМассив.Добавить(Справочники.Склады.НайтиПоНаименованию("Магазин Павильон").Ссылка);

  СкладыМассив.Добавить(Справочники.Склады.НайтиПоНаименованию("Магазин Краски").Ссылка);

  СкладыМассив.Добавить(Справочники.Склады.НайтиПоНаименованию("Магазин 2-й этаж (касса 3, касса 4)").Ссылка);

  СкладыМассив.Добавить(Справочники.Склады.НайтиПоНаименованию("Магазин 2-й этаж").Ссылка);

  СкладыМассив.Добавить(Справочники.Склады.НайтиПоНаименованию("Магазин 1-й этаж").Ссылка);

  СкладПараметр = СкладыМассив;

Иначе

 Если Форма.Склады.Количество() = 0 Тогда

 СкладПараметр = Справочники.Склады.ПустаяСсылка();

ИначеЕсли Форма.Склады.Количество() = 1 Тогда

 СкладПараметр = Форма.Склады[0].Значение;

Иначе

 СкладПараметр = Форма.Склады.ВыгрузитьЗначения();

КонецЕсли;

 

КонецЕсли;

иначе

Если Форма.Склады.Количество() = 0 Тогда

 СкладПараметр = Справочники.Склады.ПустаяСсылка();

ИначеЕсли Форма.Склады.Количество() = 1 Тогда

 СкладПараметр = Форма.Склады[0].Значение;

Иначе

 СкладПараметр = Форма.Склады.ВыгрузитьЗначения();

КонецЕсли;

КонецЕсли;

 

Разберем код.

Условие «Если    Форма.Склады.Количество() = 1 » проверяет выбран ли склад в документе продажи или подбор используется в документах закупки.

Условие «Если Форма.Склады[0].Значение = Справочники.Склады.НайтиПоНаименованию("Оптовый склад").Ссылка» проверяет, выбран ли оптовый склад.

Если выбран «Оптовый склад» то формируется массив с перечислением розничных складов, после чего данный массив передается в переменную СкладПараметр,  который подставляется в параметр запроса динамического списка номенклатуры.

После данных манипуляций получаем следующее.  При использовании подбора в документ закупки, исправления, внесенные в модуль, не отрабатывают. Также при использовании  подбора в документ  продажи без выбранного склада, исправления также не отработают. Но если в документе продажи установить  оптовый склад, то в подборе будут отображаться остатки не только по оптовому складу, но и по розничным, которые добавлены  в СкладыМассив. 

P. S. Строго не судите, это первая моя статья. Код тоже не уникален и, возможно, гуру в 1С сделал бы лучше. Спасибо, что дочитали до конца.   

Остатки подбор товары документ продажи нескольким складам

См. также

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    5684    14    5    

24

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    3933    12    0    

29

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

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    5117    dimanich70    15    

21

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

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    5601    dimanich70    9    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Eremkin 14.03.19 10:45 Сейчас в теме
СкладыМассив.Добавить(Справочники.Склады.НайтиПоНаименованию("Оптовый склад").Ссылка);

СкладыМассив.Добавить(Справочники.Склады.НайтиПоНаименованию("Уличный склад").Ссылка);

СкладыМассив.Добавить(Справочники.Склады.НайтиПоНаименованию("Магазин Павильон").Ссылка);

СкладыМассив.Добавить(Справочники.Склады.НайтиПоНаименованию("Магазин Краски").Ссылка);

СкладыМассив.Добавить(Справочники.Склады.НайтиПоНаименованию("Магазин 2-й этаж (касса 3, касса 4)").Ссылка);

СкладыМассив.Добавить(Справочники.Склады.НайтиПоНаименованию("Магазин 2-й этаж").Ссылка);

СкладыМассив.Добавить(Справочники.Склады.НайтиПоНаименованию("Магазин 1-й этаж").Ссылка);
Показать


Сделали хотя бы тогда найти по коду и в комментариях наименование склада. Или еще лучше свой справочник с настройками, где в последующем можно будет добавлять/удалять элементы. А то получается переименовали склад и ищи-свищи по коду.

Справочники.Склады.НайтиПоНаименованию("Оптовый склад")


Тут и так возвращается Ссылка, если найдено. Дополнительная ".Ссылка" +1 скрытый серверный вызов
user614022_compaq994; Ali1976; +2 Ответить
2. klepser 21 14.03.19 13:31 Сейчас в теме
Делалось все на коленке. Менеджеру нужно было срочно. За замечание спасибо. Появится время переделаю.
4. Eremkin 14.03.19 17:57 Сейчас в теме
(2)Это еще останется надолго :)
user614022_compaq994; cleaner_it; +2 Ответить
3. Sakhatyr_Vitaliy 14.03.19 15:38 Сейчас в теме
Вместо:

Вместо



Вставляем:

Вставляем


А ещё лучше забыть про "НайтиПоНаименованию" или "НайтиПоКоду", а работать только с метаданными (то есть добавить справочник/РС).

Делали не через расширение? Просто сняли с поддержки?
5. klepser 21 15.03.19 08:49 Сейчас в теме
Не через расширение. С поддержки база снята. Доработок много в базе.
Оставьте свое сообщение