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