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

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

  Все выпуски  

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


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

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

Выпуск № 205
от 25.05.2006, 10:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 221, Экспертов: 26
В номере:Вопросов: 2, Ответов: 4


Вопрос № 43593: Ребята. Напишите пожалуйста !подробно! как сделать такую простую вещь как обработка (форма) ,которая показывает на экран т.е. выгружает файл с диска (диск С:/ например)в формате желательно xls, но можно и dbf и txt. Мне важ...
Вопрос № 43624: Добрый вечер Уважаемые Эксперты! Сижу в 1С/Торговля+Склад/ и сильным знанием этой проги пока похвастать не могу. Проблема в следующем; фирма поменяла профиль и мне надо изменить единицы измерения в накладных и отчётах. В 1С зашёл в "Константы&qu...

Вопрос № 43.593
Ребята.

Напишите пожалуйста !подробно! как сделать такую простую вещь как
обработка (форма) ,которая показывает на экран т.е. выгружает
файл с диска (диск С:/ например)в формате желательно xls, но можно и dbf и txt.

Мне важен код и форма( выбор файла и т.п. чтоб в ней имя файла было видно.)

Спасибо.
Отправлен: 19.05.2006, 16:35
Вопрос задал: Baim (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Elric
Здравствуйте, Baim!

Немного неопределенно задан вопрос, трансформирую его к следующему:
"Нужно написать внешнюю обработку, которая будет на экране отображать в виде таблицы содержимое внешнего файла в формате Excel или dbf (с фиксированной структурой таблицы)."
Про текстовый файл это слишком расплывчато (любой файл можно открыть/запустить командой ЗапуститьПриложение(), но не думаю что нужно именно это), поэтому эту часть вопроса не рассматриваю.

Итак, чтобы создать внешний отчет/обработку нужно зайти в Конфигуратор (разумеется) и выбрать меню "Файл / Новый", затем пункт "Внешний отчет (обработка)". Чтобы сохранить его на диск -- меню "Файл / Сохранить", не забывайте сохранять по мере изменения обработки. Далее выбираете меню "Вставить / Таблица значений", курсором указываете размеры этой таблицы (потом можно будет изменить). Одновременно открывается окно свойств таблицы значений, в нем в графе "Идентификатор" укажите "ТЗ" (без кавычек). Внизу формы обработки есть закладки, выбираете закладку "Модуль". Видите там единственную процедуру Сформировать(). В теле этой процедуры собственно и будем записывать все дальнейшие команды. В итоге модуль обработки должен выглядеть так как в Приложении.
Программа расчитана на открытие файла "C:export.dbf" с колонками field1, field2, field3, которые имеют тип соответственно "строка длиной 20", "число диной 14 с двумя знаками после запятой (т.е. 11 знаков в целой части, один знак на точку и 2 знака после запятой, аналог dbf -- float)" и "дата". При желании можно добавить диалог выбра файла либо поиск файла по маске, автоматическое определение количества, типов колонок и их идентификаторы и много чего еще из сервиса, но это уже выходит за рамки данного конкретного вопроса 8)

Приложение:

---------
Мирный атом в каждый дом

Ответ отправил: Elric (статус: Студент)
Ответ отправлен: 19.05.2006, 21:16
Оценка за ответ: 4

Отвечает: Шахрайчук Владимир Анатольевич
Здравствуйте, Baim!
Это выбор файла Microsoft Access .mdb
ФС.ВыбратьФайл(0,НазваФайлу,НазваКаталогу,"Виберiть файл","Файли баз даних (*.mdb)|*.mdb");
СтрФайл=НазваКаталогу+НазваФайлу;
Если ФС.СуществуетФайл(СтрФайл)=0 Тогда
Предупреждение("Не знайдено файлу iмпорту");
Возврат;
КонецЕсли;
А вот вывод на экран
Попытка
Connection=CreateObject("ADODB.Connection");
ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+СокрЛП(СтрФайл);
Connection.Open(ConnectionString);
Cmd=CreateObject("ADODB.Command");
Cmd.ActiveConnection=Connection;
Исключение
Предупреждение("Не удалось установить соединение с БД");
Возврат;
КонецПопытки;

Cmd.CommandText="SELECT b.id_azs, b.n_report, b.id_tovar, b.Volume, Format(b.VolumeStart,'#.###') as VS, Format(b.VolumeEnd,'#.###') as VE, Format(b.prihod_smena,'#.###') as prihod_s, Format(b.spisano,'#.###') as spis
|FROM smena b";
Rs=CreateObject("ADODB.RecordSet");
Rs=Cmd.Execute;
Попытка
Rs.MoveFirst();
Пока Rs.EOF() = 0 do
Если (Rs.Fields("id_azs").Value=idAZS)И(Rs.Fields("n_report").Value=НомерОтчета)И(Сп.Принадлежит(Rs.Fields("id_tovar").Value)=0) Тогда
ТЗ.НоваяСтрока();
ТЗ.КолвоЭККАНачало=Окр(Число(СтрЗаменить(Rs.Fields("VS").Value,",",".")),3);
ТЗ.КолвоЭККАКонец=Окр(Число(СтрЗаменить(Rs.Fields("VE").Value,",",".")),3);
ТЗ.Продажа=Rs.Fields("Volume").Value;
ТЗ.Списание=Окр(Число(СтрЗаменить(Rs.Fields("spis").Value,",",".")),3);
ТЗ.Приход=Окр(Число(СтрЗаменить(Rs.Fields("prihod_s").Value,",",".")),3);
ТЗ.Артикул=Прав("00000"+СокрЛП(Rs.Fields("id_tovar").Value),5);
Спр.ВыбратьЭлементыПоРеквизиту("Артикул",Rs.Fields("id_tovar").Value,0,0);
Если Спр.ПолучитьЭлемент()=1 Тогда
ТЗ.ТМЦ=Спр.ТекущийЭлемент();
Если БИ.ПолучитьСубконто(1,,ТЗ.ТМЦ)=1 Тогда
ТЗ.Колво1СНачало=БИ.СНД(3);
ТЗ.Колво1СКонец=БИ.СКД(3);
КонецЕсли;
Иначе
ТЗ.ТМЦ=ПолучитьПустоеЗначение("Справочник.Номенклатура");
КонецЕсли;
КонецЕсли;
Rs.MoveNext();
КонецЦикла;
Исключение
Предупреждение("Ошибка чтения данных. Вероятно, данный отчет совсем пустой");
Возврат;
КонецПопытки;
ТЗ.Сортировать("Артикул");
КолвоОшибок=0;
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
Если (СписокКодовКарточек.Принадлежит(Число(ТЗ.Артикул))=1)ИЛИ(СписокКодовПылесоса.Принадлежит(Число(ТЗ.Артикул))=1) Тогда
Продолжить;
КонецЕсли;
Если (ТЗ.КолвоЭККАНачало=ТЗ.Колво1СНачало)И(ТЗ.КолвоЭККАКонец=ТЗ.Колво1СКонец)И(ТЗ.КолвоЭККАНачало+ТЗ.Приход-ТЗ.Продажа-ТЗ.Списание=ТЗ.КолвоЭККАКонец) Тогда
Таб.ВывестиСекцию("Строка");
Иначе
Таб.ВывестиСекцию("СтрокаКр");
КолвоОшибок=КолвоОшибок+1;
КонецЕсли;
КонецЦикла;

А вот файл .mxl
Таб=СоздатьОбъект("Таблица");
Таб.Открыть("\NataliexportТалоныАЗСПарт.mxl");
КолвоСтрок=Таб.ВысотаТаблицы();
Сообщить("Получаем данные...");
Для Сч=2 По КолвоСтрок Цикл
ТЗ.НоваяСтрока();
ВыбОбласть=Таб.Область(Сч,1);
Дата1=Дата(ВыбОбласть.Текст);
Если (Дата1<НачДата)ИЛИ(Дата1>КонДата) Тогда
Сообщить("В импорте найдена неправильная дата "+Дата1+" строка "+Сч);
Возврат;
КонецЕсли;
ТЗ.Дата=Дата1;

А вот .xls
Excel = СоздатьОбъект("Excel.Application");
Excel.Workbooks.Open(Сокрлп(НазваниеФайла));
ЧислоСтрок = Excel.Cells.CurrentRegion.Rows.Count;
ЧислоКолонок = Excel.Cells.CurrentRegion.Columns.Count;
ЗначениеЯчейки=СокрЛП(Строка(Excel.Cells(1,ТекКолонка).Value));

