Как сохранить данные табличного поля в табличный документ / файл Excel программно

Публикация № 1243675

Разработка - Практика программирования

Обработка пример табличное поле табличный документ сохранить Excel

Пример сохранения табличного поля в табличный документ не через ПКМ -> Вывести список, с автоподбором ширины по содержимому.


Как-то заказчик попросил добавить возможность сохранять табличное поле в файл Excel кнопкой, а не через контекстное меню поля. К сожалению на просторах интернета не нашел готового решения, возможно плохо искал. Правда, в инструментах разработчика от TormozIT есть подобная штука, но увидел её уже намного позже чем сделал своё. Для того, чтобы визуально было более-менее приемлемо - пришлось прикрутить расчёт ширины колонок по содержимому (источник процедуры уже, к сожалению не припомню). Америк не открыл, на оригинальность не претендую, просто делюсь примером, возможно кому-то пригодится. Не исключаю, что данное решение не самое красивое, поэтому советы и пожелания постараюсь учесть/дополнить в статье. Полученный в функции табличный документ сохранить в файл уже можно, соответственно, одной строкой текста (ТД.Записать("ИмяФайла",ТипФайлаТабличногоДокумента.XLSX)). 

Подходит для любой конфигурации на обычных формах.

Функция ТабличноеПолеВТабличныйДокумент(ТабличноеПоле)

    ТабДокумент   = Новый ТабличныйДокумент;

    ГраницаСлева  = ?(ТабличноеПоле.ВертикальныеЛинии  , Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1), Неопределено);
    ГраницаСправа = ?(ТабличноеПоле.ВертикальныеЛинии  , Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1), Неопределено);
    ГраницаСверху = ?(ТабличноеПоле.ГоризонтальныеЛинии, Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1), Неопределено);
    ГраницаСнизу  = ?(ТабличноеПоле.ГоризонтальныеЛинии, Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1), Неопределено);

    НомерСтроки = 0;

    Для Каждого Колонка Из ТабличноеПоле.Колонки Цикл

        Если Колонка.Данные = "" Тогда
            Продолжить;
        КонецЕсли;

        ИндексКолонки = ТабличноеПоле.Колонки.Индекс(Колонка);
        КолонкаТабличногоПоля = ТабДокумент.Область(, ИндексКолонки+1, , ИндексКолонки+1);
        КолонкаТабличногоПоля.ШиринаКолонки = Колонка.Ширина;

    КонецЦикла;

    Если ТабличноеПоле.Шапка Тогда

        НомерСтроки = НомерСтроки + 1;
        Для Каждого Колонка Из ТабличноеПоле.Колонки Цикл

            ИндексКолонки = ТабличноеПоле.Колонки.Индекс(Колонка);
            ОбластьЯчейки                         = ТабДокумент.Область(НомерСтроки, ИндексКолонки+1, НомерСтроки, ИндексКолонки+1);
            ОбластьЯчейки.Текст                   = Колонка.ТекстШапки;
            ОбластьЯчейки.ЦветТекста              = ?(Колонка.ЦветТекстаШапки = ВидЦвета.АвтоЦвет, ЦветаСтиля.ЦветТекстаШапкиТаблицы, Колонка.ЦветТекстаШапки);
            ОбластьЯчейки.ЦветФона                = ?(Колонка.ЦветФонаШапки.Вид = ВидЦвета.АвтоЦвет, ЦветаСтиля.ЦветФонаКнопки, Колонка.ЦветФонаШапки);
            ОбластьЯчейки.ЦветРамки               = ?(ТабличноеПоле.ЦветРамки.Вид = ВидЦвета.АвтоЦвет, ЦветаСтиля.ЦветРамки, ТабличноеПоле.ЦветРамки);
            ОбластьЯчейки.Шрифт                   = Колонка.ШрифтШапки;
            ОбластьЯчейки.ГоризонтальноеПоложение = Колонка.ГоризонтальноеПоложениеВШапке;
            ОбластьЯчейки.Обвести(ГраницаСлева, ГраницаСверху, ГраницаСправа, ГраницаСнизу);

        КонецЦикла;

    КонецЕсли;

    Построитель = Новый ПостроительЗапроса;
    Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличноеПоле.Значение);
    Для Каждого ЭлементОтбораИсточник Из ТабличноеПоле.ОтборСтрок Цикл
        Если ЭлементОтбораИсточник.Использование = Ложь Тогда
            Продолжить;
        КонецЕсли;
        ЭлементОтбораПриемник = Построитель.Отбор.Добавить(ЭлементОтбораИсточник.ПутьКДанным);
        ЭлементОтбораПриемник.Использование = ЭлементОтбораИсточник.Использование;
        ЭлементОтбораПриемник.ВидСравнения  = ЭлементОтбораИсточник.ВидСравнения;
        ЭлементОтбораПриемник.Значение      = ЭлементОтбораИсточник.Значение;
        ЭлементОтбораПриемник.ЗначениеС     = ЭлементОтбораИсточник.ЗначениеС;
        ЭлементОтбораПриемник.ЗначениеПо    = ЭлементОтбораИсточник.ЗначениеПо;
    КонецЦикла;
    Построитель.Выполнить();

    Результат = Построитель.Результат;
    Выборка   = Результат.Выбрать();

    Пока Выборка.Следующий() Цикл

        НомерСтроки = НомерСтроки + 1;

        Для Каждого Колонка Из ТабличноеПоле.Колонки Цикл

            ИндексКолонки                         = ТабличноеПоле.Колонки.Индекс(Колонка);
            ОбластьЯчейки                         = ТабДокумент.Область(НомерСтроки, ИндексКолонки+1, НомерСтроки, ИндексКолонки+1);
            ОбластьЯчейки.ЦветФона                = ?(Колонка.ЦветФонаПоля.Вид = ВидЦвета.АвтоЦвет, ЦветаСтиля.ЦветФонаПоля, Колонка.ЦветФонаПоля);
            ОбластьЯчейки.ЦветРамки               = ?(ТабличноеПоле.ЦветРамки.Вид = ВидЦвета.АвтоЦвет, ЦветаСтиля.ЦветРамки, ТабличноеПоле.ЦветРамки);
            ОбластьЯчейки.ЦветТекста              = ?(Колонка.ЦветТекстаПоля = ВидЦвета.АвтоЦвет, ЦветаСтиля.ЦветТекстаПоля, Колонка.ЦветТекстаПоля);
            ОбластьЯчейки.Шрифт                   = Колонка.ШрифтТекста;
            ОбластьЯчейки.ГоризонтальноеПоложение = Колонка.ГоризонтальноеПоложениеВКолонке;
            ОбластьЯчейки.Обвести(ГраницаСлева, ГраницаСверху, ГраницаСправа, ГраницаСнизу);

            ФорматнаяСтрока = "";
            Если Колонка.Данные = "" Тогда
                ЗначениеЯчейки  = Выборка[Колонка.Имя];
                ТипКолонки      = Результат.Колонки[Колонка.Имя].ТипЗначения;
            Иначе

                ЗначениеЯчейки  = Выборка[Колонка.Данные];
                ТипКолонки      = Результат.Колонки[Колонка.Данные].ТипЗначения;
            КонецЕсли;

            Если ТипЗнч(ЗначениеЯчейки) = Тип("Число") Тогда
                КвалификаторыЧисла  = ТипКолонки.КвалификаторыЧисла;
                ФорматнаяСтрока     = "ЧЦ=" + КвалификаторыЧисла.Разрядность + "; ЧДЦ=" + КвалификаторыЧисла.РазрядностьДробнойЧасти;
            ИначеЕсли ТипЗнч(ЗначениеЯчейки) = Тип("Дата") Тогда
                КвалификаторыДаты = ТипКолонки.КвалификаторыДаты;
                Если КвалификаторыДаты.ЧастиДаты = ЧастиДаты.Дата Тогда
                    ФорматнаяСтрока = "ДФ=dd.MM.yyyy";
                ИначеЕсли КвалификаторыДаты.ЧастиДаты = ЧастиДаты.Время Тогда
                    ФорматнаяСтрока = "ДФ=HH:mm:ss";
                КонецЕсли;
            КонецЕсли;

            Если ЗначениеЗаполнено(ФорматнаяСтрока) Тогда
                ОбластьЯчейки.Текст = Формат(ЗначениеЯчейки, ФорматнаяСтрока);
            ИНаче
                ОбластьЯчейки.Текст = ЗначениеЯчейки;
            КонецЕсли;

        КонецЦикла;

    КонецЦикла;

    Если ТабличноеПоле.Подвал Тогда

        НомерСтроки = НомерСтроки + 1;
        Для Каждого Колонка Из ТабличноеПоле.Колонки Цикл

            ИндексКолонки                         = ТабличноеПоле.Колонки.Индекс(Колонка);
            ОбластьЯчейки                         = ТабДокумент.Область(НомерСтроки, ИндексКолонки+1, НомерСтроки, ИндексКолонки+1);
            ОбластьЯчейки.Текст                   = Колонка.ТекстПодвала;
            ОбластьЯчейки.ЦветТекста              = ?(Колонка.ЦветТекстаПодвала = ВидЦвета.АвтоЦвет, ЦветаСтиля.ЦветТекстаПодвалаТаблицы, Колонка.ЦветТекстаПодвала);
            ОбластьЯчейки.ЦветФона                = ?(Колонка.ЦветФонаШапки.Вид = ВидЦвета.АвтоЦвет, ЦветаСтиля.ЦветФонаКнопки, Колонка.ЦветФонаПодвала);
            ОбластьЯчейки.ЦветРамки               = ?(ТабличноеПоле.ЦветРамки.Вид = ВидЦвета.АвтоЦвет, ЦветаСтиля.ЦветРамки, ТабличноеПоле.ЦветРамки);
            ОбластьЯчейки.Шрифт                   = Колонка.ШрифтПодвала;
            ОбластьЯчейки.ГоризонтальноеПоложение = Колонка.ГоризонтальноеПоложениеВПодвале;
            ОбластьЯчейки.Обвести(ГраницаСлева, ГраницаСверху, ГраницаСправа, ГраницаСнизу);

        КонецЦикла;

    КонецЕсли;

    РасчетШириныКолонок(ТабДокумент,200,150);
    Возврат ТабДокумент;

КонецФункции

// Процедура - Расчет ширины колонок
//
// Параметры:
//  ТабличныйДокумент            -  ТабличныйДокумент -     Табличный документ, в котором будет перерасчитана ширина колонок
//  МаксимальноеКоличествоСтрок  - Число -      Максимальное количество строк, которые будут использованы для расчета ширин колонок
//  МаксимальнаяШиринаКолонки    - Число -      Ограничение максимальной ширины колонки
//
Процедура РасчетШириныКолонок(ТабличныйДокумент,МаксимальноеКоличествоСтрок,МаксимальнаяШиринаКолонки)

    Перем КонечнаяСтрока, НачальнаяСтрока, ТекущаяКолонка, ТекущаяСтрока, НачалоДанных;
    Перем ОбластьШапки, ОбластьПодвала;
    Перем ШиринаКолонки, ТекстЯчейки, НомерСтрокиТекста;
    Перем ШириныКолонок;

    // Массив, в который будут помещаться ширины колонок
    ШириныКолонок = Новый Массив;

    // Инициализируем начальные строки
    НачальнаяСтрока = 0;
    НачалоДанных = 0;

    КонечнаяСтрока = НачальнаяСтрока + МаксимальноеКоличествоСтрок;
    // Ограничим конечную строку
    КонечнаяСтрока = Мин(КонечнаяСтрока, ТабличныйДокумент.ВысотаТаблицы);

    // Переберем все колонки
    Для ТекущаяКолонка = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл

        МаксимальнаяШиринаТекстаЯчейки = 0;
        // Переберем строки, которые будут использованы для расчета ширин колонок
        Для ТекущаяСтрока = НачальнаяСтрока По КонечнаяСтрока Цикл
            ШиринаКолонки = 0;
            // Получим область текущей ячейки
            ОбластьЯчейки = ТабличныйДокумент.Область(ТекущаяСтрока, ТекущаяКолонка);

            ТекстЯчейки = ОбластьЯчейки.Текст;
            // Для каждой строки из текста ячейки рассчитаем количество символов в строке
            Для НомерСтрокиТекста = 1 По СтрЧислоСтрок(ТекстЯчейки) Цикл
                ШиринаТекстаЯчейки = СтрДлина(СтрПолучитьСтроку(ТекстЯчейки, НомерСтрокиТекста));

                Если ШиринаТекстаЯчейки > МаксимальнаяШиринаТекстаЯчейки Тогда
                    МаксимальнаяШиринаТекстаЯчейки = ШиринаТекстаЯчейки;
                КонецЕсли;

                ШиринаКолонки = Макс(ШиринаКолонки, МаксимальнаяШиринаТекстаЯчейки);
            КонецЦикла;

            Если ШиринаКолонки > МаксимальнаяШиринаКолонки Тогда
                // Ограничим ширину колонки
                ШиринаКолонки = МаксимальнаяШиринаКолонки;
            КонецЕсли;

            Если ШиринаКолонки <> 0 Тогда
                // Ширина колонки рассчитана
                // Определим, сколько ячеек по ширине используется в области для текущей ячейки
                КоличествоКолонок = ОбластьЯчейки.Право - ОбластьЯчейки.Лево;

                // Переберем все ячейки, расположенные в области
                Для НомерКолонки = 0 По КоличествоКолонок Цикл
                    Если ШириныКолонок.ВГраница() > ТекущаяКолонка - 1 + НомерКолонки Тогда
                        // В массиве ширин колонок уже был элемент для текущей колонки
                        Если ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] = Неопределено Тогда
                            // Значение ширины колонки еще не было установлено
                            ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] = ШиринаКолонки / (КоличествоКолонок + 1);
                        Иначе
                            // Значение ширины колонки уже было установлено
                            // Вычислим максимум ширины колонки
                            ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] =
                            Макс(ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки], ШиринаКолонки / (КоличествоКолонок + 1));
                        КонецЕсли;
                    Иначе
                        // В массиве ширин колонок еще не было элемента для данной колонки
                        // Добавим элемент в массив ширин колонок
                        ШириныКолонок.Вставить(ТекущаяКолонка - 1 + НомерКолонки, ШиринаКолонки / (КоличествоКолонок + 1));
                    КонецЕсли;
                КонецЦикла;

            КонецЕсли; // Конец Условия ШиринаКолонки <> 0

        КонецЦикла;    // Конец цикла перебора строк
    КонецЦикла;    // Конец цикла перебора колонок

    // Переберем все элементы в массиве вычисленных ширин колонок
    Для ТекущаяКолонка = 0 По ШириныКолонок.ВГраница() Цикл
        Если ШириныКолонок[ТекущаяКолонка] <> Неопределено Тогда
            // Ширина колонок установлена
            // Установим ширину области ячеек
            ТабличныйДокумент.Область(, ТекущаяКолонка +1, НачалоДанных, ТекущаяКолонка + 2).ШиринаКолонки = ШириныКолонок[ТекущаяКолонка] + 1;
        КонецЕсли;
    КонецЦикла;

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

 

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Yashazz 3794 04.06.20 11:17 Сейчас в теме
Ну воистину следующей будет публикация "Как вывести сообщение пользователю" или "Как перебрать элементы массива".
Артано; rpashkovsky; rudnitskij; Jimbo; +4 Ответить
2. Jimbo 8 04.06.20 12:16 Сейчас в теме
Многабукфниасилил

Зачем это фсё, кроме - ТД.Записать("ИмяФайла",ТипФайлаТабличногоДокумента.XLSX) ???
3. Yashazz 3794 04.06.20 12:39 Сейчас в теме
(2) ну, тут ещё применяется Построитель (правда, впервые это было 15 лет назад в первых 10.3), так что некая ценность в публикации есть)
4. rpashkovsky 20 04.06.20 13:16 Сейчас в теме
(3)Спасибо за столь противоречивый комментарий, а также идеи для новых статей :D
5. Yashazz 3794 04.06.20 13:23 Сейчас в теме
(4) Дык, зато честно) И потом, что вы и я знаете, другие могут не знать, так штааа... может это мне кажется баяном, а людям пригодится.
rpashkovsky; +1 Ответить
6. rpashkovsky 20 04.06.20 14:12 Сейчас в теме
(2) ТД нужно изначально откуда-то взять
7. Jimbo 8 04.06.20 14:30 Сейчас в теме
(6) ТабДокумент = Новый ТабличныйДокумент; // вот и взяли , остальное какое то шаманство с бубном
8. rpashkovsky 20 04.06.20 14:32 Сейчас в теме
(7) Между табличным полем и табличным документом разницы нет? Ок...
9. stepan_s 04.08.20 12:56 Сейчас в теме
все здорово, но табличное поле разве можно получить в табличный документ средствами платформы?
10. rpashkovsky 20 04.08.20 14:33 Сейчас в теме
(9)Можно, пкм->вывести список
11. stepan_s 05.08.20 06:38 Сейчас в теме
(10)Вы уверены что это программный вариант?
если требуется получить и программно что то изменить в ТД то дать пользователю сначала источник сформировать и потом уже его обработать?
Не сильно удобно в использовании :(
Пока на сколько Ваша идя может быть понятна, лично я оценил бы "так себе" и не стал бы с Вами ее реализовывать :(
12. rpashkovsky 20 05.08.20 10:02 Сейчас в теме
(11)Возможно Вы правы. Будет интересно посмотреть Вашу реализацию. Готового решения на тот момент в интернете я не нашел. А на данный момент "красивая" реализация моего "творения", увы, уже далеко не на первом месте.
14. Артано 710 22.02.21 07:32 Сейчас в теме
(12) Ну блин сами же писали про пкм-вывести список

вот упрощенный фрагмент кода без работы с отборами и произвольными макетами


все по сведениям из СП
15. rpashkovsky 20 28.02.21 01:00 Сейчас в теме
(14) Идея в том чтобы сохранить данные в удобочитаемом для юзера виде, а про этот способ я и сам давно знаю), но все равно спасибо.
13. rpashkovsky 20 05.08.20 10:14 Сейчас в теме
(11) Приводимый Вами пример можно посмотреть в Инструментах разработчика от Сергея Старых. В статье, на сколько я помню, об этом упомянул. В моём примере для реализации Вашей идеи вместо сохранения табличный документ нужно просто показать. Если у Вас есть изящное решение в несколько строк - поделитесь. Искренне буду благодарен.
Оставьте свое сообщение

См. также

Модульная (open source) конфигурация "INFOSTART ERP community edition" Промо

Практика программирования Infostart ERP community v8 1cv8.cf БУ УУ Бесплатно (free)

Учетная модульная конфигурация "INFOSTART ERP community edition" для ведения комплексного учета на предприятии.

31.08.2020    9420    655    33lab    112    

Работа с кодом и его выполнение в режиме 1С: Предприятие (обычные формы)

Практика программирования v8 1cv8.cf Бесплатно (free)

С помощью этой простой обработки теперь можно выполнять код не только в конфигураторе. Код в режиме Предприятия имеет вид как в конфигураторе.

11.03.2021    2151    98    Nik_Name    8    

Вызов демонов в 1С

Практика программирования v8 1cv8.cf Бесплатно (free)

Вызываем демонов прямо из 1С!

28.01.2021    7536    155    the1    30    

Простая конфигурация для заполнения школьного расписания

Практика программирования v8 Россия Бесплатно (free)

Решение задачи контрольной работы.

12.12.2020    2094    45    vova-1c    29    

Генерация кода управляемой формы (декомпиляция элементов) Промо

Инструментарий разработчика Практика программирования Работа с интерфейсом v8 v8::УФ 1cv8.cf Бесплатно (free)

Изменение форм типовых конфигураций лучше выполнять программно. Эта обработка упрощает добавление элементов на форму, генерируя код создания элементов, реквизитов и команд формы.

29.09.2014    112048    9220    ekaruk    134    

Ввод по строке для управляемых форм

Практика программирования v8::УФ 1cv8.cf Россия Бесплатно (free)

Ввод по строке с поиском по номеру телефона и наименованию контрагента с помощью обработчика "АвтоПодбор".

08.10.2020    2550    34    anrahell    2    

Получение ссылки из форматированной строки

Практика программирования v8 Россия Бесплатно (free)

Описывается, как получить ссылку из имеющейся форматированной строки. Необходимо в том случае, когда за создание форматированной строки отвечает чужой код, а ссылку надо получить программно.

05.06.2020    3719    0    VZhulanov    1    

Пример работы MiracleV8.dll в режиме Управляемого приложения (тонкий клиент)

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Пример конфигурации Управляемое приложение с использованием MiracleV8.dll

09.04.2012    21379    221    Abadonna    26    

Исправление ошибки 1С:Предприятие 7.7/8.0 - 100% загрузка процессора при ожидании блокировки Промо

Практика программирования v8 Россия Бесплатно (free)

Цель использования: разгрузить процессор, когда два или более пользователей пытаются провести документ. 1С пытается заблокировать таблицы, но делает это без пауз, и загружает процессор на 100%. При этом пользователи практически "встают", и нормальная работа прекращается. Компонента (или патч) позволяет решить эту проблему и нормализовать работу пользователей. Особенно актуально при работе в режиме сервера терминалов.

13.12.2007    55125    7776    romix    79    

v77. Тип данных "Месяц"

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Нет такого в 1С типа данных. Но если очень хочется...

12.03.2012    10330    6    item    2    

Задача: Программа, выводящая на экран свой исходный код (куайн)

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Программа, выводящая свой исходный код на экран, не пользуясь внешними источниками данных.

27.07.2011    11400    347    archie    17    

Информация по реквизитам объекта метаданных на полную глубину

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Дерево реквизитов объектов метаданных. На всю глубину (т.е. смотрит реквизиты у реквизитов).

10.06.2011    15027    165    kosmo0    5    

Обработка поиска дублей кода. Исходного кода модулей 1С

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Цель разработки - помочь в поиске похожих блоков кода для дальнейшего выделения их в отдельные процедуры.

12.04.2011    7891    206    bk-81    37    

[Скрипт] Чтение EXIF данных

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Скрипт на C# для чтения Exif-данных из jpg-файла. Упакован в обработки для 8.1 и 8.2 (управляемые формы)

18.02.2011    23548    283    Душелов    14    

Исполнение кода в модуле формы при разработке в 1С 8.2

Практика программирования Работа с интерфейсом v8 1cv8.cf Россия Бесплатно (free)

Немного теории о новом подходе к программированию форм в 1С 8.2 Рассматриваются директивы компиляции процедур и функций, которые определяются в модуле формы.

15.01.2011    27751    167    1cNike    19    

Запрос против рекурсии или разузлование номенклатуры

Практика программирования Учет ТМЦ Учет ТМЦ v8 КА1 Россия БУ Бесплатно (free)

В задаче "разузлования" номенклатуры в БП 1.6 (2.0) покажем , что запрос более эффективен, чем рекурсия.

23.11.2010    53539    851    Ish_2    258    

Выполнение кода C# из 1С

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Обработка показывает возможности выполнения кода С# из программы 1С.

23.11.2010    12428    255    AlkB    9    

Экспорт встроенных XML-схем описаний типов 1С:Предприятия

Обмен через XML Практика программирования v8 1cv8.cf Бесплатно (free)

Экспорт встроенных XML-схем описаний типов 1С:Предприятия

01.11.2010    23145    203    Dmitryiv    7    

Конструктор шаблона подобия для строк

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Сравнивая различные сущности компьютеры обычно оперируют категориями "равно", "не равно", "больше", "меньше". Для людей большее значение имеет "подобие". Компьютеры очень плохо умеют оценивать похожесть.

17.08.2010    14350    35    YVolohov    11    

Коллекционер - упорядочиваем свои файлы.

Практика программирования Инструментарий разработчика v8 1cv8.cf Россия Бесплатно (free)

Ещё один менеджер обработок - но для разработчика)

09.04.2010    12777    150    Lancelot-2M    5    

Подсистема хранения файлов

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Отличия от реализации в типовых: - версионирование - запрет одновременного редактирования файла несколькими пользователями - линковка файлов многие-ко-многим (т.е. один файл может быть прилинкован к нескольким объектам и наоборот) - создание коллекций файлов (например коллекций: типовые договора или унифицированных формы) - возможность типизации файлов (например, факсы могут подсвечиваться при работе синим, а договора зеленым) - одновременный просмотр прилинкованных файлов к нескольким объектам (например, просмотр файлов привязанных к клиенту и к его договорам) - просмотр прилинкованных файлов из форм списка

23.03.2010    6334    761    koreav    32    

[BackgroundWorker] - Фоновые задания в файловом режиме 1С 8.x

Практика программирования Разработка внешних компонент v8 1cv8.cf Бесплатно (free)

ActiveX-компонента позволяет выполнять задачи в фоне с индикацией прогресса и возможностью прерывания выполнения. Также работает и клиент/серверном варианте, в качестве альтернативы типовым фоновым заданиям

04.03.2010    24830    418    Душелов    15    

Загрузка из Excel в ТаблицуЗначений 8.1 (с помощью ADO DB)

Загрузка и выгрузка в Excel Практика программирования v8 1cv8.cf Бесплатно (free)

Внешняя обработка для загрузки данных из Excel в ТаблицуЗначений 8.1

19.02.2010    11342    558    dav405    8    

[8.2] Шаблон обработки с индикацией прогресса выполнения (управляемые формы)

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

- Обработка выполняется на сервере - Отображение хода выполнения обработки с расчетом оставшегося времени. - Возможность прерывания выполнения обработка (CTRL + Break)

12.02.2010    27902    1368    Душелов    31    

Загрузка программы НТВ-плюс

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Загрузка телепрограммы на основные каналы через web-обработку сайта НТВ-плюс. Выбор дней недели, 133 канала любимых передач, оповещения времени наступления любимой передачи, просмотр программы на текущий момент.

08.02.2010    6974    121    maxlenium    15    

Печать произвольной таблицы значений

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

простенькая универсальная процедура для печати произвольной таблицы значений.

29.01.2010    11336    302    Пацталоцци    12    

1c-minder: обработка для создания ментальных карт (mind maps) в 1С:Предприятие 8

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Обработка позволяет быстро и удобно создавать ментальные карты (mind maps) в виде графических схем. Присутствует возможность сохранения схем в файлах формата .grs, после чего их можно открывать на всех компьютерах, на которых есть установленная "1С:Предприятие 8" или "1С:Работа с файлами". Реализован экспорт в графические форматы (PNG/BMP). Разработка является иллюстрацией механизма программной работы с графической схемой (добавление и изменение элементов схемы).

25.12.2009    21990    993    kharts    29    

Генератор математических задач для первоклашек

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Написал тут небольшую обработку на 1С 8.1 - генератор математических задач для подготовки ребенка к школе. Смысл - угадать загаданное слово путем решения математических примеров. Пока только сложение/вычитание, но несложно добавить и умножение/деление. Сыну интересно.

08.12.2009    4931    102    iiukolov    15    

Подведем итоги. Нарастающие.

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как одним пакетом запросов получить таблицу просроченных долгов контрагента ? Подробное иллюстрированное построение пакета запросов.

25.11.2009    43899    384    Ish_2    125    

Хранитель COM - объектов

Разработка внешних компонент Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Позволяет сохранять COM - объект между серверными вызовами в 8.2. Сохраняет и получает ссылку на объект в ROT (Running Object Table). БЕТА!

18.11.2009    13688    78    Hadgehogs    14    

Механизм блокирования "некорректных" (запрещенных) проводок

Практика программирования v8 БП2.0 Россия БУ Бесплатно (free)

Механизм позволяет настроить правила, по которым будут блокироваться указанные НЕКОРРЕКТНЫЕ (запрещенные) корреспонденции... Полезно при вводе информации для "выпрямления рук" у некоторых бухгалтеров после перехода с других бухгалтерских программ :)

