Событие ПередЗаписью регистра сведений. Как перед записью изменить значение реквизита записи? Событие ПередЗаписью возникает перед выполнением записи набора регистра сведений. Процедура-обработчик вызывается после начала транзакции записи, но до начала записи набора регистра сведений.
Пример проверки на условие и заполнение реквизита Цвет:
Код 1C v 8.х Процедура ПередЗаписью(Отказ, Замещение)
Для Каждого ТекЗапись Из ЭтотОбъект Цикл
Если ТекЗапись. СерияНоменклатуры. Восстановленный Тогда
ТекЗапись. Цвет= "2551650" ;
Иначе
ТекЗапись. Цвет= "" ;
КонецЕсли ;
КонецЦикла ;
КонецПроцедуры
Ниже приведен пример процедуры ПередЗаписью для регистра сведений «Курсы», который содержит курсы валют по периодам. При попытке ввести или изменить курс валют ы период которого раньше даты регистрации фирмы будет выведено два сообщения:
Код 1C v 8.2 УП Процедура ПередЗаписью (Отказ, Замещение)
ДатаРегистрации = Константы. ДатаРегистрации. Получить ( ) ;
Для Каждого ТекЗапись Из ЭтотОбъект Цикл
Если ТекЗапись. Период < ДатаРегистрации Тогда
Отказ = Истина ;
Сообщить( " Запись от " + ТекЗапись. Период +
" с курсом " + ТекЗапись. Курс +
" раньше даты регистрации фирмы!" ) ;
КонецЕсли ;
КонецЦикла ;
Если Отказ Тогда
Сообщить ( "Запись не выполнена!" ) ;
КонецЕсли ;
КонецПроцедуры
Категория:
Регистры сведений Функции получения всех плановых Начислений и Удержаний сотрудника При доработке ЗУПа потребовалось во фронте расчетчика информативно выводить все плановые начисления и удержания по сотруднику на текущий момент. В результате 2 удобные функции, результат возвращают в виде таблицы значений:
Код 1C v 8.3 Функция ПолучитьСписокПлановыхНачислений(Организация, Сотрудник, ДатаО) Экспорт
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ
| ПлановыеНачисленияСрезПоследних.Период,
| ПлановыеНачисленияСрезПоследних.ВидРасчета,
| ПлановыеНачисленияСрезПоследних.Показатель1,
| ПлановыеНачисленияСрезПоследних.Валюта1,
| ПлановыеНачисленияСрезПоследних.ТарифныйРазряд1,
| ПлановыеНачисленияСрезПоследних.Показатель2,
| ПлановыеНачисленияСрезПоследних.Валюта2,
| ПлановыеНачисленияСрезПоследних.ТарифныйРазряд2,
| ПлановыеНачисленияСрезПоследних.Показатель3,
| ПлановыеНачисленияСрезПоследних.Валюта3,
| ПлановыеНачисленияСрезПоследних.ТарифныйРазряд3,
| ПлановыеНачисленияСрезПоследних.Показатель4,
| ПлановыеНачисленияСрезПоследних.Валюта4,
| ПлановыеНачисленияСрезПоследних.ТарифныйРазряд4,
| ПлановыеНачисленияСрезПоследних.Показатель5,
| ПлановыеНачисленияСрезПоследних.Валюта5,
| ПлановыеНачисленияСрезПоследних.ТарифныйРазряд5,
| ПлановыеНачисленияСрезПоследних.Показатель6,
| ПлановыеНачисленияСрезПоследних.Валюта6,
| ПлановыеНачисленияСрезПоследних.ТарифныйРазряд6,
| ПлановыеНачисленияСрезПоследних.Действие,
| ПлановыеНачисленияСрезПоследних.ПериодЗавершения,
| ПлановыеНачисленияСрезПоследних.ВидРасчетаЗавершения,
| ПлановыеНачисленияСрезПоследних.ДействиеЗавершения,
| ПлановыеНачисленияСрезПоследних.Показатель1Завершения,
| ПлановыеНачисленияСрезПоследних.Показатель2Завершения,
| ПлановыеНачисленияСрезПоследних.Показатель3Завершения,
| ПлановыеНачисленияСрезПоследних.Показатель4Завершения,
| ПлановыеНачисленияСрезПоследних.Показатель5Завершения,
| ПлановыеНачисленияСрезПоследних.Показатель6Завершения,
| ПлановыеНачисленияСрезПоследних.Валюта1Завершения,
| ПлановыеНачисленияСрезПоследних.Валюта2Завершения,
| ПлановыеНачисленияСрезПоследних.Валюта3Завершения,
| ПлановыеНачисленияСрезПоследних.Валюта4Завершения,
| ПлановыеНачисленияСрезПоследних.Валюта5Завершения,
| ПлановыеНачисленияСрезПоследних.Валюта6Завершения,
| ПлановыеНачисленияСрезПоследних.ТарифныйРазряд1Завершения,
| ПлановыеНачисленияСрезПоследних.ТарифныйРазряд2Завершения,
| ПлановыеНачисленияСрезПоследних.ТарифныйРазряд3Завершения,
| ПлановыеНачисленияСрезПоследних.ТарифныйРазряд4Завершения,
| ПлановыеНачисленияСрезПоследних.ТарифныйРазряд5Завершения,
| ПлановыеНачисленияСрезПоследних.ТарифныйРазряд6Завершения,
| ПлановыеНачисленияСрезПоследних.Регистратор
|ИЗ
| РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(
| &ДатаСреза,
| Организация =ГоловнаяОрганизация
| И Сотрудник =Ссылка) КАК ПлановыеНачисленияСрезПоследних
|ГДЕ
| ВЫБОР
| КОГДА ПлановыеНачисленияСрезПоследних.Действие = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить)
| И ПлановыеНачисленияСрезПоследних.ДействиеЗавершения = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.ПустаяСсылка)
| ТОГДА ЛОЖЬ
| КОГДА ПлановыеНачисленияСрезПоследних.Действие = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить)
| И ПлановыеНачисленияСрезПоследних.ДействиеЗавершения <> ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.ПустаяСсылка)
| ИДатаСреза < ПлановыеНачисленияСрезПоследних.ПериодЗавершения
| ТОГДА ЛОЖЬ
| КОГДА ПлановыеНачисленияСрезПоследних.ДействиеЗавершения = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить)
| ИДатаСреза >= ПлановыеНачисленияСрезПоследних.ПериодЗавершения
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ" ;
Запрос. УстановитьПараметр( "ГоловнаяОрганизация" , Организация) ;
Запрос. УстановитьПараметр( "ДатаСреза" , ДатаО) ;
Запрос. УстановитьПараметр( "Ссылка" , Сотрудник) ;
Возврат Запрос. Выполнить( ) . Выгрузить( ) ;
КонецФункции
Функция ПолучитьСписокПлановыхУдержаний(Организация, Сотрудник, ДатаО) Экспорт
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ
| ПлановыеУдержанияСрезПоследних.Период,
| ПлановыеУдержанияСрезПоследних.ВидРасчета,
| ПлановыеУдержанияСрезПоследних.Показатель1,
| ПлановыеУдержанияСрезПоследних.Валюта1,
| ПлановыеУдержанияСрезПоследних.Показатель2,
| ПлановыеУдержанияСрезПоследних.Валюта2,
| ПлановыеУдержанияСрезПоследних.Показатель3,
| ПлановыеУдержанияСрезПоследних.Валюта3,
| ПлановыеУдержанияСрезПоследних.Показатель4,
| ПлановыеУдержанияСрезПоследних.Валюта4,
| ПлановыеУдержанияСрезПоследних.Показатель5,
| ПлановыеУдержанияСрезПоследних.Валюта5,
| ПлановыеУдержанияСрезПоследних.Показатель6,
| ПлановыеУдержанияСрезПоследних.Валюта6,
| ПлановыеУдержанияСрезПоследних.Действие,
| ПлановыеУдержанияСрезПоследних.ПериодЗавершения,
| ПлановыеУдержанияСрезПоследних.ДействиеЗавершения,
| ПлановыеУдержанияСрезПоследних.Показатель1Завершения,
| ПлановыеУдержанияСрезПоследних.Показатель2Завершения,
| ПлановыеУдержанияСрезПоследних.Показатель3Завершения,
| ПлановыеУдержанияСрезПоследних.Показатель4Завершения,
| ПлановыеУдержанияСрезПоследних.Показатель5Завершения,
| ПлановыеУдержанияСрезПоследних.Показатель6Завершения,
| ПлановыеУдержанияСрезПоследних.Валюта1Завершения,
| ПлановыеУдержанияСрезПоследних.Валюта2Завершения,
| ПлановыеУдержанияСрезПоследних.Валюта3Завершения,
| ПлановыеУдержанияСрезПоследних.Валюта4Завершения,
| ПлановыеУдержанияСрезПоследних.Валюта5Завершения,
| ПлановыеУдержанияСрезПоследних.Валюта6Завершения,
| ПлановыеУдержанияСрезПоследних.Регистратор
|ИЗ
| РегистрСведений.ПлановыеУдержанияРаботниковОрганизаций.СрезПоследних(
| &ДатаСреза,
| Организация =ГоловнаяОрганизация
| И Физлицо =Ссылка) КАК ПлановыеУдержанияСрезПоследних
|ГДЕ
| ВЫБОР
| КОГДА ПлановыеУдержанияСрезПоследних.Действие = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить)
| И ПлановыеУдержанияСрезПоследних.ДействиеЗавершения = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.ПустаяСсылка)
| ТОГДА ЛОЖЬ
| КОГДА ПлановыеУдержанияСрезПоследних.Действие = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить)
| И ПлановыеУдержанияСрезПоследних.ДействиеЗавершения <> ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.ПустаяСсылка)
| ИДатаСреза < ПлановыеУдержанияСрезПоследних.ПериодЗавершения
| ТОГДА ЛОЖЬ
| КОГДА ПлановыеУдержанияСрезПоследних.ДействиеЗавершения = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить)
| ИДатаСреза >= ПлановыеУдержанияСрезПоследних.ПериодЗавершения
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ" ;
Запрос. УстановитьПараметр( "ГоловнаяОрганизация" , Организация) ;
Запрос. УстановитьПараметр( "ДатаСреза" , ДатаО) ;
Запрос. УстановитьПараметр( "Ссылка" , Сотрудник. Физлицо) ;
Возврат Запрос. Выполнить( ) . Выгрузить( ) ;
КонецФункции
Категория:
1С Зарплата и Управление Персоналом 2.5 Деноминация 2016 в 1С Чтобы провести деноминацию в 1С на 1 июля 2016 года, нужно учесть, что желательно учёт вести в двух суммовых измерениях в белорусских рублях старого и нового образца. Однако, даже если Вы решите упростить задачу и проведёте деноминацию в программе вручную или с помощью обработки на 1 июля, то есть деноминируете итоги в соотношении 1:10000 , то получите "кашу" в базе данных. Такие отчёты как ОСВ, акт сверки, карточка счёта, журнал-ордер и все остальные в программе 1С будут воспринимать данную операцию как "логичную". Обороты за период "поплывут", а итоги будут суммировать старые и новые деньги как равнозначные . Поэтому этот вариант исключим сразу.
Пять вариантов решения:
1)Корректный вариант!Разделить базу данных на две. Во второй провести деноминацию 1 июля.
Выполнить доработку форм и метаданных до копеек. Первое полугодие в первой базе оставить как есть. А учёт во втором полугодии, во второй базе, уже начать вести в денежном выражении нового образца. Перед разбиением базы на две, нужно доработать модуль и все метаданные, создать её копию и сделать свёртку обработкой WRAP.ert. Потом, этой же обработкой, в новой базе провести деноминацию - убрать из уже сделанных, во втором квартале, проводок и метаданных "0000". Но есть один недостаток. Разбивая базу на две Вы лишитесь оперативность при получении данных. Теперь, например, для того чтобы построить акт сверки за год по контрагенту - придётся делать это в двух базах! Выбирая этот вариант нужно понимать все нюансы разделения базы на полугодия.
2)Корректный вариант! Проведение деноминации в рабочей базе (без разделения):
Выполнить доработку форм и метаданных до копеек. Создать сторнированные проводоки с учётом коэффициента деноминации 10000 (то есть если на Сч.по Дт.=3.000.000 -> будет сделана проводка Дт. -2.999.700 -> в итоге Сч.Дт=300). Внимание! Нужно иметь ввиду, что отчёты желательно строить в двух экземплярах (до 1 июля и после).
Выполнить доработку форм и метаданных до копеек.
3) Корректный вариант, но очень затратный! Доработать все метаданные 1С для деноминации и провести её на 1 июля 2016 года.
Самый дорогой вариант для предприятия.
В версии 8.2 и 8.3 можно создать дополнительное измерение "сумма в рублях старого образца".
В версии 7.7 на невалют ных счетах можно использовать вал.сумму или доп.забалансовый счёт (рубли образца 2009 года).
Плюс ко всему придётся переделать практически все объекты метаданных. Отчеты, справочники, документы, обработки, глобальный(7.7) и общие(8) модули, план счетов, регистры и т.п. Реализовать данный метод смогут лишь крупные предприятия с массивным штатом программистов 1С.
4) Признан некорректным! Продолжить вести учёт в старых денежных единицах.
Совершенно не затратный и для большинства компаний самый оптимальный, так как делать то ничего и не надо. Коротко говоря - оставить всё как есть. В шапке некоторых отчётов, например, акта сверки, для корректности, можно добавить фразу типа этой: "в расчётах используется белорусский рубль образца 2000 года".
5) Признан н екорректным! Разделить базу данных на две. Во второй провести деноминацию 1 января.
"Закрыть" период (первое полугодие) в первой базе, чтобы больше не вносить туда изменения. Во второй базе сделать свёртку обработкой WRAP.ert на 1 января. Незабудьте предварительно создать копию. Соответственно с 1 января 2016г. учёт будет деноминированный. Помните, что вносить изменения (если таковые будут) до 01 июля 2016 придётся вносить в обе информационные базы. В начале 2017 можно будет свернуть и обрезать Вашу рабочую базу на 1 июля. Так у Вас будет две базы: 1-я до 1.07.2016 (без деноминации) и 2-я после 1.07.2016 (с деноминацией).
6) Признан н екорректным! Доработать только отчёты в 1С для деноминации 1 июля 2016 года.
В отчётах, которыми чаще всего пользуются бухгалтера для отправки данных "внешним" контрагентам (акт сверки, деб.задолженность, отчёт по движению ДС и т.п.), выводить дополнительную строку с коэффициентом 1:10000 под суммой с названием "сумма в белорусских рублях образца 2009 года".
Категория:
1С Общие вопросы - Обычные формы 1С 7.x : Как получить курсы валют с сайта НБУ http://www.bank.gov.ua/ за любую дату ? Код 1C v 7.x
Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 - получем валют ы, которые котируются на ежемесячной основе
Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯчейки, Док, ТекстВЯчейке, ТабКурсов;
Url = "http://www.bank.gov.ua/control/uk/curmetal/currency/search?formType=searchFormDate&time_step=" + ?(Ежедневно = 1, "daily", "monthly") +
"&date=" + Формат(ДатаКурса, "ДДДММГГГГ") + "&outer=table&execute=run&time=" + _GetPerformanceCounter();
Сообщить(Url);
Reader = СоздатьОбъект("MSXML2.XMLHTTP");
Reader.Open("Get", Url, 0);
Reader.Send();
Пока Reader.ReadyState <> 4 Цикл
Состояние("Чтение данных за <" + ДатаКурса + "> ");
КонецЦикла;
Док = СоздатьОбъект("HtmlFile");
Док.open("text/html");
Док.write(Reader.ResponseText);
Док.close();
HtmlTab = Док.getElementsByTagName("table").item(5);
ТабКурсов = СоздатьОбъект("ТаблицаЗначений");
ТабКурсов.НоваяКолонка("ЦифрКод" , "Строка", 3, , "Цифр. код");
ТабКурсов.НоваяКолонка("БуквКод" , "Строка", 3, , "Букв. код");
ТабКурсов.НоваяКолонка("Название" , "Строка");
ТабКурсов.НоваяКолонка("Курс" , "Число" ,14, 4);
ТабКурсов.НоваяКолонка("Кратность" , "Число" , 9, 0);
Строк = HtmlTab.rows.length;
Для НомСтроки = 1 По Строк Цикл
Р = HtmlTab.rows(НомСтроки - 1);
Если (НомСтроки = 1) Или (Р.cells.length <> 5) Тогда // 1 - я заголовок, остальные не с данными
Продолжить;
КонецЕсли;
ТабКурсов.НоваяСтрока();
ТабКурсов.ЦифрКод = СокрЛП(Р.cells(0).innerText);
ТабКурсов.БуквКод = СокрЛП(Р.cells(1).innerText);
ТабКурсов.Название = СокрЛП(Р.cells(3).innerText);
ТабКурсов.Курс = 0 + СтрЗаменить(СокрЛП(Р.cells(4).innerText), " ", "");
ТабКурсов.Кратность = 0 + СтрЗаменить(СокрЛП(Р.cells(2).innerText), " ", "");
КонецЦикла;
Reader = 0;
ТабКурсов.ВыбратьСтроку(, "Курсы за " + ДатаКурса);
Возврат ТабКурсов;
КонецФункции
Категория:
HTML, JS, VML Как получить курсы валют с сайта http://finance.ua/ за любую дату ? Код 1C v 7.x
Функция ПолучитьТаблицуКурсов(ДатаКурса)
Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯчейки, Док, ТекстВЯчейке, ТабКурсов;
Reader = СоздатьОбъект( "MSXML2.XMLHTTP" ) ;
Url = "http://tables.finance.ua/ru/currency/official/-/1/" + ДатаГод( ДатаКурса) + "/" + ДатаМесяц( ДатаКурса) + "/" + ДатаЧисло( ДатаКурса) + "?time=" + _GetPerformanceCounter( ) ;
Сообщить( Url) ;
Reader. Open( "Get" , Url, 0 ) ;
Reader. Send( ) ;
Пока Reader. ReadyState < > 4 Цикл
Состояние( "Чтение данных за <" + ДатаКурса + "> " ) ;
КонецЦикла ;
Док = СоздатьОбъект( "HtmlFile" ) ;
Док. open( "text/html" ) ;
Док. write( Reader. ResponseText) ;
Док. close( ) ;
HtmlTab = Док. getElementByID( "currency-official-table" ) ;
Строк = HtmlTab. rows. length;
ТабКурсов = СоздатьОбъект( "ТаблицаЗначений" ) ;
ТабКурсов. НоваяКолонка( "ЦифрКод" , "Строка" , 3 , , "Цифр. код" ) ;
ТабКурсов. НоваяКолонка( "БуквКод" , "Строка" , 3 , , "Букв. код" ) ;
ТабКурсов. НоваяКолонка( "Название" , "Строка" ) ;
ТабКурсов. НоваяКолонка( "Курс" , "Число" , 14 , 4 ) ;
ТабКурсов. НоваяКолонка( "Кратность" , "Число" , 9 , 0 ) ;
Для НомСтроки = 1 По Строк Цикл
Р = HtmlTab. rows( НомСтроки - 1 ) ;
Если ( НомСтроки = 1 ) Или ( Р. cells. length < > 7 ) Тогда
Продолжить;
КонецЕсли ;
ТабКурсов. НоваяСтрока( ) ;
ТабКурсов. ЦифрКод = СокрЛП( Р. cells( 0 ) . innerText) ;
ТабКурсов. БуквКод = СокрЛП( Р. cells( 1 ) . innerText) ;
ТабКурсов. Название = СокрЛП( Р. cells( 3 ) . innerText) ;
ТабКурсов. Курс = 0 + СтрЗаменить( СокрЛП( Р. cells( 4 ) . innerText) , " " , "" ) ;
ТабКурсов. Кратность = 0 + СтрЗаменить( СокрЛП( Р. cells( 2 ) . innerText) , " " , "" ) ;
КонецЦикла ;
Reader = 0 ;
ТабКурсов. ВыбратьСтроку( , "Курсы за " + ДатаКурса) ;
Возврат ТабКурсов;
КонецФункции
Категория:
HTML, JS, VML Табличная часть ~ Как настроить отбор строк? Часто возникает задача показать только нужные строки в табличной части документа или справочника (или другого объекта). Для этого можно использовать замечательное свойство:
в обычном приложении параметр для ОтборСтрок - Отбор...
в управляемом приложении - ФиксированнаяСтруктура
ОтборСтрок , которое входит в расширение табличного поля, связанного с табличной частью.
Управляемые формы Код 1C v 8.3 СписокЗаказовНаФорме. ОтборСтрок = Новый ФиксированнаяСтруктура( "Клиент" , СписокЗаказовНаФорме. ТекущиеДанные. Клиент) ;
пример:
Код 1C v 8.3 СписокЗаказовНаФорме = ЭтаФорма. Элементы. СписокЗаказов;
ТекНомер = Неопределено ;
Для НомерСтроки = 0 По СписокЗаказов. Количество( ) - 1 Цикл
Сообщение = Новый СообщениеПользователю;
Если СписокЗаказовНаФорме. ПроверитьСтроку( НомерСтроки) Тогда
СписокЗаказовНаФорме. ТекущаяСтрока = НомерСтроки;
Если ТекНомер = Неопределено Тогда
Если ЗначениеЗаполнено( СписокЗаказовНаФорме. ТекущиеДанные. Машина) Тогда
ТекНомер = СписокЗаказовНаФорме. ТекущиеДанные. Машина;
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение. Текст = "Установите нужный номер автомобиля в первой строке списка" ;
Сообщение. Поле = "СписокЗаказов[" + НомерСтроки + "].Машина" ;
Сообщение. Сообщить( ) ;
СписокЗаказовНаФорме. ОтборСтрок = Новый ФиксированнаяСтруктура( "Клиент" , СписокЗаказовНаФорме. ТекущиеДанные. Клиент) ;
Возврат ;
КонецЕсли ;
Иначе
СписокЗаказовНаФорме. ТекущиеДанные. Машина = ТекНомер;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
или такой динамический отбор
Код 1C v 8.3 ЭлементОтбора = Список. Отбор. Элементы. Добавить( Тип( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора. ЛевоеЗначение = Новый ПолеКомпоновкиДанных( "ИмяПоляОтбора" ) ;
ЭлементОтбора. ВидСравнения = ВидСравненияКомпоновкиДанных. Равно;
ЭлементОтбора. Использование = Истина ;
ЭлементОтбора. РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных. Недоступный;
ЭлементОтбора. ПравоеЗначение = ЗначениеПоляОтбора;
&НаКлиенте
Процедура ОчиститьОтбор(Команда)
этаформа. Список. Отбор. Элементы. Очистить( ) ;
КонецПроцедуры
Обычные формы Использовать его очень просто:
Код 1C v 8.х
ЭлементыФормы. ИмяТабПоля. ОтборСтрок. Колонка1 . Установить( ЗначениеОтбора) ;
ЭлементыФормы. ИмяТабПоля. ОтборСтрок. Колонка1 . Установить( , Ложь ) ;
или 2-й вариант:
Код 1C v 8.х ЭлементыФормы. ИмяТабПоля. ОтборСтрок. Колонка1 . Использование = Истина ;
ЭлементыФормы. ИмяТабПоля. ОтборСтрок. Колонка1 . ВидСравнения = ВидСравнения. Равно;
ЭлементыФормы. ИмяТабПоля. ОтборСтрок. Колонка1 . Значение = ЗначениеОтбора;
А теперь конкретные примеры:
Код 1C v 8.х //выбрать строки с ценой = 100
ЭлементыФормы.тпТовары.ОтборСтрок.Цена.Установить(100);
--------
//выбрать строки с ценой 100 и опр. валют ой
ЭлементыФормы.тпТовары.ОтборСтрок.Валюта.Установить(ВалютаУпр);
ЭлементыФормы.тпТовары.ОтборСтрок.Цена.Установить(200);
--------
//выбрать строки с ценой >= 100 (неравенство)
ЭлементыФормы.тпТовары.ОтборСтрок.Цена.Использование = Истина;
ЭлементыФормы.тпТовары.ОтборСтрок.Цена.ВидСравнения = ВидСравнения.БольшеИлиРавно;
ЭлементыФормы.тпТовары.ОтборСтрок.Цена.Значение = 100;
--------
//выбрать строки с ценой от 100 до 200 (интервал)
ЭлементыФормы.тпТовары.ОтборСтрок.Цена.Использование = Истина;
ЭлементыФормы.тпТовары.ОтборСтрок.Цена.ВидСравнения = ВидСравнения.Интервал;
ЭлементыФормы.тпТовары.ОтборСтрок.Цена.ЗначениеС = 100;
ЭлементыФормы.тпТовары.ОтборСтрок.Цена.ЗначениеПо = 200;
--------
//выбрать строки с определенными товарами по списку
ЭлементыФормы.тпТовары.ОтборСтрок.Товар.Использование = Истина;
ЭлементыФормы.тпТовары.ОтборСтрок.Товар.ВидСравнения = ВидСравнения.ВСписке;
ЭлементыФормы.тпТовары.ОтборСтрок.Товар.Значение.Добавить(Товар1);
ЭлементыФормы.тпТовары.ОтборСтрок.Товар.Значение.Добавить(Товар2);
Подчиненные табличные части в 8.х
С помощью свойства ОтборСтрок можно реализовать подчиненные (связанные) табличные части. При смене текущей строки в первой табличной части вторая табличная часть показывает только связанную информаци. Например, таким образом можно реализовать работу с комплектами: 1-я таб. часть - комплекты, вторая - состав комплекта.
Во второй табличной части должна быть колонка - идентификационный признак, связывающий ее с первой табличной частью. Таких колонок может быть несколько (составной ключ);
В событии ПриАктивизацииСтроки для первого табличного поля пишем:
Код 1C v 8.х ЭлементыФормы. СоставКомплекта. ОтборСтрок. Комплект. Установить( Комплект) ;
При добавлении новой строки во вторую табличную часть, нужно следить за тем, чтобы идентификационная колонка была установлена.
Обращаю ваше внимание, что при таком отборе не используются индексы и для больших табличных частей возможно замедление работы.
Еще раз напомню, что ОтборСтрок входит в расширение табличного поля табличной части, т.е. табличное поле должно быть связано с табличной частью. Если же оно связано с динамическим списком типа СправочникСписок, то здесь нужно использовать свойство Отбор для объекта типа СправочникСписок.
Если понадобилось перебрать строки, вошедшие в отбор, то это можно сделать, только заново перебрав все строки и проверив условие отбора для каждой строки. Перебрать строки табличного поля, которые сейчас на экране - невозможно.
Категория:
Работа с Формой (Диалог) и её элементами Настройка счетов учета расчетов с контрагентами в 1С Бух 2.0 Для настройки счетов учета расчетов с контрагентами необходимо зайти в меню:
Справочники/Бухгалтерский и налоговый учет/Счета учета расчетов с контрагентами
Счета учета расчетов с контрагентами настраиваются при первом запуске программы, вместе с настройками учетных политик и констант.
Настройки определяют, те счета бухгалтерского учета расчетов и авансов, которые будут подставляться в документах: расходных, приходных накладных, возвратах, таможенных декларациях, поступлениях дополнительных расходов, авансовых отчетах, платежках, кассовых ордерах и.т.д.
Нажмите кнопку «Изменить» на записи с видом расчета «Расчеты в валют е регламентированного учета (с резидентами)».
Организация определяет настройку счетов учета в разрезе каждой из организаций, введенных в нашу базу, для того чтобы настройки счетов учета распространялись на все организации, это поле можно не заполнять.
Настройка Контрагент и договор – также выполняет детализацию счетов расчетов по каждому из введенных контрагентов и договоров, если поля пустые, настройки распространяются на всех контрагентов, введенных в справочник контрагентов.
Вид расчетов – определяет, выполняется ли настройка для резидентов или для не резидентов
Детализация настроек по контрагентам и договорам имеет смысл в том случае, если с определенными контрагентами ожидаются специфические настройки счетов взаиморасчетов, например по счетам 6851, 3771.
Но даже в таком случае имеет смысл собрать всех таких контрагентов в одну папку и настроить счета учета в целом на папку.
На закладке Счета учета НДС настраиваются счета бухгалтерского учета по НДС кредиту и обязательствам, а также ставки НДС.
Чем более крупненно настроены настройки взаиморасчетов, тем лучше: на всю папку, на всех покупателей, на всю организацию и.т.д
FaceЧем более крупненно настроены настройки взаиморасчетов, тем лучше: на всю папку, на всех покупателей, на всю организацию и.т.д
Если вы не используете счета авансов НЕ ОСТАВЛЯЙТЕ поля: авансов выданных, авансов полученных пустыми, заполняйте их ТЕМИ ЖЕ СЧЕТАМИ как и для взаиморасчетов.
Это позволит избежать случаев не сворачивания вторых событий по документу аванса.
Резюмируя:
Настройки счетов учета желательно выполнить сразу же после установки программы.
Максимально укрупнить их по папкам или в целом по организации.
Обязательно обратить внимание на счета авансов они должны быть такими же, как и счета учета взаиморасчетов, если мы не используем счета авансов у себя в организации.
Счета учета взаиморасчетов, так же как и ставки НДС могут быть изменены в самих первичных документах при отражении хозяйственных операций.
Категория:
1С Бухгалтерия 2.0 Загрузка данных в 1С из PDF В данной статье описан пример реализации загрузки данных накладных из PDF файлов для одного крупного Ритейла...
И так у Нас есть несколько файлов в формате pdf, которые нам необходимо загрузить в 1С.
Чтение PDF файлов из 1С
Первым дело я стал искать, как напрямую можно прочитать данные из 1С в PDF файлах - было найдено много информации и вариантов решений, но к сожалению большинство из них не правильно работали с кодировкой В результате банальный текст вида Красный стул превращался в страшную кракозябру.
Далее после долгих поисков был найден конвертер PDF в TXT - pdf2txt
Поддержка командной строки:
PDF2TXT <input PDF file> [output TXT file] [-logfile] [-open] [-space] [-html] [-format] [-silent] [-blankline] [-summary] [-zoom <num>] [-?] [-h]
<input PDF file> : Open an existing PDF file to convert.
[output TXT file] : Write to TEXT file, the default is same filename of input PDF file.
[-first <page number>]: Specify the first page number.
[-last <page number>]: Specify the last page number.
[-logfile] : Write log to "C:\pdf2txt.log" file.
[-open] : Auto open the text file after it be created.
[-space] : Auto insert spaces into text file.
[-html] : Output to a HTML file, not a text file.
[-format] : Keep the page layout in the generated TXT file.
[-silent] : Disable error and warning messages.
[-blankline] : Auto delete blank line in the generated TXT file.
[-summary] : Get PDF document summary.
[-zoom <num>] : Set zoom ratio, the range is from 50 to 200.
[-unicode] : Create UTF-8 encoding text file.
Примеры:
Код Batch File (DOS, CMD, BAT) C:\>PDF2TXT C:\input.pdf
C:\>PDF2TXT C:\input.pdf -unicode
C:\>PDF2TXT C:\input.pdf -first 10 -last 12
C:\>PDF2TXT C:\input.pdf C:\output.txt
C:\>PDF2TXT C:\input.pdf -open -silent -logfile -zoom 150
C:\>PDF2TXT C:\input.pdf C:\output.txt -open -silent
C:\>PDF2TXT C:\*.pdf
C:\>PDF2TXT C:\*.pdf C:\*.txt
C:\>PDF2TXT C:\test\*.pdf C:\test\*.txt
В архиве (Скачать Вы можете из статьи по ссылке ) заготовка 1С обработки для частного случая, если она Вам подойдет - Хорошо
Если же нет, то Мы можем для Вас быстро доработать загрузку PDF в 1С !
Код на 1С для конфигурации УТ 10.3:
Код 1C v 8.х Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = "," ) Экспорт
МассивСтрок = Новый Массив( ) ;
Если Разделитель = " " Тогда
Стр = СокрЛП( Стр) ;
Пока 1 = 1 Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
МассивСтрок. Добавить( Стр) ;
Возврат МассивСтрок;
КонецЕсли ;
МассивСтрок. Добавить( Лев( Стр, Поз- 1 ) ) ;
Стр = СокрЛ( Сред( Стр, Поз) ) ;
КонецЦикла ;
Иначе
ДлинаРазделителя = СтрДлина( Разделитель) ;
Пока 1 = 1 Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
МассивСтрок. Добавить( Стр) ;
Возврат МассивСтрок;
КонецЕсли ;
ТекЗнч = СокрЛП( Лев( Стр, Поз- 1 ) ) ;
Если ЗначениеЗаполнено( ТекЗнч) Тогда
МассивСтрок. Добавить( ТекЗнч) ;
КонецЕсли ;
Стр = Сред( Стр, Поз+ ДлинаРазделителя) ;
КонецЦикла ;
КонецЕсли ;
КонецФункции
Процедура КнопкаВыполнитьНажатие(Кнопка)
тч. Очистить( ) ;
НайденныеФайлы = НайтиФайлы( ПутьКPDF, "*.pdf" , ложь ) ;
Для каждого стр Из НайденныеФайлы Цикл
Нстр = ТЧ. Добавить( ) ;
Нстр. ФайлPDF = стр. Имя;
КонецЦикла ;
ЭтаФорма. Обновить( ) ;
Для каждого стр Из ТЧ Цикл
Попытка
pdf = СокрЛП( ПутьКPDF+ "\" + стр. ФайлPDF) ;
txt = СтрЗаменить( pdf, "pdf" , "txt" ) ;
Команд = ПутьКPDF2TXT+ "\pdf2txt.exe " + pdf+ " " + txt;
ЗапуститьПриложение( Команд, ПутьКPDF, Истина ) ;
стр. ФайлTXT = txt;
Исключение
стр. ФайлTXT = "!!!_ОШИБКА" ;
КонецПопытки ;
ЭлементыФормы. ТЧ. ТекущаяСтрока = стр;
ЭлементыФормы. ТЧ. ОбновитьСтроки( стр) ;
КонецЦикла ;
мТекущийПользователь = глЗначениеПеременной( "глТекущийПользователь" ) ;
мСкладПоУмолчанию = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОсновнойСклад" ) ;
мОсновноеПодразделение = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОсновноеПодразделение" ) ;
мОсновнаяВалютаВзаиморасчетов = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОсновнаяВалютаВзаиморасчетов" ) ;
мОсновноеВедениеВзаиморасчетовПоДоговорам = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОсновноеВедениеВзаиморасчетовПоДоговорам" ) ;
мВидНоменклатурыПоУмолчанию = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОсновнойВидНоменклатуры" ) ;
мОтражатьВРеглУчете = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОтражатьДокументыВУправленческомУчете" ) ;
мОтражатьВБухУчета = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОтражатьДокументыВБухгалтерскомУчете" ) ;
мОтражатьВНалУчете = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОтражатьДокументыВНалоговомУчете" ) ;
Для каждого стр Из ТЧ Цикл
Состояние( "Загружаю: " + стр. ФайлTXT) ;
текдок= Новый ТекстовыйДокумент;
текдок. Прочитать( стр. ФайлTXT, "UTF-8" ) ;
ЗагрузкаТЧ= Ложь ;
ДокВозвратТоваровОтПокупателя = Документы. ВозвратТоваровОтПокупателя. СоздатьДокумент( ) ;
ДокВозвратТоваровОтПокупателя. Ответственный = мТекущийПользователь;
ДокВозвратТоваровОтПокупателя. Дата = ОбщегоНазначения. ПолучитьРабочуюДату( ) ;
ДокВозвратТоваровОтПокупателя. УстановитьНовыйНомер( ) ;
ДокВозвратТоваровОтПокупателя. ВидПоступления = Перечисления. ВидыПоступленияТоваров. НаСклад;
ДокВозвратТоваровОтПокупателя. СкладОрдер = Склад;
ДокВозвратТоваровОтПокупателя. Подразделение = мОсновноеПодразделение;
ДокВозвратТоваровОтПокупателя. ВалютаДокумента = Справочники. Валюты. НайтиПоКоду( "643" ) ;
ДокВозвратТоваровОтПокупателя. УчитыватьНДС = ИСТИНА ;
ДокВозвратТоваровОтПокупателя. СуммаВключаетНДС = ИСТИНА ;
Для Ном= 1 по текдок. КоличествоСтрок( ) цикл
ТСтр = текдок. ПолучитьСтроку( Ном) ;
ТекСтр = СокрЛП( ТСтр) ;
Если Найти( ТекСтр, "Всего по накладной" ) > 0 Тогда
ЗагрузкаТЧ= Ложь ;
Для Каждого СтрокаТабличнойЧасти Из ДокВозвратТоваровОтПокупателя. Товары Цикл
ОбработкаТабличныхЧастей. РассчитатьКоличествоМестТабЧасти( СтрокаТабличнойЧасти, ДокВозвратТоваровОтПокупателя) ;
ОбработкаТабличныхЧастей. РассчитатьСуммуТабЧасти( СтрокаТабличнойЧасти, ДокВозвратТоваровОтПокупателя) ;
ОбработкаТабличныхЧастей. РассчитатьСуммуНДСТабЧасти( СтрокаТабличнойЧасти, ДокВозвратТоваровОтПокупателя) ;
КонецЦикла ;
Попытка
ДокВозвратТоваровОтПокупателя. Записать( РежимЗаписиДокумента. Проведение) ;
Исключение
ДокВозвратТоваровОтПокупателя. Записать( РежимЗаписиДокумента. Запись) ;
КонецПопытки ;
стр. Документ = ДокВозвратТоваровОтПокупателя. Ссылка;
стр. Инфо = "Все ОК" ;
ЭлементыФормы. ТЧ. ТекущаяСтрока = стр;
ЭлементыФормы. ТЧ. ОбновитьСтроки( стр) ;
Прервать ;
КонецЕсли ;
Если ЗагрузкаТЧ Тогда
ТекСтр = СтрЗаменить( ТекСтр, "подложке " , "подложке" ) ;
ТекСтр = СтрЗаменить( ТекСтр, " " , "|" ) ;
СтрМ= РазложитьСтрокуВМассивПодстрок( ТекСтр, "|" ) ;
Если СтрМ. Количество( ) > 2 Тогда
Попытка
НоваяСтрока = ДокВозвратТоваровОтПокупателя. Товары. Добавить( ) ;
НоваяСтрока. Номенклатура = Справочники. Номенклатура. НайтиПоКоду( СтрМ[2 ]) ;
НоваяСтрока. ЕдиницаИзмерения = НоваяСтрока. Номенклатура. БазоваяЕдиницаИзмерения;
НоваяСтрока. Коэффициент = 1 ;
НоваяСтрока. Количество = Число( СтрМ[6 ]) ;
НоваяСтрока. Цена = Число( СтрМ[7 ]) ;
НоваяСтрока. Сумма = Число( СтрМ[8 ]) ;
НоваяСтрока. СуммаНДС = Число( СтрМ[11 ]) ;
НоваяСтрока. Качество = Справочники. Качество. Новый ;
Попытка
НоваяСтрока. СтавкаНДС = Перечисления. СтавкиНДС["НДС" + Лев( СокрЛП( СтрМ[9 ]) , 2 ) ];
Исключение
НоваяСтрока. СтавкаНДС = НоваяСтрока. Номенклатура. СтавкаНДС;
КонецПопытки ;
Исключение
Сообщить( "Не загружено: " + ТекСтр) ;
КонецПопытки ;
Иначе
Продолжить;
КонецЕсли ;
Иначе
КонецЕсли ;
Если Найти( ТекСтр, "Товарная накладная" ) > 0 Тогда
ТекСтр = СтрЗаменить( ТекСтр, " " , "|" ) ;
СтрМ= РазложитьСтрокуВМассивПодстрок( ТекСтр, "|" ) ;
Если СтрМ. Количество( ) > 1 Тогда
ДокВозвратТоваровОтПокупателя. НомерВходящегоДокументаЭлектронногоОбмена = СтрМ[1 ];
ТекДата = СтрМ[2 ];
ДокВозвратТоваровОтПокупателя. ДатаВходящегоДокументаЭлектронногоОбмена = Дата( Прав( ТекДата, 4 ) + Сред( ТекДата, 4 , 2 ) + Лев( ТекДата, 2 ) ) ;
КонецЕсли ;
КонецЕсли ;
Если Найти( ТекСтр, "Грузополучатель:" ) > 0 Тогда
ГдеИНН = Найти( ТекСтр, "ИНН" ) ;
Если ГдеИНН> 0 Тогда
ГдеИННвр= лев( ТекСтр, ГдеИНН+ 15 ) ;
текИНН = Прав( гдеИННвр, СтрДлина( ГдеИННвр) - ( ГдеИНН+ 3 ) ) ;
текИНН = СокрЛП( СтрЗаменить( текИНН, "." , "" ) ) ; текИНН = СокрЛП( СтрЗаменить( текИНН, "," , "" ) ) ;
ТекОрганизация = Справочники. Организации. НайтиПоРеквизиту( "ИНН" , текИНН) ;
Если ТекОрганизация= Справочники. Организации. ПустаяСсылка( ) Тогда
ДокВозвратТоваровОтПокупателя. Организация = Организация;
Иначе
ДокВозвратТоваровОтПокупателя. Организация = ТекОрганизация;
КонецЕсли ;
КонецЕсли ;
КонецЕсли ;
Если Найти( ТекСтр, "Поставщик:" ) > 0 Тогда
ГдеИНН = Найти( ТекСтр, "ИНН" ) ;
Если ГдеИНН> 0 Тогда
ГдеИННвр= лев( ТекСтр, ГдеИНН+ 15 ) ;
текИНН = Прав( гдеИННвр, СтрДлина( ГдеИННвр) - ( ГдеИНН+ 3 ) ) ;
текИНН = СокрЛП( СтрЗаменить( текИНН, "." , "" ) ) ; текИНН = СокрЛП( СтрЗаменить( текИНН, "," , "" ) ) ;
ТекПоставщик = Справочники. Контрагенты. НайтиПоРеквизиту( "ИНН" , текИНН) ;
ДокВозвратТоваровОтПокупателя. Контрагент = ТекПоставщик;
ДокВозвратТоваровОтПокупателя. ДоговорКонтрагента = ТекПоставщик. ОсновнойДоговорКонтрагента;
КонецЕсли ;
КонецЕсли ;
Если Найти( ТекСтр, "Плательщик:" ) > 0 Тогда
ГдеИНН = Найти( ТекСтр, "ИНН" ) ;
Если ГдеИНН> 0 Тогда
ГдеИННвр= лев( ТекСтр, ГдеИНН+ 15 ) ;
текИНН = Прав( гдеИННвр, СтрДлина( ГдеИННвр) - ( ГдеИНН+ 3 ) ) ;
текИНН = СокрЛП( СтрЗаменить( текИНН, "." , "" ) ) ; текИНН = СокрЛП( СтрЗаменить( текИНН, "," , "" ) ) ;
ТекПлательщик = Справочники. Контрагенты. НайтиПоРеквизиту( "ИНН" , текИНН) ;
КонецЕсли ;
КонецЕсли ;
Если текстр= "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15" Тогда
ЗагрузкаТЧ= Истина ;
КонецЕсли ;
КонецЦикла ;
КонецЦикла ;
КонецПроцедуры
Процедура ПутьКPDF2TXTОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь ;
Режим = РежимДиалогаВыбораФайла. ВыборКаталога;
ДиалогОткрытия = Новый ДиалогВыбораФайла( Режим) ;
ДиалогОткрытия. Каталог = "" ;
ДиалогОткрытия. МножественныйВыбор = Ложь ;
ДиалогОткрытия. Заголовок = "Выберите каталог с PDF2TXT" ;
Если ДиалогОткрытия. Выбрать( ) Тогда
ПутьКPDF2TXT = ДиалогОткрытия. Каталог;
ПутьКPDF = ДиалогОткрытия. Каталог;
КонецЕсли ;
КонецПроцедуры
Процедура ПутьКPDFОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь ;
Режим = РежимДиалогаВыбораФайла. ВыборКаталога;
ДиалогОткрытия = Новый ДиалогВыбораФайла( Режим) ;
ДиалогОткрытия. Каталог = "" ;
ДиалогОткрытия. МножественныйВыбор = Ложь ;
ДиалогОткрытия. Заголовок = "Выберите каталог с PDF2TXT" ;
Если ДиалогОткрытия. Выбрать( ) Тогда
ПутьКPDF = ДиалогОткрытия. Каталог;
КонецЕсли ;
КонецПроцедуры
Категория:
Загрузка данных в 1С COM-подключение к базе 7.7 из 8.2 1С Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине.
Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)):
Код 1C v 8.2 УП &НаКлиенте
Процедура Загрузки()
ПутьКБазе= "D:\ВашаБаза\1с77\" ;
Пользователь= "stvbliz" ;
Пароль= "вашпароль" ;
МонопольныйРежимOLE = "" ;
ЗапускБезЗаставки = 1 ;
База = Новый COMОбъект( "V1CEnterprise.Application" ) ;
СтрокаПодключения = "/D"" " + СокрЛП( ПутьКБазе) + """ /N"" " + СокрЛП( Пользователь) + """ /P"" " + СокрЛП( Пароль) + """ " ;
РезультатПодключения= База. Initialize( База. RMTrade, СтрокаПодключения, ? ( ЗапускБезЗаставки = 1 , "NO_SPLASH_SHOW" , "" ) ) ;
Если НЕ РезультатПодключения Тогда
Сообщить( "Не удалось произвести подключение к информационной базе" ) ;
КонецЕсли ;
Таблица. Очистить( ) ;
Док = База. CreateObject( "Документ.ЗаявкаПокупателя" ) ;
Док. ВыбратьДокументы( НачалоНедели( Дата) , КонецНедели( Дата) ) ;
Пока Док. ПолучитьДокумент( ) = 1 Цикл
ОбработкаПрерыванияПользователя( ) ;
Если Док. НомерДок = НомерЗаявки Тогда
Док. ВыбратьСтроки( ) ;
Пока Док. ПолучитьСтроку( ) = 1 Цикл
нов= Таблица. Добавить( ) ;
нов. Номенклатура = Док. Номенклатура. Наименование;
нов. Количество = Док. Количество;
нов. Единица = Док. Единица. Наименование;
нов. Цена = Док. Цена;
Нов. Сумма = Док. Сумма;
нов. Коэффициент = Док. Коэффициент;
нов. Производитель = Док. производитель;
Нов. Валюта = Док. Валюта. Наименование;
КонецЦикла ;
КонецЕсли ;
КонецЦикла ;
Док= NULL ;
КонецПроцедуры
Код 1C v 8.2 УП
ДатаОст= ТекущаяДата( ) ;
Спр77 Оле. ВидГрейда. Получить( ДатаОст) . код;
Если База77 ОЛЕ. ВидКонтрагента. Идентификатор( ) = "ЧастноеЛицо"
Если Сотрудник. ХарактерРаботы. Получить( Необходимая_Дата) . Идентификатор( ) = БазаОЛЕ. EvalExpr( "Перечисление.ХарактерРаботы.ТрудовыеОтношения.Идентификатор()" ) Тогда
КонецЕсли ;
Запрос = v7. CreateObject( "Запрос" ) ;
ТипТовара = v7. evalexpr( "Перечисление.ТипыТоваров.Собственный.ПорядковыйНомер()" ) ;
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;
|Наименование = Справочник.Номенклатура.Наименование;
|ТипТовара = Справочник.Номенклатура.ТипТовара;
|ЕдиницаИзмерения = Справочник.Номенклатура.ЕдиницаИзмерения;
|Функция Счётчик = Счётчик();
|Группировка ТекущийЭлемент;
|Условие(ТипТовара.ПорядковыйНомер() = " + ТипТовара+ ");
|"
;
Категория:
COM-объекты, WMI, WSH Срез последних (остатки) на каждую дату Бывают ситуации, когда в запросе требуется получить остатки не на фиксированную дату (параметр - один на весь отчет), а на произвольную, (когда дата остатков в каждой строке своя).
Существует несколько способов получить нужные данные.
1.Непосредственно в запросе (через реальную таблицу регистра)
Способ подходит практически для любой ситуации, и поэтому наиболее универсален. Единственный, пожалуй, минус этого способа - если в отчете пользователю не требуется курс, то запрос быдет выбирать избыточные данные.
Вызов СрезПоследних() можно использовать только с передачей в него заранее готового значения даты, на которую требуется получить значения. Поэтому сабж делается через стыковку нескольких запросов - основной, к нему стыкуется запрос по регистру сведений с условием по дате и поиском записи с максимальной датой (периодом).
Код 1C v 8.х ВЫБРАТЬ
Таб1 . СсылкаДок,
Таб1 . ДатаДок,
Таб1 . ВалютаДок,
Таб2 . Курс
ИЗ
( ВЫБРАТЬ
ЗаказПокупателя. Ссылка КАК СсылкаДок,
ЗаказПокупателя. Дата КАК ДатаДок,
ЗаказПокупателя. ВалютаДокумента КАК ВалютаДок,
МАКСИМУМ( Валюты. Период) КАК ПериодДок
ИЗ
Документ. ЗаказПокупателя КАК ЗаказПокупателя
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений. КурсыВалют КАК Валюты
ПО Валюты. Период < = ЗаказПокупателя. Дата И
Валюты. Валюта = ЗаказПокупателя. ВалютаДокумента
СГРУППИРОВАТЬ ПО
ЗаказПокупателя. Ссылка) КАК Таб1
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений. КурсыВалют КАК Таб2
ПО Таб1 . ПериодДок = Таб2 . Период И Таб1 . ВалютаДок = Таб2 . Валюта
Для общего развития:
Что есть срез последних в платформе?
Код 1C v 8.х ВЫБРАТЬ
Рег. Период,
Рег. Измерение,
Рег. Ресурс
ИЗ
РегситрСведений. ПериодическийРегистр. СрезПоследних( &Дата) КАК Рег
В зависимости от периодичности регистра (по времени, по позизии регистратора) ВТ разворачивается в следующий запрос:
1. По времени (год, месяц, ... секунда)
Код 1C v 8.х ВЫБРАТЬ
Таблица3 . Ресурс,
Таблица3 . Измерение,
Таблица3 . Период
ИЗ
( ВЫБРАТЬ
Таблица1 . Измерение КАК Измерение,
МАКСИМУМ( Таблица1 . Период) КАК Период
ИЗ
РегистрСведений. ПериодическийРегистр КАК Таблица1
ГДЕ
Таблица1 . Период < = &Дата
СГРУППИРОВАТЬ ПО
Таблица1 . Измерение) КАК Таблица2
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений. ПериодическийРегистр КАК Таблица3
ПО Таблица2 . Измерение= Таблица3 . Измерение
И Таблица2 . Период = Таблица3 . Период
2. По позиции регистратора
В данном случае нужно еще раз обернуть выборку
Код 1C v 8.х ВЫБРАТЬ
Таблица5 . Ресурс,
Таблица5 . Измерение,
Таблица5 . Период,
Таблица5 . Регистратор
ИЗ
( ВЫБРАТЬ
МАКСИМУМ( Таблица3 . Регистратор) КАК Регистратор,
Таблица3 . Измерение
ИЗ
( ВЫБРАТЬ
Таблица1 . Измерение КАК Измерение,
МАКСИМУМ( Таблица1 . Период) КАК Период
ИЗ
РегистрСведений. ПериодическийРегистр КАК Таблица1
ГДЕ
Таблица1 . Период < = &Дата
СГРУППИРОВАТЬ ПО
Таблица1 . Измерение) КАК Таблица2
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений. ПериодическийРегистр КАК Таблица3
ПО Таблица2 . Измерение= Таблица3 . Измерение
И Таблица2 . Период = Таблица3 . Период
СГРУППИРОВАТЬ ПО
Таблица3 . Измерение) КАК Таблица4
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений. ПериодическийРегистр КАК Таблица5
ПО Таблица4 . Измерение = Таблица5 . Измерение
И Таблица4 . Регистратор = Таблица5 . Регистратор
Все это можно увидеть посмотрев технологический журнал с включенным режимом протоколирования запросов
2.Система компоновки данных (передача набора значений одной таблицы в параметр виртуальной таблицы)
Данный способ подходит для отчетов. Из очевидных плюсов - если курс (или другие данные) не нужны для построения отчета, то СКД не будет их получать. Однако быстродействие такого отчета может оказаться и несколько ниже, чем в первом способе.
Для примера сделаем отчет - список заказов покупателей.
Для этого создадим набор данных "Документы" - запрос:
Код 1C v 8.х ВЫБРАТЬ
ЗаказПокупателя. Ссылка КАК ЗаказПокупателя,
ЗаказПокупателя. Дата КАК Дата,
ЗаказПокупателя. ВалютаДокумента КАК ВалютаДокумента,
ЗаказПокупателя. СуммаДокумента КАК СуммаДокумента
{ВЫБРАТЬ
ЗаказПокупателя. * ,
Дата,
ВалютаДокумента. * ,
СуммаДокумента}
ИЗ
Документ. ЗаказПокупателя КАК ЗаказПокупателя
{ГДЕ
ЗаказПокупателя. Ссылка. * КАК ЗаказПокупателя,
ЗаказПокупателя. СуммаДокумента}
Для того, чтобы потом успешно свзать наборы данных, в запрос необходимо включить поля "Дата" и "ВалютаДокумента". Чтобы они не появлялись в списке доступных полей, если это необходимо, их можно убрать, установив флажки ограничений в таблице "Поля" схемы компоновки. В остальном запрос вряд ли требует комментариев.
Для того, чтобы получить информацию о курсах
валют , добавим второй набор данных-запрос, "Курсы
валют ":
Код 1C v 8.х ВЫБРАТЬ
&Дата КАК Дата,
КурсыВалютСрезПоследних. Валюта КАК Валюта,
КурсыВалютСрезПоследних. Курс КАК Курс,
КурсыВалютСрезПоследних. Кратность КАК Кратность
{ВЫБРАТЬ
Дата,
Валюта. * ,
Курс,
Кратность}
ИЗ
РегистрСведений. КурсыВалют. СрезПоследних( &Дата, Валюта = &Валюта) КАК КурсыВалютСрезПоследних
{ГДЕ
КурсыВалютСрезПоследних. Курс,
КурсыВалютСрезПоследних. Кратность}
В этом запросе имеются 2 параметра: "Дата" и "Валюта". Эти параметры будут установлены СКД при соединении наборов. Кроме того, параметр "Дата" указан в выбранных полях - это нужно для соединения таблиц.
Для ненужный полей "Дата" и "Валюта" также устанавливаем флажки ограничений, чтобы они не появлялись в доступных полях.
Перейдем к соединению наборов. На странице "Связи наборов данных" добавим 2 связи:
1. Источник связи - набор "Документы", приемник - набор "Курсы
валют ". Выражение источник - "Дата", выражение приемник - "Дата", Параметр - "Дата"
2. Источник связи - набор "Документы", приемник - набор "Курсы
валют ". Выражение источник - "ВалютаДокумента", выражение приемник - "Валюта", Параметр - "Валюта"
Главное здесь - параметры связи. При соединении наборов данных, если указан параметр, СКД передает в подчиненный набор (в нашем случае - запрос "Курсы
валют ") параметры, указанные в соединении. Значениями параметров будут значения соответствующих полей набора-источника.
Перейдем к вычисляемым полям. Добавим вычисляемое поле "СуммаВВалютеУпрУчета". Выражение поля - "СуммаДокумента * Курс / Кратность".
Также укажем поля "СуммаДокумента" и "СуммаВВалютеУпрУчета" как ресурсы
Настроим отчет.
Добавим одну группировку "Детальные записи", в выбранных полях укажем "ЗаказПолкупателя", "Курс" и "Кратность". Добавим ресурсы "СуммаДокумента" и "СуммаВВалютеУпрУчета"
Можно формировать отчет
Категория:
Регистры накопления Excel файл как Внешний источник данных Подключимся и загрузим из файла Excel данные в таблицу значений 1С. Сделать теперь это очень просто.
1. В конфигурации добавляет новый объект метаданных типа "Внешние источники данных" и назовем его просто "Excel".
2. На закладке "Данные" созданного объекта "Excel" добавляем новую таблицу. При этом появится окно мастера добавления таблицы внешнего источника.
Выбираем первый пункт "Вручную", т.к. лично у меня второй пункт "Выбрать из списка таблиц внешнего источника данных" работает нестабильно.
Если Вы все же хотите попробовать добавить таблицу через второй пункт, то в качестве строки соединения в появившемся окне указываем:
Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\Documents and Settings\Admin\Мои документы\finance3.xls; DriverID=790
В этой строке укажите путь к своему файлу. Имя пользователя и пароль я не указывал.
Отмечу, что путь к файлу и строка соединения в дальнейшем не запоминается и нужны эти параметры единожды, чтобы создать автоматически описание полей таблицы источника.
Если соединение прошло нормально, то должен отобразиться список таблиц источника. Флажком можно выбрать нужную таблицу и ее поля.
3. Даем имя новой таблице "Данные". Переходим на вкладку таблицы "Данные". В поле "Имя в источнике данных" указываем имя листа в файле Excel и добавляем в конце знак "$". В моем случае это "Данные$". В табличной части "Поля" добавляем поля и редактируем их тип.
У каждого поля в свойствах должно быть задано как минимум "Имя" и "Имя в источнике данных".
4. Создаем процедуру в которой пишем подключение к источнику и запрос:
Код 1C v 8.х ПараметрыСоединения = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
ПараметрыСоединения. СтрокаСоединения=
"Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\Documents and Settings\Admin\Мои документы\finance2.xls; DriverID=790" ;
ВнешниеИсточникиДанных. Excel. УстановитьОбщиеПараметрыСоединения( ПараметрыСоединения) ;
ВнешниеИсточникиДанных. Excel. УстановитьСоединение( ) ;
Запрос = Новый Запрос( ) ;
Запрос. Текст = "ВЫБРАТЬ
| Данные.date КАК Дата,
| Данные.time КАК Время,
| Данные.account КАК Счет,
| Данные.amount КАК Сумма,
| Данные.currency КАК Валюта,
| Данные.category КАК Категория,
| Данные.parent КАК КатегорияРодитель
|ИЗ
| ВнешнийИсточникДанных.Excel.Таблица.Данные КАК Данные" ;
ТЗ = Запрос. Выполнить( ) . Выгрузить( ) ;
Вот и все!
Источник:
passion-programmer
Параметры соединения для файла Excel выглядят вот так:
Файлы XLSX (версия Office 2007 и выше)
Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=D:\ФайлExcel.xlsx;
Файлы XLS (ранее)
Driver={Microsoft Excel Driver (*.xls)}; DriverID=790; DBQ=D:\ФайлExcel.xls; Категория:
Внешние источники данных Как изменить запись регистра сведений? Код 1C v 8.х НаборЗаписей = РегистрыСведений. НумерацияДоговоров. СоздатьНаборЗаписей( ) ;
НаборЗаписей. Отбор. Период. Установить( НачалоГода( Дата) ) ;
НаборЗаписей. Отбор. Организация. Установить( Организация) ;
НаборЗаписей. Прочитать( ) ;
Если НаборЗаписей. Количество( ) = 0 Тогда
НовыйНомер = НаборЗаписей. Добавить( ) ;
НовыйНомер. Организация = Организация;
НовыйНомер. Период = НачалоГода( Дата) ;
НовыйНомер. Номер = 2 ; ном= 1 ;
ИначеЕсли НаборЗаписей. Количество( ) = 1 Тогда
НовыйНомер = НаборЗаписей[0 ];
ном = НовыйНомер. Номер;
НовыйНомер. Номер = ном+ 1 ;
КонецЕсли ;
НаборЗаписей. Записать( ) ;
Номер = Организация. Префикс + "-" + Ном + "/" + Строка( Прав( Год( ТекущаяДата( ) ) , 2 ) ) ;
Код 1C v 8.х //Установить курс Валюты USD
КурсыВалют = РегистрыСведений.КурсыВалют;
НаборКурсов = КурсыВалют.СоздатьНаборЗаписей();
Доллар = Справочники.Валюты.НайтиПоНаименованию("USD");
НаборКурсов.Отбор.Валюта.Установить(Доллар);
НаборКурсов.Отбор.Период.Установить(НачалоДня(ТекущаяДата()));
НаборКурсов.Прочитать();
Если НаборКурсов.Количество() = 0 Тогда
НовыйКурс = НаборКурсов.Добавить();
НовыйКурс.Валюта = Доллар;
НовыйКурс.Период = ТекущаяДата();
ИначеЕсли НаборКурсов.Количество() = 1 Тогда
НовыйКурс = НаборКурсов[0];
Иначе
Предупреждение("Курс валют ы задается один раз в день.", 60);
Возврат;
КонецЕсли;
НовыйКурс.Курс = 31.44;
НовыйКурс.Кратность = 1;
НаборКурсов.Записать();
Код 1C v 8.х
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ
| ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод
|ИЗ
| РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
|ГДЕ
| ШтрихкодыНоменклатуры.Номенклатура = &Номенклатура И
| ШтрихкодыНоменклатуры.Характеристика = &Характеристика" ;
Запрос. УстановитьПараметр( "Номенклатура" , Товар) ;
Запрос. УстановитьПараметр( "Характеристика" , ХарактеристикаТовара) ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Если НЕ Выборка. Следующий( ) Тогда
ТекЗапись = РегистрыСведений. ШтрихкодыНоменклатуры. СоздатьМенеджерЗаписи( ) ;
ТекЗапись. Номенклатура = Товар;
Если ЗначениеЗаполнено( ХарактеристикаТовара) Тогда
ТекЗапись. Характеристика = ХарактеристикаТовара;
Иначе
ТекЗапись. Характеристика = Справочники. ХарактеристикиНоменклатуры. ПустаяСсылка( ) ;
КонецЕсли ;
ТекЗапись. Штрихкод = ? ( ПустаяСтрока( ШтрихКод) , РегистрыСведений. ШтрихкодыНоменклатуры. СформироватьШтрихкодEAN13( ) , Штрихкод) ;
Попытка
ТекЗапись. Записать( ) ;
Исключение
КонецПопытки ;
Иначе
НайденныйШтрихкод = Выборка. Штрихкод;
ТекЗапись = РегистрыСведений. ШтрихкодыНоменклатуры. СоздатьМенеджерЗаписи( ) ;
ТекЗапись. Штрихкод = НайденныйШтрихкод;
ТекЗапись. Прочитать( ) ;
ТекЗапись. Штрихкод = Штрихкод;
Попытка
ТекЗапись. Записать( ) ;
Исключение
КонецПопытки ;
КонецЕсли ;
Категория:
Регистры сведений Подключение к ИБ через Com, Получение списка документов и их Загрузка Код 1C v 8.х
Перем Подключились;
Перем COMОбъект;
Функция ПолучитьНом(Выборка)
Ном = Справочники. Номенклатура. НайтиПоНаименованию( СокрЛП( Выборка. Номенклатура) ) ;
Если Ном. Пустая( ) Тогда
ВвестиЗначение( Ном, "Выберите номенклатуру " + СокрЛП( Выборка. Номенклатура) , Тип( "СправочникСсылка.Номенклатура" ) ) ;
КонецЕсли ;
Возврат Ном;
КонецФункции
Функция ПодключитьсяКCRM()
Подключились = Истина ;
Попытка
Подкл = Новый COMОбъект( "V82.COMConnector" ) ;
COMОбъект = Подкл. Connect( "Srvr="" Server1"" ;Ref="" TradeUT"" ;Usr="" ObmenBot"" ;Pwd="" 12345"" " ) ;
Исключение
Сообщить( ОписаниеОшибки( ) ) ;
Подключились = Ложь ;
КонецПопытки ;
Возврат Подключились;
КонецФункции
Процедура Реализации_Анализ(Элемент)
Если не Подключились Тогда
Если не ПодключитьсяКCRM( ) Тогда
Возврат ;
КонецЕсли ;
КонецЕсли ;
Запрос = COMОбъект. NewObject( "Запрос" ) ;
Запрос. Текст = ПолучитьМакет( "ЗапросПродажи" ) . ПолучитьТекст( ) ;
Запрос. УстановитьПараметр( "Дата1" , НачалоДня( ДатаНач) ) ;
Запрос. УстановитьПараметр( "Дата2" , КонецДня( ДатаКон) ) ;
глРезультатЗапросаПродажи = Запрос. Выполнить( ) ;
Выборка = глРезультатЗапросаПродажи. Выбрать( COMОбъект. ОбходРезультатаЗапроса. ПоГруппировкам) ;
ДокРеал = Документы. РеализацияТоваровУслуг;
СпрКонтр = Справочники. Контрагенты;
ТаблицаДокументов. Очистить( ) ;
Пока Выборка. Следующий( ) Цикл
ОбработкаПрерыванияПользователя( ) ;
Стр = ТаблицаДокументов. Добавить( ) ;
ЗаполнитьЗначенияСвойств( Стр, Выборка) ;
Стр. Документ = ДокРеал. НайтиПоНомеру( Стр. Номер, Стр. Дата) ;
Стр. ТекстКонтрагент = Выборка. КонтрагентНаименование + ", ИНН " + Выборка. ИННКонтрагента;
Если не ПустаяСтрока( Выборка. ИННКонтрагента) Тогда
ВыборкаКонтр = СпрКонтр. Выбрать( , , Новый Структура( "ИНН" , Выборка. ИННКонтрагента) ) ;
Пока ВыборкаКонтр. Следующий( ) Цикл
Если не ЗначениеЗаполнено( Стр. Контрагент) или ВыборкаКонтр. КПП = Выборка. КППКонтрагента Тогда
Стр. Контрагент = ВыборкаКонтр. Ссылка;
КонецЕсли ;
КонецЦикла ;
КонецЕсли ;
КонецЦикла ;
ЭлементыФормы. кнЗагрузитьШаг1 . Доступность = Истина ;
ЭлементыФормы. ИндикаторРеал. МаксимальноеЗначение = ТаблицаДокументов. Количество( ) ;
КонецПроцедуры
Процедура Реализации_Загрузить(Элемент)
ЭлементыФормы. ИндикаторРеал. МаксимальноеЗначение = ТаблицаДокументов. Количество( ) ;
ЗначениеИндикатораРеал = 0 ;
ДокРеал = Документы. РеализацияТоваровУслуг;
ВыборкаДок = глРезультатЗапросаПродажи. Выбрать( COMОбъект. ОбходРезультатаЗапроса. ПоГруппировкам) ;
мСписокВидовДоговоров = Новый СписокЗначений;
мСписокВидовДоговоров. Добавить( Перечисления. ВидыДоговоровКонтрагентов. СПокупателем) ;
СпособЗаполненияЦен = Перечисления. СпособыЗаполненияЦен. ПоЦенамНоменклатуры;
Пока ВыборкаДок. Следующий( ) Цикл
ЗначениеИндикатораРеал = ЗначениеИндикатораРеал + 1 ;
СтрокаТаб = ТаблицаДокументов. Найти( ВыборкаДок. Номер, "Номер" ) ;
Если СтрокаТаб < > Неопределено Тогда
Если ЗначениеЗаполнено( СтрокаТаб. Документ) Тогда
Док = СтрокаТаб. Документ. ПолучитьОбъект( ) ;
Док. Товары. Очистить( ) ;
Док. Услуги. Очистить( ) ;
Иначе
Док = ДокРеал. СоздатьДокумент( ) ;
КонецЕсли ;
Док. Дата = ВыборкаДок. Дата;
Док. Номер = ВыборкаДок. Номер;
Док. Контрагент = СтрокаТаб. Контрагент;
ЗаполнениеДокументов. ЗаполнитьШапкуДокумента( Док, глЗначениеПеременной( "глТекущийПользователь" ) , Док. мВалютаРегламентированногоУчета, "Продажа" ) ;
ЗаполнениеДокументов. ПриИзмененииЗначенияКонтрагента( Док, мСписокВидовДоговоров) ;
ЗаполнениеДокументов. ПриИзмененииЗначенияДоговора( Док, Док. ВалютаДокумента, Док. мВалютаРегламентированногоУчета, СпособЗаполненияЦен, Ценообразование. ПолучитьСтруктуруРеквизитовДокументаДляЦенообразования( Док) , "Продажа" , "Товары" , Неопределено ) ;
Док. ЗаполнитьСчетаУчетаРасчетов( ) ;
Док. УчитыватьНДС = Ложь ;
ВыборкаНом = ВыборкаДок. Выбрать( COMОбъект. ОбходРезультатаЗапроса. ПоГруппировкам) ;
Пока ВыборкаНом. Следующий( ) Цикл
ОбработкаПрерыванияПользователя( ) ;
Ном = ПолучитьНом( ВыборкаНом) ;
Если ВыборкаНом. Идентификатор = 1 Тогда
СтрокаТЧ = Док. Товары. Добавить( ) ;
СтрокаТЧ. Номенклатура = Ном;
Док. ЗаполнитьСчетаУчетаВСтрокеТабЧасти( СтрокаТЧ, "Товары" , Истина ) ;
Иначе
СтрокаТЧ = Док. Услуги. Добавить( ) ;
СтрокаТЧ. Номенклатура = Ном;
Док. ЗаполнитьСчетаУчетаВСтрокеТабЧастиУслуги( СтрокаТЧ, ИСТИНА ) ;
ОбработкаТабличныхЧастей. ЗаполнитьСодержаниеТабЧасти( СтрокаТЧ, Док) ;
КонецЕсли ;
ОбработкаТабличныхЧастей. ЗаполнитьСтавкуНДСТабЧасти( СтрокаТЧ, Док) ;
ОбработкаТабличныхЧастей. ЗаполнитьЕдиницуЦенуПродажиТабЧасти( СтрокаТЧ, Док, Док. мВалютаРегламентированногоУчета) ;
СтрокаТЧ. Количество = ВыборкаНом. Количество;
СтрокаТЧ. Сумма = ВыборкаНом. Сумма;
СтрокаТЧ. Цена = СтрокаТЧ. Сумма / ? ( ВыборкаНом. Количество = 0 , 1 , ВыборкаНом. Количество) ;
КонецЦикла ;
Если не ВыборкаДок. ДоставкаОтдельно и ВыборкаДок. СтоимостьДоставкиПлан < > 0 Тогда
СтрокаТЧ = Док. Товары. Добавить( ) ;
СтрокаТЧ. Номенклатура = Док. Товары[0 ]. Номенклатура;
Док. ЗаполнитьСчетаУчетаВСтрокеТабЧасти( СтрокаТЧ, "Товары" , Истина ) ;
ОбработкаТабличныхЧастей. ЗаполнитьСтавкуНДСТабЧасти( СтрокаТЧ, Док) ;
ОбработкаТабличныхЧастей. ЗаполнитьЕдиницуЦенуПродажиТабЧасти( СтрокаТЧ, Док, Док. мВалютаРегламентированногоУчета) ;
СтрокаТЧ. Сумма = - ВыборкаДок. СтоимостьДоставкиПлан;
СтрокаТЧ = Док. Услуги. Добавить( ) ;
СтрокаТЧ. Номенклатура = Справочники. Номенклатура. ТранспортныеУслуги;
Док. ЗаполнитьСчетаУчетаВСтрокеТабЧастиУслуги( СтрокаТЧ, ИСТИНА ) ;
ОбработкаТабличныхЧастей. ЗаполнитьСодержаниеТабЧасти( СтрокаТЧ, Док) ;
ОбработкаТабличныхЧастей. ЗаполнитьСтавкуНДСТабЧасти( СтрокаТЧ, Док) ;
ОбработкаТабличныхЧастей. ЗаполнитьЕдиницуЦенуПродажиТабЧасти( СтрокаТЧ, Док, Док. мВалютаРегламентированногоУчета) ;
СтрокаТЧ. Количество = 1 ;
СтрокаТЧ. Цена = ВыборкаДок. СтоимостьДоставкиПлан;
СтрокаТЧ. Сумма = ВыборкаДок. СтоимостьДоставкиПлан;
КонецЕсли ;
Ош = Ложь ;
Попытка
Док. Записать( ? ( Проводить, РежимЗаписиДокумента. Проведение, РежимЗаписиДокумента. Запись) ) ;
Ош = Истина ;
Исключение
КонецПопытки ;
Если Ош и Проводить Тогда
Док. Записать( РежимЗаписиДокумента. Запись) ;
КонецЕсли ;
СтрокаТаб. Документ = Док. Ссылка;
КонецЕсли ;
КонецЦикла ;
КонецПроцедуры
Подключились = Ложь ;
Категория:
COM-объекты, WMI, WSH Как загрузить данные из Access в 1С ? Загружаем данные из Access в 1С
Код 1C v 8.х Файл = "C:\files\demo.mdb" ;
СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Файл + ";"" " ;
Connection = Новый COMОбъект( "ADODB.Connection" ) ;
Попытка
Connection. Open( СтрокаПодключения) ;
Исключение
Сообщить( ОписаниеОшибки( ) ) ;
Возврат ;
КонецПопытки ;
Command = Новый COMОбъект( "ADODB.Command" ) ;
Command. ActiveConnection = Connection;
Command. CommandText = "S_elect * FROM Table1" ;
Command. CommandType = 1 ;
RecordSet = Новый COMОбъект( "ADODB.RecordSet" ) ;
RecordSet = Command. Execute( ) ;
стр = "" ;
Пока RecordSet. EOF( ) = 0 Цикл
для н= 0 по Recordset. Fields. Count - 1 цикл
стр = стр + " " + Recordset. Fields( н) . Value;
КонецЦикла ;
Сообщить( стр) ;
стр = "" ;
RecordSet. MoveNext( ) ;
КонецЦикла ;
RecordSet. Close( ) ;
Connection. Close( ) ;
Код 1C v 7.x Акцесс = СоздатьОбъект( "ADODB.CONNECTION" ) ;
Попытка
СтрокаПодключения= "Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mybase.mdb;Uid=Admin;Pwd=" ;
Акцесс. Open( СтрокаПодключения) ;
Исключение
Сообщить( "Все плохо:" + ОписаниеОшибки( ) ) ;
Возврат ;
КонецПопытки ;
Команда = СоздатьОбъект( "ADODB.Command" ) ;
Команда. ActiveConnection= Акцесс;
ТекстСелект = "S_elect * FROM tblCustoms" ;
НаборЗаписей = СоздатьОбъект( "ADODB.RecordSet" ) ;
Команда. CommandText= ТекстСелект;
Попытка
НаборЗаписей= Команда. Execute;
Исключение
Сообщить( "Обломись:" + ОписаниеОшибки( ) ) ;
КонецПопытки ;
Попытка
НаборЗаписей. MoveFirst( ) ;
Исключение
НаборЗаписей. Close( ) ;
Возврат ;
КонецПопытки ;
Пока НаборЗаписей. EOF( ) = 0 Цикл
ИНН = НаборЗаписей. Fields( "INN" ) . Value;
НаборЗаписей. MoveNext( ) ;
КонецЦикла ;
НаборЗаписей. Close( ) ;
СтрокаПодключения= "Driver= Microsoft Access Driver (*.mdb)};systemDB=C:\wg.mdw;Dbq=C:\mybase.mdb;Uid=Admin;Pwd=" ;
Работа с ACCESS из 1С через DAO
Код 1C v 7.x Процедура Выполнить()
Спр = СоздатьОбъект( "Справочник.ТоварыВПрайсе" ) ;
Спр. ИспользоватьВладельца( ФасВладелец) ;
dbe = СоздатьОбъект( "dao.DBEngine.36" ) ;
wksp = dbe. Workspaces( 0 ) ;
db = 0 ;
Если ФС. СуществуетФайл( КаталогИБ( ) + "Pric_list.mdb" ) = 0 Тогда
db = wksp. CreateDataBase( КаталогИБ( ) + "Pric_list.mdb" , ";LANGID=0x0419;Cp=1251;Country=0" ) ;
db. Execute( "Create table [" + Строка( фасВладелец) + "]
|(Rec_ind integer,
|Код text,
|Артикул text,
|Цена integer,
|Товар text,
|Единица text,
|Val text);"
) ;
db. Execute( "Create index Rec_ind on [" + Строка( фасВладелец) + "] (Rec_ind);" ) ;
Иначе
db= wksp. OpenDataBase( КаталогИБ( ) + "Pric_list.mdb" ) ;
Попытка
rs = db. OpenRecordset( Строка( фасВладелец) ) ;
Исключение
Сообщить( "Создается новая таблица" ) ;
КонецПопытки ;
Если ПустоеЗначение( rs) = 1 Тогда
db. Execute( "Create table [" + Строка( фасВладелец) + "]
|(Rec_ind integer,
|Код text,
|Артикул text,
|Цена integer,
|Товар text,
|Единица text,
|Val text);"
) ;
db. Execute( "Create index Rec_ind on [" + Строка( фасВладелец) + "] (Rec_ind);" ) ;
КонецЕсли ;
db. Execute( "Delete * From [" + Строка( фасВладелец) + "];" ) ;
КонецЕсли ;
rs = db. OpenRecordset( Строка( фасВладелец) ) ;
Y = 1 ;
Спр. ВыбратьЭлементы( ) ;
Пока Спр. ПолучитьЭлемент( ) = 1 Цикл
лсЕдиницы = "" ;
Если Спр. асТовар. апТип= Перечисление. ТипТовара. Услуга Тогда
лсЕдиницы = "" ;
ИначеЕсли Спр. асТовар. апТип= Перечисление. ТипТовара. Весовой Тогда
лсЕдиницы = "г" ;
ИначеЕсли Спр. асТовар. апТип= Перечисление. ТипТовара. Штучный Тогда
лсЕдиницы = "шт." ;
КонецЕсли ;
Если Спр. ЭтоГруппа( ) = 0 Тогда
rs. AddNew( ) ;
rs. Rec_ind = Y;
rs. Код= Спр. асТовар. ПолныйКод( ) ;
rs. Артикул = Спр. асТовар. сАртикул;
rs. Цена = Спр. чЦена;
rs. Товар= Спр. асТовар. сПолнНаименование;
rs. Единица = лсЕдиницы;
rs. Val = Спр. асВалюта. Код;
rs. Update( ) ;
Y= Y+ 1 ;
КонецЕсли ;
КонецЦикла ;
db. Close( ) ;
Сообщить( "Выгрузка завершена" ) ;
КонецПроцедуры
Код 1C v 7.x
Процедура ACCESS()
dbe= CreateObject( "DAO.DBEngine.36" ) ;
wksp= dbe. Workspaces( 0 ) ;
db= 0 ;
Если ФС. СуществуетФайл( КаталогПользователя( ) + "sr.mdb" ) = 0 Тогда
db= wksp. CreateDataBase( КаталогПользователя( ) + "mars_sr.mdb" , ";LANGID=0x0419;CP=1251;COUNTRY=0" ) ;
db. Execute( "CREATE TABLE BANKS
|(REC_IND INTEGER,
|BANKCODE INTEGER,
|BANKNAME TEXT ,
|ModifiedFlg BIT,
|ChangeSeqFlg BIT);"
) ;
db. Execute( "CREATE INDEX REC_IND ON BANKS (REC_IND);" ) ;
Иначе
db= wksp. OpenDataBase( КаталогПользователя( ) + "sr.mdb" ) ;
db. Execute( "DELETE * FROM BANKS;" ) ;
КонецЕсли ;
rs= db. OpenRecordset( "BANKS" ) ;
rs. AddNew( ) ;
rs. REC_IND = "1" ;
rs. BANKCODE = "34" ;
rs. BANKNAME = "Инвест" ;
rs. ModifiedFlg = "1" ;
rs. Update( ) ;
db. Close( ) ;
КонецПроцедуры
Категория:
Работа с Microsoft Office и OpenOffice Загрузка данных из таблицы OpenOffice Calc v.3 Код 1C v 8.х Процедура ЗагрузитьПрайс(Кнопка)
Попытка
ServiceManager = Новый ComОбъект( "com.sun.star.ServiceManager" ) ;
МетодЗагрузки = "ОО" ;
Исключение
Сообщить( "Отсутствует приложение для загрузки файла" ) ;
КонецПопытки ;
Если МетодЗагрузки = "ОО" Тогда
scr = Новый ComОбъект( "MSScriptControl.ScriptControl" ) ;
scr. language = "javascript" ;
scr. eval( "MassivParametrov = new Array()" ) ;
MassivParametrov = scr. eval( "MassivParametrov" ) ;
scr. AddObject( "OpenOffice" , ServiceManager) ;
scr. eval( "MassivParametrov[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')" ) ;
scr. eval( "MassivParametrov[0].Name='Hidden'" ) ;
scr. eval( "MassivParametrov[0].Value=true" ) ;
Desktop = ServiceManager. CreateInstance( "com.sun.star.frame.Desktop" ) ;
URL = ConvertToURL( ПутьКПрайсу) ;
Doc = Desktop. LoadComponentFromURL( URL, "_blank" , 0 , MassivParametrov) ;
Doc. lockControllers( ) ;
Doc. addActionLock( ) ;
Sheets = Doc. GetSheets( ) ; ;
Документ = Sheets. GetByIndex( 0 ) ;
ТЗ = Новый ТаблицаЗначений;
ТЗ. Колонки. Добавить( "Артикул" ) ;
ТЗ. Колонки. Добавить( "Цена" ) ;
Дальше = 1 ;
ТекСтрокаДок = НачальнаяСтрока;
Пока Дальше = 1 Цикл
Проверка = СокрЛП( "" + Документ. getCellByPosition( 0 , ТекСтрокаДок) . getString( ) ) ;
Если ПустаяСтрока( Проверка) Тогда
Прервать ;
КонецЕсли ;
Артикул = СокрЛП( "" + Документ. getCellByPosition( КолонкаАртикула- 1 , ТекСтрокаДок) . getString( ) ) ;
Попытка
Цена = Число( СокрЛП( "" + Документ. getCellByPosition( КолонкаЦены- 1 , ТекСтрокаДок) . getString( ) ) ) ;
Исключение
Цена = 0 ;
КонецПопытки ;
Если ( НЕ ПустаяСтрока( СокрЛП( Артикул) ) ) и ( НЕ Цена = 0 ) Тогда
НоваяСтрока = ТЗ. Добавить( ) ;
НоваяСтрока. Артикул = Артикул;
НоваяСтрока. Цена = Цена;
КонецЕсли ;
Состояние( "Обрабатываем - " + ТекСтрокаДок) ;
ТекСтрокаДок = ТекСтрокаДок+ 1 ;
КонецЦикла ;
Если ТЗ. Количество( ) > 0 Тогда
Док = Документы. УстановкаЦенНоменклатуры. СоздатьДокумент( ) ;
Док. Дата = ДатаУстановкиЦен;
ДобавитьТипЦен = Док. ТипыЦен. Добавить( ) ;
ДобавитьТипЦен. ТипЦен = ТипЦены;
Для Каждого ТекСтрока из ТЗ Цикл
Номенклатура = Справочники. Номенклатура. НайтиПоРеквизиту( "Артикул" , ТекСтрока. Артикул) ;
Если НЕ Номенклатура. Пустая( ) Тогда
НоваяСтрока = Док. Товары. Добавить( ) ;
НоваяСтрока. Номенклатура = Номенклатура;
НоваяСтрока. ТипЦен = ТипЦены;
НоваяСтрока. Цена = ТекСтрока. Цена;
НоваяСтрока. Валюта = Валюта;
НоваяСтрока. ЕдиницаИзмерения = Номенклатура. ЕдиницаХраненияОстатков;
КонецЕсли ;
КонецЦикла ;
Если Док. Товары. Количество( ) > 0 Тогда
Док. Записать( ) ;
КонецЕсли ;
КонецЕсли ;
КонецЕсли ;
КонецПроцедуры
функция ConvertToURL(FileName)
ИмяФайла = СтрЗаменить( FileName, " " , "%20" ) ;
ИмяФайла = СтрЗаменить( ИмяФайла, "\" , "/" ) ;
Возврат "file:/" + "/localhost/" + ИмяФайла;
Конецфункции
Категория:
Работа с Microsoft Office и OpenOffice