Форум программистов, компьютерный форум, киберфорум
Наши страницы

1С: Собственные программы

Войти
Регистрация
Восстановить пароль
 
MonteKristo
58 / 58 / 16
Регистрация: 21.08.2015
Сообщений: 240
#1

Как лучше сделать проверку на дубли? - 1С/1C 8.x

19.12.2016, 15:34. Просмотров 490. Ответов 1
Метки нет (Все метки)

Доброго времени. Написал обработку, смысл следующий:
1) Пользователь открывает ее в конфигурации бух 2.0.
2) Открывается формы с таблицой значений
3) Заполняем на форме дату начала и дату конца отбора
4) Нажимаем на форме кнопку "заполнить"
5) За выбранный период формируется список счетов на оплату
6) Галочками отбираем нужные
7) Заполняем на форме реквизит "Период выписки"
8) Нажимаем на форме кнопку "Создать счета на оплату"
9) Отмеченные галочкой счета берут и копируются только с текущей датой и в комментарий вставляется период выписки.
10) При этом на жестком диске создаются эти счета в форматах xls и pdf

Если делать разово, то все отрабатывает, а вот когда уже есть скопированные документы, то тут начинаются проблемы:
1) Если есть дубли, то обработка их проходит, пропуска, затем берет документ, которого еще нет в базе и создает, но на жесткий диск не сохраняет.
2) Если есть дубли, то программа оповещает об этом и выдает ошибку: {ВнешняяОбработка.Счета.Форма.Форма.Форма(761)}: Преобразование значения к типу Булево не может быть выполнено
СуммаКПрописи = Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС); это при обращении к процедуре сохранить. Ее код - это стандартный код формирования счета на оплату(из типовой бух 2.0), только в конце дописана сохранялка на жесткий диск.


1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Процедура ОсновныеДействияФормыСоздатьСчетаНаОплату(Кнопка)
    
    МассивОтобранныхДокументов = ПолучитьВыбранныеДокументы(); //Отобранные пользователем докумнеты на форме обработки
 
УжеСозданныеСчета = МассивСчетов();  //Это массив всех существующих счетов
МассивСозданныхДокументов = Новый Массив; 
 
Для Каждого ЭлементМассива Из МассивОтобранныхДокументов Цикл
 
                ДокументКопия = ЭлементМассива.Скопировать();
        ДокументКопия.Дата = НоваяДатаДок;
        ДокументКопия.Комментарий = НовыйКомментарий;
 
Для Каждого Счет ИЗ УжеСозданныеСчета Цикл
            
            Если ДокументКопия.Контрагент = Счет.Контрагент И 
                ДокументКопия.СуммаДокумента = Счет.СуммаДокумента И
                ДокументКопия.Комментарий = Счет.Комментарий Тогда
                
                Сообщить("Документ на основании счета № " + ЭлементМассива.Номер + " " + ЭлементМассива.Дата + " был создан ранее.");
                Сообщить("Документ не создан");
                
                ДокументКопия.Удалить();
                
            ИначеЕсли (ДокументКопия.Контрагент <> Счет.Контрагент И    //Мне не понятно почему, но когда падает в эту ветку, то первую ссылку на документ прогоняет два раза, затем идет на следующий и там по уже все нормально.
                ДокументКопия.СуммаДокумента = Счет.СуммаДокумента И
                ДокументКопия.Комментарий = Счет.Комментарий) ИЛИ
                (ДокументКопия.Контрагент = Счет.Контрагент И 
                ДокументКопия.СуммаДокумента <> Счет.СуммаДокумента И
                ДокументКопия.Комментарий = Счет.Комментарий) ИЛИ
                (ДокументКопия.Контрагент = Счет.Контрагент И 
                ДокументКопия.СуммаДокумента = Счет.СуммаДокумента И
                ДокументКопия.Комментарий <> Счет.Комментарий) Тогда
                
                
                ДокументКопия.Записать();
                
            КонецЕсли;
        КонецЦикла;
        
        МассивСозданныхДокументов.Добавить(ДокументКопия.Ссылка); //В этот массив попадают документы новые, не дубли.
        
    КонецЦикла;
 
 
//Далее запускается функция сохранения счетов, по ссылке формируется счет и сохраняется в форматы excel и pdf.
 
Для Каждого ЭлементГотовый Из МассивСозданныхДокументов Цикл   
        СохранениеСчетов = СохранитьСчетНаОплату(ЭлементГотовый);
    КонецЦикла;
    
КонецПроцедуры
Написал очень сумбурно все, но как то так все и есть. Голову уже сломал с этой проверкой на дубли, может есть способ попроще? Или по умнее что ли. Скрин обработки тоже выложу, дабы нагляднее было.
0
Миниатюры
Как лучше сделать проверку на дубли?  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2016, 15:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос 1C 8.x Как лучше сделать проверку на дубли? (1С):

1C 8.x Просмотр остатков, как лучше сделать - 1С
Здравствуйте! Пишу маленькую учебную конфигурацию. Есть вопрос как лучше сделать просмотр остатков. Я так сделал - на форме Расходная...

1C 8.x Как лучше сделать? (отборы, связанные документы и т.д.) 8.2 УФ - 1С
Доброго времени! Подскажите пожалуйста как сделать следующее. Есть документ Заказ, в нем указывается стоимость заказа, которая...

1C 7.x Как лучше сделать чтобы компьютер учитывался по частям (т.е. материнка, БП, процессор...)? - 1С
Есть справочник номенклатура в него записываются объекты (стол, стул, принтер, компьютер и т.д.) у этого справочника есть четыре реквизита...

Как лучше реализовать проверку аргумента? - C#
Доброго времени суток всем. Подскажите, пожалуйста как правильней и лучше делать Есть 2 метода думаю понять что они делают не...

Как лучше организовать проверку введённого значения? - Delphi БД
Работаю с Oracle с помощью ADO в Delphi есть таблица STADIUMS (NAME, CAPACITY, ADDRESS), в которой есть столбец CAPACITY -...

как сделать проверку - Delphi
мне необходимо сделать такую проверку: Я ввожу текст в Edit и если в папке Saves есть папка с таким именем то (и дальше там то что мне...

1
renat_dmitriev
156 / 156 / 45
Регистрация: 26.08.2016
Сообщений: 512
19.12.2016, 19:27 #2
В первую очередь алгоритм проверки лишен логики начисто. Вы сначала проверьте в цикле есть у вас такой счет или нет и потом уже за пределами цикла перебора счетов создавайте и записывайте копию в случае если это нужно. А так получается счета разные и могут удовлетворять разным условиям, но работаете вы с одним и тем же объектом ДокументКопия, что абсолютно нелогично.

ДокументКопия.Записать(); должно быть за пределами цикла

По поводу ошибки в обработке - проверьте какой тип значения у переменной Шапка, видимо алгоритм перенесен из типовой не совсем верно.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2016, 19:27
Привет! Вот еще темы с ответами:

Как сделать проверку if ... then - Delphi
Собственно как сделать проверку такого типа , if нажали картинку1 then .... if нажали картинку2 then ... ? что то я в ступоре не...

как сделать проверку? - Delphi
имеется 2 кнопки ButtonIchDanClick и ButtonProdClick, как сделать условие, а именно пока не нажата кнопка ButtonIchDanClick мы не сможем...

Как сделать проверку ? - PascalABC.NET
Алгоритм Хаффмана . При при кодировании, если ввожу такую строку &quot;kkkkkkk&quot;, то по идее должно выдавать ошибку о том, что дерево не может...

Как сделать проверку - JavaScript
Всем привет. Вот есть проверка на пустоту данных. if((nameVal) &amp;&amp; (msg)){ socket.emit( 'message', { name: nameVal, message: msg } )};...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru