Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: 1С для программиста

  Все выпуски  

RusFAQ.ru: 1С для программиста


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Тимошенко Дмитрий
Статус: Студент
Рейтинг: 163
∙ повысить рейтинг >>
Владимир Лазурко
Статус: Практикант
Рейтинг: 127
∙ повысить рейтинг >>
Anton Devitsin
Статус: Профессионал
Рейтинг: 104
∙ повысить рейтинг >>

∙ / КОМПЬЮТЕРЫ И ПО / Языки программирования / 1С для программиста

Выпуск № 1028 от 03.06.2009, 15:05
Администратор рассылки: Калашников О.А., Руководитель
В рассылке: подписчиков - 520, экспертов - 109
В номере: вопросов - 1, ответов - 2

Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке:
оценить выпуск >>

Вопрос № 168499: Добрый день, уважаемые эксперты. 1с 7.7 бухгалтерия. Нужно наладить печать документов на матричный принтер. Задача: перевести документ в ДОС формат и отправка на принтер....



Вопрос № 168499:

Добрый день, уважаемые эксперты.
1с 7.7 бухгалтерия. Нужно наладить печать документов на матричный принтер. Задача: перевести документ в ДОС формат и отправка на принтер.

Отправлен: 29.05.2009, 14:51
Вопрос задал: Александр Павлович, 2-й класс
Всего ответов: 2
Страница вопроса >>


Отвечает Vovchai, 5-й класс :
Здравствуйте, Александр Павлович.

1. создать текстовую печатную форму
2. записать текст во временный файл
3. DOS командой отправить на принтер, например так: type D:\Prn_frm.txt >LPT1

p.s. у меня для восьмерки есть внешняя печ. форма с выводом на матричник, но у вас 7.7,

Ответ отправил: Vovchai, 5-й класс
Ответ отправлен: 29.05.2009, 15:03

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 250024 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Отвечает Владимир Лазурко, Практикант :
    Здравствуйте, Александр Павлович.

    Вот пример моего модуля печати из документа:
    Код:
    Процедура ПечатьДОС()
    Перем ТекСтрока;
    Перем СтрокаФайла;
    ТекСтрока="";
    ТекстВыгрузки.Очистить();
    ТекстВыгрузки.КодоваяСтраница(1);
    ТекстВыгрузки.ДобавитьСтроку(" +---+----------------------------------------+------+---+------+------+");
    ТекстВыгрузки.ДобавитьСтроку(ВРЕГ(" |№/№| Товар |Кол-во|Ед | Цена |Сумма |"));
    ТекстВыгрузки.ДобавитьСтроку(" +---+----------------------------------------+------+---+------+------+");
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
    ТекСтрока=" |";
    ТекСтрока = ТекСтрока+Формат(Ст рока(НомерСтроки),"С3");
    ТекСтрока = ТекСтрока+"|"+Формат(Строка(Товар.Наименование),"С40");
    ТекСтрока = ТекСтрока+"|"+Формат(Строка(Количество),"С6");
    ТекСтрока = Текстрока+"|"+Формат(Строка(Единица),"С3");
    ТекСтрока = Текстрока+"|"+Формат(Строка(ЦенаСНДС),"С6");
    ТекСтрока = Текстрока+"|"+Формат(Строка(СуммаСНДС),"С6")+"|";
    ТекстВыгрузки.ДобавитьСтроку(ВРЕГ(ТекСтрока));
    КонецЦикла;
    ТекстВыгрузки.ДобавитьСтроку(" +---+----------------------------------------+------+---+------+------+");
    ТекстВыгрузки.ДобавитьСтроку(ВРЕГ(" Итого: "+Строка(Итог("СуммаСНДС"))));
    ТекстВыгрузки.ДобавитьСтроку("");
    ТекстВыгрузки.ДобавитьСтроку("");

    СтрокаФайла = КаталогПользователя()+"PrintDOS.txt";
    Текст Выгрузки.Записать(СтрокаФайла);
    КомандаСистемы(Строка("print /d:lpt1 """+СтрокаФайла+""""));
    КонецПроцедуры //ПечДОС


    И из обработки печати прайса:
    на форме обработки есть флажок "Эпсон" для печати на матричник и текстовое поле "Строкапечати" для указания имени принтера. В процедуре ПриОткрытии в зависимости от имени компьютера выбирается принтер: это может быть локальный для указанных компьютеров или сетевой для остальных.
    Код:
    Процедура Печать()
    Перем СписокПозиций, СписокТоваров;
    Перем ТекСтрока;
    Перем СтрокаФайла;
    ТекСтрока="";
    ТекстВыгрузки.Очистить();
    ТекстВыгрузки.КодоваяСтраница(1);

    СписокТоваров = Создат ьОбъект("СписокЗначений");
    СписокПозиций = СоздатьОбъект("СписокЗначений");

    НаложенФильтрПоТоварам=0;

    // накладываем множественный фильтр по товарам
    Если МФНоменклатура.РазмерСписка()<>0 Тогда

    Для Индекс=1 По МФНоменклатура.РазмерСписка() Цикл
    Позиция = МФНоменклатура.ПолучитьЗначение(Индекс);

    НоменкВложенаВДругую=0;
    Для Индекс2=1 По МФНоменклатура.РазмерСписка() Цикл
    Если Индекс2<>Индекс Тогда
    Позиция2 = МФНоменклатура.ПолучитьЗначение(Индекс2);
    Если Позиция2.ЭтоГруппа()>0 Тогда
    Если Позиция.ПринадлежитГруппе(Позиция2)>0 Тогда
    НоменкВложенаВДругую=1;
    Прервать;
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;

    Если НоменкВложенаВДругую=1 Тогда
    Продолжить;
    КонецЕсли;

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

    КонецЦикла;

    Если СписокПозиций.РазмерСписка()=0 Тогда
    Предупреждение("Список позиций пуст"); Возврат;
    КонецЕсли;

    НаложенФильтрПоТоварам=1;
    КонецЕсли;


    // не включать отсутствующие
    Если ТолькоПрисутствующие<>0 Тогда

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

    Если НаложенФильтрПоТоварам=1 Тогда

    ЧислоТов = СписокПозиций.РазмерСписка();
    Для Индекс = 1 По ЧислоТов Цикл

    НеУдовлетвФильтру=0;
    Номенк = СписокТоваров.ПолучитьЗначение(ЧислоТов+1-Индекс);

    // накладываем фильтр по присутствию/отсутствию
    Если Номенк.ВидТовара& lt;>Перечисление.ВидыТоваров.Товар Тогда
    НеУдовлетвФильтру=1;
    Иначе
    Кол = ВремРегистры.ОстаткиТоваров.СводныйОстаток(глПустаяФирма,Номенк,,"ОстатокТовара");
    Если Кол<=0 Тогда
    НеУдовлетвФильтру=1;
    КонецЕсли;
    КонецЕсли;

    Если НеУдовлетвФильтру=1 Тогда
    СписокПозиций.УдалитьЗначение(ЧислоТов+1-Индекс);
    КонецЕсли;
    КонецЦикла;

    Иначе

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

    КонецЕсли;

    Если СписокПозиций.РазмерСписка()=0 Тогда
    Предупреждение("Список позиций пуст");
    Возврат;
    КонецЕсли;

    НаложенФильтрПоТоварам=1;

    КонецЕсли;

    // теперь отбираем позиции справочника
    ТекстЗапроса = "
    |Период С '"+Строка(ПолучитьДатуТА())+"' По '"+Строка(ПолучитьДатуТА())+"';
    |Позиция = Справочник.Номенклатура.ТекущийЭлемент;
    |Товар = Справочник.Номенклатура.ТекущийЭлемент;
    |Поставщик = Справочник.Номенклатура.Поставщик;
    |";
    Если РынкинТовар = 1 Тогда
    ТекстЗапроса = ТекстЗапроса+"
    |Рынок = Справочник.Номенклатура.Рынок;
    |";
    КонецЕсли;
    ТекстЗапроса = ТекстЗапроса+"
    |Группировка Позиция Упорядочить По Позиция.Наименование;
    |Услов ие (Позиция В СписокПозиций);
    |Условие (Поставщик В ВыбПроизводитель);
    |";
    Если РынкинТовар = 1 Тогда
    ТекстЗапроса = ТекстЗапроса+"
    |Условие (Рынок = 1);
    |";
    КонецЕсли;

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

    // Создание Таблицы для выходного отчета
    Таб=СоздатьОбъект("Таблица");

    Ном=0;

    Если (ЕдиницаПечати.ТекущаяСтрока()<>1)И(ЕдиницаПечати.ТекущаяСтрока()<>2) Тогда
    ПечатьВФиксЕдиницах = 0;
    Иначе
    ПечатьВФиксЕдиницах = 1;
    КонецЕсли;

    Если ВалютаПечати.Выбран()=0 Тогда
    ПечатьВФиксВалюте = 0;
    Заг="";
    Иначе
    ПечатьВФиксВалюте = 1;
    Валюта = ВалютаПечати;
    Заг="Цены указаны в "+СокрЛП(Валюта.Кратко);
    КонецЕсли;

    Таб.ВывестиСекцию("Отчет");
    ТекстВыгрузки.ДобавитьСтроку(
    Формат(" ------- "+
    Строка(РабочаяДата())+
    " -------"+
    ?(Процент=0,""," "+Строка(Процент)+"% ")+
    "-------"+
    ?(ПустоеЗначение(ВыбПроизводитель)=1,""," "+Строка(ВыбПроизводитель)+" ")+
    "--------------------------------------","С74"));
    ТекстВыгрузки.ДобавитьСтроку(
    " №/№ "+
    "Товар ЯЩ. ОСТ. ЦЕНА");
    ТекстВыгрузки.ДобавитьСтроку(
    " ---------------------------------------------------------------------");


    Таб.ВывестиСекцию("Шапка|НазваниеПозиции");


    Таб.ПрисоединитьСекцию("Шапка|Цена");


    СписокГрупп = СоздатьОбъект("СписокЗначений");

    Цена = СоздатьОбъект("Справочник.Цены");
    Цена.ИспользоватьДату(ДатаОтчета);

    Пок а Запрос.Группировка("Позиция")>0 Цикл

    Если Запрос.Позиция.Выбран()=0 Тогда
    Продолжить;
    КонецЕсли;

    Если Запрос.Позиция.ЭтоГруппа() = 0 Тогда
    Если ОстатокТовара(Запрос.Позиция) < ГраницаОстатка Тогда
    Продолжить;
    КонецЕсли;
    КонецЕсли;

    Если Запрос.Позиция.ВидТовара = Перечисление.ВидыТоваров.Тара Тогда
    Продолжить;
    КонецЕсли;

    глОживить(1);

    Если Запрос.Позиция.ЭтоГруппа()=1 тогда
    СписокГрупп.ДобавитьЗначение(Запрос.Позиция.ТекущийЭлемент());
    Продолжить;
    КонецЕсли;

    Цена.ИспользоватьВладельца(Запрос.Товар.ТекущийЭлемент());

    Пока СписокГрупп.РазмерСписка()>0 Цикл
    Гр = СписокГрупп.ПолучитьЗначение(1);

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

    Если ПечатьВФиксЕдиницах=1 Тогда
    Если ЕдиницаПечати.ТекущаяСтрока()=1 Тогда
    Единица = Запрос.Товар.ЕдиницаПоУмолчанию;
    ИначеЕсли ЕдиницаПечати.ТекущаяСтрока()=2 Тогда
    Единица = глВернутьБазовуюЕдиницуТовара(Запрос.Товар.ТекущийЭ лемент());
    КонецЕсли;
    КонецЕсли;

    Ном=Ном+1;
    Таб.ВывестиСекцию("Товар|НазваниеПозиции");


    Если Цена.НайтиПоРеквизиту("КатегорияЦены",ТипЦены,0)<=0 Тогда
    ПечЦена = "";
    ПечНорм = "";
    Иначе

    Если ПечатьВФиксВалюте=0 Тогда
    Валюта = Цена.Валюта;
    КонецЕсли;

    Если ПечатьВФиксЕдиницах=0 Тогда
    Единица = Цена.Единица;
    КонецЕсли;

    ЧЦена = Цена.Цена;
    Если Единица<>Цена.Единица Тогда
    ЧЦена = ?(Цена.Единица.Коэффициент = 0,ЧЦена * Единица.Коэффициент / 1,ЧЦена * Единица.Коэффициент / Цена.Единица.Коэффициент);
    КонецЕсли;
    ЧЦена = глПересчет(ЧЦена,Цена.Валюта,РабочаяДата(),Валюта,РабочаяДата());
    ЦенаНорм = СокрЛП(Строка(Формат(ЧЦена,"Ч15.3")));
    ПечЦена = СокрЛП(Строка(Формат(ЧЦена*((100+Процент)/100),"Ч15.2")));
    КонецЕсли;

    < br> Таб.ПрисоединитьСекцию("Товар|Цена");

    ТекСтрока=" ";
    ТекСтрока = ТекСтрока+Формат(Строка(Ном),"С4");
    ТекСтрока = ТекСтрока+"|"+Формат(Строка(СокрЛП(Запрос.Товар.Наименование)),"С43");
    ТекСтрока = ТекСтрока+"|"+Формат(Строка(РассчитатьТару(ОстатокТовара(Запрос.Товар),Запрос.Товар.ШтукВЯщике)),"С7");
    ТекСтрока = ТекСтрока+"|"+Формат(Строка(ОстатокТовара(Запрос.Товар)),"С6");
    ТекСтрока = Текстрока+"|"+Формат(Строка(ПечЦена),"С6");
    ТекстВыгрузки.ДобавитьСтроку(ВРЕГ(ТекСтрока));

    КонецЦикла;

    //Вызов выходного отчета в окно просмотра и редактирования.
    // Таб.ПовторятьПриПечатиСтроки(1,5);
    Таб.Опции(0,0,3,0,ПарСтрСпр);
    Таб.Защита(0);
    Таб.ТолькоПросмотр(0);
    Таб.Показать(ВидСправочника,"");

    СтрокаФайла = КаталогПользователя()+"PrintDOS_"+Строка(ДатаОт чета)+"_"+Строка(ВыбПроизводитель)+"_"+Строка(Процент)+".txt";
    // ТекстВыгрузки.ДобавитьСтроку(РазделительСтраниц);
    ТекстВыгрузки.Записать(СтрокаФайла);
    Если Эпсон=1 Тогда
    // ТекстВыгрузки.Показать("","");
    Если Предупреждать = 1 Тогда
    Предупреждение("Прайс для печати на принтер "+СтрокаПечати+"
    |в текстовом режиме подготовлен.
    |Нажмите ОК для печати.");
    КонецЕсли;
    КомандаСистемы(Строка("print /d:"+СтрокаПечати+" """+СтрокаФайла+""""));
    КонецЕсли;
    КонецПроцедуры
    ...
    Процедура ПриОткрытии() // Предопределенная процедура

    ...

    Если Найти("=VUPISKA1=VUPISKA2=OPERATOR2=BUHGALTER=SYSADMIN=", ИмяКомпьютера()) > 0 Тогда
    //на этих компах матричные Эпсоны
    СтрокаПечати = "LPT1"
    Иначе
    // а вот на остальных лазерники или сетевые, и всё пошлём компьют еру OPERATOR2 на печать
    СтрокаПечати = """\\OPERATOR2\Epson LX-300+"""
    КонецЕсли;

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


    Успехов!
    С уважением, Владимир.
    -----
    И как хотите, чтобы с вами поступали люди, так и вы поступайте с ними. (Евангелие от Луки, 6:31, совр. перевод)

    Ответ отправил: Владимир Лазурко, Практикант
    Ответ отправлен: 02.06.2009, 08:56

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 250239 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!



    Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке:
    оценить выпуск >>

    подать вопрос экспертам этой рассылки >>

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.0 beta от 24.05.2009

    В избранное