Часто при переходе на новую учетную систему приходится перенесить остатки товаров, справочники товаров, контрагентов и цены.
Если со справочниками и остатками проблем не возникает абсолютно никаких. Все легко грузится обработкой с диска ИТС «Загрузка данных из табличного документа». То с установкой цен, оказалось не все так просто.
Сразу оговорюсь, что все что будет описываться в данной статье актуально для Управление Торговлей 11 (далее УТ11) и Розница 2.2 (далее РА2). Проблем в том, что при проведении документа Оприходование товаров не регистрируется цена поставщика.
Что в принципе логично, так как товары вводимые в документ Ввод остатков (Оприходование товаров) как правило являются собственными товарами. Для того чтоб решить данную проблему и создать документ Установка цен номенклатуры пришлось написать небольшую обработку.
В модуле объекта обработки пропишем следующий код:
Функция СведенияОВнешнейОбработке() Экспорт
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.ВводОстатков");
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Установка цен номенклатуры на основании ввода остатков");
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
ПараметрыРегистрации.Вставить("Информация", "Создает документ установка цен номенклатуры на основании документа ввод остатков");
ПараметрыРегистрации.Вставить("ВерсияБСП", "2.2.2.48");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд,
"Установка цен номенклатуры",
"Заполнить",
"ВызовКлиентскогоМетода",
Ложь);
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
Далее в форме модуля формы размещаем код с логикой обработки. Оговорюсь что для УТ11 и РА2, код будет немного отличаться. В конце статьи выложу ссылки на скаачивания для каждой из учетных систем.
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
Перем ВыбЗнач, НавигационнаяСсылка;
Массив = Новый Массив;
Массив.Добавить(Тип("СправочникСсылка.ВидыЦен"));
ОписаниеТиповК = Новый ОписаниеТипов(Массив);
Если ВвестиЗначение(ВыбЗнач, "Выберите цену заполнения", ОписаниеТиповК) Тогда
СоздатьУстановкуЦенНоменклатуры(ИдентификаторКоманды, ОбъектыНазначения[0], ВыбЗнач, НавигационнаяСсылка);
Если ЗначениеЗаполнено(НавигационнаяСсылка) Тогда
ПоказатьОповещениеПользователя(
НСтр("ru = 'Установка цен номенклауры'"),
НавигационнаяСсылка,
НСтр("ru='Создан документ установка цен номенклатуры!'"),
БиблиотекаКартинок.Информация32);
Иначе
ПоказатьОповещениеПользователя(
НСтр("ru = 'Документ установка цен номенклауры не создан'"),
ПолучитьНавигационнуюСсылку(ОбъектыНазначения[0]),
НСтр("ru='Нет ни одной строки в табличной части товары!!!'"),
БиблиотекаКартинок.НеВыполнено);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция СоздатьУстановкуЦенНоменклатуры(ИдентификаторКоманды, ОбъектДок, ВидЦены, Результат)
ДокСсылка = ОбъектДок.Ссылка;
Если ОбъектДок.Товары.Количество() > 0 Тогда
Установка = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
Установка.Дата = ОбъектДок.Дата;
Установка.Ответственный = Пользователи.ТекущийПользователь();
Установка.Комментарий = "Документ создан автоматически на основании ввода остатков";
Установка.Согласован = Истина;
НоваяСтрокаВидЦены = Установка.ВидыЦен.Добавить();
НоваяСтрокаВидЦены.ВидЦены = ВидЦены;
ТаблицаТоваров = ОбъектДок.Товары.Выгрузить();
ТаблицаТоваров.Колонки.Добавить("ВидЦены");
ТаблицаТоваров.ЗаполнитьЗначения(ВидЦены, "ВидЦены");
Установка.Товары.Загрузить(ТаблицаТоваров);
Попытка
Установка.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
Установка.Записать();
КонецПопытки;
Результат = ПолучитьНавигационнуюСсылку(Установка);
КонецЕсли;
Возврат Результат;
КонецФункции
Обработка готова. Теперь осталось включить использование внешних обработок и отчетов в разделе Администрирование -> Печатные формы, отчеты и обработки. И добавить и зарегистрировать созданную нами обработку и указать в каких документах обработка будет использоваться.
Далее заходим в документ оприходования товаров и видим что у нас появилась дополнительная кнопка, которая позволит нам создать желанный документ.
Ну и напоследок обещанные обработки.