Доброго времени суток!
Я только начинающая личинка программиста 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;
КонецЦикла;
Сообщить("Количество Приказов по отпускам в справочнике равно " + Номер );
КонецПроцедуры
Если данные тянутся через ОЛЕ, то любой объект будет выглядеть именно так. Потому что это ОЛЕ-объекты.
Обращаться нужно по конкретным реквизитам:
ТабЗнач.Сотрудник =СокрЛП(СпрДокОТиЗ.Сотрудник.Наименование);
Обращаться нужно только к конкретным реквизитам, при чем OLE понимает только простые типы данных - строка, число, дата.
(вон на скриншоте, дата перенеслась, объекты - нет).
СпрДокОТиЗ.ВыбратьЭлементы();
Пока СпрДокОТиЗ.ПолучитьЭлемент()=1 Цикл
ТабЗнач.НоваяСтрока();
ТабЗнач.Код = СпрДокОТиЗ.Код;
ТабЗнач.Документ = "Приказ по отпуску " + СокрЛП((СпрДокОТиЗ.Документ.НомерДок)) + " от " + (СпрДокОТиЗ.Документ.ДатаДок);
ТабЗнач.Изменен = СпрДокОТиЗ.Изменен;
ТабЗнач.ИзмененВ = СпрДокОТиЗ.ИзмененВ;
ТабЗнач.Сотрудник = СокрЛП(СпрДокОТиЗ.Сотрудник.Наименование);
Номер = Номер + 1;
КонецЦикла;
чек-бокс в ТЗ делается с помощью Колонки с типом Число 1.0
Acid @ 16.12.15, 16:35 ,
у меня же табличка не статическая((
пока сделал вот так
Процедура ОбработкаТабл()
Если ТабЗнач.НайтиЗначение("Нет",ТабЗнач.ТекущаяСтрока(),"Выбрать") = 1
Тогда
ТабЗнач.УстановитьЗначение(ТабЗнач.ТекущаяСтрока(),"Выбрать","Да");
Иначе
ТабЗнач.УстановитьЗначение(ТабЗнач.ТекущаяСтрока(),"Выбрать","Нет");
КонецЕсли;
КонецПроцедуры
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua