Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Опять взываю к помощи
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
malexmen
Опять прошу помощи.
Не пинайте, ну не могу.
Ситуация такая.
Фирма - комиссионер, занимается разтаможкой.
ВМДешек очень много.
Товар (каждая единица уникальная) вносится в справочник ТМЦ, и в основном с ним много работы.
В частности сверки с фирмой закажчиком о количестве и наименованиях.
Есть много других внешних обработок но все не то.
Дело в том что товар на фирме не оприходуется и самый удобный вариант - печать прямо из справочника.

Внешне печатную форму переделал.


В справочник добавлен еще один уровень.(+ Дата)


ПРОБЛЕМА:
Подсчет количества идет по высоте таблицы.
Если выводить на печать с "Даты" - все настраивается (минус строки шапки).



В варианте:



Если взять "Месяц" то кроме номенклатуры в счет идут и строки "Даты". (сколько подпапок на столько увеличивается количество товара).
Здесь настроить таким же способом не удается, да и дат в каждом месяце будет разное количество.
Можно снять защиту в ячейке количества и вбивать его ручками, но это не серьезно.
Вот модуль:



Перем ВТ, ШТ, Укр;

// =======================
Процедура Печать()
ВТ=0;
ШТ=0;
// Создание Таблицы для выходного отчета
Тов=СоздатьОбъект("Справочник.ТМЦ");
Укр = Константа.ФормыНаУкраинском;
ВыбТовар=ТекущийЭлемент();
Если ВыбТовар.Уровень()=1 Тогда
Если Укр = Да Тогда
Заг="ВСЯ НОМЕНКЛАТУРА";
Иначе
Заг="";
КонецЕсли
Иначе
Тов.ВключатьПодчиненные(1);
Тов.ИспользоватьРодителя(ВыбТовар.Родитель);
Если Укр = Да Тогда
Заг = "";
Иначе
Заг = "";
КонецЕсли;
Заг=Заг+ВыбТовар.Родитель.Наименование;
КонецЕсли;
глЧислоСтрок=0;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица(?(Укр = Да,"Укр","Рус"));
Таб.ВывестиСекцию("Отчет");
Тов.ВыбратьЭлементы();
Пока Тов.ПолучитьЭлемент()>0 Цикл
Если Тов.ЭтоГруппа()=1 тогда
Таб.ВывестиСекцию("Группа");
Иначе
ПечПрод = глФРМВал(Тов.Цена_Прод,Тов.Валюта_Прод,1);
ПечРозн = глФРМВал(Тов.Цена_Розн.Получить(РабочаяДата()),Гривня,1);
ПечПрих = глФРМВал(Тов.Цена_Прих,Тов.Валюта_Прих,1);
Таб.ВывестиСекцию("Товар");
КонецЕсли;
глОживить(1);
КонецЦикла;
ВТ=Таб.ВысотаТаблицы();
ШТ=Таб.ШиринаТаблицы();
Таб.ПовторятьПриПечатиСтроки(4,4);
Таб.ВывестиСекцию("Итог");
// Вызов выходного отчета в окно просмотра и редактирования.
Таб.Опции(0,0,4,0);
Таб.Защита(Константа.ФлагЗащитыТаблиц);
Таб.ТолькоПросмотр(1);
Таб.Показать("Список ТМЦ по каталогу","");
ВыбТовар = 0;
КонецПроцедуры

// ===============================
Процедура ОткрытьПартии()
ОткрытьФорму("Справочник.Партии.ФормаСписка");
КонецПроцедуры

// ===============================

Функция УстДоступность()
фГруппа = ТекущийЭлемент().ЭтоГруппа();
Форма.ИсторияСписок.Доступность(1-фГруппа);
Форма.кПартии.Доступность(1-фГруппа);
Форма.кПравоваяПоддержка.Видимость(глВидимостьПравовойПоддержки);
Возврат "";
КонецФункции


а как сделать чтобы учитывались только строки наименований товара - не доходит.
ИМХО, и в таблице будут изменения.
Batchir
Я б всё-таки остановился бы и пошел бы в другую сторону, создав для начала простенький регистр и документ.
Требования к системе скорее всего будут рости и на одном справочнике всего не вынести. Готов помочь в реализации.
malexmen
Batchir, чего то о другой стороне и не думал.
Вполне достаточно было бы и этого.
А вот реализация Вашего предложения о регистре и документе для меня пока возможно будет не по силам.
Batchir
Ну раз устраивает, то оставим. Насколько я понял нужно знать сколько всего выведено строк с наименованием номенклатуры.
Если понял правильно, то достаточно организовать простой счетчик для переменной "ВТ"


Тов.ВыбратьЭлементы();
// присваиваем начальное значение нашему итоговому количеству
ВТ = 0;
Пока Тов.ПолучитьЭлемент()>0 Цикл
    Если Тов.ЭтоГруппа()=1 тогда
        Таб.ВывестиСекцию("Группа");
    Иначе
        ПечПрод = глФРМВал(Тов.Цена_Прод,Тов.Валюта_Прод,1);
        ПечРозн = глФРМВал(Тов.Цена_Розн.Получить(РабочаяДата()),Гривня,1);
        ПечПрих = глФРМВал(Тов.Цена_Прих,Тов.Валюта_Прих,1);
        Таб.ВывестиСекцию("Товар");
        // увеличиваем количество на единицу при каждом выводе номенклатуры
        ВТ = ВТ + 1;
    КонецЕсли;
    глОживить(1);
КонецЦикла;
//Эту строку закоментировать или удалить
//ВТ=Таб.ВысотаТаблицы();
ШТ=Таб.ШиринаТаблицы();
Таб.ПовторятьПриПечатиСтроки(4,4);
Таб.ВывестиСекцию("Итог");
malexmen
Все гениальное - просто.
Правду дедушка Ленин говорил:
"Учиться, учиться и еще раз учиться..."
Спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.