Здравствуйте.
Работаю в 1С:Предприятие 8.3 (8.3.13.1644), Розница 8. Аптека, редакция 2.2 (2.2.7.32).
Имеется проблема: у штрихкодов есть несколько владельцев.
Метод исправления данной проблемы: создана внешняя обработка, в которой показывается список таких проблемных штрихкодов с несколькими владельцами и создана команда по созданию номенклатуры (для создания номенклатуры скопирована форма Справочники.Номенклатура.Формы.ФормаЭлемента).
После создания номенклатуры необходимо автоматически привязать к ней текущий выбранный штрихкод, далее пройтись по регистру сведений ор_ПрайсЛистыКонтрагентов и там, где штрихкоды совпадают с изначальным, тоже перезаписать на новую, только что созданную номенклатуру.
В основной форме внешней обработки написал вот это:
В форме записи номенклатуры код менял только вот тут:
Проблемы у меня такие:
1) Я не уверен, что корректно достал ссылку на только что созданную номенклатуру. Ссылка эта нужна для последующей привязке штрихкодов к данной номенклатуре.
2) Ругается при попытке привязки штрихкода к новой номенклатуре, как это исправить?
3) Как в данной ситуации сделать всю эту процедуру перепривязки в транзакции, дабы не плодить кучу номенклатур при сбое при перезаписи штрихкода?
Работаю в 1С:Предприятие 8.3 (8.3.13.1644), Розница 8. Аптека, редакция 2.2 (2.2.7.32).
Имеется проблема: у штрихкодов есть несколько владельцев.
Метод исправления данной проблемы: создана внешняя обработка, в которой показывается список таких проблемных штрихкодов с несколькими владельцами и создана команда по созданию номенклатуры (для создания номенклатуры скопирована форма Справочники.Номенклатура.Формы.ФормаЭлемента).
После создания номенклатуры необходимо автоматически привязать к ней текущий выбранный штрихкод, далее пройтись по регистру сведений ор_ПрайсЛистыКонтрагентов и там, где штрихкоды совпадают с изначальным, тоже перезаписать на новую, только что созданную номенклатуру.
В основной форме внешней обработки написал вот это:
Код |
---|
&НаКлиенте
Процедура СоздатьНоменклатуру(Команда)
Если Элементы.ШтрихкодыДС.ТекущаяСтрока <> Неопределено Тогда
ПараметрПередачиВФорму = Новый Структура("ПараметрШК",Элементы.ШтрихкодыДС.ТекущиеДанные.Штрихкод);
ОткрытьФорму ("ВнешняяОбработка.РаботаСНоменклатурой.Форма.ФормаЭлемента",,ЭтаФорма,,,,Новый ОписаниеОповещения("ПослеЗаписиНоменклатуры", ЭтаФорма, ПараметрПередачиВФорму), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Иначе
Сообщить("Ошибка. Выберите штрихкод!");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНоменклатуры(Результат, допПараметры) Экспорт
Если Результат <> Неопределено И Результат <> NULL Тогда
//ТУТ МЕНЯЕМ ВЛАДЕЛЬЦА У ТЕКУЩЕГО ШТРИХКОДА
Запрос = Новый Запрос("ВЫБРАТЬ
| Штрихкоды.Штрихкод КАК Штрихкод
|ИЗ
| РегистрСведений.Штрихкоды КАК Штрихкоды
|ГДЕ
| Штрихкоды.Штрихкод = &ПараметрШК");
Запрос.УстановитьПараметр("ПараметрШК", Элементы.ШтрихкодыДС.ТекущиеДанные.Штрихкод);
РезультатЗапроса = Запрос.Выполнить().Выбрать();
РезультатЗапроса.Владелец.Ссылка = Результат;
Попытка
РезультатЗапроса.Записать();
Исключение
Отказ = Истина;
Сообщить("Ошибка при попытке записи владельца исходного штрихкода!");
КонецПопытки;
// Меняем владельца у штрихкодов в прайм-листе
Запрос = Новый Запрос("ВЫБРАТЬ
| ор_ПрайсЛистыКонтрагентов.Номенклатура КАК Номенклатура,
| ор_ПрайсЛистыКонтрагентов.ШтрихКод КАК ШтрихКод
|ИЗ
| РегистрСведений.ор_ПрайсЛистыКонтрагентов КАК ор_ПрайсЛистыКонтрагентов
|ГДЕ
| ор_ПрайсЛистыКонтрагентов.ШтрихКод = &ПараметрШК");
Запрос.УстановитьПараметр("ПараметрШК", ПараметрПередачиВФорму);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Выборка.Владелец.Ссылка = Результат;
Попытка
Выборка.Записать();
Исключение
Отказ = Истина;
Сообщить("Ошибка при попытке записи владельца в прайс-листе контрагентов!");
КонецПопытки;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Показать |
В форме записи номенклатуры код менял только вот тут:
Код |
---|
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если ЗначениеЗаполнено(Объект.Ссылка)
И НЕ ДействияПослеЗаписиИЗакрытии = Неопределено
И ДействияПослеЗаписиИЗакрытии.Свойство("СозданиеНовогоШтрихКода")
И ДействияПослеЗаписиИЗакрытии.СозданиеНовогоШтрихКода.Свойство("ОткрытьФормуСозданияШтрихКодаПриЗакрытии") Тогда
Если ЗавершениеРаботы Тогда
Отказ = Истина;
Иначе
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ЗначенияЗаполнения", Новый Структура("ТипШтрихкода, Штрихкод"));
ПараметрыФормы.ЗначенияЗаполнения.Вставить("Владелец", Объект.Ссылка);
ЗаполнитьЗначенияСвойств(ПараметрыФормы.ЗначенияЗаполнения, ДействияПослеЗаписиИЗакрытии.СозданиеНовогоШтрихКода.СтруктураПараметровКлиента);
ОткрытьФорму("РегистрСведений.Штрихкоды.Форма.ФормаЗаписи", ПараметрыФормы,,,,,,РежимОткрытияОкнаФормы.Независимый);
КонецЕсли;
ОповеститьОВыборе(Объект.Ссылка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
// ПодключаемоеОборудование
Если ИсползованиеВебКамеы Тогда
Описание = Новый ОписаниеОповещения("ОтключениеВидеокамерыЗавершение", ЭтотОбъект);
МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПоИдентификатору(Описание, ЭтаФорма.УникальныйИдентификатор, ВебКамера);
КонецЕсли;
МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтотОбъект);
// Конец ПодключаемоеОборудование
ОповеститьОВыборе(Объект.Ссылка);
КонецПроцедуры
Показать |
Проблемы у меня такие:
1) Я не уверен, что корректно достал ссылку на только что созданную номенклатуру. Ссылка эта нужна для последующей привязке штрихкодов к данной номенклатуре.
2) Ругается при попытке привязки штрихкода к новой номенклатуре, как это исправить?
РезультатЗапроса = Запрос.Выполнить().Выбрать();
РезультатЗапроса.Владелец.Ссылка = Результат;
3) Как в данной ситуации сделать всю эту процедуру перепривязки в транзакции, дабы не плодить кучу номенклатур при сбое при перезаписи штрихкода?
По теме из базы знаний
- Поиск и обработка задвоенных штрихкодов и нескольких штрихкодов.
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- Удобная инвентаризация алкоголя для конфигурации Розница 2.2 - 2.3
- И снова приятные мелочи для Розницы! Поиск номенклатуры с одинаковыми Штрихкодами
- 1С:Бухгалтерия СНТ
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) {ВнешняяОбработка.РаботаСНоменклатурой.Форма.Форма.Форма(299)}: Ошибка при получении значения атрибута контекста (ТекущиеДанные)
Запрос.УстановитьПараметр("ПараметрШК", Элементы.ШтрихкодыДС.ТекущиеДанные.Штрихкод);
по причине:
Текущие данные таблицы недоступны на сервере
После этого работа прекращается, номенклатура создается, но штрихкоды к ней не привязываются
Запрос.УстановитьПараметр("ПараметрШК", Элементы.ШтрихкодыДС.ТекущиеДанные.Штрихкод);
по причине:
Текущие данные таблицы недоступны на сервере
После этого работа прекращается, номенклатура создается, но штрихкоды к ней не привязываются
(5) Исправил. Передаю данный параметр как реквизит формы, он все равно много где используется
Теперь ругается вот так:
{ВнешняяОбработка.РаботаСНоменклатурой.Форма.Форма.Форма(301)}: Поле объекта не обнаружено (Владелец)
РезультатЗапроса.Владелец.Ссылка = Результат;
Пробовал вот так:
РезультатЗапроса.Владелец (Результат);
Теперь ругается вот так:
{ВнешняяОбработка.РаботаСНоменклатурой.Форма.Форма.Форма(302)}: Слишком много фактических параметров
РезультатЗапроса.Владелец (Результат);
Полагаю, это из-за этой строки:
ПараметрПередачиВФорму = Новый Структура("ПараметрШК",Элементы.ШтрихкодыДС.ТекущиеДанные.Штрихкод);
Заменил ее на:
ПараметрПередачиВФорму = ШтрихкодыДС.ТекущиеДанные.Штрихкод;
но ошибка не исчезла.
Теперь ругается вот так:
{ВнешняяОбработка.РаботаСНоменклатурой.Форма.Форма.Форма(301)}: Поле объекта не обнаружено (Владелец)
РезультатЗапроса.Владелец.Ссылка = Результат;
Пробовал вот так:
РезультатЗапроса.Владелец (Результат);
Теперь ругается вот так:
{ВнешняяОбработка.РаботаСНоменклатурой.Форма.Форма.Форма(302)}: Слишком много фактических параметров
РезультатЗапроса.Владелец (Результат);
Полагаю, это из-за этой строки:
ПараметрПередачиВФорму = Новый Структура("ПараметрШК",Элементы.ШтрихкодыДС.ТекущиеДанные.Штрихкод);
Заменил ее на:
ПараметрПередачиВФорму = ШтрихкодыДС.ТекущиеДанные.Штрихкод;
но ошибка не исчезла.
2) Ругается при попытке привязки штрихкода к новой номенклатуре, как это исправить?
РезультатЗапроса = Запрос.Выполнить().Выбрать();
РезультатЗапроса.Владелец.Ссылка = Результат;
РезультатЗапроса = Запрос.Выполнить().Выбрать();
РезультатЗапроса.Владелец.Ссылка = Результат;
Запрос.выполнить().Выбрать() выдаст вам Выборку, то есть множество записей. Чтобы получить конкретную запись используйте РезультатЗапроса.Следующий
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот