1C: Управление строительной организацией

Форум пользователей и партнеров
Текущее время: Пт авг 17, 2018 4:19 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
СообщениеДобавлено: Чт апр 02, 2009 1:35 pm 
Не в сети

Зарегистрирован: Ср сен 12, 2007 12:07 pm
Сообщения: 170
На некоторых ИБ, печать машиночитаемых форм невозможнав силу малоулавливаемой ошибки.
Обсуждение на партнерском форуме http://partners.v8.1c.ru/forum/thread.jsp?id=575876#575876
Предлагаемое там решение, в принципе, подходит.
Для тех, у кого нет доступа на партнерский форум, поясняю:
Необходимо внести изменение в конфигурацию в ОМ "РегламентированнаяОтчетность - в нем
процедуруу "ВывестиМашиночитаемуюФорму" заменить на неё же, измененную:

Код:
Функция ВывестиМашиночитаемуюФорму(Форма, ИмяКнопки) Экспорт
     
      // сохраняем форму, если она не сохранена
      Если Форма.Модифицированность Тогда
            Если Вопрос("Перед печатью отчета требуется сохранить введеную информацию." + Символы.ПС + "Продолжить?", РежимДиалогаВопрос.ДаНет) <> КодВозвратаДиалога.Да
                  ИЛИ НЕ Форма.Сохранить() Тогда
                  Возврат Ложь;
            КонецЕсли;
      КонецЕсли;
     
      // формируем текст выгрузки во временный файл
      ВремФайл = ПолучитьИмяВременногоФайла();
      Если НЕ СформироватьТекстВыгрузки(Форма, ВремФайл) Тогда
            Возврат Ложь;
      КонецЕсли;
     
      // извлекаем параметры сформированного файла выгрузки
      СтруктураПараметров = СформироватьСтруктуруПараметровФайлаВыгрузки(ВремФайл);
      КаталогВремФайлов = КаталогВременныхФайлов();
      КаталогВремФайлов = ?(Прав(КаталогВремФайлов, 1) = "\", КаталогВремФайлов, КаталогВремФайлов + "\");
      ВремКаталог = КаталогВремФайлов + Строка(Новый УникальныйИдентификатор) + "\";
      СоздатьКаталог(ВремКаталог);
     
      // выгружаем во временный каталог шаблоны печати, соответствующие сформированному файлу выгрузки
      Если НЕ ВыгрузитьШаблоныПечатиВКаталог(Форма, ВремКаталог, СтруктураПараметров["КНД"], ?(СтруктураПараметров["ЭтоXML"], СтруктураПараметров["ВерсФорм"], СтруктураПараметров["ВерФОтч"])) Тогда
            Возврат Ложь;
      КонецЕсли;
     
      Результат = Истина;
      КомпонентаУжеУстанавливалась = Истина;
     
      // пытаемся создать объект для формирования машиночитаемой формы
      ТаксДокПринт = Неопределено;
      Попытка
            ТаксДокПринт = Новый COMОбъект("TAXDOCPrt.TAXDOCPrint");
      Исключение
            // если не удалось создать объект, то спрашиваем у пользователя, хочет ли он установить компоненту
            Если Вопрос("Для формирования машиночитаемой формы необходимо установить в системе вспомогательную компоненту.
                  |Установить компоненту сейчас?", РежимДиалогаВопрос.ДаНет) <> КодВозвратаДиалога.Да Тогда
                  Результат = Ложь;
            Иначе
                  // если не удалось создать объект и пользователь не против, то запускаем установку компоненты
                  Если НЕ УстановитьКомпонентуПечатиМашиночитаемыхФорм(Истина) Тогда
                        Предупреждение("Формирование машиночитаемой формы прервано: в системе не установлена вспомогательная компонента.");
                        Результат = Ложь;
                  Иначе
                        ТаксДокПринт = Новый COMОбъект("TAXDOCPrt.TAXDOCPrint");
                        КомпонентаУжеУстанавливалась = Истина;
                  КонецЕсли;
            КонецЕсли;
      КонецПопытки;
     
      Если ТаксДокПринт <> Неопределено Тогда
            Попытка
                  ТаксДокПринт.PrintTiffFolder = ВремКаталог;
                  НаименованиеИФНС = ОпределитьНаименованиеИФНСПолучателяОтчета(Форма);
                  Если ЗначениеЗаполнено(НаименованиеИФНС) Тогда
                        ТаксДокПринт.SetPrintTiffParam1C("Наименование налогового органа-получателя", НаименованиеИФНС);
                  КонецЕсли;
                  Если ИмяКнопки = "ПечататьМашиночитаемыйБланк" Тогда
                        ТаксДокПринт.PrintFile(ВремФайл, "", "", 0);
                  Иначе
                        ТаксДокПринт.PreviewFile1C(ВремФайл, 0);
                  КонецЕсли;
                  Результат = Истина;
            Исключение
                 
                  //Elit_Sol_20081001 {Закоментировал две строки, чтобы дальше мог сработать код обхода
                 
                  //ОбработатьОшибкуМодуляПечати();
                  //ТаксДокПринт = Неопределено;
                 
                  //Elit_Sol_20081001 }
                 
                  Результат = Ложь;
            КонецПопытки;
      КонецЕсли;
     
      //Elit_Sol_20081001 {На некоторых компьютерах траблы
      //с региональными настройками и стандартный файл не читается, сформируем свой
      Если НЕ Результат Тогда
            Текст1 = Новый ТекстовыйДокумент;
            Текст1.Прочитать(ВремФайл, КодировкаТекста.ANSI);
            ТекстСтр1 = Текст1.ПолучитьТекст();
           
            Текст2 = Новый ТекстовыйДокумент;
            МестоВставки = Найти(ВремФайл, "v8_");
            НашПуть = Сред(ВремФайл, 1, МестоВставки - 1) + "_temp.txt";
            Для СчетчикСтрок = 1 По СтрЧислоСтрок(ТекстСтр1) Цикл
                  Стр = СтрПолучитьСтроку(ТекстСтр1, СчетчикСтрок);
                  Текст2.ВставитьСтроку(СчетчикСтрок, Стр);
            КонецЦикла;
           
            Текст2.Записать(НашПуть, КодировкаТекста.ANSI);
           
            Попытка
                  ТаксДокПринт.PrintTiffFolder = ВремКаталог;
                  НаименованиеИФНС = ОпределитьНаименованиеИФНСПолучателяОтчета(Форма);
                  Если ЗначениеЗаполнено(НаименованиеИФНС) Тогда
                        ТаксДокПринт.SetPrintTiffParam1C("Наименование налогового органа-получателя", НаименованиеИФНС);
                  КонецЕсли;
                  Если ИмяКнопки = "ПечататьМашиночитаемыйБланк" Тогда
                        ТаксДокПринт.PrintFile(НашПуть, "", "", 0);
                  Иначе
                        ТаксДокПринт.PreviewFile1C(НашПуть, 0);
                  КонецЕсли;
                  Результат = Истина;
            Исключение
                  ОбработатьОшибкуМодуляПечати(ОписаниеОшибки().Описание);
                  ТаксДокПринт = Неопределено;
                  Результат = Ложь;
            КонецПопытки;
      КонецЕсли;
     
      //Elit_Sol_20081001 }
     
      ТаксДокПринт = Неопределено;
      УдалитьВременныйКаталогШаблонов(ВремКаталог);
      Возврат Результат;
     
КонецФункции


Что касается самого изменения конфигурации, которая на поддержке - см. тему рядом http://1c-uso.ru/forum/viewtopic.php?t=519


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB