Установка цен номенклатуры на основании Ввода остатков

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

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

Сразу оговорюсь, что все что будет описываться в данной статье актуально для Управление Торговлей 11 (далее УТ11) и Розница 2.2 (далее РА2). Проблем в том, что при  проведении документа Оприходование товаров не регистрируется цена поставщика.

Что в принципе логично, так как товары вводимые в документ Ввод остатков (Оприходование товаров) как правило являются собственными товарами. Для того чтоб решить данную проблему и создать документ Установка цен номенклатуры пришлось написать небольшую обработку.

В модуле объекта обработки пропишем следующий код:

Функция СведенияОВнешнейОбработке() Экспорт

МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.ВводОстатков");

ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Установка цен номенклатуры на основании ввода остатков");
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
ПараметрыРегистрации.Вставить("Информация", "Создает документ установка цен номенклатуры на основании документа ввод остатков");
ПараметрыРегистрации.Вставить("ВерсияБСП", "2.2.2.48");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд,
"Установка цен номенклатуры",
"Заполнить",
"ВызовКлиентскогоМетода",
Ложь);
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

Возврат ПараметрыРегистрации;
КонецФункции

Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры

Далее в форме модуля формы размещаем код с логикой обработки. Оговорюсь что для УТ11 и РА2, код будет немного отличаться. В конце статьи выложу ссылки на скаачивания для каждой из учетных систем.

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) Экспорт

Перем ВыбЗнач, НавигационнаяСсылка;

Массив = Новый Массив;
Массив.Добавить(Тип("СправочникСсылка.ВидыЦен"));

ОписаниеТиповК = Новый ОписаниеТипов(Массив);

Если ВвестиЗначение(ВыбЗнач, "Выберите цену заполнения", ОписаниеТиповК) Тогда

СоздатьУстановкуЦенНоменклатуры(ИдентификаторКоманды, ОбъектыНазначения[0], ВыбЗнач, НавигационнаяСсылка);

Если ЗначениеЗаполнено(НавигационнаяСсылка) Тогда
ПоказатьОповещениеПользователя(
НСтр("ru = 'Установка цен номенклауры'"),
НавигационнаяСсылка,
НСтр("ru='Создан документ установка цен номенклатуры!'"),
БиблиотекаКартинок.Информация32);
Иначе
ПоказатьОповещениеПользователя(
НСтр("ru = 'Документ установка цен номенклауры не создан'"),
ПолучитьНавигационнуюСсылку(ОбъектыНазначения[0]),
НСтр("ru='Нет ни одной строки в табличной части товары!!!'"),
БиблиотекаКартинок.НеВыполнено);
КонецЕсли;
КонецЕсли;

КонецПроцедуры

&НаСервере
Функция СоздатьУстановкуЦенНоменклатуры(ИдентификаторКоманды, ОбъектДок, ВидЦены, Результат)

ДокСсылка = ОбъектДок.Ссылка;

Если ОбъектДок.Товары.Количество() > 0 Тогда

Установка = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
Установка.Дата = ОбъектДок.Дата;
Установка.Ответственный = Пользователи.ТекущийПользователь();
Установка.Комментарий = "Документ создан автоматически на основании ввода остатков";
Установка.Согласован = Истина;

НоваяСтрокаВидЦены = Установка.ВидыЦен.Добавить();
НоваяСтрокаВидЦены.ВидЦены = ВидЦены;

ТаблицаТоваров = ОбъектДок.Товары.Выгрузить();
ТаблицаТоваров.Колонки.Добавить("ВидЦены");
ТаблицаТоваров.ЗаполнитьЗначения(ВидЦены, "ВидЦены");
Установка.Товары.Загрузить(ТаблицаТоваров);

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

КонецЕсли;

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

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

Обработка готова. Теперь осталось включить использование внешних обработок и отчетов в разделе Администрирование -> Печатные формы, отчеты и обработки. И добавить и зарегистрировать созданную нами обработку и указать в каких документах обработка будет использоваться.

Далее заходим в документ оприходования товаров и видим что у нас появилась  дополнительная кнопка, которая позволит нам создать желанный документ.

Ну и напоследок обещанные обработки.

Для Управления торговлей 11
Для Розницы 2.2

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

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

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

Яндекс.Метрика