Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Добавление товара из табчасти документа
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
danie
Переделываю обработку для печати этикеток на термопринтере.
В ее табчасть (список товаров для печати) товар набирается из самого справочника номенклатуры. Хочу сделать, чтобы можно было туда кинуть перечень товаров из табчасти документа - Перемещение товаров, Приходная накладная и т.п. Семерку совсем плохо знаю... Как можно реализовать?
ЗЫ Кроме того, надо в цикле по названию (коду) товара в табчасти дока определять его штрих-код (для печатной формы обработки).

необходимо зарегистрироваться для просмотра ссылки
MATEVI
//Ну типа того ... Хотя размыта задача ...
//Как понял так и зробыв smile.gif
//Это вариант по всем документам которые есть в базе

Процедура ДобавитьТоварВСписок()
Перем ТипФормы;
Меню = СоздатьОбъект("СписокЗначений");
Меню.ДобавитьЗначение(1,"По справочнику");
Меню.ДобавитьЗначение(2,"По документам");
Если Меню.ВыбратьЗначение(ТипФормы,"",,,1) <> 1 Тогда
Возврат;
КонецЕсли;
Если ТипФормы=1 Тогда

Спр=СоздатьОбъект ("Справочник.Номенклатура");
Спр.ВыборГруппы(1);
Если Спр.Выбрать("Добавить товар", "ФормаСписка")=1 Тогда;

//Сообщить("Количество строк в табл: "+ВыбТабл.КоличествоСтрок());

Если Спр.ЭтоГруппа()=1 Тогда

Спр.ИспользоватьРодителя(Спр.ТекущийЭлемент(),1);
Спр.ВыбратьЭлементы();

Пока (Спр.ПолучитьЭлемент()=1) Цикл
Если (ВыбТабл.НайтиЗначение(Спр.ТекущийЭлемент(),,Товар)=0) и (Спр.ЭтоГруппа()=0) Тогда
ВыбТабл.НоваяСтрока();
ВыбТабл.Товар=Спр.ТекущийЭлемент();
ВыбТабл.Наименование=Спр.ТекущийЭлемент();

//Сообщить("Товар: "+Спр.ТекущийЭлемент()+" Скидка: "+Спр.ТекущийЭлемент().Скидка.Получить(ТекущаяДата()));
КонецЕсли;
КонецЦикла;
Иначе
Если (ВыбТабл.НайтиЗначение(Спр.ТекущийЭлемент(),,Товар)=0) и (Спр.ЭтоГруппа()=0) Тогда
ВыбТабл.НоваяСтрока();
ВыбТабл.Товар=Спр.ТекущийЭлемент();
ВыбТабл.Наименование=Спр.ТекущийЭлемент();

//Сообщить("Товар: "+Спр.ТекущийЭлемент()+" Скидка: "+Спр.ТекущийЭлемент().Скидка.Получить(ТекущаяДата()));
КонецЕсли;
КонецЕсли;

КонецЕсли;
Спр=0;

Иначе
СпДок = СоздатьОбъект("СписокЗначений");
СпДок.ДобавитьЗначение("Перемещение");
СпДок.ДобавитьЗначение("Приходнаянакладная");//добавить идент. необходимых еще доков

Если ВыбТабл.КоличествоСтрок()>0 Тогда
ВыбТабл.УдалитьСтроки();
КонецЕсли;
ТабЗн = СоздатьОбъект("ТаблицаЗначений");
ТабЗн.НоваяКолонка("Товар");

Для А=1 По СпДок.РазмерСписка() Цикл
Док = СоздатьОбъект("Документ."+СпДок.ПолучитьЗначение(А));
Док.УстановитьФильтр(1,0);
Док.ВыбратьДокументы();// ВыбратьДокументы(<Дата1>,<Дата2>) даты надо или нет?
Пока Док.ПолучитьДокумент()=1 Цикл
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку()=1 Цикл
ТабЗн.НоваяСтрока();
ТабЗн.Товар=Док.ТМЦ;

КонецЦикла;
КонецЦикла;
КонецЦикла;
ТабЗн.Свернуть("Товар","");
ТабЗн.Выгрузить(ВыбТабл);
КонецЕсли;
КонецПроцедуры

//если это торговля тогда помоему ТабЗн.Товар=Док.Товар; надо смотреть как ревизиты таб части обзываются
//ограничить датами бо если много документов долго будет.
// вообщем поставь задачу более четко.
danie
MATEVI, как всегда выручаешь! ))) спасибо большое!
ЗЫ конфа ТиС 5-й
MATEVI
Цитата(danie @ 16.12.09, 14:56) необходимо зарегистрироваться для просмотра ссылки
MATEVI, как всегда выручаешь! ))) спасибо большое!
ЗЫ конфа ТиС 5-й

Бывает smile.gif Что то я от количества работы наверно, не понимаю некоторых простых вопросов.smile.gif

Вот еще например не понимаю зачем там наименование??? ВыбТабл.Наименование Это типовое?
danie
По всем документам это круто... А выбрать конкретный? например, из складских: Перемещение, номер хххххх123

СпДок = СоздатьОбъект("СписокЗначений");
СпДок.ДобавитьЗначение("Перемещение");
// выбираю конкретный
СпДок.ДобавитьЗначение("Приходнаянакладная");
// выбираю конкретный
MATEVI
Цитата(danie @ 16.12.09, 15:10) необходимо зарегистрироваться для просмотра ссылки
По всем документам это круто... А выбрать конкретный? например, из складских: Перемещение, номер хххххх123

