Привет MainGuru! Вот служебное сообщение и код (код целиком не помещается в одном соощении)
Всего единиц: 3; Получаем: 0
"Я" 1,0л Нектар из мандаринов с доб апельсина д.п
Всего единиц: 3; Получаем: 0
"Я" 1,0л Нектар из мандаринов с доб апельсина д.п
Всего единиц: 3; Получаем: 0
"Я" 0,2л Сок апельсиновый с мяк. д.п. СТЕКЛО
Всего единиц: 3; Получаем: -1 Здесь выгруска останавливается
Сообщить(Наим);
Сообщить("Всего единиц: "+Единицы.Количество()+"; Получаем: "+PriceUnit);
Ед = Единицы[PriceUnit];
Если ЕдЦены <> Ед Тогда
Сообщить(Ед);
Код1
Процедура ВыгрузкаНоменклатуры()
тзОписаниеКартинок.Очистить();
флДетализировать = Константы.кпкОстаткиПоХарактеристикам.Получить();
сзАссортимент = Новый СписокЗначений;
сзСклады = Новый СписокЗначений;
тзКатегорииЦен = Новый ТаблицаЗначений;
СтОтбор = Новый Структура("Агент");
СтОтбор.Вставить("Агент", ВыбАгент);
Выборка = РегистрыСведений.кпкСведенияАгента.Выбрать(СтОтбор);
Если Выборка.Следующий() Тогда
сзАссортимент.ЗагрузитьЗначения(Выборка.Ассортимент.ТАссортимент.ВыгрузитьКолонку("Номенклатура"));
сзСклады.ЗагрузитьЗначения(Выборка.СписокСкладов.ТабличнаяЧасть.ВыгрузитьКолонку("Склад"));
Иначе
Сообщить("Для выбранного агента не существует записи регистра кпкСведенияАгента! Товары не выгружены.");
Возврат;
КонецЕсли;
ВыгрузкаСтруктурыТиповЦен(тзКатегорииЦен);
КоличествоТиповЦен = тзКатегорииЦен.Количество();
Если КоличествоТиповЦен = 0 Тогда
Сообщить("Номенклатура не выгружена, не найдено ни одного типа цен для выгрузки!", СтатусСообщения.ОченьВажное);
Возврат;
КонецЕсли;
Добавлено (25.11.2009, 11:28)
---------------------------------------------
Код продолжение
//Выгружаем значение константы GUID_SYSTEM_PRICECOUNT - количество типов цен
Текст.ДобавитьСтроку("<Begin>" + Т_ + "Ref_System" + Т_ + "Struct:ObjID,Value");
Текст.ДобавитьСтроку(GUID_SYSTEM_PRICECOUNT + Т_ + Строка(КоличествоТиповЦен));
Текст.ДобавитьСтроку("<End>" + Т_ + "Ref_System");
Поз = 0;
СтрВидовЦен = "";
Для Каждого КЦСтр Из тзКатегорииЦен Цикл
Поз = Поз + 1;
СтрВидовЦен = СтрВидовЦен + "=Price" + Строка(Поз) + ",";
КонецЦикла;
НачСтрокаСтруктуры = "<Begin>" + Т_ + "Ref_Price" + Т_ + "Mode:Full" + Т_
+ "Struct:GoodsID,FolderID,IsFolder,Name,=Code,=NameUnits,=Unit0,=Unit1,=Unit2,"
+ СтрВидовЦен + "Rest,=VAT,=Comment,=StockUnit,=PriceUnit,_STRANA";
ТекстЗапроса = "ВЫБРАТЬ различные
|ТоварыОстатки.Номенклатура КАК ТМЦ,
|ТоварыОстатки.ХарактеристикаНоменклатуры КАК Характеристика,
|ТоварыОстатки.КоличествоОстаток КАК КоличествоОстаток
//|ПартииОстатки.СтоимостьОстаток
|
|ИЗ
| РегистрНакопления.ОстаткиТоваровКомпании.Остатки((&парДата), (Номенклатура В ИЕРАРХИИ (&Ассортимент)) И (СкладКомпании В (&СкладыКомпании))) КАК ТоварыОстатки
|
|ГДЕ
| ТоварыОстатки.КоличествоОстаток > 0
|
|УПОРЯДОЧИТЬ ПО
| ТМЦ,
| Характеристика
|ИТОГИ СУММА(КоличествоОстаток) ПО
| ТМЦ ИЕРАРХИЯ
| Характеристика";
//Если флДетализировать Тогда
// Текстзапроса = ТекстЗапроса + "ИТОГИ СУММА(КоличествоОстаток) ПО
// | Характеристика";
//Иначе
// Текстзапроса = ТекстЗапроса + "ИТОГИ СУММА(КоличествоОстаток) ПО
// | ТМЦ ИЕРАРХИЯ";
//КонецЕсли;
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("парДата", ТекущаяДата());
Запрос.УстановитьПараметр("Ассортимент", сзАссортимент);
Запрос.УстановитьПараметр("СкладыКомпании", сзСклады);
//Запрос.УстановитьПараметр("ДопТовары", сзДопТовары);
Результат = Запрос.Выполнить();
тзРез = Результат.Выгрузить();
Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Текст.ДобавитьСтроку(НачСтрокаСтруктуры);
СтОтборЦены = новый Структура("ТипЦен, Номенклатура");
Пока Выборка.Следующий() Цикл
Ном = Выборка.ТМЦ;
НомХар = Выборка.Характеристика;
ПризнакГруппы = ?(Ном.ЭтоГруппа, 1, 0);
Код = Ном.Код;
Наим = Ном.Наименование;
ИдНом = Ном.УникальныйИдентификатор();
ИдРодителя = Ном.Родитель.УникальныйИдентификатор();
//ЦеныВыборка = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Остаток = Строка(Формат(Выборка.КоличествоОстаток, "ЧГ=0"));
НачСтрокаСтруктуры = НачСтрокаСтруктуры + СтрВидовЦен + "Rest";
Если НЕ Ном.ЭтоГруппа Тогда
Единицы = Новый Массив;
ОсновнаяЕдиница = Ном.ЕдиницаХраненияОстатков;
Единицы.Добавить(ОсновнаяЕдиница);
СтрЕдиницы = СокрЛП(Лев(ОсновнаяЕдиница.Наименование, 3)) + ",";
СтрКоэффициенты = СокрЛП(ОсновнаяЕдиница.Коэффициент) + Т_;
ВыборкаЕд = Справочники.ЕдиницыИзмерения.Выбрать( , Ном, , "Коэффициент");
НомИд = СокрЛП(Ном.УникальныйИдентификатор());
СчетчикЕд = 1;
StockUnit = "0";//Gri++ (08.06.07)
// Выгрузка Штрих-кода для основной единицы
ШКСтр = тзШтрихКоды.Добавить();
ШКСтр.ИДТовара = НомИД;
ШКСтр.ШтрихКод = СокрЛП(ВыборкаЕд.ШтрихКод);
ШКСтр.КодЕдиницы = СчетчикЕд - 1;
НомИД = "*";
// Выгрузка еще двух единиц и их штрих-кодов
Пока ВыборкаЕд.Следующий() Цикл
Если ВыборкаЕд.Ссылка = ОсновнаяЕдиница Тогда
Продолжить; // Чтобы повторно не выгрузить основную единицу
КонецЕсли;
СтрЕдиницы = СтрЕдиницы + СокрЛП(Лев(ВыборкаЕд.Наименование, 3)) + ",";
СтрКоэффициенты = СтрКоэффициенты + СокрЛП(ВыборкаЕд.Коэффициент) + Т_;
СчетчикЕд = СчетчикЕд + 1;
Единицы.Добавить(ВыборкаЕд.Ссылка);
ШКСтр = тзШтрихКоды.Добавить();
ШКСтр.ИДТовара = НомИД;
ШКСтр.ШтрихКод = СокрЛП(ВыборкаЕд.ШтрихКод);
ШКСтр.КодЕдиницы = СчетчикЕд - 1;
Если СчетчикЕд = 3 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Добавлено (25.11.2009, 11:28)
---------------------------------------------
Код продолжение
Если СчетчикЕд <> 3 Тогда
Пока СчетчикЕд <> 3 Цикл
СтрЕдиницы = СтрЕдиницы + ",";
СтрКоэффициенты = СтрКоэффициенты + Т_;
СчетчикЕд = СчетчикЕд + 1;
Единицы.Добавить();
КонецЦикла;
КонецЕсли;
СтрЕдиницы = Лев(СтрЕдиницы, СтрДлина(СтрЕдиницы) - 1); // Убрали последнюю запятую
СтрЦены = "";
PriceUnit = -1; //Gri++ (08.06.07)
Для Каждого Стр Из тзКатегорииЦен Цикл
ТипЦены = Стр.Тип;
ЕдЦены = ПолучитьЕдиницуИзмеренияДляТипаЦеныНоменклатуры(ТипЦены, Ном, Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
Если ТипЦены.Рассчитывается Тогда
СтОтборЦены.Вставить("ТипЦен", ТипЦены.БазовыйТипЦен);
СтОтборЦены.Вставить("Номенклатура", Ном);
ЦенаНом = РегистрыСведений.ЦеныКомпании.ПолучитьПоследнее(ТекущаяДата(), СтОтборЦены);
БазоваяЦена = ЦенаНом.Цена;
Цена = БазоваяЦена + (БазоваяЦена * ТипЦены.ПроцентСкидкиНаценки / 100);
Иначе
СтОтборЦены.Вставить("ТипЦен", ТипЦены);
СтОтборЦены.Вставить("Номенклатура", Ном);
ЦенаНом = РегистрыСведений.ЦеныКомпании.ПолучитьПоследнее(ТекущаяДата(), СтОтборЦены);
Цена = ЦенаНом.Цена;
КонецЕсли;
//Gri++ (08.06.07) { нужно определить какую единицу измерения считать привязанной к цене
Если PriceUnit = -1 Тогда
Если ЕдЦены = Единицы[0] Тогда
PriceUnit = 0;
ИначеЕсли ЕдЦены = Единицы[1] Тогда
PriceUnit = 1;
ИначеЕсли ЕдЦены = Единицы[2] Тогда
PriceUnit = 2;
КонецЕсли;
КонецЕсли;
Сообщить(Наим);
Сообщить("Всего единиц: "+Единицы.Количество()+"; Получаем: "+PriceUnit);
Ед = Единицы[PriceUnit];
Если ЕдЦены <> Ед Тогда
Сообщить(Ед);
//Сообщить(ЕдЦены);
Цена = Цена * Ед.Коэффициент / ЕдЦены.Коэффициент;
КонецЕсли;
СтрЦены = СтрЦены + Строка(Формат(Цена, "ЧРД='.'; ЧРГ=''")) + Т_;
КонецЦикла;
// Формирование таблицы для выгрузки описания картинок товаров
Если (Ном.ОсновноеИзображение <> Неопределено) И (НЕ Ном.ОсновноеИзображение.Пустая()) Тогда
КСтр = тзОписаниеКартинок.Добавить();
КСтр.ИДТовара = СокрЛП(Ном.УникальныйИдентификатор());
КСтр.Картинка = Ном.ОсновноеИзображение.Хранилище.Получить();
КСтр.Наименование = СокрЛП(Ном.Наименование);
КСтр.Описание = СокрЛП(Ном.ОсновноеИзображение.Наименование);
КонецЕсли;
Добавлено (25.11.2009, 11:29)
---------------------------------------------
Код продолжение
Комментарий = СокрЛП(Ном.Комментарий);
Страна = Ном.СтранаПроисхождения.Код;
СтавкаНДС = рцПолучитьСтавкуНДС(Ном.СтавкаНДС);
Характеристики = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Если (НЕ флДетализировать) ИЛИ (Характеристики.Количество() = 0) Тогда
Текст.ДобавитьСтроку(СокрЛП(Строка(ИдНом)) + Т_ + СокрЛП(Строка(ИдРодителя)) + Т_ + Строка(ПризнакГруппы) + Т_
+ Наим + Т_ + Строка(Код) + Т_ + СтрЕдиницы + Т_ + СтрКоэффициенты + СтрЦены + Остаток + Т_ + СтавкаНДС + Т_ + Комментарий + Т_ + Строка(StockUnit) + Т_ + Строка(PriceUnit) + Т_ + Страна);
Продолжить;
КонецЕсли;
Текст.ДобавитьСтроку(СокрЛП(Строка(ИдНом)) + Т_ + СокрЛП(Строка(ИдРодителя)) + Т_ + Строка(2) + Т_
+ Наим + Т_ + Строка(Код) + Т_ + СтрЕдиницы + Т_ + СтрКоэффициенты + СтрЦены + Остаток + Т_ + СтавкаНДС + Т_ + Комментарий + Т_ + Строка(StockUnit) + Т_ + Строка(PriceUnit) + Т_ + Страна);
СтОтборЦеныХар = новый Структура("ТипЦен, Номенклатура, ХарактеристикаНоменклатуры");
Пока Характеристики.Следующий() Цикл
Хар = Характеристики.Характеристика;
//ХарНаим = Хар.Наименование;
//Если НЕ ПустаяСтрока(ХарНаим) Тогда
// ХарНаим = "(" + ХарНаим + ")";
//КонецЕсли;
//Наим = Ном.Наименование + ХарНаим;
ИдХар = Хар.УникальныйИдентификатор();
//ПустойИД = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
//ИдНом = ?(ИдХар = ПустойИД, ИдНом, ИдХар);
Если Хар.Пустая() Тогда
Продолжить;
КонецЕсли;
Добавлено (25.11.2009, 11:30)
---------------------------------------------
Код продолжение
Если НЕ Хар.Пустая() Тогда
Наим = Ном.Наименование + "(" + Хар.Наименование + ")";
ИдНом = ИдХар;
КонецЕсли;
ИдРодителя = Ном.УникальныйИдентификатор();
Остаток = Строка(Формат(Характеристики.КоличествоОстаток, "ЧГ=0"));
// Записываем найденные цены в таблицу категорий
СтрЦены = "";
PriceUnit = -1; //Gri++ (08.06.07)
Для Каждого Стр Из тзКатегорииЦен Цикл
ТипЦены = Стр.Тип;
ЕдЦены = ПолучитьЕдиницуИзмеренияДляТипаЦеныНоменклатуры(ТипЦены, Ном, Хар);
Если ТипЦены.Рассчитывается Тогда
СтОтборЦеныХар.Вставить("ТипЦен", ТипЦены.БазовыйТипЦен);
СтОтборЦеныХар.Вставить("Номенклатура", Ном);
СтОтборЦеныХар.Вставить("ХарактеристикаНоменклатуры", Хар);
ЦенаНом = РегистрыСведений.ЦеныКомпании.ПолучитьПоследнее(ТекущаяДата(), СтОтборЦеныХар);
БазоваяЦена = ЦенаНом.Цена;
Цена = БазоваяЦена + (БазоваяЦена * ТипЦены.ПроцентСкидкиНаценки / 100);
Иначе
СтОтборЦеныХар.Вставить("ТипЦен", ТипЦены);
СтОтборЦеныХар.Вставить("Номенклатура", Ном);
СтОтборЦеныХар.Вставить("ХарактеристикаНоменклатуры", Хар);
ЦенаНом = РегистрыСведений.ЦеныКомпании.ПолучитьПоследнее(ТекущаяДата(), СтОтборЦеныХар);
Цена = ЦенаНом.Цена;
КонецЕсли;
//Gri++ (08.06.07) { нужно определить какую единицу измерения считать привязанной к цене
Если PriceUnit = -1 Тогда
Если ЕдЦены = Единицы[0] Тогда
PriceUnit = 0;
ИначеЕсли ЕдЦены = Единицы[1] Тогда
PriceUnit = 1;
ИначеЕсли ЕдЦены = Единицы[2] Тогда
PriceUnit = 2;
КонецЕсли;
КонецЕсли;
Добавлено (25.11.2009, 11:31)
---------------------------------------------
Конец кода
Ед = Единицы[PriceUnit];
Если ЕдЦены <> Ед Тогда
Цена = Цена * Ед.Коэффициент / ЕдЦены.Коэффициент;
КонецЕсли;
СтрЦены = СтрЦены + Строка(Формат(Цена, "ЧРД='.'; ЧРГ=''")) + Т_;
КонецЦикла;
Текст.ДобавитьСтроку(СокрЛП(Строка(ИдНом)) + Т_ + СокрЛП(Строка(ИдРодителя)) + Т_ + Строка(ПризнакГруппы) + Т_
+ Наим + Т_ + Строка(Код) + Т_ + СтрЕдиницы + Т_ + СтрКоэффициенты + СтрЦены + Остаток + Т_ + СтавкаНДС + Т_ + Комментарий + Т_ + Строка(StockUnit) + Т_ + Строка(PriceUnit) + Т_ + Страна);
КонецЦикла;
Иначе // У группы нет единиц
СтрЕдиницы = ",,";
СтрКоэффициенты = "0" + Т_ + "0" + Т_ + "0" + Т_;
Комментарий = "";
Страна = "";
СтавкаНДС = рцПолучитьСтавкуНДС(Ном.СтавкаНДС);
Текст.ДобавитьСтроку(СокрЛП(Строка(ИдНом)) + Т_ + СокрЛП(Строка(ИдРодителя)) + Т_ + Строка(ПризнакГруппы) + Т_
+ Наим + Т_ + Строка(Код) + Т_ + СтрЕдиницы + Т_ + СтрКоэффициенты + СтрЦены + Остаток + Т_ + СтавкаНДС + Т_ + Комментарий + Т_ + Строка(0) + Т_ + Строка(0) + Т_ + Страна);
КонецЕсли;
//Остаток = Строка(Формат(Выборка.КоличествоОстаток, "ЧГ=0"));
//Страна = ?(Ном.ЭтоГруппа, "", Ном.СтранаПроисхождения.Код);
//СтавкаНДС = ПолучитьСтавкуНДС(Ном.СтавкаНДС);
//
//Текст.ДобавитьСтроку(СокрЛП(Строка(ИдНом)) + Т_ + СокрЛП(Строка(ИдРодителя)) + Т_ + Строка(ПризнакГруппы) + Т_
//+ Наим + Т_ + Строка(Код) + Т_ + СтрЕдиницы + Т_ + СтрКоэффициенты + СтрЦены + Остаток + Т_ + СтавкаНДС + Т_ + Комментарий + Т_ + Страна);
КонецЦикла;
Текст.ДобавитьСтроку("<End>" + Т_ + "Ref_Price");
ВыгрузкаШтрихКодов();
КонецПроцедуры