Доработка стандартной обработки "ТОВыгрузкаТСД" БГУ
Добрый день! Ближе к концу кода выгрузки в "Процедура ОсновныеДействияФормыВыгрузить(Кнопка)" (выделил подчеркиванием) хотим чтобы выгружалась цена и Характеристика номенклатуры, но не знаем как сделать :)
Пробовали в "СтрокаТаблицы.Цена" вносить "СтрокаОбъекта.Объект.ПервоначальнаяСтоимость", не получилось.
Были попытки взять ХарактеристикуНоменклатуры, но тоже неудачные.
Сейчас выгружает только Наименование Номенклатуры(ОС) и штрихкод
Пробовали в "СтрокаТаблицы.Цена" вносить "СтрокаОбъекта.Объект.ПервоначальнаяСтоимость", не получилось.
Были попытки взять ХарактеристикуНоменклатуры, но тоже неудачные.
Сейчас выгружает только Наименование Номенклатуры(ОС) и штрихкод
/////////////////////////////////////////////////////////////////////////////
// ПЕРЕМЕННЫЕ МОДУЛЯ
Перем мСписокТерминалов;
//////////////////////////////////////////////////////////// ////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ
// Процедура получает основной запрос
//
// Параметры нет
Процедура ЗаполнитьНачальныеНастройки()
ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ИСТИНА КАК Выгружать,
| Штрихкоды.Штрихкод,
| ПРЕДСТАВЛЕНИЕ(Штрихкоды.Владелец) КАК Объект,
| ПРЕДСТАВЛЕНИЕ(Штрихкоды.ИнвентарныйНомер) КАК ИнвентарныйНомер,
| Штрихкоды.КодОбъекта
|ИЗ
| РегистрСведений.Штрихкоды КАК Штрихкоды
|{ГДЕ
| Штрихкоды.Владелец.Учреждение.* КАК Учреждение,
| Штрихкоды.Владелец.* КАК Объект}";
ПостроительОтчета.Текст = ТекстЗапроса;
СоответствиеИменОтбора = Новый Структура();
СоответствиеИменОтбора.Вставить("Объект", "Объект");
СоответствиеИменОтбора.Вставить("Учреждение", "Учреждение");
НастройкиФормы = ВосстановитьЗначение("ТорговоеОборудование.ТОВыгрузкаТСД.Настройки." + ИмяПользователя());
Если НастройкиФормы = Неопределено ИЛИ ТипЗнч(НастройкиФормы) <> Тип("Структура") Тогда
ПолеОтбора = Неопределено;
Для Каждого ДоступноеПоле Из ПостроительОтчета.ДоступныеПоля Цикл
Если СоответствиеИменОтбора.Свойство(ДоступноеПоле.Имя, ПолеОтбора) Тогда
ДоступноеПоле.Отбор = Истина;
ДоступноеПоле.Представление = ПолеОтбора;
ПостроительОтчета.Отбор.Добавить(ДоступноеПоле.Имя)
КонецЕсли;
КонецЦикла;
Иначе
ПостроительОтчета.УстановитьНастройки(НастройкиФормы.ПостроительОтчетаНастройки);
КонецЕсли;
КонецПроцедуры // ЗаполнитьНачальныеНастройки()
Процедура ЗаполнитьИзТабЧасти() Экспорт
Если Объекты.Количество() = 0 Тогда
Возврат;
КонецЕсли;
СписокОбъектов.Очистить();
ТекстЗапроса = "ВЫБРАТЬ
| ТабЧасть.Объект,
| ТабЧасть.ИнвентарныйНомер
|ПОМЕСТИТЬ ТабЧасть
|ИЗ
| &ТабЧасть КАК ТабЧасть
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Штрихкоды.Штрихкод,
| ТабЧасть.Объект,
| ТабЧасть.ИнвентарныйНомер,
| Штрихкоды.Владелец.Код КАК КодОбъекта,
| ВЫБОР
| КОГДА Штрихкоды.Штрихкод ЕСТЬ NULL
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК Выгружать
|ИЗ
| ТабЧасть КАК ТабЧасть
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
| ПО ТабЧасть.Объект = Штрихкоды.Владелец
| И ТабЧасть.ИнвентарныйНомер = Штрихкоды.ИнвентарныйНомер";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ТабЧасть", Объекты);
ТаблицаЗапроса = Запрос.Выполнить().Выгрузить();
Для каждого ТекСтрока из ТаблицаЗапроса Цикл
НоваяСтрока = СписокОбъектов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекСтрока);
КонецЦикла;
ЭлементОбъект = ПостроительОтчета.Отбор.Найти("Объект");
Если ЭлементОбъект <> Неопределено Тогда
ЭлементОбъект.ВидСравнения = ВидСравнения.ВСписке;
Список = Новый СписокЗначений;
Список.ЗагрузитьЗначения(ТаблицаЗапроса.ВыгрузитьКолонку("Объект"));
ЭлементОбъект.Значение = Список;
ЭлементОбъект.Использование = Истина;
КонецЕсли;
КонецПроцедуры
//////////////////////////////////////////////////////////// /////////////////
// ФУНКЦИИ ВЗАИМОДЕЙСТВИЯ С ТОРГОВЫМ ОБОРУДОВАНИЕМ (ОБЩИЕ ФУНКЦИИ API)
// Функция возвращает признак того, что клиент поддерживает работу с видом ТО,
// переданным в качестве параметра.
//
// Параметры:
// Вид - <ПеречислениеСсылка.ВидыТорговогоОборудования>
// - Вид торгового оборудования, информация о поддержке
// которого запрашивается.
//
// Возвращаемое значение:
// <Булево> - Признак поддержки указанного класса торгового оборудования.
//
Функция ПоддерживаетсяВидТО(Вид) Экспорт
Результат = Ложь;
Если Вид = Перечисления.ВидыТорговогоОборудования.ТерминалСбораДанных Тогда
Результат = Истина;
КонецЕсли;
Возврат Результат;
КонецФункции // ПоддерживаетсяВидТО()
//////////////////////////////////////////////////////////// ////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ КОМАНДНОЙ ПАНЕЛИ "ДействияФормы"
// Процедура - обработчик события "ПриНажатии" кнопки "Заполнить"
// командной панели "ДействияФормы"
//
// Параметры
// Кнопка - <КнопкаКоманднойПанели>
// - кнопка "Заполнить"
//
Процедура ДействияФормыЗаполнить(Кнопка)
Если СписокОбъектов.Количество() > 0 Тогда
ответ = Вопрос("Перед заполнением табличная часть будет очищена. Заполнить?", РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет, "Проверка заполнения табличной части");
Если ответ = КодВозвратаДиалога.Нет Тогда
возврат;
КонецЕсли;
КонецЕсли;
ПостроительОтчета.Выполнить();
СписокОбъектов = ПостроительОтчета.Результат.Выгрузить();
КонецПроцедуры // ДействияФормыЗаполнить()
//////////////////////////////////////////////////////////// ////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ КОМАНДНОЙ ПАНЕЛИ "КомандыТоваров"
// Процедура - обработчик события "ПриНажатии" кнопки "ВыделитьВсе"
// командной панели "КомандыТоваров"
//
// Параметры
// Кнопка - <КнопкаКоманднойПанели>
// - кнопка "ВыделитьВсе"
//
Процедура КомандыТоваровВыделитьВсе(Кнопка)
СписокОбъектов.ЗаполнитьЗначения(Истина, "Выгружать");
КонецПроцедуры // КомандыТоваровВыделитьВсе()
// Процедура - обработчик события "ПриНажатии" кнопки "ОчиститьВыделение"
// командной панели "КомандыТоваров"
//
// Параметры
// Кнопка - <КнопкаКоманднойПанели>
// - кнопка "ОчиститьВыделение"
//
Процедура КомандыТоваровОчиститьВыделение(Кнопка)
СписокОбъектов.ЗаполнитьЗначения(Ложь, "Выгружать");
КонецПроцедуры // КомандыТоваровОчиститьВыделение()
//////////////////////////////////////////////////////////// ////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ КОМАНДНОЙ ПАНЕЛИ "ОсновныеДействияФормы"
// Процедура - обработчик события "ПриНажатии" кнопки "Выгрузить"
// командной панели "ОсновныеДействияФормы"
//
// Параметры
// Кнопка - <КнопкаКоманднойПанели>
// - кнопка "Выгрузить"
//
Процедура ОсновныеДействияФормыВыгрузить(Кнопка)
Результат = Неопределено;
Если СписокОбъектов.Количество() = 0 Тогда
Предупреждение("Нет данных для выгрузки.");
Возврат;
КонецЕсли;
Ошибка = "";
КолвоСтрок = 0;
ТаблицаДляТСД = Новый ТаблицаЗначений;
ТаблицаДляТСД.Колонки.Добавить("Штрихкод");
ТаблицаДляТСД.Колонки.Добавить("Наименование");
ТаблицаДляТСД.Колонки.Добавить("ЕдиницаИзмерения");
ТаблицаДляТСД.Колонки.Добавить("ХарактеристикаНоменклатуры");
ТаблицаДляТСД.Колонки.Добавить("СерияНоменклатуры");
ТаблицаДляТСД.Колонки.Добавить("Качество");
ТаблицаДляТСД.Колонки.Добавить("Цена");
ТаблицаДляТСД.Колонки.Добавить("Количество");
Для Каждого СтрокаОбъекта Из СписокОбъектов Цикл
Если СтрокаОбъекта.Выгружать Тогда
Если НЕ ЗначениеЗаполнено(СтрокаОбъекта.ШтрихКод) Тогда
Предупреждение("В таблице есть объекты, не имеющие штрихкода.
|Выгрузка таких объектов не производится!
|Отключите выгрузку таких объектов.", 60);
Возврат;
КонецЕсли;
СтрокаТаблицы = ТаблицаДляТСД.Добавить();
СтрокаТаблицы.Штрихкод = СтрокаОбъекта.Штрихкод;
СтрокаТаблицы.Наименование = СтрокаОбъекта.Объект;
СтрокаТаблицы.ЕдиницаИзмерения = "";
СтрокаТаблицы.ХарактеристикаНоменклатуры = ""
СтрокаТаблицы.СерияНоменклатуры = "";
СтрокаТаблицы.Качество = "";
СтрокаТаблицы.Цена = 0;
СтрокаТаблицы.Количество = 0;
КонецЕсли;
КонецЦикла;
Результат = ПолучитьСерверТО().ВыгрузитьТаблицуТСД(ТерминалСбораДанных, ТаблицаДляТСД);
Если Не ЗначениеЗаполнено(Результат) Тогда
Предупреждение("Выгрузка успешно завершена.
|Выгружено строк: " + Формат(ТаблицаДляТСД.Количество(), "ЧГ=0") + ".");
Иначе
Предупреждение("ВНИМАНИЕ! Произошла ошибка.
|Возможно объекты не выгружены, либо выгружены частично
|Ошибка: " + ПолучитьСерверТО().ПолучитьТекстОшибкиТСДТО(Результат));
КонецЕсли;
КонецПроцедуры
//////////////////////////////////////////////////////////// ////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
// Процедура - обработчик события "ПередОткрытием" формы
//
// Параметры
// Отказ – <Булево>
// – признак отказа от открытия формы; если в теле
// процедуры-обработчика установить данному параметру
// значение Истина, открытие формы выполнено не будет.
//
// СтандартнаяОбработка – <Булево>
// – в данный параметр передается признак выполнения
// стандартной (системной) обработки события; если в
// теле процедуры-обработчика установить данному
// параметру значение Ложь, стандартная обработка
// события производиться не будет. Отказ от
// стандартной обработки не отменяет открытие формы.
//
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Отказ = (мСписокТерминалов.Количество() = 0);
Если Отказ Тогда
Предупреждение("Терминал сбора данных не подключен.");
КонецЕсли;
КонецПроцедуры // ПередОткрытием()
// Процедура - обработчик события "ПриОткрытии" формы
//
// Параметры
// Нет
//
Процедура ПриОткрытии()
ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
СписокТерминалов = РаботаСТорговымОборудованием.ПолучитьСписокУстройствТОДляВыбора(мСписокТерминалов);
ЭлементыФормы.ТерминалСбораДанных.СписокВыбора = СписокТерминалов;
ТерминалСбораДанных = СписокТерминалов[0].Значение;
ЭлементыФормы.ТерминалСбораДанных.ТолькоПросмотр = (СписокТерминалов.Количество() = 1);
ЗаполнитьНачальныеНастройки();
ЗаполнитьИзТабЧасти();
КонецПроцедуры // ПриОткрытии()
// Процедура - обработчик события "При закрытии" формы.
//
// Параметры:
// Нет.
//
Процедура ПриЗакрытии()
СтруктураСохраняемыхНастроек = Новый Структура();
СтруктураСохраняемыхНастроек.Вставить("ПостроительОтчетаНастройки", ПостроительОтчета.ПолучитьНастройки(Истина, Ложь, Ложь, Ложь, Ложь));
СохранитьЗначение("ТорговоеОборудование.ТОВыгрузкаТСД.Настройки." + ИмяПользователя(), СтруктураСохраняемыхНастроек);
ПолучитьСерверТО().ОтключитьКлиента(ЭтаФорма);
КонецПроцедуры // ПриЗакрытии()
//////////////////////////////////////////////////////////// ////////////////////
// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
мСписокТерминалов = ПолучитьСерверТО().ПолучитьСписокУстройств(Перечисления.ВидыТорговогоОборудования.ТерминалСбораДанных);
ПоказатьОтветы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Предполагаю, что у вас версия БГУ 1.0 на обычны формах. В таком случае между вашей конфигурацией и ТСД есть ещё внешняя обработка обслуживания непосредственно отвечающая за выгрузку данных. Она загружается отдельно при настройке ТСД в 1С и выгрузить для изучения её можно из справочника "Обработки обслуживания ТО". В принципе в такие обработки даже отладчик проваливается при некоторой сноровке. Вам нужен примерно вот такой участок кода
И смотреть значения Полей у Объект.Драйвер
Вообще ситуация в том что как минимум должен быть заполнен справочник "Форматы выгрузки для терминалов сбора данных" и там добавлено соответствие в какое поле базы ТСД записывать вашу цену и характеристику, по идее после этого должно сработать ваши изменения в коде. Вопрос в том что какая структура баз у вас сейчас на ТСД пользовались ли программатором? Как вы проверяете что цена у вас не выгрузилась?
Сам решал аналогичную задачу для CipherLab
Функция ВыгрузитьСтроку(Объект, Штрихкод, Номенклатура, ЕдиницаИзмерения,
ХарактеристикаНоменклатуры, СерияНоменклатуры,
Качество, Цена, Количество) Экспорт
Результат = мНетОшибки;
ФорматВыгрузки = Объект.Параметры.ФорматБазы.ПолучитьОбъект();
СоответствиеПолей = ФорматВыгрузки.ПолучитьСоответствиеПолейТСД(Штрихкод,
Номенклатура,
ЕдиницаИзмерения,
ХарактеристикаНоменклатуры,
СерияНоменклатуры,
Качество,
Цена,
Количество);
Поле1 = СоответствиеПолей["Поле1"];
Поле2 = СоответствиеПолей["Поле2"];
Поле3 = СоответствиеПолей["Поле3"];
Поле4 = СоответствиеПолей["Поле4"];
Поле5 = СоответствиеПолей["Поле5"];
Поле6 = СоответствиеПолей["Поле6"];
Поле7 = СоответствиеПолей["Поле7"];
Поле8 = СоответствиеПолей["Поле8"];
Объект.Драйвер.Поле1 = ?(Поле1 = Неопределено, "", Поле1);
Объект.Драйвер.Поле2 = ?(Поле2 = Неопределено, "", Поле2);
Объект.Драйвер.Поле3 = ?(Поле3 = Неопределено, "", Поле3);
Объект.Драйвер.Поле4 = ?(Поле4 = Неопределено, "", Поле4);
Объект.Драйвер.Поле5 = ?(Поле5 = Неопределено, "", Поле5);
Объект.Драйвер.Поле6 = ?(Поле6 = Неопределено, "", Поле6);
Объект.Драйвер.Поле7 = ?(Поле7 = Неопределено, "", Поле7);
Объект.Драйвер.Поле8 = ?(Поле8 = Неопределено, "", Поле8);
Ответ = Объект.Драйвер.ЗагрузитьЗапись(Объект.Параметры.НомерБазы);
Если Ответ = 0 Тогда
Объект.ОписаниеОшибки = Объект.Драйвер.ОписаниеРезультата;
Результат = мОшибкаЗагрузкиСтроки;
КонецЕсли;
Возврат Результат;
КонецФункции // ВыгрузитьСтроку()
ПоказатьИ смотреть значения Полей у Объект.Драйвер
Вообще ситуация в том что как минимум должен быть заполнен справочник "Форматы выгрузки для терминалов сбора данных" и там добавлено соответствие в какое поле базы ТСД записывать вашу цену и характеристику, по идее после этого должно сработать ваши изменения в коде. Вопрос в том что какая структура баз у вас сейчас на ТСД пользовались ли программатором? Как вы проверяете что цена у вас не выгрузилась?
Сам решал аналогичную задачу для CipherLab
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот