Вопрос № 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!
Необходимо поменять у каждого пользователя значение единиц измерения по умолчанию (Справочники -> Структура компании -> Пользователи, открыв профиль пользователя, переключаемся на закладку "Значения по умолчанию" и меняем значение "Основная единица по ОКЕИ". Если же настройки по умолчанию наследуются от какого-либо пользователя, то меняем настройки ведущего профиля.)