7.7 Печать ценников и этикеток(сортировка по коду и наименованию товара)

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем SeeWorld, 23 июл 2012.

  1. TopicStarter Overlay
    SeeWorld
    Offline

    SeeWorld

    Регистрация:
    23 июл 2012
    Сообщения:
    46
    Симпатии:
    0
    Баллы:
    1
    Всем привет! Задание наверно банальное,но все же. Нужна сортировка по коду и наименованию продукции, то есть на выходе этикетки и ценники в экселе должны быть отсортированы. Сортировка по наименованию должна иметь два варианта(А-Я,Я-А). Сортировка по коду аналогична(по возраст и убыванию). В 1с только начинаю программировать, много чего не понятно. Помогите плиз!(

    Код:
    Перем МаксРяд, МаксСтолбик, Регистрация, Магазин;
    Перем Остатки;
    
    Функция ЗаполнитьИзТерминала()
    Перем ТермДанные;
    Перем УдаляемыеСтроки;
    Перем ВремНоменклатура, ВремЕдиница;
    Перем ЦенаТов, ЕдиницаЦены;
    
    // 1. загружаем данные из терминала
    Если глТерминалЗагрузитьДанные(ТермДанные) = 0 Тогда
    Возврат "";
    КонецЕсли;
    
    // 2. преобразуем таблицу, полученную из обработки терминала в формат для
    // передачи в процедуру обработки подбора
    
    ТермДанные.НоваяКолонка("Номенклатура");
    ТермДанные.НоваяКолонка("Единица");
    
    УдаляемыеСтроки = СоздатьОбъект("СписокЗначений");
    ТермДанные.ВыбратьСтроки();
    
    Пока ТермДанные.ПолучитьСтроку() = 1 Цикл
    Если глПолучитьТоварПоШтрихкоду(ТермДанные.Штрихкод, ВремНоменклатура, ВремЕдиница, ) = 0 Тогда
    // штрихкод не найден. сохраним номер строки для дальнейшего ее удаления
    УдаляемыеСтроки.ДобавитьЗначение(ТермДанные.НомерСтроки);
    Иначе
    ТермДанные.Номенклатура = ВремНоменклатура;
    ТермДанные.Единица	  = ВремЕдиница;
    КонецЕсли;
    КонецЦикла;
    
    // 3. удалим строки, по которым не удалось идентифицировать товар
    СчетчикЦикла = 0;
    Для СчетчикЦикла = 1 По УдаляемыеСтроки.РазмерСписка() Цикл
    УдСтр = УдаляемыеСтроки.ПолучитьЗначение(СчетчикЦикла);
    ТермДанные.УдалитьСтроку(УдСтр - СчетчикЦикла + 1);
    КонецЦикла;
    
    ТермДанные.ВыбратьСтроки();
    Пока ТермДанные.ПолучитьСтроку() = 1 Цикл
    ВремНоменклатура = ТермДанные.Номенклатура;
    Если ВремНоменклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Услуга Тогда
    Продолжить;
    КонецЕсли;	
    
    Если  флКоличество = 1 Тогда
    КолНом = ТермДанные.Количество;
    Если ТермДанные.Единица.Наименование <> "ШТ." Тогда
    КолНом = 1;
    КонецЕсли;
    Для Сч = 1 По КолНом Цикл
    Таб.НоваяСтрока();
    Таб.Номенклатура= ВремНоменклатура;
    Таб.ЕдИзм = ТермДанные.Единица;
    КонецЦикла;
    Иначе
    Таб.НоваяСтрока();
    Таб.Номенклатура= ВремНоменклатура;
    Таб.ЕдИзм = ТермДанные.Единица;
    КонецЕсли;
    
    КонецЦикла;
    
    // 4. Спросим про очистку памяти терминала
    Если Вопрос("Очистить память терминала сбора данных?", "Да+Нет", 60) = "Да" Тогда
    глТерминалОчиститьПамять();
    КонецЕсли;
    
    Возврат "";
    
    КонецФункции // ЗаполнитьИзТерминала()
    
    Функция ЗагрузитьИзДокумента()
    Перем  ТаблицаДокумента;
    Перем  ДокОснование;
    Перем ВариантЗап;
    
    Если  глТерминалВключен() = 1 Тогда
    СписВариантов = СоздатьОбъект("СписокЗначений");
    СписВариантов.ДобавитьЗначение(1, "Заполнить по документу");
    СписВариантов.ДобавитьЗначение(2, "Заполнить из терминала");
    
    Если СписВариантов.ВыбратьЗначение(ВариантЗап, , , 60, 1) <> 1 Тогда
    Возврат "";
    КонецЕсли;
    Иначе
    // терминал не включен. Заполняем всегда по остаткам
    ВариантЗап = 1;
    КонецЕсли;
    
    Если Таб.КоличествоСтрок() <> 0 Тогда
    ТекстВопроса = "Перед заполнением табличная часть будет очищена. Заполнить?";
    Если Вопрос(ТекстВопроса, "Да+Нет", 60) <> "Да" Тогда
    Возврат "";
    КонецЕсли;
    КонецЕсли;	
    
    Если ВариантЗап = 2 Тогда
    Результат = ЗаполнитьИзТерминала();
    Возврат Результат;
    КонецЕсли;
    
    // Загрузка из документа
    
    ДокОснование = СоздатьОбъект("Документ");
    ДокОснование.ВидыДляВыбора("ПеремещениеТМЦ,ПереоценкаРозница,ПоступлениеТМЦ");
    Если ДокОснование.Выбрать("Выберите документ для печати ценников") = 0 Тогда
    Возврат "Документ не выбран";
    КонецЕсли;
    
    Если Таб.КоличествоСтрок() <> 0 Тогда
    ТекстВопроса = "Очистить табличную часть?";
    Если Вопрос(ТекстВопроса, "Да+Нет", 30) = "Да" Тогда
    Таб.УдалитьСтроки();
    КонецЕсли;
    КонецЕсли;
    
    ТаблицаДокумента = СоздатьОбъект("ТаблицаЗначений");
    ДокОснование.ВыгрузитьТабличнуюЧасть(ТаблицаДокумента,"Номенклатура,Количество,Единица");
    
    ТаблицаДокумента.ВыбратьСтроки();
    Пока ТаблицаДокумента.ПолучитьСтроку()=1 Цикл
    
    ВремНоменклатура = ТаблицаДокумента.Номенклатура;
    Если ВремНоменклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Услуга Тогда
    Продолжить;
    КонецЕсли;	
    
    Если  флКоличество = 1 Тогда
    КолНом = ТаблицаДокумента.Количество;
    Если ТаблицаДокумента.Единица.Наименование <> "ШТ." Тогда
    КолНом = 1;
    КонецЕсли;
    Для Сч = 1 По КолНом Цикл
    Таб.НоваяСтрока();
    Таб.Номенклатура= ТаблицаДокумента.Номенклатура;
    Таб.ЕдИзм = ТаблицаДокумента.Единица;
    КонецЦикла;
    Иначе
    Таб.НоваяСтрока();
    Таб.Номенклатура= ТаблицаДокумента.Номенклатура;
    Таб.ЕдИзм = ТаблицаДокумента.Единица;
    КонецЕсли;
    
    КонецЦикла; // по строкам основания
    
    Если Таб.КоличествоСтрок() = 0 Тогда
    Возврат "В документе не заполнена табличная часть";
    КонецЕсли;
    
    Возврат "";
    
    КонецФункции // ЗагрузитьИзДокумента
    
    Процедура ПриИзмененииИсторииЦены()
    Если флИсторияЦены = 1 Тогда
    Цена2 = "";
    Форма.Цена2.Доступность(0);
    Иначе
    Форма.Цена2.Доступность(1);
    КонецЕсли;
    КонецПроцедуры
    
    // Обрабатывает цену, округляет до "круглого" значения если выбран соответствующий режим и отличие не превышает 5 копеек
    Функция ОбработатьЦену(Цена)
    Перем Результат;
    Результат = Цена;
    Если флВыравниватьЦену = 1 Тогда
    Результат = Окр(Цена,0);
    Если (ABS(Результат-Цена) > 0.05) Тогда
    Результат = Цена;
    КонецЕсли;
    КонецЕсли;
    Возврат глФРМ(Результат,,"");
    КонецФункции // ОбработатьЦену  
    
    //******************************************************************************
    // ДобавитьЦенник(Таб, Фирма, Номенклатура, Столбик, Ряд)
    //
    // Параметры:
    //  Таб			 - таблица, в которую выполняется вывод ценника
    //  Номенклатура  - наименование товара
    //  Столбик		 - номер столбика.
    //  Ряд			 - номер ряда
    //
    // Возвращаемое значение:
    //  Нет.
    //
    // Описание:
    //  Добавляет ценник в таблицу
    //
    Процедура ДобавитьЦенник(Таб, Фирма, Номенклатура, ЕдИзм, Столбик, Ряд) Экспорт
    
    Если Столбик > МаксСтолбик тогда
    Столбик = 2;
    Ряд = Ряд + 1;
    иначе
    Столбик = Столбик +  1;
    КонецЕсли;
    
    Если Ряд > МаксРяд Тогда
    Таб.НоваяСтраница();
    Столбик = 2; // Столбик следующий  за текущим
    Ряд = 1;
    КонецЕсли;
    
    
    ЦенаОптовая = "";  ЦенаОптоваяНаим = "";
    ЦенаВторая  = ""; ЦенаВтораяНаим = "";
    ЦенаШт  = ""; ЦенаШтНаим = "";
    
    Код = Номенклатура.Код;
    Наименование = СокрЛП(Шаблон("[Номенклатура.Наименование]"));
    Если флЗаглавными = 1 Тогда
    Наименование = Врег(Наименование);
    КонецЕсли;
    
    КаталожныйНомер = Номенклатура.КаталожныйНомер;
    ТестСтр = Врег(КаталожныйНомер);
    Если Найти(ТестСтр, "КИТАЙ") <> 0 Тогда
    КаталожныйНомер = "";
    КонецЕсли;
    
    Применяемость = Номенклатура.Применяемость;	
    ТестСтр = Врег(Применяемость);
    Если Найти(ТестСтр, "КИТАЙ") <> 0 Тогда
    Применяемость = "";
    КонецЕсли;
    
    ШК = ЕдИзм.Штрихкод;
    
    НДС = глНачисляемыйНДС(Номенклатура.СтавкаНДС);
    
    Если ПустоеЗначение(Цена1) = 0 тогда
    Цена = 0;
    ЦенаОптовая = 0;
    ЕдИзмОпт = "";
    ЦенаОптоваяНаим = Лев(Цена1.Наименование,6)+". цена";
    Если (флБазоваяЦена = 1) и (Цена1.Рассчитывается = 1) Тогда
    ЦенаОптоваяНаим = Цена1.БазовыйТипЦен.Наименование;
    КонецЕсли;
    Если глВернутьЦену(Номенклатура, Цена1, ДатаПечати, Цена, ЕдИзмОпт) = 1 тогда
    Если ЕдИзмОпт <> ЕдИзм Тогда
    Цена = Цена * ЕдИзм.Коэффициент;
    ЕдИзмОпт = ЕдИзм;
    КонецЕсли;
    Если добНДС = 1 тогда
    Цена = Цена * (1+НДС);
    КонецЕсли;
    ЦенаОптовая = ОбработатьЦену(Цена);
    иначе
    ЦенаОптоваяНаим = "";
    КонецЕсли;
    КонецЕсли;
    
    Если флИсторияЦены = 1 Тогда
    Цена2 = Цена1;  // Загоним сюда предыдущее значение цены1
    Цена = 0;
    ЦенаВторая = "";
    ЕдИзм2 = "";
    ЦенаВтораяНаим = "Цена";
    ДатаПредЦены = "";
    
    ЦеныНоменклатуры= СоздатьОбъект("Справочник.Цены");
    ЦеныНоменклатуры.ИспользоватьВладельца(Номенклатура);
    ЦеныНоменклатуры.ВыбратьЭлементы();
    
    Пока ЦеныНоменклатуры.ПолучитьЭлемент()  = 1 Цикл
    Если ЦеныНоменклатуры.ТипЦен.Код <> Цена2.Код Тогда
    Продолжить;
    КонецЕсли;
    
    НайденнаяЦена = ЦеныНоменклатуры.ТекущийЭлемент();
    
    Если ЦеныНоменклатуры.ПометкаУдаления() = 1 Тогда
    Рез = - 1; // Цена есть, но помечена на удаление
    Продолжить
    Иначе
    Периодический = СоздатьОбъект("Периодический");
    Периодический.ИспользоватьОбъект("Цена", ЦеныНоменклатуры.ТекущийЭлемент());
    Периодический.ВыбратьЗначения("", ДатаПечати);
    // Строки, в которых выводятся значения в периоде просмотра.
    Дата1 = "";
    Пока Периодический.ПолучитьЗначение() = 1 Цикл
    Если Дата1 <> Периодический.ДатаЗнач Тогда
    ДатаПредЦены = Дата1;
    Дата1 = Периодический.ДатаЗнач;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    Прервать;
    КонецЦикла;
    
    Если (ДатаПредЦены <> "") и (глВернутьЦену(Номенклатура, Цена2, ДатаПредЦены, Цена, ЕдИзм2) = 1) тогда
    Если ЕдИзм2 <> ЕдИзм Тогда
    Цена = Цена * ЕдИзм.Коэффициент;
    ЕдИзм2 = ЕдИзм;
    КонецЕсли;
    Если добНДС = 1 тогда
    Цена = Цена * (1+НДС);
    КонецЕсли;
    ЦенаВторая = ОбработатьЦену(Цена);
    иначе
    ЦенаВтораяНаим = "";
    КонецЕсли;
    Иначе
    Если ПустоеЗначение(Цена2) = 0 тогда
    Цена = 0;
    ЦенаВторая = 0;
    ЕдИзм2 = "";
    ЦенаВтораяНаим = Цена2.Наименование;
    
    Если (флБазоваяЦена = 1) и (Цена2.Рассчитывается = 1) Тогда
    ЦенаВтораяНаим = Цена2.БазовыйТипЦен.Наименование;
    КонецЕсли;
    
    Если глВернутьЦену(Номенклатура, Цена2, ДатаПечати, Цена, ЕдИзм2) = 1 тогда
    Если ЕдИзм2 <> ЕдИзм Тогда
    Цена = Цена * ЕдИзм.Коэффициент;
    ЕдИзм2 = ЕдИзм;
    КонецЕсли;
    Если добНДС = 1 тогда
    Цена = Цена * (1+НДС);
    КонецЕсли;
    ЦенаВторая = ОбработатьЦену(Цена);
    иначе
    ЦенаВтораяНаим = "";
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    
    Товар3Цены = 0;
    Если ПустоеЗначение(Цена3) = 0 тогда
    Цена = 0;
    ЦенаШт = 0;
    ЕдИзмШт = "";
    ЦенаШтНаим = Цена3.Наименование;
    Если (флБазоваяЦена = 1) и (Цена3.Рассчитывается = 1) Тогда
    ЦенаШтНаим = Цена3.БазовыйТипЦен.Наименование;
    КонецЕсли;
    Товар3Цены = 1;
    Если глВернутьЦену(Номенклатура, Цена3, ДатаПечати, Цена, ЕдИзмШт) = 1 тогда
    Если ЕдИзмШт <> ЕдИзм Тогда
    Цена = Цена * ЕдИзм.Коэффициент;
    ЕдИзмШт = ЕдИзм;
    КонецЕсли;
    Если добНДС = 1 тогда
    Цена = Цена * (1+НДС);
    КонецЕсли;
    ЦенаШт = ОбработатьЦену(Цена);
    иначе
    ЦенаШтНаим = "";
    КонецЕсли;
    КонецЕсли;
    
    Если Размер = 8 Тогда // Товар продается в кредит
    ЕдИзмШт = "";
    ЦенаШтНаим = "";
    ЦенаШт = "";
    Информация = "";
    Если Цена > 3500 Тогда
    Информация = "Продажа в кредит";
    ЦенаШтНаим = "Сумма первоначального взноса";
    ЦенаШт = ОбработатьЦену(Окр(Цена*0.1,-1));
    КонецЕсли;
    КонецЕсли;
    
    Если Столбик = 2 Тогда
    Если флОтступ = 1 тогда // Выводим с отступами
    Таб.ВывестиСекцию("Отступы|Ценник");
    ИначеЕсли (Товар3Цены = 0) и (Размер <> 8)  тогда
    Таб.ВывестиСекцию("Товар|Ценник");
    иначе
    Таб.ВывестиСекцию("Товар3Цены|Ценник");
    КонецЕсли;
    Иначе
    Если флОтступ = 1 тогда // Выводим с отступами
    Таб.ПрисоединитьСекцию("Отступы|Ценник");
    ИначеЕсли (Товар3Цены = 0) и (Размер <> 8)  тогда
    Таб.ПрисоединитьСекцию("Товар|Ценник");
    иначе
    Таб.ПрисоединитьСекцию("Товар3Цены|Ценник");
    КонецЕсли;
    КонецЕсли;
    
    КонецПроцедуры // ДобавитьЦенник()
    
    Процедура ПриВыбореОстатка()
    Если пкОстатки = 1 тогда
    Форма.кнУдСклад.Доступность(1);
    Форма.Склад.Доступность(1);
    иначе
    Форма.кнУдСклад.Доступность(0);
    Форма.Склад.Доступность(0);
    КонецЕсли;
    КонецПроцедуры
    
    //******************************************************************************
    Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
    // Процедура разбирает штрих-код, считанный сканером
    // и заполняет строки накладной
    Перем Упаковка,ТекКоличество, Спецификация;
    Перем ВремТовар, ВремЕдиница, ВремКоличество;
    Перем ВремЦена, ЕдЦены;
    
    Если Событие = "BarCodeValue" Тогда
    Если Форма.ТолькоПросмотр() = 0 Тогда
    Если глПолучитьТоварПоШтрихкоду(Данные, ВремТовар, ВремЕдиница, ВремКоличество) <> 0 Тогда
    
    Таб.НоваяСтрока();
    Таб.Номенклатура = ВремТовар;
    Таб.ЕдИзм   = ВремЕдиница;
    //Таб.Количество   = ВремКоличество;
    
    КонецЕсли;
    КонецЕсли;
    
    // Обработка закончена. Готовы к получению нового штрихкода.
    глСканерПосылкаДанных(1);
    КонецЕсли;
    
    КонецПроцедуры
    
    // Возвращает фирму, на которой есть остаток
    Функция ВернутьФирму(ТМЦ)
    Перем Результат, ТЗ, ОстФирма;
    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    Остатки.УстановитьЗначениеФильтра("Номенклатура",ТМЦ,1);
    Остатки.ВыгрузитьИтоги(ТЗ,1,1);
    ТЗ.Свернуть("Фирма","Количество");
    ТЗ.Сортировать("-Количество");
    Если ТЗ.КоличествоСтрок() > 0 Тогда
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку() = 1 Цикл
    ОстФирма = ТЗ.Фирма;
    Прервать;
    КонецЦикла;
    Иначе
    ОстФирма = ТекФирма.ПолучитьЗначение(ТекФирма.ТекущаяСтрока());
    КонецЕсли;
    Результат = ОстФирма.ЮрЛицо.Наименование;
    Остатки.УстановитьЗначениеФильтра("Номенклатура","");
    Возврат Результат;
    КонецФункции // ВернутьФирму
    
    //*******************************************
    Процедура Сформировать()
    
    //Если ТекФирма.ТекущаяСтрока() = 1 тогда
    // Фирма = "Открытое Акционерное Общество";
    // Магазин = "РБС ""Прохладненская""";
    //иначеЕсли ТекФирма.ТекущаяСтрока() = 2 тогда
    // Фирма = "ООО РБС";
    // Магазин = "Магазин ""Продукты""";
    //иначеЕсли ТекФирма.ТекущаяСтрока() = 3 тогда
    // Фирма = "ИП Омельченко И.Я.";
    // Магазин = "< Продукты >";
    //иначеЕсли ТекФирма.ТекущаяСтрока() = 4 тогда
    // Фирма = "ООО Мир продуктов";
    // Магазин = "< Продукты >";
    //КонецЕсли;
    
    Отчет = СоздатьОбъект("Таблица");
    Отчет.ИсходнаяТаблица("Таблица"+Размер);
    Если Размер = 1 Тогда
    МаксРяд = 3;
    МаксСтолбик = 2;
    ИначеЕсли Размер = 2 тогда
    МаксРяд = 5;
    МаксСтолбик = 3;
    иначеЕсли Размер = 3  тогда
    МаксРяд = 5;
    МаксСтолбик = 4;
    иначеЕсли Размер = 4  тогда
    МаксРяд = 3;
    МаксСтолбик = 1;
    иначеЕсли Размер = 5  тогда
    МаксРяд = 6;
    МаксСтолбик = 2;
    иначеЕсли Размер = 6  тогда
    МаксРяд = 3;
    МаксСтолбик = 2;
    ИначеЕсли Размер = 7 Тогда
    МаксРяд = 2;
    МаксСтолбик = 2;
    ИначеЕсли Размер = 8 Тогда
    МаксРяд = 2;
    МаксСтолбик = 2;
    ИначеЕсли Размер = 9 Тогда
    МаксРяд = 8;
    МаксСтолбик = 1;
    ИначеЕсли Размер = 10 Тогда
    МаксРяд = 10;
    МаксСтолбик = 2;
    ИначеЕсли Размер = 11 Тогда
    МаксРяд = 1;
    МаксСтолбик = 1;
    ИначеЕсли Размер = 12 Тогда
    МаксРяд = 9;
    МаксСтолбик = 2;
    ИначеЕсли Размер = 13 Тогда
    МаксРяд = 8;
    МаксСтолбик = 2;
    ИначеЕсли Размер = 14 Тогда
    МаксРяд = 10;
    МаксСтолбик = 3;
    ИначеЕсли Размер = 15 Тогда
    МаксРяд = 14;
    МаксСтолбик = 5;
    ИначеЕсли Размер = 16 Тогда
    МаксРяд = 7;
    МаксСтолбик = 3;
    Иначе
    Предупреждение("Нет шаблона ценника", 3);
    Возврат;
    КонецЕсли;
    
    Если флОтступ = 1 тогда
    МаксРяд = Макс(1, Цел(МаксРяд / 3));
    КонецЕсли;
    
    Столбик = 1;
    Ряд	 = 1;
    
    Ном = СоздатьОбъект("Справочник.Номенклатура");
    
    Таб.ВыбратьСтроки();
    Пока Таб.ПолучитьСтроку() = 1 Цикл
    Если Таб.Номенклатура.ЭтоГруппа() = 1 тогда
    Ном.ИспользоватьРодителя(Таб.Номенклатура);
    Ном.ВыбратьЭлементы();
    Пока Ном.ПолучитьЭлемент() = 1 цикл
    Если (Ном.ЭтоГруппа() = 0) и (Ном.ПометкаУдаления() = 0) тогда  
    Если пкОстатки = 1 тогда
    Если (ПустоеЗначение(Склад) = 1) тогда
    Если (Остатки.СводныйОстаток(, Ном.ТекущийЭлемент(), ,  ,"Количество") <= 0) тогда
    Продолжить;
    КонецЕсли;
    ИначеЕсли (ПустоеЗначение(Склад) = 0) тогда
    Если (Остатки.СводныйОстаток(, Ном.ТекущийЭлемент(), Склад,  ,"Количество") <= 0) тогда
    Продолжить;
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    Фирма = ВернутьФирму(Ном);
    Если (пкОстатки = 1) и (ПустоеЗначение(Фирма) = 1) Тогда
    Фирма = ТекФирма.ТекущаяСтрока();
    КонецЕсли;
    ДобавитьЦенник(Отчет, Фирма, Ном, Ном.БазоваяЕдиница, Столбик, Ряд);
    
    КонецЕсли;
    КонецЦикла;
    Ном.ИспользоватьРодителя();
    иначе
    Фирма = ВернутьФирму(Таб.Номенклатура);
    ДобавитьЦенник(Отчет, Фирма, Таб.Номенклатура, Таб.ЕдИзм, Столбик, Ряд);
    КонецЕсли;
    КонецЦикла;
    
    Отчет.Показать("Ценники "+?(пкОстатки = 0,"",?(ПустоеЗначение(Склад)=1," по всем складам "," по складу: "+Склад)));
    КонецПроцедуры
    
    Процедура ПоКнПодбор()
    ОткрытьПодбор("Справочник.Номенклатура","ДляВыбора",,1,);
    КонецПроцедуры
    
    Процедура ОбработкаПодбора(Ном,Конт)
    //Если Ном.ТекущийЭлемент().ЭтоГруппа() = 1 тогда
    // Предупреждение("Нельзя выбирать группы");
    // Возврат;
    //КонецЕсли;
    Если (Таб.НайтиЗначение(Ном.ТекущийЭлемент(),,"Номенклатура") = 0) или (Ном.ТекущийЭлемент().ЭтоГруппа() = 0) тогда
    Таб.НоваяСтрока();
    Таб.Номенклатура = Ном.ТекущийЭлемент();
    Если флБазЕдИзм = 1 Тогда
    Таб.ЕдИзм = Таб.Номенклатура.БазоваяЕдиница;
    Иначе
    СпрЕдИзм = СоздатьОбъект("Справочник.Единицы");
    СпрЕдИзм.ИспользоватьВладельца(Таб.Номенклатура);
    СпрЕдИзм.ВыбратьЭлементы();
    Пока СпрЕдИзм.ПолучитьЭлемент() = 1 Цикл
    Если СпрЕдИзм.ТекущийЭлемент() <> Таб.Номенклатура.БазоваяЕдиница Тогда
    Таб.ЕдИзм = СпрЕдИзм.ТекущийЭлемент();
    Прервать;
    КонецЕсли;
    Если ПустоеЗначение(Таб.ЕдИзм) = 1 Тогда
    Таб.ЕдИзм = Таб.Номенклатура.БазоваяЕдиница;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
    
    Процедура ПриОткрытии()
    Перем СпрФирм;
    Размер = 1;
    ДатаПечати = РабочаяДата();
    добНДС = 1;
    флБазЕдИзм = 1;
    пкОстатки = 1;
    
    флЗаглавными = 0;
    Таб.НоваяКолонка("Номенклатура","Справочник.Номенклатура");
    Таб.НоваяКолонка("ЕдИзм","Справочник.Единицы",,,"Ед.изм",7);
    Цена1 = Константа.РозничныйТипЦен;
    
    СпрФирм = СоздатьОбъект("Справочник.Фирмы");
    СпрФирм.ВыбратьЭлементы();
    Пока СпрФирм.ПолучитьЭлемент() = 1 Цикл
    ТекФирма.ДобавитьЗначение(СпрФирм.ТекущийЭлемент(), СпрФирм.ТекущийЭлемент().Наименование);
    КонецЦикла;
    
    Остатки = СоздатьОбъект("Регистр.ОстаткиТМЦ");
    
    ПриВыбореОстатка();
    КонецПроцедуры
    

    Вложения:

  2. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    1. Озвучте конфу и платформу
    2. Для оформления кода пользуйтесь тегами "код1С"

    3. Опишите конкретно, что не получается? Какие ошибки формируются...
  3. TopicStarter Overlay
    SeeWorld
    Offline

    SeeWorld

    Регистрация:
    23 июл 2012
    Сообщения:
    46
    Симпатии:
    0
    Баллы:
    1
    Отсортировать по наим. получилось(Таб.Сортировать("+Номенклатура"); ), а по коду нет(
  4. TopicStarter Overlay
    SeeWorld
    Offline

    SeeWorld

    Регистрация:
    23 июл 2012
    Сообщения:
    46
    Симпатии:
    0
    Баллы:
    1
    1с предприятие 7.7 типовая конфигур "Торговля + склад", редакция 9.0 Оптово-розничная конфигурация(7.70.907)

    Не получается отсортировать по коду.

    Код не нумерация строк, а код из справочника.номенклатура конкретного элемента.
  5. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Спасибо что хоть код глобального модуля не выложили)))))))))

    Чтобы сортировать по коду - нужно его занести в отдельную колонку таблицы. И после этого сортировать
  6. TopicStarter Overlay
    SeeWorld
    Offline

    SeeWorld

    Регистрация:
    23 июл 2012
    Сообщения:
    46
    Симпатии:
    0
    Баллы:
    1
    Где и как это сделать?
  7. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Перед циклом по Таб
  8. TopicStarter Overlay
    SeeWorld
    Offline

    SeeWorld

    Регистрация:
    23 июл 2012
    Сообщения:
    46
    Симпатии:
    0
    Баллы:
    1
    Скажите пожалуйста, почему у меня не заполняется в таблице значений "СписНаимКод" колонка "Номенклатура" наименованием товаров?
    Код:
    Таб.ВыбратьСтроки();
    Пока Таб.ПолучитьСтроку() = 1 Цикл
    Если Таб.Номенклатура.ЭтоГруппа() = 1 тогда
    Ном.ИспользоватьРодителя(Таб.Номенклатура);
    Ном.ВыбратьЭлементы();
    Пока Ном.ПолучитьЭлемент() = 1 цикл
    Если (Ном.ЭтоГруппа() = 0) и (Ном.ПометкаУдаления() = 0) тогда  
    Если пкОстатки = 1 тогда
    Если (ПустоеЗначение(Склад) = 1) тогда
    Если (Остатки.СводныйОстаток(, Ном.ТекущийЭлемент(), ,  ,"Количество") <= 0) тогда
    Продолжить;
    КонецЕсли;
    ИначеЕсли (ПустоеЗначение(Склад) = 0) тогда 
    Если (Остатки.СводныйОстаток(, Ном.ТекущийЭлемент(), Склад,  ,"Количество") <= 0) тогда
    Продолжить;
    КонецЕсли; 
    КонецЕсли;
    КонецЕсли; 
    Фирма = ВернутьФирму(Ном);
    Если (пкОстатки = 1) и (ПустоеЗначение(Фирма) = 1) Тогда
    Фирма = ТекФирма.ТекущаяСтрока();
    КонецЕсли;  
    СписНаимКод.НоваяСтрока(); 
    СписНаимКод.Отчет = Отчет;
    СписНаимКод.Фирма = Фирма;
    Сообщить(Ном);                                //  <-- выводятся наименования 
    СписНаимКод.Номенклатура = Ном;               //  <-- не происходит заполнение колонки
    СписНаимКод.ЕдИзм = Ном.БазоваяЕдиница;
    СписНаимКод.Код = Ном.Код;
    СписНаимКод.Столбик = Столбик;
    СписНаимКод.Ряд = Ряд;
    КонецЕсли;
    КонецЦикла;
    Ном.ИспользоватьРодителя();
    иначе  
    Фирма = ВернутьФирму(Таб.Номенклатура);
    СписНаимКод.НоваяСтрока(); 
    СписНаимКод.Отчет = Отчет;
    СписНаимКод.Фирма = Фирма;
    СписНаимКод.Номенклатура = Таб.Номенклатура;
    СписНаимКод.ЕдИзм = Таб.ЕдИзм;
    Сообщить(Таб.Номенклатура.Код);
    СписНаимКод.Код = Таб.Номенклатура.Код;               //  <-- происходит заполнение колонки
    СписНаимКод.Столбик = Столбик;
    СписНаимКод.Ряд = Ряд;
    КонецЕсли;
    КонецЦикла;
    //Сортировка по коду и наименованию товара 
    Если СорПоНаим.ТекущаяСтрока()=2 Тогда
    СписНаимКод.Сортировать("+Номенклатура");
    ИначеЕсли СорПоНаим.ТекущаяСтрока()=3 Тогда
    СписНаимКод.Сортировать("-Номенклатура");
    КонецЕсли; 
    Если СорПоКоду.ТекущаяСтрока()=2 Тогда
    СписНаимКод.Сортировать("+Код");
    ИначеЕсли СорПоКоду.ТекущаяСтрока()=3 Тогда
    СписНаимКод.Сортировать("-Код");
    КонецЕсли;             
    СписНаимКод.ВыбратьСтроки();
    Пока СписНаимКод.ПолучитьСтроку()=1 Цикл
    Табл = СписНаимКод.Отчет;
    Фирма = СписНаимКод.Фирма;
    Номенклатура = СписНаимКод.Номенклатура;
    ЕдИзм = СписНаимКод.ЕдИзм;
    Столбик = СписНаимКод.Столбик;
    Ряд = СписНаимКод.Ряд;
    ДобавитьЦенник(Табл, Фирма, Номенклатура, ЕдИзм, Столбик, Ряд);
    КонецЦикла;
    СписНаимКод.УдалитьСтроки();
    
    
    Процедура ПриОткрытии()
    Перем СпрФирм;   
    
    СорПоНаим.ДобавитьЗначение("Наименование");
    СорПоНаим.ДобавитьЗначение("А-Я");
    СорПоНаим.ДобавитьЗначение("Я-А"); 
    СорПоКоду.ДобавитьЗначение("Код");
    СорПоКоду.ДобавитьЗначение("ПоВозрастанию");
    СорПоКоду.ДобавитьЗначение("ПоУбыванию"); 
    
    СписНаимКод.НоваяКолонка("Отчет");    
    СписНаимКод.НоваяКолонка("Фирма");
    СписНаимКод.НоваяКолонка("Номенклатура");
    СписНаимКод.НоваяКолонка("ЕдИзм");
    СписНаимКод.НоваяКолонка("Код"); 
    СписНаимКод.НоваяКолонка("Столбик");
    СписНаимКод.НоваяКолонка("Ряд");
    
    Размер = 1;
    ДатаПечати = РабочаяДата();
    добНДС = 1;
    флБазЕдИзм = 1;
    пкОстатки = 1;
    
    флЗаглавными = 0;
    Таб.НоваяКолонка("Номенклатура","Справочник.Номенклатура");
    Таб.НоваяКолонка("ЕдИзм","Справочник.Единицы",,,"Ед.изм",7);
    
    Цена1 = Константа.РозничныйТипЦен;
    
    СпрФирм = СоздатьОбъект("Справочник.Фирмы");
    СпрФирм.ВыбратьЭлементы();
    Пока СпрФирм.ПолучитьЭлемент() = 1 Цикл
    ТекФирма.ДобавитьЗначение(СпрФирм.ТекущийЭлемент(), СпрФирм.ТекущийЭлемент().Наименование);
    КонецЦикла;
    
    Остатки = СоздатьОбъект("Регистр.ОстаткиТМЦ");
    
    ПриВыбореОстатка();
    
    КонецПроцедуры
    
  9. TopicStarter Overlay
    SeeWorld
    Offline

    SeeWorld

    Регистрация:
    23 июл 2012
    Сообщения:
    46
    Симпатии:
    0
    Баллы:
    1
    Решил проблему!)
  10. TopicStarter Overlay
    SeeWorld
    Offline

    SeeWorld

    Регистрация:
    23 июл 2012
    Сообщения:
    46
    Симпатии:
    0
    Баллы:
    1
    Другая проблема возникла(

    А точнее проблема выше описанная
  11. TopicStarter Overlay
    SeeWorld
    Offline

    SeeWorld

    Регистрация:
    23 июл 2012
    Сообщения:
    46
    Симпатии:
    0
    Баллы:
    1
    Тему можно закрывать! Я все сделал сам! Ура!)

Поделиться этой страницей