А вот .dbf
База=СоздатьОбъект("XBase");
База.КодоваяСтраница(0);
База.ОткрытьФайл(СтрФайл,);
Если База.Открыта()=0 Тогда
Сообщить("Файл не вiдкрито!");
СтатусВозврата(0);
Возврат;
КонецЕсли;
База.Первая();
ТЗ.УдалитьСтроки();
Пока База.ВКонце()<>1 Цикл
ТЗ.НоваяСтрока();
ТЗ.Операция = База.oper_id;
А вот .txt
СтрФайл="\asgatexport1.txt";
Пока ФС.СуществуетФайл(СтрФайл)=0 Цикл
НазваКаталогу="\asgatexport";
НазваФайлу="1.txt";
Если ФС.ВыбратьФайл(0,НазваФайлу,НазваКаталогу,"Виберiть файл",'Файли експорту Надра|*.*')=0 Тогда
Возврат;
КонецЕсли;
СтрФайл = НазваКаталогу+НазваФайлу;
КонецЦикла;
Баз=СоздатьОбъект("Текст");
Баз.КодоваяСтраница(1);
Баз.Открыть(СтрФайл);
Если Баз.КоличествоСтрок()=0 Тогда
Предупреждение("Файл не вiдкрито!");
Возврат;
КонецЕсли;
Для Инд=2 По Баз.КоличествоСтрок()-1 Цикл
КолвоЗаписей=КолвоЗаписей+1;
НоваяСтрока();
Стр=Баз.ПолучитьСтроку(Инд);

Я Вам набросал куски вполне рабочих отчетов. Других форматов не знаю.
Ответ отправил: Шахрайчук Владимир Анатольевич (статус: 8-ой класс)
Ответ отправлен: 23.05.2006, 12:45
Оценка за ответ: 5


Вопрос № 43.624
Добрый вечер Уважаемые Эксперты! Сижу в 1С/Торговля+Склад/ и сильным знанием этой проги пока похвастать не могу. Проблема в следующем; фирма поменяла профиль и мне надо изменить единицы измерения в накладных и отчётах. В 1С зашёл в "Константы" и выставил В "Базовых единицах измерения" нужную мне единицу измерения, но по умолчанию она не встаёт, всё равно сначала появляется старая, а новую приходиться выбирать вручную. Так-же не могу поменять единицу измерения в таблицах отчётов. Посоветуйте, пожалуйста, что мне делать. Заранее благодарен, с уважением, Dimonsito.
Отправлен: 19.05.2006, 23:15
Вопрос задал: Dimonsito (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Elric
Здравствуйте, Dimonsito!

Технически чтобы базовой единицей измерения стала другая ("вторая"), надо изменить значение не константы, а для каждого товара реквизит "Базовая единица измерения", тогда програма начнет пересчитывать всё исходя из нее. А в константе Вы указываете только единицу измерения которая будет выставлена по-умолчанию как базовая у новых товаров.
Тут рекомендация простая -- написать элементарную обработку которая проставила бы "вторую" единицу измерения для всех товаров.

НО.
Не всё так просто.
Допустим, "первая" единица была килогрммы, "вторая" -- тонны. В регистрах зафиксировано 100, без указания чего (какой единицы измерения), считается что 100 базовых единиц. Если Вы просто замените для этого товара базовую единицу с килограмма на тонну, то машина будет считать что у Вас на складе 100 тонн!
Следовательно, одновременно с заменой единиц измерения нужно также изменить содержимое регистров. И тогда закономерный вопрос -- а заменить только остатки на определенную дату или все движения за всю историю существования базы данных?

Кроме того, нужно одновременно с вышеперечисленным изменить в справочнике "Единицы товара" коэффициенты.

В общем, это не простая процедура. И поверьте на слово, я не преувеличиваю :)

Как более дешевую и надежную альтернативу, можно только изменить модули формы накладных и отчетов чтобы они автоматически ориентировались на "вторую" единицу, это будет как НАДстройка специально для Вас, так сказать. Т.е. внутри (в регистрах) всё будет по-прежнему считаться в старых единицах, а в накладных и отчетах будете видеть новые. Другого, более безболезненного варианта я не вижу...
---------
Мирный атом в каждый дом
Ответ отправил: Elric (статус: Студент)
Ответ отправлен: 20.05.2006, 00:25

Отвечает: Краюшкин Игорь Валерьевич
Здравствуйте, Dimonsito!

Необходимо поменять у каждого пользователя значение единиц измерения по умолчанию (Справочники -> Структура компании -> Пользователи, открыв профиль пользователя, переключаемся на закладку "Значения по умолчанию" и меняем значение "Основная единица по ОКЕИ". Если же настройки по умолчанию наследуются от какого-либо пользователя, то меняем настройки ведущего профиля.)
Ответ отправил: Краюшкин Игорь Валерьевич (статус: 1-ый класс)
Ответ отправлен: 20.05.2006, 13:30


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

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.32 от 03.05.2006
Яндекс Rambler's Top100

В избранное