СпДок = СоздатьОбъект("СписокЗначений");
СпДок.ДобавитьЗначение("Перемещение");
// выбираю конкретный
СпДок.ДобавитьЗначение("Приходнаянакладная");
// выбираю конкретный


.....
Меню.ДобавитьЗначение(3,"По конкретному документу");
....
//Иначе меняем на
ИначеЕсли ТипФормы=2 Тогда
.....
ТабЗн.Выгрузить(ВыбТабл);
Иначе
Если ВыбТабл.КоличествоСтрок()>0 Тогда
ВыбТабл.УдалитьСтроки();
КонецЕсли;
Если ВвестиЗначение(ТекДок,"Выберите документы","Документ")=1 Тогда
ТекДок.ВыбратьСтроки();
Пока ТекДок.ПолучитьСтроку()=1 Цикл
//в случае если дубли строк не разрешены можно не сворачивать
//по товарам в табзн как выше
ВыбТабл.НоваяСтрока();
ВыбТабл.Товар = ТекДок.Товар;
ВыбТабл.Наименование = ТекДок.Товар.Наименование;
КонецЦикла;
КонецЕсли;

//Как вариант
Если ВвестиЗначение(ТекДок,"Выберите документы","Документ.ПриходнаяНакладная")=1 Тогда
//будут только приходы
//или ","Документ. "+Идент где идент конкретный док. Но тута надо думать
danie
Цитата(MATEVI @ 16.12.09, 15:05) необходимо зарегистрироваться для просмотра ссылки
Вот еще например не понимаю зачем там наименование??? ВыбТабл.Наименование Это типовое?

Действительно нафиг не нужно.
MATEVI
Цитата(danie @ 16.12.09, 15:22) необходимо зарегистрироваться для просмотра ссылки
Действительно нафиг не нужно.

Тогда смотри определение колонок ВыбТабл
И ВыбТабл.ВидимостьКолонки("Товар",0);//она не видна
danie
Готово



Процедура ДобавитьТоварВСписок()
Перем ТипФормы;
Меню = СоздатьОбъект("СписокЗначений");
Меню.ДобавитьЗначение(1,"По справочнику");
Меню.ДобавитьЗначение(2,"По документам");
Если Меню.ВыбратьЗначение(ТипФормы,"",,,1) <> 1 Тогда
Возврат;
КонецЕсли;
Если ТипФормы=1 Тогда

Спр=СоздатьОбъект ("Справочник.Номенклатура");
Спр.ВыборГруппы(1);
Если Спр.Выбрать("Добавить товар", "ФормаСписка")=1 Тогда;

Если Спр.ЭтоГруппа()=1 Тогда

Спр.ИспользоватьРодителя(Спр.ТекущийЭлемент(),1);
Спр.ВыбратьЭлементы();

Пока (Спр.ПолучитьЭлемент()=1) Цикл
Если (ВыбТабл.НайтиЗначение(Спр.ТекущийЭлемент(),,Товар)=0) и (Спр.ЭтоГруппа()=0) Тогда
ВыбТабл.НоваяСтрока();
ВыбТабл.Товар=Спр.ТекущийЭлемент();
КонецЕсли;
КонецЦикла;
Иначе
Если (ВыбТабл.НайтиЗначение(Спр.ТекущийЭлемент(),,Товар)=0) и (Спр.ЭтоГруппа()=0) Тогда
ВыбТабл.НоваяСтрока();
ВыбТабл.Товар=Спр.ТекущийЭлемент();
ВыбТабл.Наименование=Спр.ТекущийЭлемент();

КонецЕсли;
КонецЕсли;
КонецЕсли;

Спр=0;

Иначе
ТекДок = СоздатьОбъект("СписокЗначений");
ТекДок.ДобавитьЗначение("Перемещение");
ТекДок.ДобавитьЗначение("Приходнаянакладная");

Если ВыбТабл.КоличествоСтрок()>0 Тогда
ВыбТабл.УдалитьСтроки();
КонецЕсли;
ТабЗн = СоздатьОбъект("ТаблицаЗначений");
ТабЗн.НоваяКолонка("Товар");

Если ВвестиЗначение(ТекДок,"Выберите документы","Документ")=1 Тогда
ТекДок.ВыбратьСтроки();
Пока ТекДок.ПолучитьСтроку()=1 Цикл
ТабЗн.НоваяСтрока();
ТабЗн.Товар = ТекДок.Товар;
КонецЦикла;
КонецЕсли;
ТабЗн.Свернуть("Товар","");
ТабЗн.Выгрузить(ВыбТабл);
КонецЕсли;

КонецПроцедуры

MATEVI
Цитата(danie @ 17.12.09, 14:57) необходимо зарегистрироваться для просмотра ссылки
Готово

ТекДок = СоздатьОбъект("СписокЗначений");
ТекДок.ДобавитьЗначение("Перемещение");
ТекДок.ДобавитьЗначение("Приходнаянакладная");

Это не надо. Ты же не задаешь в ввестизначение конкретный вид документа. И открывается выбор у тебя в полном журнале по всем документам

ТабЗн = СоздатьОбъект("ТаблицаЗначений");ТабЗн.НоваяКолонка("Товар");

Это тоже лишнее если дублей товаров в строках документа нет.
Сразу добавляй ТОвар в ВыбТабл

ЗЫ Кстати если бы ндо было по всем документам определенных видов
то можно было запросом сделать. Было бы быстрее.. Но если не надо то и "париться" не будем. smile.gif
danie
немного переделал по советам. все путем - пускай работает! спс большое!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.