Перебор документов, обработка и запись В данном примере показано как в 7-ке выбрать документы поступления товаров за определенный период и обработать их, установив дату и номер счета-факту ры.
Код 1C v 7.x Процедура Сформировать()
ДокПрием = СоздатьОбъект("Документ.ПоступлениеТоваров");
ДокПрием.ВыбратьДокументы(НачДата, КонДата);
Пока ДокПрием.ПолучитьДокумент()=1 Цикл
текдлина = СтрДлина(СокрЛП(ДокПрием.НомерСчетаФактуры));
если текдлина>1 Тогда
Сообщить("Уже заполнено - "+строка(текдлина)+" * "+ДокПрием.НомерСчетаФактуры);
Иначе
ДатаСчФ = лев(ДокПрием.ДатаНомерСчетаФактуры,10);
ДатаСчетаФактуры = Дата(Сред(ДатаСчФ,7,4),Сред(ДатаСчФ,4,2),Лев(ДатаСчФ,2)); //31.03.2015
НомерСчетаФактуры = СокрЛП(Сред(ДокПрием.ДатаНомерСчетаФактуры, 11, 50));
ДокПрием.ДатаСчетаФактуры = ДатаСчетаФактуры;
ДокПрием.НомерСчетаФактуры = НомерСчетаФактуры;
ДокПрием.ДатаНомерСчетаФактуры = СокрЛП(НомерСчетаФактуры) + ";" + Формат(ДатаСчетаФактуры,"Д ДДММГГГГ");
Сообщить(" - " +НомерСчетаФактуры+" / "+строка(ДатаСчетаФактуры));
ДокПрием.Записать();
Конецесли;
КонецЦикла;
КонецПроцедуры
Категория:
Документы Подсчет реального количества месяцев между датами, включая начало и конец месяца В одном проекте понадобилось подсчитывать полное количество месяцев между датами,
Допустим надо получить кол-во месяцев между датами 25.10.14 и 21.11.14
Функция РазницаДатВМесяцах ( Как вычислить разницу между двумя датами в месяцах ) вернет 1 , по сути разница между датами = одному месяцу,
но по факту работы будут в 10 и 11 месяцах, т.е. всего 2, в итоге была написана простая функция, ее код ниже:
Код 1C v 8.2 УП тДат=ДатаНачала; КолМес = 0;
Пока Месяц(тДат)<> Месяц(ДатаОкончания) Цикл
КолМес = КолМес+1;
тДат = ДобавитьМесяц(тДат,1);
КонецЦикла;
Результат = КолМес+1; Категория:
Работа с Датами (Временем) Как в 1С проложить маршрут используя GoogleMaps API V3 Клиенты частенько просят настроить отображение маршрутов перемещения по разным адресам в 1С, например для курьеров и т.д.
В примере описан способ отражения карт GoogleMaps в 1С:
Код 1C v 8.2 УП Для Каждого Стр Из НаВходе Цикл
нСтр = ПроверкаСовпадений.Добавить();
нСтр.Адрес = Стр.Адрес;
нСтр.Контрагент = Стр.Контрагент;
//Если адрес начальный или конечный - пропускаем
Если Стр.НомерСтроки = 1 или Стр.НомерСтроки = НаВходе.Количество() Тогда
Продолжить;
КонецЕсли;
опАдреса = опАдреса + "
|waypts.push({location:'" + нСтр.Адрес + "',stopover:true});";
КонецЦикла;
//Подставляем параметры в макет "Карта"
опМаршрут = ПолучитьМакет("Карта").ПолучитьТекст();
опМаршрут = СтрЗаменить(опМаршрут,"[=-опАдреса-=]",опАдреса);
опМаршрут = СтрЗаменить(опМаршрут,"[=-опНач-=]",опНач);
опМаршрут = СтрЗаменить(опМаршрут,"[=-опКон-=]",опКон);
ЭлементыФормы.Карта.УстановитьТекст(опМаршрут); Скрипт отображения из макета Карта (выделила как VBS, но по факту это HTML ):
Код VBS <HTML><HEAD>
<META content="text/html; charset=utf-8" http-equiv=Content-Type></META>
<META name=viewport content="initial-scale=1.0, user-scalable=no"></META>
<STYLE type=text/css>HTML {
HEIGHT: 100%
}
BODY {
HEIGHT: 100%; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px
}
#map_canvas {
HEIGHT: 100%
}
</STYLE>
<SCRIPT type=text/javascript src="http://maps.google.com/maps/api/js?sensor=false">
</SCRIPT>
<SCRIPT type=text/javascript>
var directionDisplay;
var directionsService = new google.maps.DirectionsService();
var map;
function initialize() {
directionsDisplay = new google.maps.DirectionsRenderer();
var chicago = new google.maps.LatLng(55.81234, 37.664425);
var myOptions = {
zoom: 6,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: chicago
}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
directionsDisplay.setMap(map);
calcRoute();
var trafficLayer = new google.maps.TrafficLayer();
trafficLayer.setMap(map);
}
function calcRoute() {
var start = "[=-опНач-=]";
var end = "[=-опКон-=]";
var waypts = [];
var checkboxArray = document.getElementById("waypoints");
[=-опАдреса-=]
var request = {
origin: start,
destination: end,
waypoints: waypts,
optimizeWaypoints: true,
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
var route = response.routes[0];
var summaryPanel = document.getElementById("directions_panel");
summaryPanel.innerHTML = "";
// For each route, display summary information.
for (var i = 0; i < route.legs.length; i++) {
var routeSegment = i+1;
summaryPanel.innerHTML += 'опЗаполнитьМаршрут("' + String.fromCharCode(routeSegment+65) + '","' + String.fromCharCode(route.legs.length+65) + '","' + route.legs[i].start_address + '","' + route.legs[i].end_address + '","' + route.legs[i].distance.text + '");';
}
}
});
}
</SCRIPT>
<META name=GENERATOR content="MSHTML 11.00.9600.17239"></META><BASE href="v8config://c924c032-2565-45e2-b49f-9a30494bc69f/mdobject/ida329e781-b8d1-431e-9e2f-8321c1a691fc/8eb4fad1-1fa6-403e-970f-2c12dbb43e23"></BASE></HEAD>
<BODY onload=initialize()>
<DIV id=map_canvas style="HEIGHT: 100%; WIDTH: 100%"></DIV>
<DIV id=directions_panel style="MARGIN: 20px; DISPLAY: none; BACKGROUND-COLOR: #ffee77"></DIV></BODY></HTML>
Файл отображающий пример работы GoogleMaps API V3 - Прокладываем маршрут в 1С
Скрин это обработки
Категория:
HTML, JS, VML Как заполнить табличную часть на основании документа В форме документа счет-факту ра выданный аванс заполнить табличную часть Авансы на основании документа поступление безналичных денежных средств.
Условия:
1) Перед заполнением табличной части документа получить от пользователя подтверждение на это действие;
2) Обработку создания документа сделать внешней и подключаемой к форме документа счет-
факту ра на аванс выданный;
3) После заполнения табличной части не записывать документ, а разрешить пользователю продолжить редактирование изменной табличной части или самостоятельно записать документ.
Решение:
Пункты 1 и 2 не представляют особой сложности, но пункт 3 заставил меня задуматься и написать, по-моему мнению, топорный, но исправно действующий код.
Понятно, что от нас требуется создать внешнюю обработку вида "ЗаполнениеОбъекта" и подключить её в информационную базу.
Приведу код в модуле обработки:
Код 1C v 8.2 УП Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.СчетФактураВыданныйАванс");
ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Заполнить документ");
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
ПараметрыРегистрации.Вставить("Информация", "Дополнительная обработка табличной части к документу счет-факту ра выданный аванс");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд,
"Заполнить документ",
"Заполнить документ",
"ВызовКлиентскогоМетода",
Истина);
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
Так как нам придется работать с формами объектов мы просто вынуждены использовать метод ВызовКлиентскогоМетода для вызова команды внешней обработки.
Напомню, при использовании ВызовСерверногоМетода с формами объектов работать не получится.
Так как мы использовали ВызовКлиентскогоМетода, то обязательную процедуру, для внешней подключаемой обработки заполнения объектов, ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт, необходимо выполнять &НаКлиенте в модуле формы обработки, а значит создадим любую форму обработки, пользователь её всеравно не увидит, и поместим внутрь модуля формы следующий код:
Код 1C v 8.2 УП &НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
//Спросим у пользователя разрешение на продолжение обработки
Режим = РежимДиалогаВопрос.ДаНет;
Текст = "Текущие данные документа будут заменены новыми без возможности восстановления.
|Продолжить?";
Ответ = Вопрос(Текст, Режим, 0);
Если Ответ = КодВозвратаДиалога.Да Тогда
//Если пользователь дал разрешение на продолжение, то начнем перебирать все
//документы, у которых мы планируем заполнить табличную часть
Для каждого Элемент из ОбъектыНазначенияМассив Цикл
//Зададим ключ поиска документа, из которого вызвана данная обработка,
//чтобы получить ссылку на редактирумый документ в удобном виде для
//функции ОткрытьФорму()
КлючПоиска = Новый Структура("Ключ", Элемент);
//Но нам не надо открывать новую форму (окно) для изменяемого документа, а
//Нам надо все изменения показать в уже открытых у клиента окнах
Окна = ПолучитьОкна();
Для каждого Окно из Окна Цикл
//Окно изменяемого документа будет точно не основным, а вспомогательным, поэтому
//сразу пропускаем основное окно, а далее идем на не очень хороший способ поиска открытого окна
//изменяемого документа. Мы просто переберем все окна, а в заголовке, которых будет встречаться
//Наименование, номер и дата нужного документа - будем изменять
Если НЕ Окно.Основное
И Найти(Окно.Заголовок, Элемент) Тогда
//Передадим ключ поиска (можно сказать ссылку на объект) и данные о найденном открытом окне
//в функцию ОткрытьФорму()
//Код находится в цикле на тот случай, если открытых окон изменяемого документа больше одного
Форма = ОткрытьФорму("Документ.СчетФактураВыданныйАванс.Форма.ФормаДокумента",КлючПоиска,,,Окно);
//Далее мы получаем объект только, что повторно открытой формы и помещаем её в переменную
//В объекте содержатся все реквизиты (элементы) формы
НовыйОбъект = Форма.Объект;
//Мы помещаем объект формы в переменную,
//так как должны передать её в процедуру на сервере,
//где нельзя изменять объект формы, зато можно править переменную содержащую его
ЗаполнитьОбъект(НовыйОбъект);
//После выполнения процедуры на сервере мы получаем изменную переменную НовыйОбъект,
//которую необходимо передать в уже полученную нами форму
КопироватьДанныеФормы(НовыйОбъект, Форма.Объект);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Ниже приведу код, который у вас может быть совершенно другим и делать, какие-либо другие манипуляции с объектом формы:
Код 1C v 8.2 УП &НаСервере
Функция ЗаполнитьОбъект(НовыйОбъект)
Если ТипЗнч(НовыйОбъект.ДокументОснование) = Тип("ДокументСсылка.ПоступлениеБезналичныхДенежныхСредств") Тогда
Если НовыйОбъект.ДокументОснование.РасшифровкаПлатежа.Количество() > 0 Тогда
НовыйОбъект.Авансы.Очистить();
КонецЕсли;
Для каждого СтрокаТЧ из НовыйОбъект.ДокументОснование.РасшифровкаПлатежа Цикл
НоваяСтрока = НовыйОбъект.Авансы.Добавить();
Если ЗначениеЗаполнено(СтрокаТЧ.СчетНаОплату) Тогда
НоваяСтрока.Содержание = "Предварительная оплата" + ФормированиеПечатныхФорм.СформироватьЗаголовокДокумента(СтрокаТЧ.СчетНаОплату, НСтр("ru=' по счету на оплату'"));
КонецЕсли;
НоваяСтрока.Сумма = СтрокаТЧ.Сумма;
НоваяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118;
ТекПроцентНДС = ЦенообразованиеКлиентСервер.ПолучитьСтавкуНДСЧислом(НоваяСтрока.СтавкаНДС);
НоваяСтрока.СуммаНДС = ЦенообразованиеКлиентСервер.РассчитатьСуммуНДС(НоваяСтрока.Сумма, ТекПроцентНДС);
КонецЦикла;
КонецЕсли;
КонецФункции
Автор
ApocalypseNTC Категория:
Документы Как правильно вводить счет-факту ру полученный в документе «Поступление товаров и услуг»? Если счет-факту ра получен сразу вместе с накладной и выписан на основании только одного документа «Поступления товаров и услуг» вводить счет-факту ру можно на закладке «Счет-факту ра». В остальных случаях документ Счет-факту ра полученный вводиться по ссылке «Ввести счет-факту ру» в левой нижней части документа. Введенную таким образом счет-факту ру можно просмотреть и распечатать.
Категория:
1С Бухгалтерия 2.0 Как вывести произвольный макет в произвольном месте схемы СКД В ходе работы мне понадобилось формировать печатные формы по заданному макету поставщика. Решил делать с использованием СКД, но столкнулся с тем, что нужно выводить произвольный заголовок, но непонятно как. Немного поискав и посмотрев примеры нашел способ сделать это быстро и просто. Внимание – написанное ниже предполагает, что вы знаете, что такое СКД и как примерно работают в СКД макеты.
По шагам рассмотрю как вывести шапку для счет-
факту ры:
1. Создаем в схеме новую группировку без указания поля (детальные записи)
2. Установим имя группировке
3. Удалим у данной группировки из выбранных полей автополе
4. В других настройках выберем макет оформления «Без оформления» (иначе на наш макет будет накладываться стандартный макет и вокруг всех ячеек будет рамка)
5. На вкладке макеты добавляем наши данные
6. Добавляем макет группировки и указываем наше имя группировки из п.2 и указываем область с нашими данными
7. Готово
Автор статьи
Александр Фотов , оригинал статьи
тут
Пример вывода в шапке отчета произвольного текста и Картинки Категория:
Схема Компоновки Данных Простое штрихкодирование документов Была поставлена задача на предприятии, где ежедневно выписывается по 300-500 накладных организовать штрихкодирование документов, для более удобной работы с бумажным носителем в дальнейшем. И вот результат…
Конфигурация “Торговля и склад”. Хотелось сделать как можно проще и быстрее, и в тоже время надежно. На решение задачи ушло 1,5 часа. И так приступим….
У нас будет использоваться штрихкод EAN13. Создаем общий реквизит документов:
Общий реквизит документов "EAN13"
Тип – “Строка”, длина – 13, отбор по реквизиту
Добавляем в глобальный модуль процедуру
Код 1C v 7.x //******************************************************************************
// глСформироватьШтрихкодДокумента(Конт)
//
// Параметры:
// Конт - контекст документа для которого необходимо сформировать штрихкод
// EAN13- реквизит документа содержащий штрихкод
// Возвращаемое значение:
// Нет
//
// Описание:
// На основании номера документа и вида документа формирует штрихкод в формате
// EAN
//
Процедура глСформироватьШтрихкодДокумента(Конт, EAN13) Экспорт
Если ПустаяСтрока(EAN13) = 1 Тогда
ПрефиксыДокументов = СоздатьОбъект("СписокЗначений");
ПрефиксыДокументов.ДобавитьЗначение("001", "Реализация");
ПрефиксыДокументов.ДобавитьЗначение("002", "СчетФактураВыданный");
// и т.д
КодДокумента = СокрЛП(Прав(Конт.НомерДок,7));
КодВидаДокумента = ПрефиксыДокументов.Получить(Конт.Вид());
Префикс = Прав(ДатаГод(Конт.ДатаДок), 2);
ИспКолво = 10;
Штрихкод = СимволыВЦифры(Прав(СокрЛП(КодДокумента+КодВидаДокумента),
ИспКолво));
Штрихкод = Префикс + глДополнитьСтрокуЛ(Штрихкод, "0", ИспКолво);
EAN13 = Штрихкод + глКонтрольныйСимволEAN(Штрихкод, 13);
КонецЕсли;
КонецПроцедуры // глСформироватьШтрихкодДокумента()
После этого в документы, которым будут присваиваться штрихкоды добавляем вызов
вышеописанного в процедуру "ПриЗаписи()"
Код 1C v 7.x Процедура ПриЗаписи()
//..............................
глСформироватьШтрихкодДокумента(Контекст, EAN13);
КонецПроцедуры
В результате при первой записи документа ему будет присвоен штрихкод состоящий
из следующих блоков:
1. год документа (2 символа);
2. семь цифр справа от номера документа;
3. код вида документа (3 символа);
4. контрольный символ;
Осталось только вставить в печатную форму объект ActiveBarcode и настроить
необходимые свойства у него.
А вот и результат
Автор:
Александр Шкураев Категория:
Штрих-код (barcode) Внешняя печатная форма счета-факту р: 1137, Корректировочная 1137 и 952 для Бухгалтерии 3.0 Внешняя обработка печати счета-
факту р: выданная 1137Корректировочная 1137Корректировочная 952Создана для конфигурации "Бухгалтерия...
Внешняя обработка печати счета-факту р:
выданная 1137 Корректировочная 1137 Корректировочная 952 Создана для конфигурации "Бухгалтерия предприятия 3.0" для документа "Счет-факту ра выданный".
Подключается через стандартный механизм внешних печатных форм конфигурации .
Обработка проверена на релизе конфигурации 3.0.40.42 и выше.
Можно использовать как шаблон для написания своих печатных форм для конфигурации Бухгалтерия предприятия 3.0.
Пример вывода печатной формы:
Категория:
Печатные формы