14.11.2009    13652    57    KukA.5    50    

Загрузить все данные со всех страниц файла Excel

Загрузка и выгрузка в Excel Практика программирования v8 1cv8.cf Бесплатно (free)

Здесь можно скачать обработку, позволяющую из выбранного файла Excel загрузить все данные со всех страниц

11.11.2009    13104    590    Мастер1С    12    

Строка - "заголовок" в табличном поле

Универсальные функции Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Несложный приём позволит вводить в табличное поле строки вида "заголовок".

09.11.2009    15165    191    Ish_2    8    

Регистры и регистраторы

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Отчет показывает связи между регистрами и регистраторами в конфигурации. Поможет при изучении и анализе типовых решений и самописных конфигураций.

04.11.2009    19017    563    YVolohov    29    

Замена вызовов методов общих модулей во внешних обработках/отчетах

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Обработка предназначена для замены вызовов процедур/функций во внешних отчетах/обработках, при переводе конфигурации на не глобальные общие модули.

26.10.2009    17780    129    coder1cv8    10    

Загрузка курсов валют национального банка РБ с использованием web-сервиса.

Практика программирования WEB v8 Беларусь Бесплатно (free)

Написана под самописную конфигурацию, поэтому под типовыми она не заведется. Но можно использовать код получения данных с web-сервиса.

25.10.2009    9602    71    serg_gres    12    

[8.2] Консоль заданий на управляемых формах

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Консоль заданий для 1С 8.2 На управляемых формах, на основе типовой.

30.09.2009    56870    4323    Душелов    62    

Панель избранного 3.03 (beta)

Практика программирования Универсальные обработки Работа с интерфейсом v8 1cv8.cf Россия Бесплатно (free)

Попытка сделать настраиваемую "Панель функций" (как в типовых конфигурациях), но с большими возможностями, независимостью от изменения конфигурации и с возможностью ограничений видимости для некоторых пользователей.

13.09.2009    34499    1003    Totoro    113    

Подсистема "Учет по доп. аналитике" (8.1)

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Подсистема "Учет по доп.аналитике" - это дополнение к любой конфигурации на 8.1 решает основную задачу: не ломая конфигурации добавить к нужным документам учет по дополнительной аналитике (аналитикой может выступать как в данном примере Агент по продаже и его вознаграждение или Проект и его руководитель как в файле описания). Данная подсистема является продуктом, готовым к использованию, как дополнение к типовой конфигурации (или к любой конфигурации). Подсистема снова БЕСПЛАТНО (то есть даром) :)

07.09.2009    12861    403    KukA.5    41    

Запросы. Оценка складских запасов (по параметру "дней торговли") или труднореализуемые остатки

Оптовая торговля Учет ТМЦ Практика программирования Оптовая торговля Учет ТМЦ v8 УТ10 Бесплатно (free)

Сложная тема. Файл для консоли отчетов. Нетиповая конфигурация. Рассчитывает, сколько дней будет продаваться имеющийся остаток при сложившемся темпе торговли, отдельно по каждому товару. Темп рассчитывается с учетом дней отсутствия товара. Для Вашей конфигурации нужно будет заменить регистры оборотов и остатков. Преимущество: для работы не требуются заранее заполненные последовательности дней типа календаря или курсов валют.

28.08.2009    9736    102    elizarovs    5