Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> ТаблицаЗначений и OLE , OLE выдаёт совсем не то, что нужно          
shkoda Подменю пользователя
сообщение 11.12.15, 16:13
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 1 раз
Рейтинг: 0

Доброго времени суток!

Я только начинающая личинка программиста 1С.
Начальство дало задание - сделать внешнюю обработку для переноса документов из одной базы в другую.

Платформа 1С7.7 релиз 027, конфигурация Зарплаты и Кадры - там лежат документы - ПриказПоОтпуску, их нужно переместить в самописную базу Отдела Труда и Зароботной Платы.

Сделал вот такую форму
и получил на выходе вот что:


сам листинг вот:

//// 09.12.2015 ////////////////////////////////////////////////////////////////////////////////////////////////////////
Перем СпрДокОТиЗ, БазаОле;


Процедура ПриОткрытии()

    НачДата = (НачМесяца(ТекущаяДата()));
        КонДата = (КонМесяца(ТекущаяДата()));
    
    ОчиститьОкноСообщений();
    Сообщить("Инициализация подсистемы - время ожидания - 10 секунд","");
    Состояние("Подключение к внешней базе");
    
    БазаОле = СоздатьОбъект("V77S.Application");
    КаталогБазыОЛе = "\\xxx\yyy";
    ПользовательОле = "qqq";
    ПарольОле       = "qqq";
    МонопольныйРежимOLE = ""; // для немонопольного запуска указать пустую строку!
    ЗапускБезЗаставки = 1;    // для появления заставки (например, чтобы наблюдать
                              // процесс запуска базы OLE визуально) поставьте здесь "0"
    РезультатПодключения = БазаОле.Initialize ( БазаОле.RMTrade , "/d" +
                       СокрЛП(КаталогБазыОле) + " /n" +
                       СокрЛП(ПользовательОле)+ " /p" +
                       СокрЛП(ПарольОле) + МонопольныйРежимOLE,
                       ?(ЗапускБезЗаставки = 1,"NO_SPLASH_SHOW",""));
        Если РезультатПодключения = 0 Тогда
             Предупреждение("Не удалось подключится к указанной базе - проверьте вводные!");
        КонецЕсли;
         
    Сообщить("Подключено","!!!");
    
    СпрДокОТиЗ = БазаОле.CreateObject("Справочник.ПриказыПоОтпускамПереносИзЗиКвОТиЗ");
    
    //Формирование заголовка таблицы на форме
    ТабЗнач.НоваяКолонка("Код","СпрДокОТиЗ.Код",,,"Код",5,,1);
    ТабЗнач.НоваяКолонка("Документ","СпрДокОТиЗ.Документ",,,"Документ",40,,1);
    ТабЗнач.НоваяКолонка("Дата","СпрДокОТиЗ.Изменен",,,"Дата",8,,1);
    ТабЗнач.НоваяКолонка("Сотрудник","СпрДокОТиЗ.Сотрудник",,,"Сотрудник",,,1);

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


//*******************************************
Процедура Сформировать()
    
    ТабЗнач.Очистить();
    
    //Формирование заголовка таблицы на форме, повторно после очиски, чтобы не задваивалось
    ТабЗнач.НоваяКолонка("Код","СпрДокОТиЗ.Код",,,"Код",5,,1);
    ТабЗнач.НоваяКолонка("Документ","СпрДокОТиЗ.Документ",,,"Документ",40,,1);
    ТабЗнач.НоваяКолонка("Дата","СпрДокОТиЗ.Изменен",,,"Дата",8,,1);
    ТабЗнач.НоваяКолонка("Сотрудник","СпрДокОТиЗ.Сотрудник",,,"Сотрудник",,,1);
    
    Состояние("Подключение к внешней базе");
        
    Номер = 0;
    
    СпрДокОТиЗ.ВыбратьЭлементы();
    Пока СпрДокОТиЗ.ПолучитьЭлемент()=1 Цикл

        ТабЗнач.НоваяСтрока();
        ТабЗнач.Код = СпрДокОТиЗ.Код;
        ТабЗнач.Документ = СпрДокОТиЗ.Документ;
        ТабЗнач.Дата = СпрДокОТиЗ.Изменен;
        ТабЗнач.Сотрудник =СпрДокОТиЗ.Сотрудник;
        
        Номер = Номер + 1;
        
    КонецЦикла;
        
    
    Сообщить("Количество Приказов по отпускам в справочнике равно " + Номер );
    
КонецПроцедуры


Собственно на этом всё и стало....
что делать не пойму, вроде всё правильно - голова уже кругом идёт
ночью сегодня снилось что пишу код для этой обработки((

Первым делом думаю, побороть форму так чтобы она отображала всё корректно, а затем уже писать до того состояния чтобы перенос осуществлялся


Товарищи, сильно не серчайте, на форуме только зарегистрировался что к чему ещё не до конца понял
Всем спасибо кто откликнется))

Acid Подменю пользователя
сообщение 11.12.15, 16:19
Сообщение #2

Про1С-ник
Иконка группы
За заслуги на форуме в 2010 году
Группа: Местный
Сообщений: 2104
Из: Занзибар
Спасибо сказали: 377 раз
Рейтинг: 260.7

Если данные тянутся через ОЛЕ, то любой объект будет выглядеть именно так. Потому что это ОЛЕ-объекты.
Обращаться нужно по конкретным реквизитам:
ТабЗнач.Сотрудник =СокрЛП(СпрДокОТиЗ.Сотрудник.Наименование);


Signature

Документируйте Код! мать вашу...


Спасибо сказали: shkoda,

Мичман Харитонов Подменю пользователя
сообщение 15.12.15, 14:38
Сообщение #3

Завсегдатай
****
Группа: Пользователи
Сообщений: 164
Из: м. Кам'янське
Спасибо сказали: 26 раз
Рейтинг: 0

Обращаться нужно только к конкретным реквизитам, при чем OLE понимает только простые типы данных - строка, число, дата.
(вон на скриншоте, дата перенеслась, объекты - нет).

Спасибо сказали: shkoda,

shkoda Подменю пользователя
сообщение 16.12.15, 15:49
Сообщение #4

Общительный
**
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 1 раз
Рейтинг: 0

Цитата(Acid @ 11.12.15, 16:19) *
Если данные тянутся через ОЛЕ, то любой объект будет выглядеть именно так. Потому что это ОЛЕ-объекты.
Обращаться нужно по конкретным реквизитам:
ТабЗнач.Сотрудник =СокрЛП(СпрДокОТиЗ.Сотрудник.Наименование);


спасибо!
так и сделал и остальное по аналогии



теперь новая напасть - нужно в боковой колонке сделать чек-боксы чтобы человек работающий мог выбирать нужные ему документы))
ужас, условия меняют на лету)) но мы справимся!

Цитата(Мичман Харитонов @ 15.12.15, 14:38) *
Обращаться нужно только к конкретным реквизитам, при чем OLE понимает только простые типы данных - строка, число, дата.
(вон на скриншоте, дата перенеслась, объекты - нет).


допилилось успешно

СпрДокОТиЗ.ВыбратьЭлементы(); 
    Пока СпрДокОТиЗ.ПолучитьЭлемент()=1 Цикл

        ТабЗнач.НоваяСтрока();
        ТабЗнач.Код = СпрДокОТиЗ.Код;
        ТабЗнач.Документ = "Приказ по отпуску " + СокрЛП((СпрДокОТиЗ.Документ.НомерДок)) + " от " + (СпрДокОТиЗ.Документ.ДатаДок);
        ТабЗнач.Изменен = СпрДокОТиЗ.Изменен;
        ТабЗнач.ИзмененВ = СпрДокОТиЗ.ИзмененВ;
        ТабЗнач.Сотрудник = СокрЛП(СпрДокОТиЗ.Сотрудник.Наименование);
        
        Номер = Номер + 1;
        
    КонецЦикла;



теперь появилась новая мега идея - делать чек-боксы в последней колонке(((

Acid Подменю пользователя
сообщение 16.12.15, 16:35
Сообщение #5

Про1С-ник
Иконка группы
За заслуги на форуме в 2010 году
Группа: Местный
Сообщений: 2104
Из: Занзибар
Спасибо сказали: 377 раз
Рейтинг: 260.7

чек-бокс в ТЗ делается с помощью Колонки с типом Число 1.0


Signature

Документируйте Код! мать вашу...


shkoda Подменю пользователя
сообщение 18.12.15, 17:16
Сообщение #6

Общительный
**
Группа: Пользователи
Сообщений: 18
Спасибо сказали: 1 раз
Рейтинг: 0

Acid @ 16.12.15, 16:35 *,

у меня же табличка не статическая((
пока сделал вот так



Процедура  ОбработкаТабл()
    
        Если  ТабЗнач.НайтиЗначение("Нет",ТабЗнач.ТекущаяСтрока(),"Выбрать") = 1
            Тогда
            ТабЗнач.УстановитьЗначение(ТабЗнач.ТекущаяСтрока(),"Выбрать","Да");
            Иначе
            ТабЗнач.УстановитьЗначение(ТабЗнач.ТекущаяСтрока(),"Выбрать","Нет");
        КонецЕсли;
    
КонецПроцедуры


по двойному клику на строке в табличке
конечно немного некрасиво, но сойдёт

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 18.04.24, 4:57
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!